Переглянути джерело

refactor, store computed image only when preview is unchecked

Johann ELSASS 2 роки тому
батько
коміт
2fdd4f8b63
1 змінених файлів з 27 додано та 12 видалено
  1. 27 12
      lazpaint/dialog/filter/uradialblur.pas

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

@@ -34,13 +34,15 @@ type
     procedure SpinEdit_RadiusChange(Sender: TObject);
     procedure SpinEdit_RadiusChange(Sender: TObject);
     procedure Timer1Timer(Sender: TObject);
     procedure Timer1Timer(Sender: TObject);
   private
   private
-    FInitializing: boolean;
+    FInitializing, FComputed: boolean;
     FFilterConnector: TFilterConnector;
     FFilterConnector: TFilterConnector;
     FThreadManager: TFilterThreadManager;
     FThreadManager: TFilterThreadManager;
     FLastRadius: single;
     FLastRadius: single;
     FVars: TVariableSet;
     FVars: TVariableSet;
     FComputedImage: TBGRABitmap;
     FComputedImage: TBGRABitmap;
+    procedure DisplayComputedImage;
     procedure PreviewNeeded;
     procedure PreviewNeeded;
+    procedure StoreComputedImage;
     procedure UpdateStep;
     procedure UpdateStep;
     procedure OnTaskEvent({%H-}ASender: TObject; AEvent: TThreadManagerEvent);
     procedure OnTaskEvent({%H-}ASender: TObject; AEvent: TThreadManagerEvent);
   public
   public
@@ -77,10 +79,15 @@ end;
 
 
 { TFRadialBlur }
 { TFRadialBlur }
 
 
+procedure TFRadialBlur.DisplayComputedImage;
+begin
+  if FComputedImage <> nil then
+    FFilterConnector.PutImage(FComputedImage, false, false);
+end;
+
 procedure TFRadialBlur.Button_OKClick(Sender: TObject);
 procedure TFRadialBlur.Button_OKClick(Sender: TObject);
 begin
 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
   if not FFilterConnector.ActionDone then
   begin
   begin
@@ -94,9 +101,18 @@ procedure TFRadialBlur.CheckBox_PreviewChange(Sender: TObject);
 begin
 begin
   if FInitializing then exit;
   if FInitializing then exit;
   if CheckBox_Preview.Checked then
   if CheckBox_Preview.Checked then
-    FFilterConnector.PutImage(FComputedImage, false, false)
+    DisplayComputedImage
   else
   else
-   FFilterConnector.RestoreBackup;
+  begin
+    StoreComputedImage;
+    FFilterConnector.RestoreBackup;
+  end;
+end;
+
+procedure TFRadialBlur.StoreComputedImage;
+begin
+  if FComputed and (FComputedImage = nil) then
+    FComputedImage := FFilterConnector.ActiveLayer.Duplicate;
 end;
 end;
 
 
 procedure TFRadialBlur.FormCloseQuery(Sender: TObject; var CanClose: boolean);
 procedure TFRadialBlur.FormCloseQuery(Sender: TObject; var CanClose: boolean);
@@ -113,11 +129,14 @@ begin
   CheckOKCancelBtns(Button_OK{,Button_Cancel});
   CheckOKCancelBtns(Button_OK{,Button_Cancel});
   CheckFloatSpinEdit(SpinEdit_Radius);
   CheckFloatSpinEdit(SpinEdit_Radius);
   SpinEdit_Radius.Constraints.MinWidth := DoScaleX(70, OriginalDPI);
   SpinEdit_Radius.Constraints.MinWidth := DoScaleX(70, OriginalDPI);
+
+  FComputed := false;
+  FComputedImage := nil;
 end;
 end;
 
 
 procedure TFRadialBlur.FormDestroy(Sender: TObject);
 procedure TFRadialBlur.FormDestroy(Sender: TObject);
 begin
 begin
-  if FComputedImage <> nil then FreeAndNil(FComputedImage);
+  FreeAndNil(FComputedImage);
 end;
 end;
 
 
 procedure TFRadialBlur.FormShow(Sender: TObject);
 procedure TFRadialBlur.FormShow(Sender: TObject);
@@ -186,13 +205,8 @@ begin
         if AEvent = tmeCompletedTask then begin
         if AEvent = tmeCompletedTask then begin
           Button_OK.Enabled := true;
           Button_OK.Enabled := true;
           CheckBox_Preview.Enabled := true;
           CheckBox_Preview.Enabled := true;
+          FComputed := true;
         end;
         end;
-
-      if FComputedImage <> nil then FComputedImage.Free;
-      case AEvent of
-        tmeAbortedTask: FComputedImage := FFilterConnector.BackupLayer.Duplicate;
-        tmeCompletedTask: FComputedImage := FFilterConnector.ActiveLayer.Duplicate;
-      end;
     end;
     end;
   tmeStartingNewTask:
   tmeStartingNewTask:
     begin
     begin
@@ -204,6 +218,7 @@ begin
       FInitializing := True;
       FInitializing := True;
       CheckBox_Preview.Enabled := false;
       CheckBox_Preview.Enabled := false;
       CheckBox_Preview.Checked := True;
       CheckBox_Preview.Checked := True;
+      FreeAndNil(FComputedImage);
       FInitializing := False;
       FInitializing := False;
     end;
     end;
   end;
   end;