Browse Source

adjust toolbar for fill type

johann 5 years ago
parent
commit
f93f3a588d

+ 10 - 10
lazpaint/image/uimageaction.pas

@@ -624,7 +624,7 @@ end;
 procedure TImageActions.Redo;
 begin
   try
-    if CurrentTool in[ptTextureMapping,ptLayerMapping,ptMoveSelection,ptRotateSelection] then
+    if CurrentTool in[ptLayerMapping,ptMoveSelection,ptRotateSelection] then
       ChooseTool(ptHand);
     if image.CanRedo then
     begin
@@ -743,7 +743,7 @@ begin
     else
       newSelection := LoadFlatImageUTF8(AFilenameUTF8).bmp;
     newSelection.InplaceGrayscale;
-    if not (CurrentTool in[ptDeformation,ptTextureMapping,ptLayerMapping,ptMoveSelection,ptRotateSelection]) then
+    if not (CurrentTool in[ptDeformation,ptLayerMapping,ptMoveSelection,ptRotateSelection]) then
       ChooseTool(ptMoveSelection);
 
     if Image.CheckNoAction then
@@ -775,7 +775,7 @@ begin
       FInstance.ShowMessage(rsCrop, rsEmptySelection);
       exit;
     end;
-    if (CurrentTool in[ptRotateSelection,ptMoveSelection,ptDeformation,ptTextureMapping,ptLayerMapping]) then
+    if (CurrentTool in[ptRotateSelection,ptMoveSelection,ptDeformation,ptLayerMapping]) then
       ChooseTool(ptHand);
     partial := image.MakeCroppedLayer;
     if partial <> nil then
@@ -964,7 +964,7 @@ var
 begin
   if (ABitmap <> nil) and (ABitmap.Width > 0) and (ABitmap.Height > 0) then
   begin
-    if CurrentTool in [ptDeformation,ptRotateSelection,ptMoveSelection,ptTextureMapping,
+    if CurrentTool in [ptDeformation,ptRotateSelection,ptMoveSelection,
          ptLayerMapping,ptEditShape] then
       ChooseTool(ptHand);
     if image.CheckNoAction then
@@ -1021,7 +1021,7 @@ function TImageActions.AddLayerFromOriginal(AOriginal: TBGRALayerCustomOriginal;
 begin
   if AOriginal <> nil then
   begin
-    if CurrentTool in [ptDeformation,ptRotateSelection,ptMoveSelection,ptTextureMapping,
+    if CurrentTool in [ptDeformation,ptRotateSelection,ptMoveSelection,
          ptLayerMapping,ptEditShape] then
       ChooseTool(ptHand);
     if image.CheckNoAction then
@@ -1465,7 +1465,7 @@ begin
   end;}
   if image.NbLayers < MaxLayersToAdd then
   begin
-    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptDeformation] then
       ChooseTool(ptHand);
     ToolManager.ToolCloseDontReopen;
     Image.AddNewLayer;
@@ -1481,7 +1481,7 @@ function TImageActions.NewLayer(ALayer: TBGRABitmap; AName: string;
 begin
   if image.NbLayers < MaxLayersToAdd then
   begin
-    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptDeformation] then
       ChooseTool(ptHand);
     ToolManager.ToolCloseDontReopen;
     Image.AddNewLayer(ALayer, AName, ABlendOp);
@@ -1501,7 +1501,7 @@ function TImageActions.NewLayer(ALayer: TBGRALayerCustomOriginal;
 begin
   if image.NbLayers < MaxLayersToAdd then
   begin
-    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptDeformation] then
       ChooseTool(ptHand);
     ToolManager.ToolCloseDontReopen;
     Image.AddNewLayer(ALayer, AName, ABlendOp, AMatrix);
@@ -1529,7 +1529,7 @@ end;
 
 procedure TImageActions.RasterizeLayer;
 begin
-  if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+  if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptDeformation] then
     ChooseTool(ptHand);
   ToolManager.ToolCloseDontReopen;
   Image.RasterizeLayer;
@@ -1553,7 +1553,7 @@ begin
   if (Image.CurrentLayerIndex <> -1) and (Image.NbLayers > 1) then
   begin
     idx := Image.CurrentLayerIndex;
