FRFaceEditor.pas 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. //
  2. // This unit is part of the GLScene Engine, 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.ImageList,
  12. VCL.Forms,
  13. VCL.ComCtrls,
  14. VCL.StdCtrls,
  15. VCL.ImgList,
  16. VCL.Controls,
  17. VCL.Graphics,
  18. FRTrackBarEdit,
  19. FRColorEditor,
  20. GLTexture,
  21. GLMaterial,
  22. GLState;
  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. TBEShininess: TRTrackBarEdit;
  33. ImageList: TImageList;
  34. CEDiffuse: TRColorEditor;
  35. CEEmission: TRColorEditor;
  36. CESpecular: TRColorEditor;
  37. procedure TBEShininessTrackBarChange(Sender: TObject);
  38. private
  39. FOnChange: TNotifyEvent;
  40. Updating: Boolean;
  41. FFaceProperties: TGLFaceProperties;
  42. procedure SetGLFaceProperties(const val: TGLFaceProperties);
  43. procedure OnColorChange(Sender: TObject);
  44. public
  45. constructor Create(AOwner: TComponent); override;
  46. destructor Destroy; override;
  47. property OnChange: TNotifyEvent read FOnChange write FOnChange;
  48. property FaceProperties: TGLFaceProperties read FFaceProperties
  49. write SetGLFaceProperties;
  50. end;
  51. //------------------------------------------------------
  52. implementation
  53. //------------------------------------------------------
  54. {$R *.dfm}
  55. constructor TRFaceEditor.Create(AOwner: TComponent);
  56. begin
  57. inherited;
  58. FFaceProperties := TGLFaceProperties.Create(nil);
  59. CEAmbiant.OnChange := OnColorChange;
  60. CEDiffuse.OnChange := OnColorChange;
  61. CEEmission.OnChange := OnColorChange;
  62. CESpecular.OnChange := OnColorChange;
  63. PageControl.DoubleBuffered := True;
  64. end;
  65. destructor TRFaceEditor.Destroy;
  66. begin
  67. FFaceProperties.Free;
  68. inherited;
  69. end;
  70. procedure TRFaceEditor.OnColorChange(Sender: TObject);
  71. var
  72. bmp: TBitmap;
  73. bmpRect: TRect;
  74. procedure AddBitmapFor(ce: TRColorEditor);
  75. begin
  76. with bmp.Canvas do
  77. begin
  78. Brush.Color := ce.PAPreview.Color;
  79. FillRect(bmpRect);
  80. end;
  81. ImageList.Add(bmp, nil);
  82. end;
  83. begin
  84. if not updating then
  85. begin
  86. // Update imageList
  87. bmp := TBitmap.Create;
  88. try
  89. bmp.Width := 16;
  90. bmp.Height := 16;
  91. bmpRect := Rect(0, 0, 16, 16);
  92. ImageList.Clear;
  93. AddBitmapFor(CEAmbiant);
  94. FFaceProperties.Ambient.Color := CEAmbiant.Color;
  95. AddBitmapFor(CEDiffuse);
  96. FFaceProperties.Diffuse.Color := CEDiffuse.Color;
  97. AddBitmapFor(CEEmission);
  98. FFaceProperties.Emission.Color := CEEmission.Color;
  99. AddBitmapFor(CESpecular);
  100. FFaceProperties.Specular.Color := CESpecular.Color;
  101. finally
  102. bmp.Free;
  103. end;
  104. // Trigger onChange
  105. if Assigned(FOnChange) then
  106. FOnChange(Self);
  107. end;
  108. end;
  109. procedure TRFaceEditor.TBEShininessTrackBarChange(Sender: TObject);
  110. begin
  111. if not Updating then
  112. begin
  113. TBEShininess.TrackBarChange(Sender);
  114. FFaceProperties.Shininess := TBEShininess.Value;
  115. if Assigned(FOnChange) then
  116. FOnChange(Self);
  117. end;
  118. end;
  119. procedure TRFaceEditor.SetGLFaceProperties(const val: TGLFaceProperties);
  120. begin
  121. Updating := True;
  122. try
  123. CEAmbiant.Color := val.Ambient.Color;
  124. CEDiffuse.Color := val.Diffuse.Color;
  125. CEEmission.Color := val.Emission.Color;
  126. CESpecular.Color := val.Specular.Color;
  127. TBEShininess.Value := val.Shininess;
  128. finally
  129. updating := False;
  130. end;
  131. OnColorChange(Self);
  132. TBEShininessTrackBarChange(Self);
  133. end;
  134. end.