FRxFaceEditor.pas 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. //
  2. // The graphics engine GXScene https://github.com/glscene
  3. //
  4. unit FRxFaceEditor;
  5. (* Editor frame for a TRFaceProperties *)
  6. interface
  7. uses
  8. System.SysUtils,
  9. System.Types,
  10. System.UITypes,
  11. System.Classes,
  12. System.Variants,
  13. FMX.Types,
  14. FMX.Graphics,
  15. FMX.Controls,
  16. FMX.Forms,
  17. FMX.Dialogs,
  18. FMX.StdCtrls,
  19. FMX.TabControl,
  20. FMX.Controls.Presentation,
  21. FMX.Edit,
  22. FRxColorEditor,
  23. GXS.Material;
  24. type
  25. TFaceEditorFrame = class(TFrame)
  26. TabControl: TTabControl;
  27. TIAmbient: TTabItem;
  28. TIDiffuse: TTabItem;
  29. TIEmission: TTabItem;
  30. TISpecular: TTabItem;
  31. CEAmbiant: TColorEditorFrame;
  32. Label1: TLabel;
  33. CEDiffuse: TColorEditorFrame;
  34. CEEmission: TColorEditorFrame;
  35. CESpecular: TColorEditorFrame;
  36. TrackBar: TTrackBar;
  37. Edit: TEdit;
  38. procedure TrackBarChange(Sender: TObject);
  39. procedure EditChange(Sender: TObject);
  40. private
  41. FOnChange: TNotifyEvent;
  42. Updating: Boolean;
  43. FFaceProperties: TgxFaceProperties;
  44. procedure SetFaceProperties(const val: TgxFaceProperties);
  45. procedure OnColorChange(Sender: TObject);
  46. procedure SetValue(const val : Single);
  47. function GetValue : Single;
  48. procedure SetValueMin(const val : Single);
  49. function GetValueMin : Single;
  50. procedure SetValueMax(const val : Single);
  51. function GetValueMax : Single;
  52. public
  53. constructor Create(AOwner: TComponent); override;
  54. destructor Destroy; override;
  55. property OnChange: TNotifyEvent read FOnChange write FOnChange;
  56. property FaceProperties: TgxFaceProperties read FFaceProperties
  57. write SetFaceProperties;
  58. end;
  59. //=====================================================================
  60. implementation
  61. //=====================================================================
  62. {$R *.fmx}
  63. //---------------------------------------------------------
  64. // TFaceEditorFrame
  65. //---------------------------------------------------------
  66. constructor TFaceEditorFrame.Create(AOwner: TComponent);
  67. begin
  68. inherited;
  69. FFaceProperties := TgxFaceProperties.Create(nil);
  70. CEAmbiant.OnChange := OnColorChange;
  71. CEDiffuse.OnChange := OnColorChange;
  72. CEEmission.OnChange := OnColorChange;
  73. CESpecular.OnChange := OnColorChange;
  74. { TODO : E2003 Undeclared identifier: 'DoubleBuffered' }
  75. (*TabControl.DoubleBuffered := True;*)
  76. end;
  77. destructor TFaceEditorFrame.Destroy;
  78. begin
  79. FFaceProperties.Free;
  80. inherited;
  81. end;
  82. procedure TFaceEditorFrame.EditChange(Sender: TObject);
  83. var
  84. I : Integer;
  85. begin
  86. try
  87. I := StrToInt(Edit.Text);
  88. TrackBar.Value := I;
  89. except
  90. // ignore
  91. end;
  92. end;
  93. function TFaceEditorFrame.GetValue: Single;
  94. begin
  95. Result := TrackBar.Value;
  96. end;
  97. function TFaceEditorFrame.GetValueMax: Single;
  98. begin
  99. Result := TrackBar.Max;
  100. end;
  101. function TFaceEditorFrame.GetValueMin: Single;
  102. begin
  103. Result := TrackBar.Min;
  104. end;
  105. procedure TFaceEditorFrame.SetValue(const val: Single);
  106. begin
  107. TrackBar.Value := val;
  108. TrackBarChange(Self);
  109. end;
  110. procedure TFaceEditorFrame.SetValueMax(const val: Single);
  111. begin
  112. TrackBar.Max := val;
  113. TrackBarChange(Self);
  114. end;
  115. procedure TFaceEditorFrame.SetValueMin(const val: Single);
  116. begin
  117. TrackBar.Min := val;
  118. TrackBarChange(Self);
  119. end;
  120. procedure TFaceEditorFrame.OnColorChange(Sender: TObject);
  121. var
  122. bmp: TBitmap;
  123. bmpRect: TRectF;
  124. procedure AddBitmapFor(ce: TColorEditorFrame);
  125. begin
  126. with bmp.Canvas do
  127. begin
  128. Fill.Color := ce.PAPreview.Color;
  129. FillRect(bmpRect,20,40,AllCorners,100);
  130. end;
  131. { TODO : E2003 Undeclared identifier: 'ImageList', to be replaced }
  132. (*ImageList.Add(bmp, nil);*)
  133. end;
  134. begin
  135. if not updating then
  136. begin
  137. // Update imageList
  138. bmp := TBitmap.Create;
  139. try
  140. bmp.Width := 16;
  141. bmp.Height := 16;
  142. bmpRect := TRectF.Create(0, 0, 16, 16);
  143. { TODO : E2003 Undeclared identifier: 'ImageList', to be replaced }
  144. (*ImageList.Clear;*)
  145. bmp.Canvas.BeginScene;
  146. AddBitmapFor(CEAmbiant);
  147. bmp.Canvas.EndScene;
  148. FFaceProperties.Ambient.Color := CEAmbiant.Color;
  149. AddBitmapFor(CEDiffuse);
  150. FFaceProperties.Diffuse.Color := CEDiffuse.Color;
  151. AddBitmapFor(CEEmission);
  152. FFaceProperties.Emission.Color := CEEmission.Color;
  153. AddBitmapFor(CESpecular);
  154. FFaceProperties.Specular.Color := CESpecular.Color;
  155. finally
  156. bmp.Free;
  157. end;
  158. // Trigger onChange
  159. if Assigned(FOnChange) then
  160. FOnChange(Self);
  161. end;
  162. end;
  163. procedure TFaceEditorFrame.TrackBarChange(Sender: TObject);
  164. begin
  165. Edit.Text:=FloatToStr(TrackBar.Value);
  166. if not Updating then
  167. begin
  168. FFaceProperties.Shininess := Round(TrackBar.Value);
  169. if Assigned(FOnChange) then
  170. FOnChange(Self);
  171. end;
  172. end;
  173. procedure TFaceEditorFrame.SetFaceProperties(const val: TgxFaceProperties);
  174. begin
  175. Updating := True;
  176. try
  177. CEAmbiant.Color := val.Ambient.Color;
  178. CEDiffuse.Color := val.Diffuse.Color;
  179. CEEmission.Color := val.Emission.Color;
  180. CESpecular.Color := val.Specular.Color;
  181. TrackBar.Value := val.Shininess;
  182. finally
  183. Updating := False;
  184. end;
  185. OnColorChange(Self);
  186. TrackBarChange(Self);
  187. end;
  188. end.