Browse Source

fix action progress on Windows, add canvas size progress

circular17 5 years ago
parent
commit
8812ba6c14

+ 4 - 2
lazpaint/dialog/ucanvassize.pas

@@ -127,7 +127,7 @@ begin
    end;
 end;
 
-function ChangeLayeredImageCanvasSize(layeredBmp: TLazPaintImage; newWidth,
+function ChangeLayeredImageCanvasSize(AInstance: TLazPaintCustomInstance; layeredBmp: TLazPaintImage; newWidth,
   newHeight: integer; anchor: string; background: TBGRAPixel;
   repeatImage: boolean; flipMode: boolean): TBGRALayeredBitmap;
 var i,idx: integer;
@@ -138,6 +138,7 @@ begin
   result := TBGRALayeredBitmap.Create;
   for i := 0 to layeredbmp.NbLayers-1 do
   begin
+    AInstance.ReportActionProgress(i*100 div layeredbmp.NbLayers);
     newBmp := ChangeCanvasSize(layeredbmp.LayerBitmap[i],layeredbmp.LayerOffset[i],layeredBmp.Width,layeredBmp.Height, newwidth,newHeight,anchor,background,repeatImage,flipMode);
     idx := result.AddOwnedLayer(newBmp,layeredBmp.BlendOperation[i],layeredbmp.LayerOpacity[i]);
     result.LayerName[idx] := layeredbmp.LayerName[i];
@@ -155,12 +156,13 @@ begin
       end;
     end;
   end;
+  AInstance.ReportActionProgress(100);
 end;
 
 function ComputeNewCanvasSize(AInstance: TLazPaintCustomInstance; AWidth,AHeight: integer;
   AAnchor: string; ARepeatImage, AFlipMode: boolean): TLayeredBitmapAndSelection;
 begin
-  result.layeredBitmap := ChangeLayeredImageCanvasSize(AInstance.Image,
+  result.layeredBitmap := ChangeLayeredImageCanvasSize(AInstance, AInstance.Image,
      AWidth,AHeight,AAnchor,BGRAPixelTransparent, ARepeatImage, AFlipMode);
   if AInstance.Image.SelectionMaskReadonly <> nil then
     result.selection := ChangeCanvasSize(AInstance.Image.SelectionMaskReadonly,

+ 16 - 18
lazpaint/lazpaintinstance.pas

@@ -181,6 +181,7 @@ type
     procedure EndLoadingImage; override;
     procedure StartSavingImage(AFilename: string); override;
     procedure EndSavingImage; override;
+    procedure ReportActionProgress(AProgressPercent: integer); override;
     procedure Donate; override;
     procedure SaveMainWindowPosition; override;
     procedure RestoreMainWindowPosition; override;
@@ -313,6 +314,20 @@ begin
   UpdateWindows;
 end;
 
+procedure TLazPaintInstance.ReportActionProgress(AProgressPercent: integer);
+var
+  delay: Integer;
+begin
+  if AProgressPercent < 100 then delay := 10000 else delay := 1000;
+  if Assigned(FMain) then FMain.UpdatingPopup:= true;
+  try
+    MessagePopup(rsActionInProgress+'... '+inttostr(AProgressPercent)+'%', delay);
+    UpdateWindows;
+  finally
+    if Assigned(FMain) then FMain.UpdatingPopup:= false;
+  end;
+end;
+
 procedure TLazPaintInstance.Donate;
 begin
   OpenURL('http://sourceforge.net/donate/index.php?group_id=404555');
@@ -663,17 +678,8 @@ end;
 
 procedure TLazPaintInstance.OnImageActionProgress(ASender: TObject;
   AProgressPercent: integer);
-var
-  delay: Integer;
 begin
-  if AProgressPercent < 100 then delay := 10000 else delay := 1000;
-  if Assigned(FMain) then FMain.UpdatingPopup:= true;
-  try
-    MessagePopup(rsActionInProgress+'... '+inttostr(AProgressPercent)+'%', delay);
-    UpdateWindows;
-  finally
-    if Assigned(FMain) then FMain.UpdatingPopup:= false;
-  end;
+  ReportActionProgress(AProgressPercent);
 end;
 
 function TLazPaintInstance.GetInitialized: boolean;
@@ -1521,7 +1527,6 @@ end;
 
 procedure TLazPaintInstance.UpdateWindows;
 begin
-  {$IFDEF LINUX}
   if Assigned(FMain) then FMain.Enabled:= false;
   if Assigned(FFormToolbox) then FFormToolbox.Enabled:= false;
   if Assigned(FChooseColor) then FChooseColor.Enabled:= false;
@@ -1533,13 +1538,6 @@ begin
   if Assigned(FChooseColor) then FChooseColor.Enabled:= true;
   if Assigned(FLayerStack) then FLayerStack.Enabled:= true;
   if Assigned(FImageList) then FImageList.Enabled:= true;
-  {$ELSE}
-  if Assigned(FMain) then FMain.Update;
-  if Assigned(FFormToolbox) then FFormToolbox.Update;
-  if Assigned(FChooseColor) then FChooseColor.Update;
-  if Assigned(FLayerStack) then FLayerStack.Update;
-  if Assigned(FImageList) then FImageList.Update;
-  {$ENDIF}
 end;
 
 procedure TLazPaintInstance.Wait(ACheckActive: TCheckFunction; ADelayMs: integer);

+ 1 - 0
lazpaint/lazpainttype.pas

@@ -221,6 +221,7 @@ type
     procedure EndLoadingImage; virtual; abstract;
     procedure StartSavingImage(AFilename: string); virtual; abstract;
     procedure EndSavingImage; virtual; abstract;
+    procedure ReportActionProgress(AProgressPercent: integer); virtual; abstract;
     procedure SaveMainWindowPosition; virtual; abstract;
     procedure RestoreMainWindowPosition; virtual; abstract;
     procedure Donate; virtual; abstract;

+ 3 - 3
lazpaint/uimageview.pas

@@ -172,13 +172,13 @@ begin
   begin
     FVirtualScreen := TBGRABitmap.Create(FLastPictureParameters.virtualScreenArea.Right-FLastPictureParameters.virtualScreenArea.Left,
                                         FLastPictureParameters.virtualScreenArea.Bottom-FLastPictureParameters.virtualScreenArea.Top, WorkspaceColor);
-  end else
-  begin
-    if picParamWereDefined then FVirtualScreen.ClipRect := GetRenderUpdateRectVS(False);
+    Image.ResetRenderUpdateRect;
+    Image.RenderMayChange(rect(0,0,FVirtualScreen.Width,FVirtualScreen.Height), false, false);
   end;
 
   if not FUpdatingPopup then
   begin
+    if picParamWereDefined then FVirtualScreen.ClipRect := GetRenderUpdateRectVS(False);
     Image.ResetRenderUpdateRect;
 
     if not FVirtualScreen.ClipRect.IsEmpty then