circular17 пре 6 година
родитељ
комит
bd1c46754d
3 измењених фајлова са 50 додато и 14 уклоњено
  1. 0 5
      lazpaint/image/uimage.pas
  2. 48 3
      lazpaint/image/uimagediff.pas
  3. 2 6
      lazpaint/image/ustatetype.pas

+ 0 - 5
lazpaint/image/uimage.pas

@@ -981,11 +981,6 @@ begin
         ImageMayChange(ADiff.ChangingBounds)
       else
         ImageMayChangeCompletely;
-  idkChangeLayer:
-      if ADiff.ChangingBoundsDefined then
-        LayerMayChange(CurrentLayerReadOnly, ADiff.ChangingBounds)
-      else
-        LayerMayChangeCompletely(CurrentLayerReadOnly);
   idkChangeSelection:
       if ADiff.ChangingBoundsDefined then
         SelectionMaskMayChange(ADiff.ChangingBounds)

+ 48 - 3
lazpaint/image/uimagediff.pas

@@ -105,8 +105,11 @@ type
   private
     previousOpacity,nextOpacity: byte;
     layerId: integer;
+    layerBounds: TRect;
   protected
     function GetImageDifferenceKind: TImageDifferenceKind; override;
+    function GetChangingBounds: TRect; override;
+    function GetChangingBoundsDefined: boolean; override;
     function GetIsIdentity: boolean; override;
   public
     constructor Create(ADestination: TState; ALayerId: integer; ANewOpacity: byte);
@@ -202,8 +205,11 @@ type
   private
     previousVisible,nextVisible: boolean;
     layerId: integer;
+    layerBounds: TRect;
   protected
     function GetImageDifferenceKind: TImageDifferenceKind; override;
+    function GetChangingBounds: TRect; override;
+    function GetChangingBoundsDefined: boolean; override;
     function GetIsIdentity: boolean; override;
   public
     constructor Create(ADestination: TState; ALayerId: integer; ANewVisible: boolean);
@@ -217,8 +223,11 @@ type
   private
     previousBlendOp,nextBlendOp: TBlendOperation;
     layerId: integer;
+    layerBounds: TRect;
   protected
     function GetImageDifferenceKind: TImageDifferenceKind; override;
+    function GetChangingBounds: TRect; override;
+    function GetChangingBoundsDefined: boolean; override;
     function GetIsIdentity: boolean; override;
   public
     constructor Create(ADestination: TState; ALayerId: integer; ANewBlendOp: TBlendOperation);
@@ -1667,7 +1676,17 @@ end;
 
 function TSetLayerBlendOpStateDifference.GetImageDifferenceKind: TImageDifferenceKind;
 begin
-  Result:= idkChangeLayer;
+  Result:= idkChangeImage;
+end;
+
+function TSetLayerBlendOpStateDifference.GetChangingBounds: TRect;
+begin
+  Result:= layerBounds;
+end;
+
+function TSetLayerBlendOpStateDifference.GetChangingBoundsDefined: boolean;
+begin
+  Result:= true;
 end;
 
 function TSetLayerBlendOpStateDifference.GetIsIdentity: boolean;
@@ -1688,6 +1707,8 @@ begin
   if idx =-1 then
     raise exception.Create('Layer not found');
   previousBlendOp:= imgDest.BlendOperation[idx];
+  layerBounds := imgDest.LayerBitmap[idx].GetImageBounds;
+  with imgDest.LayerOffset[idx] do layerBounds.Offset(x,y);
   ApplyTo(imgDest);
 end;
 
@@ -1715,7 +1736,17 @@ end;
 
 function TSetLayerVisibleStateDifference.GetImageDifferenceKind: TImageDifferenceKind;
 begin
-  Result:= idkChangeLayer;
+  Result:= idkChangeImage;
+end;
+
+function TSetLayerVisibleStateDifference.GetChangingBounds: TRect;
+begin
+  Result:= layerBounds;
+end;
+
+function TSetLayerVisibleStateDifference.GetChangingBoundsDefined: boolean;
+begin
+  Result:= true;
 end;
 
 function TSetLayerVisibleStateDifference.GetIsIdentity: boolean;
@@ -1736,6 +1767,8 @@ begin
   if idx =-1 then
     raise exception.Create('Layer not found');
   previousVisible:= imgDest.LayerVisible[idx];
+  layerBounds := imgDest.LayerBitmap[idx].GetImageBounds;
+  with imgDest.LayerOffset[idx] do layerBounds.Offset(x,y);
   ApplyTo(imgDest);
 end;
 
@@ -1763,7 +1796,17 @@ end;
 
 function TSetLayerOpacityStateDifference.GetImageDifferenceKind: TImageDifferenceKind;
 begin
-  Result:= idkChangeLayer;
+  Result:= idkChangeImage;
+end;
+
+function TSetLayerOpacityStateDifference.GetChangingBounds: TRect;
+begin
+  Result:= layerBounds;
+end;
+
+function TSetLayerOpacityStateDifference.GetChangingBoundsDefined: boolean;
+begin
+  Result:= true;
 end;
 
 function TSetLayerOpacityStateDifference.GetIsIdentity: boolean;
@@ -1784,6 +1827,8 @@ begin
   if idx =-1 then
     raise exception.Create('Layer not found');
   previousOpacity:= imgDest.LayerOpacity[idx];
+  layerBounds := imgDest.LayerBitmap[idx].GetImageBounds;
+  with imgDest.LayerOffset[idx] do layerBounds.Offset(x,y);
   ApplyTo(imgDest);
 end;
 

+ 2 - 6
lazpaint/image/ustatetype.pas

@@ -32,7 +32,7 @@ type
   end;
 
   TImageDifferenceKind = (idkChangeImageAndSelection, idkChangeStack, idkChangeSelection,
-                           idkChangeImage, idkChangeLayer);
+                           idkChangeImage);
 
   { TCustomImageDifference }
 
@@ -417,16 +417,12 @@ begin
   for i := 0 to FDiffs.Count-1 do
     case FDiffs[i].GetImageDifferenceKind of
       idkChangeImageAndSelection: result := idkChangeImageAndSelection;
-      idkChangeSelection: if result in[idkChangeImage,idkChangeLayer,idkChangeImageAndSelection] then
+      idkChangeSelection: if result in[idkChangeImage,idkChangeImageAndSelection] then
                             result := idkChangeImageAndSelection
                           else result := idkChangeSelection;
       idkChangeImage: if result in[idkChangeImageAndSelection,idkChangeSelection] then
                             result := idkChangeImageAndSelection
                           else result := idkChangeImage;
-      idkChangeLayer: if result in[idkChangeImageAndSelection,idkChangeSelection] then
-                            result := idkChangeImageAndSelection
-                      else if result = idkChangeStack then
-                        result := idkChangeLayer;
     end;
 end;