瀏覽代碼

exit color textbox when doing something else, allow paste in textbox

Johann ELSASS 4 年之前
父節點
當前提交
0bf95346f8

+ 7 - 0
lazpaint/dialog/ulayerstackinterface.pas

@@ -130,6 +130,8 @@ procedure TLayerStackInterface.ComboBox_BlendOpChange(Sender: TObject);
 var blendOp: TBlendOperation;
 var blendOp: TBlendOperation;
   itemStr: string;
   itemStr: string;
 begin
 begin
+  if Assigned(LazPaintInstance) then
+    LazPaintInstance.ExitColorEditor;
   if not FUpdatingComboBlendOp then
   if not FUpdatingComboBlendOp then
   begin
   begin
     if ComboBox_BlendOp.ItemIndex <> -1 then
     if ComboBox_BlendOp.ItemIndex <> -1 then
@@ -175,6 +177,7 @@ procedure TLayerStackInterface.BGRALayerStack_MouseDown(Sender: TObject;
 var i: integer;
 var i: integer;
   str: string;
   str: string;
 begin
 begin
+  if Assigned(LazPaintInstance) then LazPaintInstance.ExitColorEditor;
   X := round(X*FScaling);
   X := round(X*FScaling);
   Y := round(Y*FScaling);
   Y := round(Y*FScaling);
   if PtInRect(Point(X,Y),FScrollButtonRect) then exit;
   if PtInRect(Point(X,Y),FScrollButtonRect) then exit;
@@ -923,11 +926,15 @@ end;
 
 
 procedure TLayerStackInterface.ToolZoomLayerStackIn_Click(Sender: TObject);
 procedure TLayerStackInterface.ToolZoomLayerStackIn_Click(Sender: TObject);
 begin
 begin
+  if Assigned(LazPaintInstance) then
+    LazPaintInstance.ExitColorEditor;
   ZoomFactor := ZoomFactor * 1.3;
   ZoomFactor := ZoomFactor * 1.3;
 end;
 end;
 
 
 procedure TLayerStackInterface.ToolZoomLayerStackOut_Click(Sender: TObject);
 procedure TLayerStackInterface.ToolZoomLayerStackOut_Click(Sender: TObject);
 begin
 begin
+  if Assigned(LazPaintInstance) then
+    LazPaintInstance.ExitColorEditor;
   ZoomFactor := ZoomFactor / 1.3;
   ZoomFactor := ZoomFactor / 1.3;
 end;
 end;
 
 

+ 9 - 2
lazpaint/lazpaintdialogs.inc

@@ -54,7 +54,8 @@ var
   vW,vH,vBack: TScriptVariableReference;
   vW,vH,vBack: TScriptVariableReference;
   w,h: NativeInt;
   w,h: NativeInt;
   back: TBGRAPixel;
   back: TBGRAPixel;
-  whDefined: boolean;
+  whDefined, dlgSuccess: boolean;
+  topMostInfo: TTopMostInfo;
 begin
 begin
   if ToolManager.ToolSleeping then
   if ToolManager.ToolSleeping then
   begin
   begin
@@ -104,7 +105,13 @@ begin
     bitmapRepl := MakeNewBitmapReplacement(w,h,back)
     bitmapRepl := MakeNewBitmapReplacement(w,h,back)
   else
   else
   begin
   begin
-    if not ShowNewImageDlg(bitmapRepl) then
+    topMostInfo := HideTopmost;
+    try
+      dlgSuccess := ShowNewImageDlg(bitmapRepl);
+    finally
+      ShowTopmost(topMostInfo);
+    end;
+    if not dlgSuccess then
     begin
     begin
       result := srCancelledByUser;
       result := srCancelledByUser;
       exit;
       exit;

+ 9 - 0
lazpaint/lazpaintinstance.pas

@@ -217,6 +217,7 @@ type
     procedure ColorFromFChooseColor; override;
     procedure ColorFromFChooseColor; override;
     procedure ColorToFChooseColor; override;
     procedure ColorToFChooseColor; override;
     procedure ExitColorEditor; override;
     procedure ExitColorEditor; override;
+    function ColorEditorActive: boolean; override;
     function ShowSaveOptionDlg({%H-}AParameters: TVariableSet; AOutputFilenameUTF8: string;
     function ShowSaveOptionDlg({%H-}AParameters: TVariableSet; AOutputFilenameUTF8: string;
       ASkipOptions: boolean; AExport: boolean): boolean; override;
       ASkipOptions: boolean; AExport: boolean): boolean; override;
     function ShowColorIntensityDlg(AParameters: TVariableSet): TScriptResult; override;
     function ShowColorIntensityDlg(AParameters: TVariableSet): TScriptResult; override;
@@ -1536,6 +1537,7 @@ function TLazPaintInstance.HideTopmost: TTopMostInfo;
 begin
 begin
   result.defined:= false;
   result.defined:= false;
   if FDestroying then exit;
   if FDestroying then exit;
+  ExitColorEditor;
 
 
   if (FFormToolbox <> nil) and FFormToolbox.Visible then
   if (FFormToolbox <> nil) and FFormToolbox.Visible then
   begin
   begin
@@ -1788,6 +1790,13 @@ begin
   if Assigned(FChooseColor) then FChooseColor.HideEditor;
   if Assigned(FChooseColor) then FChooseColor.HideEditor;
 end;
 end;
 
 
+function TLazPaintInstance.ColorEditorActive: boolean;
+begin
+  if Assigned(FChooseColor) then
+    result := FChooseColor.EditorVisible
+    else result := false;
+end;
+
 function TLazPaintInstance.ShowSaveOptionDlg(AParameters: TVariableSet;
 function TLazPaintInstance.ShowSaveOptionDlg(AParameters: TVariableSet;
   AOutputFilenameUTF8: string; ASkipOptions: boolean; AExport: boolean): boolean;
   AOutputFilenameUTF8: string; ASkipOptions: boolean; AExport: boolean): boolean;
 begin
 begin

+ 8 - 1
lazpaint/lazpaintmainform.pas

@@ -1670,6 +1670,7 @@ procedure TFMain.FilterAnyExecute(Sender: TObject);
 var filterName: string;
 var filterName: string;
     params: TVariableSet;
     params: TVariableSet;
 begin
 begin
+  if Assigned(LazPaintInstance) then LazPaintInstance.ExitColorEditor;
   if Sender is TAction then
   if Sender is TAction then
   begin
   begin
     filterName := (Sender as TAction).Name;
     filterName := (Sender as TAction).Name;
@@ -1740,6 +1741,7 @@ procedure TFMain.RenderAnyExecute(Sender: TObject);
 var filterName: string;
 var filterName: string;
     params: TVariableSet;
     params: TVariableSet;
 begin
 begin
+  if Assigned(LazPaintInstance) then LazPaintInstance.ExitColorEditor;
   if Sender is TAction then
   if Sender is TAction then
   begin
   begin
     filterName := (Sender as TAction).Name;
     filterName := (Sender as TAction).Name;
@@ -2796,6 +2798,7 @@ var toolName: string;
   texMapBounds: TRect;
   texMapBounds: TRect;
 begin
 begin
   if ToolManager.ToolSleeping then exit;
   if ToolManager.ToolSleeping then exit;
+  LazPaintInstance.ExitColorEditor;
   texMapBounds := EmptyRect;
   texMapBounds := EmptyRect;
   toolName := AVars.Strings['Name'];
   toolName := AVars.Strings['Name'];
   Tool := StrToPaintToolType(toolName);
   Tool := StrToPaintToolType(toolName);
@@ -3630,7 +3633,9 @@ end;
 
 
 procedure TFMain.EditPasteUpdate(Sender: TObject);
 procedure TFMain.EditPasteUpdate(Sender: TObject);
 begin
 begin
-  EditPaste.Enabled := ToolManager.ToolProvideCommand(tcPaste) or Image.CurrentLayerVisible;
+  if Assigned(LazPaintInstance) and LazPaintInstance.ColorEditorActive then
+    EditPaste.Enabled := false
+    else EditPaste.Enabled := ToolManager.ToolProvideCommand(tcPaste) or Image.CurrentLayerVisible;
 end;
 end;
 
 
 procedure TFMain.EditDeselectUpdate(Sender: TObject);
 procedure TFMain.EditDeselectUpdate(Sender: TObject);
@@ -3652,6 +3657,8 @@ end;
 procedure TFMain.ScriptExecute(Sender: TObject);
 procedure TFMain.ScriptExecute(Sender: TObject);
 var actionName: string;
 var actionName: string;
 begin
 begin
+  if Assigned(LazPaintInstance) then
+    LazPaintInstance.ExitColorEditor;
   if Sender is TAction then
   if Sender is TAction then
   begin
   begin
     actionName := (Sender as TAction).Name;
     actionName := (Sender as TAction).Name;

+ 1 - 0
lazpaint/lazpainttype.pas

@@ -253,6 +253,7 @@ type
     procedure ColorFromFChooseColor; virtual; abstract;
     procedure ColorFromFChooseColor; virtual; abstract;
     procedure ColorToFChooseColor; virtual; abstract;
     procedure ColorToFChooseColor; virtual; abstract;
     procedure ExitColorEditor; virtual; abstract;
     procedure ExitColorEditor; virtual; abstract;
+    function ColorEditorActive: boolean; virtual; abstract;
     function GetColor(ATarget: TColorTarget): TBGRAPixel;
     function GetColor(ATarget: TColorTarget): TBGRAPixel;
     procedure SetColor(ATarget: TColorTarget; AColor: TBGRAPixel);
     procedure SetColor(ATarget: TColorTarget; AColor: TBGRAPixel);
     function ShowSaveOptionDlg(AParameters: TVariableSet; AOutputFilenameUTF8: string;
     function ShowSaveOptionDlg(AParameters: TVariableSet; AOutputFilenameUTF8: string;