DemoButtonGenerator.pas 6.5 KB

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