ugeometricbrush.pas 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // SPDX-License-Identifier: GPL-3.0-only
  2. unit ugeometricbrush;
  3. {$mode objfpc}{$H+}
  4. interface
  5. uses
  6. Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  7. StdCtrls, ComCtrls, ExtCtrls, BGRAVirtualScreen, UBrushType, BGRABitmap,
  8. LazPaintType;
  9. type
  10. { TFGeometricBrush }
  11. TFGeometricBrush = class(TForm)
  12. BGRAVirtualScreen1: TBGRAVirtualScreen;
  13. Button_Cancel: TButton;
  14. Button_OK: TButton;
  15. CheckBox_IsGradient: TCheckBox;
  16. Label1: TLabel;
  17. TrackBar_SideCount: TTrackBar;
  18. procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
  19. procedure CheckBox_IsGradientChange(Sender: TObject);
  20. procedure FormCreate(Sender: TObject);
  21. procedure FormDestroy(Sender: TObject);
  22. procedure TrackBar_SideCountChange(Sender: TObject);
  23. private
  24. { private declarations }
  25. FBrush: TLazPaintBrush;
  26. public
  27. { public declarations }
  28. end;
  29. function ShowGeometricBrushDialog(AInstance: TLazPaintCustomInstance) : TLazPaintBrush;
  30. implementation
  31. uses BGRABitmapTypes, LCScaleDPI, umac;
  32. function ShowGeometricBrushDialog(AInstance: TLazPaintCustomInstance): TLazPaintBrush;
  33. var f:TFGeometricBrush;
  34. title: string;
  35. begin
  36. result := nil;
  37. try
  38. f := TFGeometricBrush.Create(nil);
  39. title := f.Caption;
  40. if f.ShowModal = mrOK then
  41. begin
  42. result := f.FBrush;
  43. f.FBrush := nil;
  44. end;
  45. f.Free;
  46. except
  47. on ex:exception do
  48. AInstance.ShowError(title, ex.Message);
  49. end;
  50. end;
  51. { TFGeometricBrush }
  52. procedure TFGeometricBrush.TrackBar_SideCountChange(Sender: TObject);
  53. begin
  54. if TrackBar_SideCount.Position = TrackBar_SideCount.Max then
  55. FBrush.SideCount := 0
  56. else
  57. FBrush.SideCount := TrackBar_SideCount.Position;
  58. BGRAVirtualScreen1.RedrawBitmap;
  59. end;
  60. procedure TFGeometricBrush.CheckBox_IsGradientChange(Sender: TObject);
  61. begin
  62. FBrush.IsGradient := CheckBox_IsGradient.Checked;
  63. BGRAVirtualScreen1.RedrawBitmap;
  64. end;
  65. procedure TFGeometricBrush.BGRAVirtualScreen1Redraw(Sender: TObject;
  66. Bitmap: TBGRABitmap);
  67. begin
  68. FBrush.Size := Bitmap.Width * 0.7;
  69. FBrush.Put(Bitmap, round(Bitmap.width/2),round(Bitmap.Height/2), BGRABlack);
  70. end;
  71. procedure TFGeometricBrush.FormCreate(Sender: TObject);
  72. begin
  73. ScaleControl(Self,OriginalDPI);
  74. CheckOKCancelBtns(Button_OK,Button_Cancel);
  75. FBrush := TLazPaintBrush.Create;
  76. CheckBox_IsGradient.Checked := FBrush.IsGradient;
  77. if FBrush.SideCount = 0 then
  78. TrackBar_SideCount.Position := TrackBar_SideCount.Max
  79. else
  80. TrackBar_SideCount.Position := FBrush.SideCount;
  81. end;
  82. procedure TFGeometricBrush.FormDestroy(Sender: TObject);
  83. begin
  84. FreeAndNil(FBrush);
  85. end;
  86. {$R *.lfm}
  87. end.