From dba418c01c95de87c5c5dd7bb8e00a67e91b424b Mon Sep 17 00:00:00 2001 From: Juliette ELSASS Date: Sun, 2 Jun 2024 12:25:14 +0200 Subject: [PATCH] #543 start with opaque pen, do not pick color on empty layer --- lazpaint/lazpaintinstance.pas | 9 ++++++++ lazpaint/tools/utool.pas | 4 +++- lazpaint/tools/utoolbasic.pas | 41 +++++++++++++++++++++++++---------- lazpaint/uconfig.pas | 2 +- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/lazpaint/lazpaintinstance.pas b/lazpaint/lazpaintinstance.pas index b70b1691..9db82e1c 100644 --- a/lazpaint/lazpaintinstance.pas +++ b/lazpaint/lazpaintinstance.pas @@ -537,10 +537,19 @@ procedure TLazPaintInstance.FormsNeeded; end; procedure TLazPaintInstance.UseConfig(ini: TInifile); +var + c: TBGRAPixel; begin FreeAndNil(FConfig); BlackAndWhite := ini.ReadBool('General','BlackAndWhite',BlackAndWhite); FConfig := TLazPaintConfig.Create(ini,LazPaintVersionStr); + // make sure default pen color is not fully or almost fully transparent + if FConfig.DefaultToolForeColor.Alpha < 32 then + begin + c := FConfig.DefaultToolForeColor; + c.alpha := 255; + FConfig.SetDefaultToolForeColor(c); + end; ToolManager.LoadFromConfig; FGridVisible := Config.DefaultGridVisible; FDockLayersAndColors:= Config.DefaultDockLayersAndColors; diff --git a/lazpaint/tools/utool.pas b/lazpaint/tools/utool.pas index 3359b5ad..c5b46788 100644 --- a/lazpaint/tools/utool.pas +++ b/lazpaint/tools/utool.pas @@ -169,7 +169,8 @@ TToolClass = class of TGenericTool; TToolPopupMessage= (tpmNone, tpmHoldKeyForSquare, tpmHoldKeySnapToPixel, tpmReturnValides, tpmBackspaceRemoveLastPoint, tpmRightClickFinishShape, tpmHoldKeyRestrictRotation, tpmHoldKeysScaleMode, tpmCurveModeHint, tpmBlendOpBackground, - tpmRightClickForSource, tpmNothingToBeDeformed, tpmRightClickForTransformCenter); + tpmRightClickForSource, tpmNothingToBeDeformed, tpmRightClickForTransformCenter, + tpmLayerEmpty); TOnToolChangedHandler = procedure(sender: TToolManager; ANewToolType: TPaintToolType) of object; TOnPopupToolHandler = procedure(sender: TToolManager; APopupMessage: TToolPopupMessage; AKey: Word; AAlways: boolean) of object; @@ -772,6 +773,7 @@ function ToolPopupMessageToStr(AMessage: TToolPopupMessage; AKey: Word = 0): str tpmRightClickForSource: result := rsRightClickForSource; tpmNothingToBeDeformed: result := rsNothingToBeDeformed; tpmRightClickForTransformCenter: result := rsRightClickForTransformCenter; + tpmLayerEmpty: result := rsEmptyLayer; else result := ''; end; diff --git a/lazpaint/tools/utoolbasic.pas b/lazpaint/tools/utoolbasic.pas index abb4b80c..06d910e3 100644 --- a/lazpaint/tools/utoolbasic.pas +++ b/lazpaint/tools/utoolbasic.pas @@ -453,20 +453,39 @@ function TToolColorPicker.DoToolMove(toolDest: TBGRABitmap; pt: TPoint; result := EmptyRect; if colorpicking then begin - if (pt.X >= 0) and (pt.Y >= 0) and (pt.X < toolDest.Width) and (pt.Y < toolDest.Height) then + if ssShift in ShiftState then begin - if ssShift in ShiftState then - c := Manager.Image.RenderedImage.GetPixel(pt.X,pt.Y) - else c := toolDest.GetPixel(pt.X,pt.Y); - if colorpickingRight then + c := Manager.Image.RenderedImage.GetPixel(pt.X,pt.Y); + // rendered image is in fact empty + if (c.alpha = 0) and Manager.Image.RenderedImage.Empty then begin - Manager.BackColor := c; - Manager.QueryColorTarget(Manager.BackFill); - end else - begin - Manager.ForeColor := c; - Manager.QueryColorTarget(Manager.ForeFill); + Manager.ToolPopup(tpmLayerEmpty, 0, true); + exit; end; + end + else + begin + if (pt.X >= 0) and (pt.Y >= 0) and (pt.X < toolDest.Width) and (pt.Y < toolDest.Height) then + begin + c := toolDest.GetPixel(pt.X,pt.Y); + // layer is in fact empty + if (c.alpha = 0) and toolDest.Empty then + begin + Manager.ToolPopup(tpmLayerEmpty, 0, true); + exit; + end; + end + else + exit; + end; + if colorpickingRight then + begin + Manager.BackColor := c; + Manager.QueryColorTarget(Manager.BackFill); + end else + begin + Manager.ForeColor := c; + Manager.QueryColorTarget(Manager.ForeFill); end; end; end; diff --git a/lazpaint/uconfig.pas b/lazpaint/uconfig.pas index 88c081e4..a25c681c 100644 --- a/lazpaint/uconfig.pas +++ b/lazpaint/uconfig.pas @@ -823,7 +823,7 @@ procedure TLazPaintConfig.SetDefaultUseImageBrowser(value: boolean); function TLazPaintConfig.DefaultToolForeColor: TBGRAPixel; begin - result := StrToBGRA(iniOptions.ReadString('Tool','ForeColor','00000080')); + result := StrToBGRA(iniOptions.ReadString('Tool','ForeColor','000000FF')); end; function TLazPaintConfig.DefaultToolBackColor: TBGRAPixel;