FRFaceEditor.pas 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. //
  2. // The graphics rendering engine GLScene http://glscene.org
  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. FRColorEditor,
  20. GLS.Texture,
  21. GLS.Material,
  22. GLS.State, FRTrackBarEdit;
  23. type
  24. TRFaceEditor = class(TFrame)
  25. PageControl: TPageControl;
  26. TSAmbient: TTabSheet;
  27. TSDiffuse: TTabSheet;
  28. TSEmission: TTabSheet;
  29. TSSpecular: TTabSheet;
  30. CEAmbiant: TRColorEditor;
  31. Label1: TLabel;
  32. ImageList: TImageList;
  33. CEDiffuse: TRColorEditor;
  34. CEEmission: TRColorEditor;
  35. CESpecular: TRColorEditor;
  36. TrackBar: TTrackBar;
  37. Edit: TEdit;
  38. procedure TrackBarChange(Sender: TObject);
  39. procedure EditChange(Sender: TObject);
  40. procedure TBEShininessTrackBarChange(Sender: TObject);
  41. private
  42. FOnChange: TNotifyEvent;
  43. Updating: Boolean;
  44. FFaceProperties: TGLFaceProperties;
  45. procedure SetGLFaceProperties(const val: TGLFaceProperties);
  46. procedure OnColorChange(Sender: TObject);
  47. public
  48. constructor Create(AOwner: TComponent); override;
  49. destructor Destroy; override;
  50. property OnChange: TNotifyEvent read FOnChange write FOnChange;
  51. property FaceProperties: TGLFaceProperties read FFaceProperties
  52. write SetGLFaceProperties;
  53. end;
  54. // ------------------------------------------------------
  55. implementation
  56. // ------------------------------------------------------
  57. {$R *.dfm}
  58. constructor TRFaceEditor.Create(AOwner: TComponent);
  59. begin
  60. inherited;
  61. FFaceProperties := TGLFaceProperties.Create(nil);
  62. CEAmbiant.OnChange := OnColorChange;
  63. CEDiffuse.OnChange := OnColorChange;
  64. CEEmission.OnChange := OnColorChange;
  65. CESpecular.OnChange := OnColorChange;
  66. PageControl.DoubleBuffered := True;
  67. end;
  68. destructor TRFaceEditor.Destroy;
  69. begin
  70. FFaceProperties.Free;
  71. inherited;
  72. end;
  73. procedure TRFaceEditor.EditChange(Sender: TObject);
  74. var
  75. i: Integer;
  76. begin
  77. try
  78. i := StrToInt(Edit.Text);
  79. TrackBar.Position := i;
  80. except
  81. // ignore
  82. end;
  83. end;
  84. procedure TRFaceEditor.OnColorChange(Sender: TObject);
  85. var
  86. bmp: TBitmap;
  87. bmpRect: TRect;
  88. procedure AddBitmapFor(ce: TRColorEditor);
  89. begin
  90. with bmp.Canvas do
  91. begin
  92. Brush.Color := ce.PAPreview.Color;
  93. FillRect(bmpRect);
  94. end;
  95. ImageList.Add(bmp, nil);
  96. end;
  97. begin
  98. if not Updating then
  99. begin
  100. // Update imageList
  101. bmp := TBitmap.Create;
  102. try
  103. bmp.Width := 16;
  104. bmp.Height := 16;
  105. bmpRect := Rect(0, 0, 16, 16);
  106. ImageList.Clear;
  107. AddBitmapFor(CEAmbiant);
  108. FFaceProperties.Ambient.Color := CEAmbiant.Color;
  109. AddBitmapFor(CEDiffuse);
  110. FFaceProperties.Diffuse.Color := CEDiffuse.Color;
  111. AddBitmapFor(CEEmission);
  112. FFaceProperties.Emission.Color := CEEmission.Color;
  113. AddBitmapFor(CESpecular);
  114. FFaceProperties.Specular.Color := CESpecular.Color;
  115. finally
  116. bmp.Free;
  117. end;
  118. // Trigger onChange
  119. if Assigned(FOnChange) then
  120. FOnChange(Self);
  121. end;
  122. end;
  123. procedure TRFaceEditor.TBEShininessTrackBarChange(Sender: TObject);
  124. begin
  125. if not Updating then
  126. begin
  127. // TBEShininess.TrackBarChange(Sender);
  128. FFaceProperties.Shininess := TrackBar.Position; // TBEShininess.Value;
  129. if Assigned(FOnChange) then
  130. FOnChange(Self);
  131. end;
  132. end;
  133. procedure TRFaceEditor.TrackBarChange(Sender: TObject);
  134. begin
  135. Edit.Text := IntToStr(TrackBar.Position);
  136. end;
  137. procedure TRFaceEditor.SetGLFaceProperties(const val: TGLFaceProperties);
  138. begin
  139. Updating := True;
  140. try
  141. CEAmbiant.Color := val.Ambient.Color;
  142. CEDiffuse.Color := val.Diffuse.Color;
  143. CEEmission.Color := val.Emission.Color;
  144. CESpecular.Color := val.Specular.Color;
  145. /// TBEShininess.Value := val.Shininess;
  146. finally
  147. Updating := False;
  148. end;
  149. OnColorChange(Self);
  150. TBEShininessTrackBarChange(Self);
  151. end;
  152. end.