-    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptTextureMapping,ptDeformation] then
+    if CurrentTool in[ptMoveLayer,ptRotateLayer,ptZoomLayer,ptLayerMapping,ptDeformation] then
       ChooseTool(ptHand);
     ToolManager.ToolCloseDontReopen;
     Image.RemoveLayer;

+ 5 - 2
lazpaint/lazpaintmainform.pas

@@ -675,8 +675,10 @@ type
     procedure ManagerToolbarChanged(Sender: TObject);
     procedure VectorialFill_BackChange(Sender: TObject);
     procedure VectorialFill_BackResize(Sender: TObject);
+    procedure VectorialFill_BackTypeChange(Sender: TObject);
     procedure VectorialFill_PenChange(Sender: TObject);
     procedure VectorialFill_PenResize(Sender: TObject);
+    procedure VectorialFill_PenTypeChange(Sender: TObject);
     procedure VectorialFill_ShowBackFill(Sender: TObject; Shift: TShiftState;
       X, Y: Integer);
     procedure VectorialFill_ShowPenFill(Sender: TObject; Shift: TShiftState; X,
@@ -741,6 +743,7 @@ type
     function GetCurrentToolAction: TAction;
     procedure RegisterToolbarElements;
     procedure InitToolbarElements;
+    procedure UpdateChooseColors;
     procedure UpdateToolOptions;
     procedure UpdateEraserToolbar;
     procedure UpdatePenStyleToolbar;
@@ -2510,7 +2513,7 @@ begin
     CanClose := false;
     exit;
   end;
-  if CurrentTool in [ptDeformation,ptLayerMapping,ptTextureMapping] then
+  if CurrentTool in [ptDeformation,ptLayerMapping] then
     ChooseTool(ptHand)
   else
     if not Image.CheckNoAction then
@@ -3988,7 +3991,7 @@ var
   procedure StartImport;
   begin
     ToolManager.ToolCloseDontReopen;
-    if (CurrentTool in [ptDeformation,ptRotateSelection,ptMoveSelection,ptTextureMapping,ptLayerMapping])
+    if (CurrentTool in [ptDeformation,ptRotateSelection,ptMoveSelection,ptLayerMapping])
      or ((CurrentTool = ptHotSpot) and (format <> ifCur)) then
       ChooseTool(ptHand);
     ShowNoPicture;

+ 4 - 2
lazpaint/lazpainttype.pas

@@ -661,12 +661,14 @@ procedure TLazPaintCustomInstance.SetColor(ATarget: TColorTarget;
   AColor: TBGRAPixel);
 begin
   case ATarget of
-    ctForeColorSolid: ToolManager.ForeColor := AColor;
+    ctForeColorSolid: if ToolManager.ForeFill.FillType = vftSolid then
+                        ToolManager.ForeColor := AColor;
     ctForeColorStartGrad: if ToolManager.ForeFill.FillType = vftGradient then
                             ToolManager.ForeFill.Gradient.StartColor := AColor;
     ctForeColorEndGrad: if ToolManager.ForeFill.FillType = vftGradient then
                           ToolManager.ForeFill.Gradient.EndColor := AColor;
-    ctBackColorSolid: ToolManager.BackColor := AColor;
+    ctBackColorSolid: if ToolManager.BackFill.FillType = vftSolid then
+                        ToolManager.BackColor := AColor;
     ctBackColorStartGrad: if ToolManager.BackFill.FillType = vftGradient then
                             ToolManager.BackFill.Gradient.StartColor := AColor;
     ctBackColorEndGrad: if ToolManager.BackFill.FillType = vftGradient then

+ 43 - 24
lazpaint/maintoolbar.inc

@@ -16,6 +16,10 @@ begin
   VectorialFill_Back.OnTextureClick := @VectorialFill_TextureClick;
   VectorialFill_Pen.OnFillChange:=@VectorialFill_PenChange;
   VectorialFill_Back.OnFillChange:=@VectorialFill_BackChange;
+  VectorialFill_Pen.AutoSize := False;
+  VectorialFill_Back.AutoSize := False;
+  VectorialFill_Pen.OnFillTypeChange:=@VectorialFill_PenTypeChange;
+  VectorialFill_Back.OnFillTypeChange:=@VectorialFill_BackTypeChange;
   VectorialFill_Pen.OnResize:=@VectorialFill_PenResize;
   VectorialFill_Back.OnResize:=@VectorialFill_BackResize;
   Label_Pen.OnMouseMove:=@VectorialFill_ShowPenFill;
@@ -684,6 +688,8 @@ end;
 procedure TFMain.TimerHideFillTimer(Sender: TObject);
 begin
   TimerHideFill.Enabled := false;
+  VectorialFill_Pen.Height := VectorialFill_Pen.ToolIconSize + VectorialFill_Pen.VerticalPadding;
+  VectorialFill_Back.Height := VectorialFill_Back.ToolIconSize + VectorialFill_Back.VerticalPadding;
   Panel_PenFill.Height := Panel_SwapColor.Height;
   Panel_BackFill.Height := Panel_SwapColor.Height;
 end;
@@ -762,10 +768,31 @@ begin
   end;
 end;
 
+procedure TFMain.UpdateChooseColors;
+begin
+  if (VectorialFill_Back.FillType = vftSolid) and
+     (LazPaintInstance.ChooseColorTarget in [ctBackColorStartGrad,ctBackColorEndGrad]) then
+    LazPaintInstance.ChooseColorTarget := ctBackColorSolid else
+  if (VectorialFill_Back.FillType = vftGradient) and
+     (LazPaintInstance.ChooseColorTarget = ctBackColorSolid) then
+    LazPaintInstance.ChooseColorTarget := ctBackColorStartGrad else
+  if (VectorialFill_Pen.FillType = vftSolid) and
+     (LazPaintInstance.ChooseColorTarget in [ctForeColorStartGrad,ctForeColorEndGrad]) then
+    LazPaintInstance.ChooseColorTarget := ctForeColorSolid else
+  if (VectorialFill_Pen.FillType = vftGradient) and
+     (LazPaintInstance.ChooseColorTarget = ctForeColorSolid) then
+    LazPaintInstance.ChooseColorTarget := ctForeColorStartGrad else
+      LazPaintInstance.ColorToFChooseColor;
+end;
+
 procedure TFMain.SwitchColors;
 begin
-  ToolManager.SwapToolColors;
-  UpdateEditPicture;
+  if ToolManager.SwapToolColors then
+  begin
+    HideFill;
+    UpdateChooseColors;
+    UpdateEditPicture;
+  end;
 end;
 
 procedure TFMain.VectorialFill_BackChange(Sender: TObject);
@@ -785,26 +812,21 @@ begin
   end else
     VectorialFill_Back.UpdateFillExceptGeometry(ToolManager.BackFill);
 
-  if (VectorialFill_Back.FillType = vftSolid) and
-     (LazPaintInstance.ChooseColorTarget in [ctBackColorStartGrad,ctBackColorEndGrad]) then
-    LazPaintInstance.ChooseColorTarget := ctBackColorSolid else
-  if (VectorialFill_Back.FillType = vftGradient) and
-     (LazPaintInstance.ChooseColorTarget = ctBackColorSolid) then
-    LazPaintInstance.ChooseColorTarget := ctBackColorStartGrad else
-  if (VectorialFill_Back.FillType in [vftSolid,vftGradient]) and
-     (LazPaintInstance.ChooseColorTarget in
-     [ctBackColorSolid,ctBackColorStartGrad,ctBackColorEndGrad]) then
-      LazPaintInstance.ColorToFChooseColor;
+  UpdateChooseColors;
   UpdateEditPicture;
   FInFillChange:= false;
 end;
 
 procedure TFMain.VectorialFill_BackResize(Sender: TObject);
 begin
-  Panel_BackFill.Width := VectorialFill_Back.Left + VectorialFill_Back.Width + DoScaleX(6, OriginalDPI);
   QueryArrange;
 end;
 
+procedure TFMain.VectorialFill_BackTypeChange(Sender: TObject);
+begin
+  VectorialFill_Back.Width := VectorialFill_Back.PreferredSize.cx;
+end;
+
 procedure TFMain.VectorialFill_PenChange(Sender: TObject);
 var
   tempFill: TVectorialFill;
@@ -822,26 +844,21 @@ begin
   end else
     VectorialFill_Pen.UpdateFillExceptGeometry(ToolManager.ForeFill);
 
-  if (VectorialFill_Pen.FillType = vftSolid) and
-     (LazPaintInstance.ChooseColorTarget in [ctForeColorStartGrad,ctForeColorEndGrad]) then
-    LazPaintInstance.ChooseColorTarget := ctForeColorSolid else
-  if (VectorialFill_Pen.FillType = vftGradient) and
-     (LazPaintInstance.ChooseColorTarget = ctForeColorSolid) then
-    LazPaintInstance.ChooseColorTarget := ctForeColorStartGrad else
-  if (VectorialFill_Pen.FillType in [vftSolid,vftGradient]) and
-     (LazPaintInstance.ChooseColorTarget in
-     [ctForeColorSolid,ctForeColorStartGrad,ctForeColorEndGrad]) then
-      LazPaintInstance.ColorToFChooseColor;
+  UpdateChooseColors;
   UpdateEditPicture;
   FInFillChange:= false;
 end;
 
 procedure TFMain.VectorialFill_PenResize(Sender: TObject);
 begin
-  Panel_PenFill.Width := VectorialFill_Pen.Left + VectorialFill_Pen.Width + DoScaleX(6, OriginalDPI);
   QueryArrange;
 end;
 
+procedure TFMain.VectorialFill_PenTypeChange(Sender: TObject);
+begin
+  VectorialFill_Pen.Width := VectorialFill_Pen.PreferredSize.cx;
+end;
+
 procedure TFMain.VectorialFill_ShowBackFill(Sender: TObject;
   Shift: TShiftState; X, Y: Integer);
 begin
@@ -1348,12 +1365,14 @@ end;
 
 procedure TFMain.ShowPenFill;
 begin
+  VectorialFill_Pen.Height := VectorialFill_Pen.PreferredSize.cy;
   Panel_PenFill.Height := VectorialFill_Pen.Top+VectorialFill_Pen.Height+DoScaleY(3, OriginalDPI);
   HideFill(3000, true);
 end;
 
 procedure TFMain.ShowBackFill;
 begin
+  VectorialFill_Back.Height := VectorialFill_Back.PreferredSize.cy;
   Panel_BackFill.Height := VectorialFill_Back.Top+VectorialFill_Back.height+DoScaleY(3, OriginalDPI);
   HideFill(3000, true);
 end;

+ 30 - 14
lazpaint/tools/utool.pas

@@ -35,7 +35,7 @@ const
 function StrToPaintToolType(const s: ansistring): TPaintToolType;
 
 type
-  TContextualToolbar = (ctFill, ctPenWidth, ctPenStyle, ctAliasing, ctShape, ctEraserOption, ctTolerance,
+  TContextualToolbar = (ctFill, ctBackFill, ctPenWidth, ctPenStyle, ctAliasing, ctShape, ctEraserOption, ctTolerance,
     ctDeformation, ctCloseShape, ctLineCap, ctJoinStyle, ctSplineStyle, ctText, ctTextShadow,
     ctPhong, ctAltitude, ctPerspective, ctBrush, ctRatio);
   TContextualToolbars = set of TContextualToolbar;
@@ -344,7 +344,7 @@ type
     function ScriptSetTolerance(AVars: TVariableSet): TScriptResult;
     procedure SetBrushIndex(AValue: integer);
     procedure SetBrushSpacing(AValue: integer);
-    function SetControlsVisible(Controls: TList; Visible: Boolean): boolean;
+    function SetControlsVisible(AControls: TList; AVisible: Boolean; AName: string = ''): boolean;
     procedure SetArrowEnd(AValue: TArrowKind);
     procedure SetArrowSize(AValue: TPointF);
     procedure SetArrowStart(AValue: TArrowKind);
@@ -436,7 +436,7 @@ type
     function GetRenderBounds(VirtualScreenWidth, VirtualScreenHeight: integer): TRect;
     function SuggestGradientBox: TAffineBox;
 
-    procedure SwapToolColors;
+    function SwapToolColors: boolean;
     procedure NeedBackGradient;
     procedure NeedForeGradient;
     procedure AddBrush(brush: TLazPaintBrush);
@@ -1032,12 +1032,12 @@ begin
   else result := false;
 end;
 
-function TToolManager.SetControlsVisible(Controls: TList; Visible: Boolean): boolean;
-  procedure SetVisibility(AControl: TControl);
+function TToolManager.SetControlsVisible(AControls: TList; AVisible: Boolean; AName: string): boolean;
+  procedure SetVisibility(AControl: TControl; AVisible: boolean);
   begin
-    if AControl.Visible <> Visible then
+    if AControl.Visible <> AVisible then
     begin
-      AControl.Visible := Visible;
+      AControl.Visible := AVisible;
       result := true;
     end;
   end;
@@ -1045,13 +1045,24 @@ function TToolManager.SetControlsVisible(Controls: TList; Visible: Boolean): boo
 var i: integer;
 begin
   result := false;
-  if Visible then
+  if AName <> '' then
   begin
-    for i := 0 to Controls.Count-1 do
-      SetVisibility(TObject(Controls[i]) as TControl);
+    for i := AControls.Count-1 downto 0 do
+      if (TObject(AControls[i]) as TControl).Name <> AName then
+        SetVisibility(TObject(AControls[i]) as TControl, False);
+    for i := 0 to AControls.Count-1 do
+      if (TObject(AControls[i]) as TControl).Name = AName then
+        SetVisibility(TObject(AControls[i]) as TControl, True);
   end else
-    for i := Controls.Count-1 downto 0 do
-      SetVisibility(TObject(Controls[i]) as TControl);
+  begin
+    if AVisible then
+    begin
+      for i := 0 to AControls.Count-1 do
+        SetVisibility(TObject(AControls[i]) as TControl, True);
+    end else
+      for i := AControls.Count-1 downto 0 do
+        SetVisibility(TObject(AControls[i]) as TControl, False);
+  end;
 end;
 
 procedure TToolManager.SetArrowEnd(AValue: TArrowKind);
@@ -2635,7 +2646,10 @@ begin
   else
     contextualToolbars := [ctFill];
 
-  OrResult(SetControlsVisible(FillControls, ctFill in contextualToolbars));
+  if ctBackFill in contextualToolbars then
+    OrResult(SetControlsVisible(FillControls, True, 'Panel_BackFill'))
+  else
+    OrResult(SetControlsVisible(FillControls, ctFill in contextualToolbars));
   OrResult(SetControlsVisible(BrushControls, ctBrush in contextualToolbars));
   OrResult(SetControlsVisible(ShapeControls, ctShape in contextualToolbars));
   OrResult(SetControlsVisible(PenWidthControls, (ctPenWidth in contextualToolbars) and (toDrawShape in ShapeOptions)));
@@ -2801,10 +2815,11 @@ begin
   end;
 end;
 
-procedure TToolManager.SwapToolColors;
+function TToolManager.SwapToolColors: boolean;
 var
   tmpFill: TVectorialFill;
 begin
+  result := false;
   if FInSwapFill then exit;
   if FForeFill.Equals(FBackFill) then exit;
   FInSwapFill:= true;
@@ -2824,6 +2839,7 @@ begin
   end;
   if Assigned(FOnFillChanged) then FOnFillChanged(self);
   FInSwapFill:= false;
+  result := true;
 end;
 
 procedure TToolManager.NeedBackGradient;

+ 1 - 1
lazpaint/tools/utooldeformationgrid.pas

@@ -776,7 +776,7 @@ end;
 
 function TToolTextureMapping.GetContextualToolbars: TContextualToolbars;
 begin
-  Result:= [ctFill,ctPerspective];
+  Result:= [ctBackFill,ctPerspective];
 end;
 
 function TToolTextureMapping.Render(VirtualScreen: TBGRABitmap;

+ 1 - 1
lazpaint/tools/utoolfloodfill.pas

@@ -100,7 +100,7 @@ end;
 
 function TToolGradient.GetContextualToolbars: TContextualToolbars;
 begin
-  Result:= [ctFill];
+  Result:= [ctBackFill];
 end;
 
 function TToolGradient.SlowShape: boolean;

+ 1 - 1
lazpaint/tools/utoolphong.pas

@@ -37,7 +37,7 @@ end;
 
 function TToolPhong.GetContextualToolbars: TContextualToolbars;
 begin
-  Result:= [ctFill,ctPhong,ctAltitude];
+  Result:= [ctBackFill,ctPhong,ctAltitude];
 end;
 
 procedure TToolPhong.ShapeChange(ASender: TObject; ABounds: TRectF; ADiff: TVectorShapeDiff);

+ 1 - 1
lazpaint/tools/utoolvectorial.pas

@@ -757,7 +757,7 @@ begin
         if TTextShape(shape).PenPhong then include(result, ctAltitude);
       end;
     end;
-  esmGradient: result := [ctFill];
+  esmGradient: result := [ctBackFill];
   end;
 end;
 

+ 12 - 3
lazpaint/umenu.pas

@@ -442,6 +442,7 @@ procedure TMainFormMenu.ArrangeToolbars(ClientWidth: integer);
 var i,j,k,curx,cury,maxh, w, minNextX, delta,
   tbNormalHeight: integer;
   tb: TPanel;
+  vfc: TLCVectorialFillControl;
 begin
    tbNormalHeight := GetIndividualToolbarHeight;
    curx := 0;
@@ -456,7 +457,15 @@ begin
        for j := 0 to tb.ControlCount-1 do
        begin
          tb.Controls[j].Top := 1;
-         tb.Controls[j].Height := tbNormalHeight-3;
+         if tb.Controls[j] is TLCVectorialFillControl then
+         begin
+           vfc := TLCVectorialFillControl(tb.Controls[j]);
+           if tb.Height < vfc.PreferredSize.cy then
+             vfc.Height := vfc.ToolIconSize + vfc.VerticalPadding
+           else
+             vfc.Height := vfc.PreferredSize.cy;
+         end else
+           tb.Controls[j].Height := tbNormalHeight-3;
          if tb.Controls[j] is TToolBar then
          begin
            minNextX := MaxLongInt;
@@ -471,11 +480,11 @@ begin
        end;
      end;
 
-     w := 2;
+     w := DoScaleX(4, OriginalDPI);
      for j := 0 to tb.ControlCount-1 do
        if tb.Controls[j].Visible then
          w := max(w, tb.Controls[j].Left + tb.Controls[j].Width);
-     w += 2;
+     w += DoScaleX(4, OriginalDPI);
      tb.Width := w;
 
      if tb.Visible then

+ 10 - 3
lazpaintcontrols/lcvectorialfillcontrol.pas

@@ -5,7 +5,7 @@ unit LCVectorialFillControl;
 interface
 
 uses
-  Classes, SysUtils, Controls, LCVectorialFillInterface,
+  Types, Classes, SysUtils, Controls, LCVectorialFillInterface,
   LCVectorialFill, BGRABitmap, BGRABitmapTypes, BGRAGradientScanner,
   LCVectorOriginal;
 
@@ -31,6 +31,7 @@ type
     function GetGradRepetition: TBGRAGradientRepetition;
     function GetGradStartColor: TBGRAPixel;
     function GetGradType: TGradientType;
+    function GetPreferredSizeAsSize: TSize;
     function GetSolidColor: TBGRAPixel;
     function GetTexOpacity: byte;
     function GetTexRepetition: TTextureRepetition;
@@ -98,6 +99,7 @@ type
     property TextureRepetition: TTextureRepetition read GetTexRepetition write SetTextureRepetition;
     property TextureOpacity: byte read GetTexOpacity write SetTextureOpacity;
     property CanAdjustToShape: boolean read GetCanAdjustToShape write SetCanAdjustToShape;
+    property PreferredSize: TSize read GetPreferredSizeAsSize;
   published
     property AutoSize;
     property Align;
@@ -123,8 +125,6 @@ procedure Register;
 
 implementation
 
-uses Types;
-
 procedure Register;
 begin
   RegisterComponents('Lazpaint Controls', [TLCVectorialFillControl]);
@@ -191,6 +191,13 @@ begin
   result := FInterface.GradientType;
 end;
 
+function TLCVectorialFillControl.GetPreferredSizeAsSize: TSize;
+begin
+  result.cx:= Width;
+  result.cy:= Height;
+  GetPreferredSize(result.cx, result.cy);
+end;
+
 function TLCVectorialFillControl.GetSolidColor: TBGRAPixel;
 begin
   result := FInterface.SolidColor;