浏览代码

duplicate vector original

Johann 6 年之前
父节点
当前提交
c21c244db0
共有 1 个文件被更改,包括 18 次插入2 次删除
  1. 18 2
      lazpaint/image/uimagediff.pas

+ 18 - 2
lazpaint/image/uimagediff.pas

@@ -452,6 +452,8 @@ type
     sourceLayerId: integer;
     duplicateId: integer;
     useOriginal: boolean;
+    duplicateOriginal: boolean;
+    duplicateGuid: TGuid;
     procedure ApplyTo(AState: TState); override;
     procedure UnapplyTo(AState: TState); override;
     constructor Create(ADestination: TState; AUseOriginal: boolean);
@@ -2219,7 +2221,8 @@ end;
 
 procedure TDuplicateLayerStateDifference.ApplyTo(AState: TState);
 var sourceLayerIndex,duplicateIndex: integer;
-  copy: integer;
+  copy, idxOrigCopy: integer;
+  stream: TMemoryStream;
 begin
   inherited ApplyTo(AState);
   with AState as TImageState do
@@ -2234,7 +2237,16 @@ begin
       LayerVisible[copy] := LayerVisible[sourceLayerIndex];
       if useOriginal then
       begin
-        LayerOriginalGuid[copy] := LayerOriginalGuid[sourceLayerIndex];
+        if duplicateOriginal then
+        begin
+          stream:= TMemoryStream.Create;
+          SaveOriginalToStream(sourceLayerIndex, stream);
+          stream.Position:= 0;
+          AddOriginalFromStream(stream, duplicateGuid, true);
+          stream.Free;
+          LayerOriginalGuid[copy] := duplicateGuid;
+        end else
+          LayerOriginalGuid[copy] := LayerOriginalGuid[sourceLayerIndex];
         LayerOriginalMatrix[copy] := LayerOriginalMatrix[sourceLayerIndex];
         LayerOriginalRenderStatus[copy] := LayerOriginalRenderStatus[sourceLayerIndex];
       end;
@@ -2255,6 +2267,7 @@ begin
     duplicateIndex := LayeredBitmap.GetLayerIndexFromId(self.duplicateId);
     LayeredBitmap.RemoveLayer(duplicateIndex);
     SelectedImageLayerIndex := sourceLayerIndex;
+    if duplicateOriginal then LayeredBitmap.RemoveUnusedOriginals;
   end;
 end;
 
@@ -2269,6 +2282,9 @@ begin
   begin
     self.sourceLayerId := LayeredBitmap.LayerUniqueId[SelectedImageLayerIndex];
     self.duplicateId := LayeredBitmap.ProduceLayerUniqueId;
+    self.duplicateOriginal := useOriginal and (LayeredBitmap.OriginalClass[SelectedImageLayerIndex]=TVectorOriginal);
+    if self.duplicateOriginal then
+      CreateGUID(duplicateGuid);
   end;
   ApplyTo(imgDest);
 end;