Browse Source

Merge pull request #559 from Lulu04/dev-showhidepreview

Dev showhidepreview
circular17 2 years ago
parent
commit
bc8def0520

+ 24 - 5
lazpaint/dialog/filter/ucustomblur.pas

@@ -42,8 +42,10 @@ type
     FLazPaintInstance: TLazPaintCustomInstance;
     FFilterConnector: TFilterConnector;
     FThreadManager: TFilterThreadManager;
-    FInitializing: boolean;
+    FInitializing, FComputed: boolean;
     FComputedImage: TBGRABitmap;
+    procedure DisplayComputedImage;
+    procedure StoreComputedImage;
     procedure GenerateDefaultMask;
     procedure SetLazPaintInstance(const AValue: TLazPaintCustomInstance);
     procedure OnTaskEvent({%H-}ASender: TObject; AEvent: TThreadManagerEvent);
@@ -67,13 +69,16 @@ begin
     'ForeColor=FFFFFFFF'+LineEnding+
     'BackColor=000000FF'+LineEnding+
     'PenWidth=1');
+
+  FComputed := false;
+  FComputedImage := nil;
 end;
 
 procedure TFCustomBlur.FormDestroy(Sender: TObject);
 begin
   subConfig.Free;
   FreeAndNil(FBrowseImages);
-  if FComputedImage <> nil then FreeAndNil(FComputedImage);
+  FreeAndNil(FComputedImage);
 end;
 
 procedure TFCustomBlur.FormShow(Sender: TObject);
@@ -130,6 +135,18 @@ begin
   Timer1.Enabled:= true;
 end;
 
+procedure TFCustomBlur.DisplayComputedImage;
+begin
+  if FComputedImage <> nil then
+    FFilterConnector.PutImage(FComputedImage, false, false);
+end;
+
+procedure TFCustomBlur.StoreComputedImage;
+begin
+  if FComputed and (FComputedImage = nil) then
+    FComputedImage := FFilterConnector.ActiveLayer.Duplicate;
+end;
+
 procedure TFCustomBlur.GenerateDefaultMask;
 var bmp: TBitmap;
     defaultMask: TBGRABitmap;
@@ -283,8 +300,7 @@ end;
 
 procedure TFCustomBlur.Button_OKClick(Sender: TObject);
 begin
-  if not CheckBox_Preview.Checked and
-    (FComputedImage <> nil) then FFilterConnector.PutImage(FComputedImage,false,false);
+  if not CheckBox_Preview.Checked then DisplayComputedImage;
 
   if not FFilterConnector.ActionDone then FFilterConnector.ValidateAction;
   ModalResult := mrOK;
@@ -294,9 +310,12 @@ procedure TFCustomBlur.CheckBox_PreviewChange(Sender: TObject);
 begin
   if FInitializing then exit;
   if CheckBox_Preview.Checked then
-    FFilterConnector.PutImage(FComputedImage, false, false)
+    DisplayComputedImage
   else
+  begin
+   StoreComputedImage;
    FFilterConnector.RestoreBackup;
+  end;
 end;
 
 procedure TFCustomBlur.FormCloseQuery(Sender: TObject; var CanClose: boolean);

+ 27 - 12
lazpaint/dialog/filter/umotionblur.pas

@@ -51,12 +51,14 @@ type
     InPaintBoxMouseMove: boolean;
     PaintBoxMouseMovePos: TPoint;
     FQuitQuery,
-    FInitializing: boolean;
+    FInitializing, FComputed: boolean;
     FComputedImage: TBGRABitmap;
     procedure UpdateStep;
     procedure ComputeAngle(X,Y: integer);
     procedure InitParams;
+    procedure DisplayComputedImage;
     procedure PreviewNeeded;
+    procedure StoreComputedImage;
     procedure OnTaskEvent({%H-}ASender: TObject; AEvent: TThreadManagerEvent);
   end;
 
@@ -200,6 +202,12 @@ begin
   FInitializing := false;
 end;
 
+procedure TFMotionBlur.DisplayComputedImage;
+begin
+  if FComputedImage <> nil then
+    FFilterConnector.PutImage(FComputedImage, false, false);
+end;
+
 procedure TFMotionBlur.PreviewNeeded;
 begin
   FThreadManager.WantPreview(CreateMotionBlurTask(FFilterConnector.BackupLayer,
@@ -207,6 +215,12 @@ begin
     Checkbox_Oriented.Checked));
 end;
 
