DemoButtonGenerator.pas 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. unit DemoButtonGenerator;
  2. {$mode ObjFPC}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Fresnel.DOM, Fresnel.Controls, DemoSlider, DemoCheckBox;
  6. type
  7. { TDemoButtonGenerator }
  8. TDemoButtonGenerator = class(TDiv)
  9. private
  10. procedure OnPropChange(Sender: TObject);
  11. public
  12. const
  13. BackgroundColor1 ='#79bbff';
  14. BackgroundColor2 ='#378de5';
  15. BorderColor ='#337bc4';
  16. cStyle = TDemoSlider.cStyle
  17. +TDemoCheckBox.cStyle
  18. +'#ButtonDiv {'+LineEnding
  19. +'background:'+BackgroundColor1+';'+LineEnding
  20. +'border:1px solid '+BorderColor+';'+LineEnding
  21. +'padding:16px 31px;'+LineEnding
  22. +'font-size:15px; font-family:Arial; font-weight:bold;'+LineEnding
  23. +'color:#fff;'+LineEnding
  24. +'}'+LineEnding
  25. +'.CheckBox {'+LineEnding
  26. +' margin: 6px;'+LineEnding
  27. +'}'+LineEnding
  28. +'.Slider {'+LineEnding
  29. +' margin: 6px;'+LineEnding
  30. +' width: 150px;'+LineEnding
  31. +'}'+LineEnding;
  32. var
  33. ButtonDiv: TDiv;
  34. ButtonLabel: TLabel;
  35. FontSizeSlider: TDemoSlider;
  36. PaddingVerticalSlider: TDemoSlider;
  37. GradientChkBox: TDemoCheckBox;
  38. BorderWidthSlider: TDemoSlider;
  39. BorderRadiusDiv: TDiv;
  40. BorderRadiusLabel: TLabel;
  41. BorderRadiusTopLeftChkBox: TDemoCheckBox;
  42. BorderRadiusTopRightChkBox: TDemoCheckBox;
  43. BorderRadiusBottomLeftChkBox: TDemoCheckBox;
  44. BorderRadiusBottomRightChkBox: TDemoCheckBox;
  45. BorderRadiusSlider: TDemoSlider;
  46. TextShadowChkBox: TDemoCheckBox;
  47. TextShadowVertPosSlider: TDemoSlider;
  48. TextShadowHorzPosSlider: TDemoSlider;
  49. TextShadowBlurRadiusSlider: TDemoSlider;
  50. constructor Create(AOwner: TComponent); override;
  51. procedure UpdateButton;
  52. end;
  53. implementation
  54. { TDemoButtonGenerator }
  55. procedure TDemoButtonGenerator.OnPropChange(Sender: TObject);
  56. begin
  57. UpdateButton;
  58. end;
  59. constructor TDemoButtonGenerator.Create(AOwner: TComponent);
  60. function AddSlider(aName, aCaption: string; aParent: TFresnelElement = nil): TDemoSlider;
  61. begin
  62. if aParent=nil then aParent:=Self;
  63. Result:=TDemoSlider.Create(Self);
  64. with Result do begin
  65. Name:=aName;
  66. Caption:=aCaption;
  67. ValueFormat:='%.0fpx';
  68. Parent:=aParent;
  69. OnChange:=@OnPropChange;
  70. end;
  71. end;
  72. function AddCheckBox(aName, aCaption: string; aParent: TFresnelElement = nil): TDemoCheckBox;
  73. begin
  74. if aParent=nil then aParent:=Self;
  75. Result:=TDemoCheckBox.Create(Self);
  76. with Result do begin
  77. Name:=aName;
  78. Caption:=aCaption;
  79. Checked:=true;
  80. Parent:=aParent;
  81. OnChange:=@OnPropChange;
  82. end;
  83. end;
  84. begin
  85. inherited Create(AOwner);
  86. // font-size slider
  87. FontSizeSlider:=AddSlider('FontSizeSlider','Font Size:');
  88. with FontSizeSlider do begin
  89. MinPosition:=5;
  90. MaxPosition:=40;
  91. Position:=12;
  92. end;
  93. // padding vertical slider
  94. PaddingVerticalSlider:=AddSlider('PaddingVerticalSlider','Vertical Padding:');
  95. with PaddingVerticalSlider do begin
  96. MinPosition:=0;
  97. MaxPosition:=50;
  98. Position:=16;
  99. end;
  100. // gradient
  101. GradientChkBox:=AddCheckBox('GradientChkBox','Gradient');
  102. // border-width slider
  103. BorderWidthSlider:=AddSlider('BorderWidthSlider','Border Width:');
  104. with BorderWidthSlider do begin
  105. MinPosition:=0;
  106. MaxPosition:=10;
  107. Position:=1;
  108. end;
  109. // border-radius corners: four checkboxes
  110. BorderRadiusDiv:=TDiv.Create(Self);
  111. with BorderRadiusDiv do begin
  112. Name:='BorderRadiusDiv';
  113. Style:='margin: 6px;';
  114. Parent:=Self;
  115. end;
  116. BorderRadiusLabel:=TLabel.Create(Self);
  117. with BorderRadiusLabel do begin
  118. Name:='BorderRadiusLabel';
  119. Caption:='Border Corner Radius:';
  120. Parent:=BorderRadiusDiv;
  121. end;
  122. BorderRadiusTopLeftChkBox:=AddCheckBox('BorderRadiusTopLeftChkBox','Top Left',BorderRadiusDiv);
  123. BorderRadiusTopRightChkBox:=AddCheckBox('BorderRadiusTopRightChkBox','Top Right',BorderRadiusDiv);
  124. BorderRadiusBottomLeftChkBox:=AddCheckBox('BorderRadiusBottomLeftChkBox','Bottom Left',BorderRadiusDiv);
  125. BorderRadiusBottomRightChkBox:=AddCheckBox('BorderRadiusBottomRightChkBox','Bottom Right',BorderRadiusDiv);
  126. // slider for border radius
  127. BorderRadiusSlider:=AddSlider('BorderRadiusSlider','Border Radius:');
  128. with BorderRadiusSlider do begin
  129. MinPosition:=0;
  130. MaxPosition:=50;
  131. Position:=16;
  132. end;
  133. // text-shadow checkbox
  134. TextShadowChkBox:=AddCheckBox('TextShadowChkBox','Text Shadow');
  135. // slider for text-shadow vertical position
  136. TextShadowVertPosSlider:=AddSlider('TextShadowVertPosSlider','Vertical Position:');
  137. with TextShadowVertPosSlider do begin
  138. MinPosition:=-30;
  139. MaxPosition:=30;
  140. Position:=1;
  141. end;
  142. // slider for text-shadow horizontal position
  143. TextShadowHorzPosSlider:=AddSlider('TextShadowHorzPosSlider','Horizontal Position:');
  144. with TextShadowHorzPosSlider do begin
  145. MinPosition:=-30;
  146. MaxPosition:=30;
  147. Position:=1;
  148. end;
  149. // slider for text-shadow horizontal position
  150. TextShadowBlurRadiusSlider:=AddSlider('TextShadowBlurRadiusSlider','Blur Radius:');
  151. with TextShadowBlurRadiusSlider do begin
  152. ValueFormat:='%.1fpx';
  153. MinPosition:=0;
  154. MaxPosition:=5;
  155. Position:=0;
  156. end;
  157. // the Button
  158. ButtonDiv:=TDiv.Create(Self);
  159. with ButtonDiv do begin
  160. Name:='ButtonDiv';
  161. Parent:=Self;
  162. end;
  163. ButtonLabel:=TLabel.Create(Self);
  164. with ButtonLabel do begin
  165. Name:='ButtonLabel';
  166. Caption:='Button Text';
  167. Parent:=ButtonDiv;
  168. end;
  169. UpdateButton;
  170. end;
  171. procedure TDemoButtonGenerator.UpdateButton;
  172. var
  173. s, NewStyle, Radius: String;
  174. begin
  175. if ButtonDiv=nil then exit;
  176. NewStyle:=
  177. 'font-size:'+FloatToStr(FontSizeSlider.Position)+'px;'
  178. +'padding: '+FloatToStr(PaddingVerticalSlider.Position)+'px 31px;'
  179. +'border-width:'+FloatToStr(BorderWidthSlider.Position)+'px;';
  180. if GradientChkBox.Checked then
  181. NewStyle+='background-image:linear-gradient('+BackgroundColor1+','+BackgroundColor2+');';
  182. Radius:=FloatToStr(BorderRadiusSlider.Position)+'px';
  183. s:='';
  184. if BorderRadiusTopLeftChkBox.Checked then
  185. s:=Radius
  186. else
  187. s:='0';
  188. if BorderRadiusTopRightChkBox.Checked then
  189. s+=' '+Radius
  190. else
  191. s+=' 0';
  192. if BorderRadiusBottomLeftChkBox.Checked then
  193. s+=' '+Radius
  194. else
  195. s+=' 0';
  196. if BorderRadiusBottomRightChkBox.Checked then
  197. s+=' '+Radius
  198. else
  199. s+=' 0';
  200. NewStyle+='border-radius:'+s+';';
  201. s:='';
  202. if TextShadowChkBox.Checked then
  203. begin
  204. s:=FloatToStr(TextShadowHorzPosSlider.Position)
  205. +' '+FloatToStr(TextShadowVertPosSlider.Position)
  206. +' '+FloatToStr(TextShadowBlurRadiusSlider.Position)
  207. +' #2f6627';
  208. end;
  209. NewStyle+='text-shadow:'+s+';';
  210. ButtonDiv.Style:=NewStyle;
  211. end;
  212. end.