Browse Source

take into account layer offset for filter

Unknown 6 years ago
parent
commit
cf714511c2
2 changed files with 22 additions and 1 deletions
  1. 15 1
      lazpaint/ufilterconnector.pas
  2. 7 0
      lazpaint/ulayeraction.pas

+ 15 - 1
lazpaint/ufilterconnector.pas

@@ -24,6 +24,7 @@ type
     FWorkAreaFullySelected: boolean;
     FParameters: TVariableSet;
     function GetActionDone: boolean;
+    function GetActiveLayeOffset: TPoint;
     function GetActiveLayer: TBGRABitmap;
     function GetBackupLayer: TBGRABitmap;
     function GetCurrentSelection: TBGRABitmap;
@@ -50,6 +51,7 @@ type
     property ActionDone: boolean read GetActionDone;
     property LazPaintInstance: TLazPaintCustomInstance read FLazPaintInstance;
     property ActiveLayer: TBGRABitmap read GetActiveLayer;
+    property ActiveLayerOffset: TPoint read GetActiveLayeOffset;
     property WorkArea: TRect read FWorkArea;
     property Parameters: TVariableSet read FParameters;
   end;
@@ -76,6 +78,14 @@ begin
     result := FAction.Done;
 end;
 
+function TFilterConnector.GetActiveLayeOffset: TPoint;
+begin
+  if ApplyOnSelectionLayer then
+    result := Point(0,0)
+  else
+    result := FAction.SelectedImageLayerOffset;
+end;
+
 function TFilterConnector.GetBackupLayer: TBGRABitmap;
 begin
   if ApplyOnSelectionLayer then
@@ -189,6 +199,7 @@ end;
 procedure TFilterConnector.PutImage(AFilteredLayer: TBGRABitmap;
   AModifiedRect: TRect; AMayBeColored: boolean; AOwner: boolean);
 var AMine: boolean;
+  imgRect: TRect;
 begin
   if IntersectRect(AModifiedRect,AModifiedRect,FWorkArea) then
   begin
@@ -213,7 +224,10 @@ begin
     end;
     ActiveLayer.PutImagePart(AModifiedRect.Left,AModifiedRect.Top,AFilteredLayer,AModifiedRect,dmSet);
     if AMine then AFilteredLayer.Free;
-    FLazPaintInstance.NotifyImageChange(True, AModifiedRect);
+    imgRect := AModifiedRect;
+    with ActiveLayerOffset do
+      OffsetRect(imgRect, X,Y);
+    FLazPaintInstance.NotifyImageChange(True, imgRect);
   end;
 end;
 

+ 7 - 0
lazpaint/ulayeraction.pas

@@ -26,6 +26,7 @@ type
     function GetCurrentSelection: TBGRABitmap;
     function GetSelectedImageLayer: TBGRABitmap;
     function GetDrawingLayer: TBGRABitmap;
+    function GetSelectedImageLayerOffset: TPoint;
   protected
     procedure Cancel;
     procedure NeedSelectionBackup;
@@ -64,6 +65,7 @@ type
     function GetOrCreateSelectionLayer: TBGRABitmap;
     function GetSelectionLayerIfExists: TBGRABitmap;
     property SelectedImageLayer: TBGRABitmap read GetSelectedImageLayer;
+    property SelectedImageLayerOffset: TPoint read GetSelectedImageLayerOffset;
     property DrawingLayer: TBGRABitmap read GetDrawingLayer;
     property CurrentSelection: TBGRABitmap read GetCurrentSelection;
     property BackupSelection: TBGRABitmap read GetBackupSelection;
@@ -124,6 +126,11 @@ begin
     result := GetOrCreateSelectionLayer;
 end;
 
+function TLayerAction.GetSelectedImageLayerOffset: TPoint;
+begin
+  result := FImage.LayerOffset[FImage.currentImageLayerIndex];
+end;
+
 function TLayerAction.GetSelectionTransform: TAffineMatrix;
 begin
   result := FImage.SelectionTransform;