2
0

FRFaceEditor.pas 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. //
  2. // The multimedia graphics platform GLScene https://github.com/glscene
  3. //
  4. unit FRFaceEditor;
  5. (* Editor frame for a TGLFaceProperties. *)
  6. interface
  7. {$I GLScene.inc}
  8. uses
  9. WinApi.Windows,
  10. System.Classes,
  11. System.SysUtils,
  12. System.ImageList,
  13. VCL.Forms,
  14. VCL.ComCtrls,
  15. VCL.StdCtrls,
  16. VCL.ImgList,
  17. VCL.Controls,
  18. VCL.Graphics,
  19. FRTrackBarEdit,
  20. FRColorEditor,
  21. GLS.Texture,
  22. GLS.Material,
  23. GLS.State;
  24. type
  25. TRFaceEditor = class(TFrame)
  26. PageControl: TPageControl;
  27. TSAmbient: TTabSheet;
  28. TSDiffuse: TTabSheet;
  29. TSEmission: TTabSheet;
  30. TSSpecular: TTabSheet;
  31. CEAmbiant: TRColorEditor;
  32. Label1: TLabel;
  33. TBEShininess: TRTrackBarEdit;
  34. ImageList: TImageList;
  35. CEDiffuse: TRColorEditor;
  36. CEEmission: TRColorEditor;
  37. CESpecular: TRColorEditor;
  38. procedure TBEShininessTrackBarChange(Sender: TObject);
  39. private
  40. FOnChange: TNotifyEvent;
  41. Updating: Boolean;
  42. FFaceProperties: TGLFaceProperties;
  43. procedure SetGLFaceProperties(const val: TGLFaceProperties);
  44. procedure OnColorChange(Sender: TObject);
  45. public
  46. constructor Create(AOwner: TComponent); override;
  47. destructor Destroy; override;
  48. property OnChange: TNotifyEvent read FOnChange write FOnChange;
  49. property FaceProperties: TGLFaceProperties read FFaceProperties
  50. write SetGLFaceProperties;
  51. end;
  52. // ------------------------------------------------------
  53. implementation
  54. // ------------------------------------------------------
  55. {$R *.dfm}
  56. constructor TRFaceEditor.Create(AOwner: TComponent);
  57. begin
  58. inherited;
  59. FFaceProperties := TGLFaceProperties.Create(nil);
  60. CEAmbiant.OnChange := OnColorChange;
  61. CEDiffuse.OnChange := OnColorChange;
  62. CEEmission.OnChange := OnColorChange;
  63. CESpecular.OnChange := OnColorChange;
  64. PageControl.DoubleBuffered := True;
  65. end;
  66. destructor TRFaceEditor.Destroy;
  67. begin
  68. FFaceProperties.Free;
  69. inherited;
  70. end;
  71. procedure TRFaceEditor.OnColorChange(Sender: TObject);
  72. var
  73. bmp: TBitmap;
  74. bmpRect: TRect;
  75. procedure AddBitmapFor(ce: TRColorEditor);
  76. begin
  77. with bmp.Canvas do
  78. begin
  79. Brush.Color := ce.PAPreview.Color;
  80. FillRect(bmpRect);
  81. end;
  82. ImageList.Add(bmp, nil);
  83. end;
  84. begin
  85. if not Updating then
  86. begin
  87. // Update imageList
  88. bmp := TBitmap.Create;
  89. try
  90. bmp.Width := 16;
  91. bmp.Height := 16;
  92. bmpRect := Rect(0, 0, 16, 16);
  93. ImageList.Clear;
  94. AddBitmapFor(CEAmbiant);
  95. FFaceProperties.Ambient.Color := CEAmbiant.Color;
  96. AddBitmapFor(CEDiffuse);
  97. FFaceProperties.Diffuse.Color := CEDiffuse.Color;
  98. AddBitmapFor(CEEmission);
  99. FFaceProperties.Emission.Color := CEEmission.Color;
  100. AddBitmapFor(CESpecular);
  101. FFaceProperties.Specular.Color := CESpecular.Color;
  102. finally
  103. bmp.Free;
  104. end;
  105. // Trigger onChange
  106. if Assigned(FOnChange) then
  107. FOnChange(Self);
  108. end;
  109. end;
  110. procedure TRFaceEditor.TBEShininessTrackBarChange(Sender: TObject);
  111. begin
  112. if not Updating then
  113. begin
  114. TBEShininess.TrackBarChange(Sender);
  115. FFaceProperties.Shininess := TBEShininess.Value;
  116. if Assigned(FOnChange) then
  117. FOnChange(Self);
  118. end;
  119. end;
  120. procedure TRFaceEditor.SetGLFaceProperties(const val: TGLFaceProperties);
  121. begin
  122. Updating := True;
  123. try
  124. CEAmbiant.Color := val.Ambient.Color;
  125. CEDiffuse.Color := val.Diffuse.Color;
  126. CEEmission.Color := val.Emission.Color;
  127. CESpecular.Color := val.Specular.Color;
  128. TBEShininess.Value := val.Shininess;
  129. finally
  130. Updating := False;
  131. end;
  132. OnColorChange(Self);
  133. TBEShininessTrackBarChange(Self);
  134. end;
  135. end.