+procedure TFMotionBlur.StoreComputedImage;
+begin
+  if FComputed and (FComputedImage = nil) then
+    FComputedImage := FFilterConnector.ActiveLayer.Duplicate;
+end;
+
 procedure TFMotionBlur.OnTaskEvent(ASender: TObject; AEvent: TThreadManagerEvent
   );
 begin
@@ -220,13 +234,8 @@ begin
         if AEvent = tmeCompletedTask then begin
           Button_OK.Enabled := true;
           CheckBox_Preview.Enabled := true;
+          FComputed := true;
         end;
-
-      if FComputedImage <> nil then FComputedImage.Free;
-      case AEvent of
-        tmeAbortedTask: FComputedImage := FFilterConnector.BackupLayer.Duplicate;
-        tmeCompletedTask: FComputedImage := FFilterConnector.ActiveLayer.Duplicate;
-      end;
     end;
   tmeStartingNewTask:
     begin
@@ -238,6 +247,7 @@ begin
       FInitializing := True;
       CheckBox_Preview.Enabled := false;
       CheckBox_Preview.Checked := True;
+      FreeAndNil(FComputedImage);
       FInitializing := False;
     end;
   end;
@@ -251,11 +261,14 @@ begin
   CheckOKCancelBtns(Button_OK{,Button_Cancel});
   CheckFloatSpinEdit(SpinEdit_Distance);
   SpinEdit_Distance.Constraints.MinWidth := DoScaleX(70, OriginalDPI);
+
+  FComputed := false;
+  FComputedImage := nil;
 end;
 
 procedure TFMotionBlur.FormDestroy(Sender: TObject);
 begin
-  if FComputedImage <> nil then FreeAndNil(FComputedImage);
+  FreeAndNil(FComputedImage);
 end;
 
 procedure TFMotionBlur.FormShow(Sender: TObject);
@@ -293,8 +306,7 @@ end;
 
 procedure TFMotionBlur.Button_OKClick(Sender: TObject);
 begin
-  if not CheckBox_Preview.Checked and
-    (FComputedImage <> nil) then FFilterConnector.PutImage(FComputedImage,false,false);
+  if not CheckBox_Preview.Checked then DisplayComputedImage;
 
   if not FFilterConnector.ActionDone then
   begin
@@ -316,9 +328,12 @@ procedure TFMotionBlur.CheckBox_PreviewChange(Sender: TObject);
 begin
   if FInitializing then exit;
   if CheckBox_Preview.Checked then
-    FFilterConnector.PutImage(FComputedImage, false, false)
+    DisplayComputedImage
   else
-   FFilterConnector.RestoreBackup;
+   begin
+     StoreComputedImage;
+     FFilterConnector.RestoreBackup;
+   end;
 end;
 
 procedure TFMotionBlur.FormCloseQuery(Sender: TObject; var CanClose: boolean);

+ 11 - 12
lazpaint/dialog/filter/unoisefilter.pas

@@ -38,12 +38,12 @@ type
     FComputedLayer: TBGRABitmap;
     FClosing: boolean;
     procedure InitParams;
-    procedure PutComputedLayerToFilterConnector;
+    procedure DisplayComputedImage;
   public
     FInitializing: boolean;
     FFilterConnector: TFilterConnector;
     procedure ComputeFilteredLayer;
-    procedure PreviewNeeded(ARecomputeRandom: boolean);
+    procedure DisplayPreview(ARecomputeRandom: boolean);
   end;
 
 function ShowNoiseFilterDlg(AFilterConnector: TObject): TScriptResult;
@@ -65,7 +65,7 @@ begin
         FNoiseFilter.FFilterConnector.Parameters.Booleans['Validate'] then
       begin
         FNoiseFilter.InitParams;
-        FNoiseFilter.PreviewNeeded(true);
+        FNoiseFilter.DisplayPreview(true);
         FNoiseFilter.FFilterConnector.ValidateAction;
         result := srOk;
       end else
@@ -88,7 +88,7 @@ end;
 procedure TFNoiseFilter.Button_OKClick(Sender: TObject);
 begin
   if not CheckBox_Preview.Checked then
-    PutComputedLayerToFilterConnector;
+    DisplayComputedImage;
 
   FFilterConnector.ValidateAction;
   ModalResult := mrOK;
@@ -98,7 +98,7 @@ procedure TFNoiseFilter.CheckBox_PreviewChange(Sender: TObject);
 begin
   if FInitializing then exit;
   if CheckBox_Preview.Checked then
-    PutComputedLayerToFilterConnector
+    DisplayComputedImage
   else
     FFilterConnector.RestoreBackup;
 end;
@@ -121,7 +121,7 @@ end;
 procedure TFNoiseFilter.Radio_NoiseChange(Sender: TObject);
 begin
   if FInitializing then exit;
