Sfoglia il codice sorgente

clear layer when deleting main layer object

(when pressing Delete in edit shape tool with gradient or rotated image)
circular17 6 anni fa
parent
commit
29b02b86de

+ 11 - 0
lazpaint/image/uimage.pas

@@ -182,6 +182,7 @@ type
     procedure MergeLayerOver;
     procedure MergeLayerOver;
     procedure MoveLayer(AFromIndex,AToIndex: integer);
     procedure MoveLayer(AFromIndex,AToIndex: integer);
     procedure RemoveLayer;
     procedure RemoveLayer;
+    procedure ClearLayer;
 
 
     procedure HorizontalFlip(ALayerIndex: integer); overload;
     procedure HorizontalFlip(ALayerIndex: integer); overload;
     procedure VerticalFlip(ALayerIndex: integer); overload;
     procedure VerticalFlip(ALayerIndex: integer); overload;
@@ -1929,6 +1930,16 @@ begin
   ImageMayChangeCompletely;
   ImageMayChangeCompletely;
 end;
 end;
 
 
+procedure TLazPaintImage.ClearLayer;
+begin
+  if not CheckNoAction then exit;
+  try
+    AddUndo(FCurrentState.ClearLayer);
+  except on ex: exception do NotifyException('ClearLayer',ex);
+  end;
+  ImageMayChangeCompletely;
+end;
+
 procedure TLazPaintImage.SaveOriginalToStream(AStream: TStream);
 procedure TLazPaintImage.SaveOriginalToStream(AStream: TStream);
 begin
 begin
   FCurrentState.LayeredBitmap.SaveOriginalToStream(
   FCurrentState.LayeredBitmap.SaveOriginalToStream(

+ 14 - 1
lazpaint/image/uimagestate.pas

@@ -124,6 +124,7 @@ type
     function SwapRedBlue: TCustomImageDifference;
     function SwapRedBlue: TCustomImageDifference;
     function LinearNegative: TCustomImageDifference;
     function LinearNegative: TCustomImageDifference;
     function Negative: TCustomImageDifference;
     function Negative: TCustomImageDifference;
+    function ClearLayer: TCustomImageDifference;
     function ComputeLayerOffsetDifference(AOffsetX, AOffsetY: integer): TCustomImageDifference;
     function ComputeLayerOffsetDifference(AOffsetX, AOffsetY: integer): TCustomImageDifference;
     function ComputeSelectionTransformDifference: TCustomImageDifference;
     function ComputeSelectionTransformDifference: TCustomImageDifference;
     function ComputeLayerMatrixDifference(AIndex: integer; APrevMatrix, ANewMatrix: TAffineMatrix): TCustomImageDifference;
     function ComputeLayerMatrixDifference(AIndex: integer; APrevMatrix, ANewMatrix: TAffineMatrix): TCustomImageDifference;
@@ -172,7 +173,7 @@ type
 implementation
 implementation
 
 
 uses BGRAStreamLayers, UImageDiff, BGRALzpCommon, UFileSystem, BGRATransform,
 uses BGRAStreamLayers, UImageDiff, BGRALzpCommon, UFileSystem, BGRATransform,
-  UResourceStrings;
+  UResourceStrings, LCVectorOriginal;
 
 
 { TImageState }
 { TImageState }
 
 
@@ -1039,6 +1040,18 @@ begin
   result := AssignWithUndo(newImg, true, SelectedImageLayerIndex);
   result := AssignWithUndo(newImg, true, SelectedImageLayerIndex);
 end;
 end;
 
 
+function TImageState.ClearLayer: TCustomImageDifference;
+begin
+  if (LayeredBitmap = nil) or SelectedImageLayer.Empty then
+    result := nil
+  else
+  begin
+    result := TReplaceLayerByCustomOriginalDifference.Create(self,
+                   SelectedImageLayerIndex, true,
+                   TVectorOriginal.Create);
+  end;
+end;
+
 function TImageState.RotateCW: TCustomImageDifference;
 function TImageState.RotateCW: TCustomImageDifference;
 begin
 begin
   if LayeredBitmap = nil then
   if LayeredBitmap = nil then

+ 6 - 0
lazpaint/tools/utoolvectorial.pas

@@ -1020,6 +1020,12 @@ begin
       end;
       end;
     end else
     end else
     begin
     begin
+      if (Key = VK_DELETE) and (GetEditMode in [esmGradient,esmOtherOriginal]) then
+      begin
+        StopEdit(true, true);
+        Manager.Image.ClearLayer;
+        Key := 0;
+      end else
       if key = VK_RETURN then
       if key = VK_RETURN then
       begin
       begin
         if IsEditing then
         if IsEditing then