-  PreviewNeeded(true);
+  DisplayPreview(true);
 end;
 
 procedure TFNoiseFilter.FormCreate(Sender: TObject);
@@ -139,7 +139,7 @@ begin
   Top := FFilterConnector.LazPaintInstance.MainFormBounds.Top;
   FInitializing := false;
   InitParams;
-  PreviewNeeded(True);
+  DisplayPreview(True);
 end;
 
 procedure TFNoiseFilter.SpinEdit_AlphaChange(Sender: TObject);
@@ -147,7 +147,7 @@ begin
   if FInitializing or FClosing then exit;
   if FComputedLayer = nil then ComputeFilteredLayer;
   FComputedLayer.AlphaFill(SpinEdit_Alpha.Value);
-  PreviewNeeded(False);
+  DisplayPreview(False);
 end;
 
 procedure TFNoiseFilter.InitParams;
@@ -176,7 +176,7 @@ begin
   FInitializing:= false;
 end;
 
-procedure TFNoiseFilter.PutComputedLayerToFilterConnector;
+procedure TFNoiseFilter.DisplayComputedImage;
 begin
   if SpinEdit_Alpha.Value <> 255 then
   begin
@@ -196,11 +196,10 @@ begin
   scan.Free;
 end;
 
-procedure TFNoiseFilter.PreviewNeeded(ARecomputeRandom: boolean);
+procedure TFNoiseFilter.DisplayPreview(ARecomputeRandom: boolean);
 begin
   if ARecomputeRandom or (FComputedLayer = nil) then ComputeFilteredLayer;
-  if not CheckBox_Preview.Checked then exit;
-  PutComputedLayerToFilterConnector;
+  if CheckBox_Preview.Checked then DisplayComputedImage;
 end;
 
 end.

+ 8 - 8
lazpaint/dialog/filter/uposterize.pas

@@ -33,7 +33,7 @@ type
     FFilterConnector: TFilterConnector;
     procedure OnTryStopAction({%H-}sender: TFilterConnector);
     procedure InitParams;
-    procedure PreviewNeeded;
+    procedure DisplayPreview;
     { private declarations }
   public
     { public declarations }
@@ -67,7 +67,7 @@ begin
        FPosterize.FFilterConnector.Parameters.Booleans['Validate'] then
     begin
       FPosterize.InitParams;
-      FPosterize.PreviewNeeded;
+      FPosterize.DisplayPreview;
       FPosterize.FFilterConnector.ValidateAction;
       result := srOk;
     end else
@@ -97,7 +97,7 @@ end;
 
 procedure TFPosterize.Button_OKClick(Sender: TObject);
 begin
-  if not CheckBox_Preview.Checked then PreviewNeeded;
+  if not CheckBox_Preview.Checked then DisplayPreview;
 
   FFilterConnector.ValidateAction;
   FFilterConnector.LazPaintInstance.Config.SetDefaultPosterizeLevels(SpinEdit_Levels.Value);
@@ -108,14 +108,14 @@ end;
 procedure TFPosterize.CheckBox_ByLightnessChange(Sender: TObject);
 begin
   if not FInitializing and
-    CheckBox_Preview.Checked then PreviewNeeded;
+    CheckBox_Preview.Checked then DisplayPreview;
 end;
 
 procedure TFPosterize.CheckBox_PreviewChange(Sender: TObject);
 begin
   if FInitializing then exit;
   if CheckBox_Preview.Checked then
-    PreviewNeeded
+    DisplayPreview
   else
    FFilterConnector.RestoreBackup;
 end;
@@ -123,14 +123,14 @@ end;
 procedure TFPosterize.FormShow(Sender: TObject);
 begin
   InitParams;
-  PreviewNeeded;
+  DisplayPreview;
   Top := FFilterConnector.LazPaintInstance.MainFormBounds.Top;
 end;
 
 procedure TFPosterize.SpinEdit_LevelsChange(Sender: TObject);
 begin
   if not FInitializing and
-    CheckBox_Preview.Checked then PreviewNeeded;
+    CheckBox_Preview.Checked then DisplayPreview;
 end;
 
 procedure TFPosterize.OnTryStopAction(sender: TFilterConnector);
@@ -159,7 +159,7 @@ begin
   FInitializing := false;
 end;
 
-procedure TFPosterize.PreviewNeeded;
+procedure TFPosterize.DisplayPreview;
 var params:TVariableSet;
   levels: integer;
 

+ 7 - 7
lazpaint/dialog/filter/usharpen.pas

@@ -35,7 +35,7 @@ type
     FInitializing: boolean;
     FFilterConnector: TFilterConnector;
     procedure InitParams;
-    procedure PreviewNeeded;
+    procedure DisplayPreview;
   end;
 
 function ShowSharpenDlg(AFilterConnector: TObject; AMode : TSharpenMode): TScriptResult;
@@ -66,7 +66,7 @@ begin
       FSharpen.FFilterConnector.Parameters.Booleans['Validate'] then
     begin
       FSharpen.InitParams;
-      FSharpen.PreviewNeeded;
+      FSharpen.DisplayPreview;
       FSharpen.FFilterConnector.ValidateAction;
       result := srOk;
     end else
@@ -95,7 +95,7 @@ procedure TFSharpen.FormShow(Sender: TObject);
 var idxSlash: integer;
 begin
   InitParams;
-  PreviewNeeded;
+  DisplayPreview;
   idxSlash:= Pos('/',Caption);
   if idxSlash <> 0 then
   begin
@@ -108,12 +108,12 @@ end;
 procedure TFSharpen.SpinEdit_AmountChange(Sender: TObject);
 begin
   if not FInitializing and
-    CheckBox_Preview.Checked then PreviewNeeded;
+    CheckBox_Preview.Checked then DisplayPreview;
 end;
 
 procedure TFSharpen.Button_OKClick(Sender: TObject);
 begin
-  if not CheckBox_Preview.Checked then PreviewNeeded;
+  if not CheckBox_Preview.Checked then DisplayPreview;
 
   FFilterConnector.ValidateAction;
   FFilterConnector.LazPaintInstance.Config.SetDefaultSharpenAmount(SpinEdit_Amount.Value/100);
@@ -124,7 +124,7 @@ procedure TFSharpen.CheckBox_PreviewChange(Sender: TObject);
 begin
   if FInitializing then exit;
   if CheckBox_Preview.Checked then
-    PreviewNeeded
+    DisplayPreview
   else
    FFilterConnector.RestoreBackup;
 end;
@@ -149,7 +149,7 @@ begin
   FInitializing := false;
 end;
 
-procedure TFSharpen.PreviewNeeded;
+procedure TFSharpen.DisplayPreview;
 var filtered: TBGRABitmap;
 begin
   if FMode = smSharpen then

+ 10 - 5
lazpaint/dialog/filter/utwirl.pas

@@ -46,6 +46,7 @@ type
     FComputedImage: TBGRABitmap;
     procedure InitParams;
     procedure PreviewNeeded;
+    procedure DisplayComputedImage;
     function ComputeFilteredLayer: TBGRABitmap;
   public
     FilterConnector: TFilterConnector;
@@ -158,8 +159,7 @@ begin
   Timer1.Enabled := false;
   if FComputedImage <> nil then FComputedImage.Free;
   FComputedImage := ComputeFilteredLayer;
-  if CheckBox_Preview.Checked then
-    FilterConnector.PutImage(FComputedImage,False,False);
+  if CheckBox_Preview.Checked then DisplayComputedImage;
   Button_OK.Enabled := true;
   CheckBox_Preview.Enabled := true;
 end;
@@ -195,6 +195,11 @@ begin
   CheckBox_Preview.Enabled := false;
 end;
 
+procedure TFTwirl.DisplayComputedImage;
+begin
+  FilterConnector.PutImage(FComputedImage,False,False);
+end;
+
 function TFTwirl.ComputeFilteredLayer: TBGRABitmap;
 begin
   result := FilterConnector.BackupLayer.FilterTwirl(FilterConnector.WorkArea, Point(round(FCenter.X*FilterConnector.ActiveLayer.Width),round(FCenter.Y*FilterConnector.ActiveLayer.Height)),
@@ -203,7 +208,7 @@ end;
 
 procedure TFTwirl.Button_OKClick(Sender: TObject);
 begin
-  if not CheckBox_Preview.Checked then FilterConnector.PutImage(FComputedImage,false,false);
+  if not CheckBox_Preview.Checked then DisplayComputedImage;
 
   FilterConnector.ValidateAction;
   FilterConnector.LazPaintInstance.Config.SetDefaultTwirlRadius(SpinEdit_Radius.Value);
@@ -215,9 +220,9 @@ procedure TFTwirl.CheckBox_PreviewChange(Sender: TObject);
 begin
   if FInitializing then exit;
   if CheckBox_Preview.Checked then
-    FilterConnector.PutImage(FComputedImage,False,False)
+    DisplayComputedImage
   else
-   FilterConnector.RestoreBackup;
+    FilterConnector.RestoreBackup;
 end;
 
 {$R *.lfm}