Browse Source

Removed windows specific formats from clipboard

flabbet 10 months ago
parent
commit
b14da1db78

+ 1 - 2
src/PixiEditor/Helpers/Constants/ClipboardDataFormats.cs

@@ -2,9 +2,8 @@
 
 public static class ClipboardDataFormats
 {
-    public const string Dib = "DeviceIndependentBitmap";
-    public const string Bitmap = "Bitmap";
     public const string Png = "PNG";
     public const string LayerIdList = "PixiEditor.LayerIdList";
     public const string PositionFormat = "PixiEditor.Position";
+    public const string ImageSlashPng = "image/png";
 }

+ 17 - 25
src/PixiEditor/Models/Controllers/ClipboardController.cs

@@ -14,6 +14,7 @@ using PixiEditor.Helpers.Extensions;
 using PixiEditor.ChangeableDocument.Enums;
 using PixiEditor.DrawingApi.Core;
 using PixiEditor.DrawingApi.Core.Numerics;
+using PixiEditor.DrawingApi.Core.Surfaces;
 using PixiEditor.DrawingApi.Core.Surfaces.ImageData;
 using PixiEditor.Extensions.Common.Localization;
 using PixiEditor.Helpers;
@@ -119,12 +120,14 @@ internal static class ClipboardController
 
     private static async Task AddImageToClipboard(Surface actuallySurface, DataObject data)
     {
-        using (ImgData pngData = actuallySurface.DrawingSurface.Snapshot().Encode())
+        using (ImgData pngData = actuallySurface.DrawingSurface.Snapshot().Encode(EncodedImageFormat.Png))
         {
             using MemoryStream pngStream = new MemoryStream();
             await pngData.AsStream().CopyToAsync(pngStream);
 
-            data.Set(ClipboardDataFormats.Png, pngStream.ToArray()); // PNG, supports transparency
+            var pngArray = pngStream.ToArray();
+            data.Set(ClipboardDataFormats.Png, pngArray);
+            data.Set(ClipboardDataFormats.ImageSlashPng, pngArray);
 
             pngStream.Position = 0;
             Directory.CreateDirectory(Path.GetDirectoryName(TempCopyFilePath)!);
@@ -132,10 +135,6 @@ internal static class ClipboardController
             await pngStream.CopyToAsync(fileStream);
             data.SetFileDropList(new[] { TempCopyFilePath });
         }
-
-        WriteableBitmap finalBitmap = actuallySurface.ToWriteableBitmap();
-        data.Set(ClipboardDataFormats.Bitmap, finalBitmap); // Bitmap, no transparency
-        data.Set(ClipboardDataFormats.Dib, finalBitmap); // DIB format, no transparency
     }
 
     /// <summary>
@@ -252,7 +251,7 @@ internal static class ClipboardController
     }
 
     /// <summary>
-    /// Gets images from clipboard, supported PNG, Dib and Bitmap.
+    /// Gets images from clipboard, supported PNG and Bitmap.
     /// </summary>
     public static List<DataImage> GetImage(IEnumerable<IDataObject?> data)
     {
@@ -261,7 +260,7 @@ internal static class ClipboardController
         if (data == null)
             return surfaces;
 
-        VecI pos = VecI.NegativeOne;
+        VecI pos = VecI.Zero;
 
         foreach (var dataObject in data)
         {
@@ -395,14 +394,19 @@ internal static class ClipboardController
             return false;
         }
 
-        return HasData(dataObject, "PNG", ClipboardDataFormats.Dib, ClipboardDataFormats.Bitmap);
+        return HasData(dataObject, ClipboardDataFormats.Png, ClipboardDataFormats.ImageSlashPng);
     }
 
-    private static bool IsImageFormat(string[] files)
+    private static bool IsImageFormat(string[] formats)
     {
-        foreach (var file in files)
+        foreach (var format in formats)
         {
-            if (Importer.IsSupportedFile(file))
+            if(format == ClipboardDataFormats.Png)
+            {
+                return true;
+            }
+            
+            if (Importer.IsSupportedFile(format))
             {
                 return true;
             }
@@ -435,22 +439,10 @@ internal static class ClipboardController
         try
         {
             Bitmap source;
-            if (data.Contains("PNG"))
+            if (data.Contains(ClipboardDataFormats.Png) || data.Contains(ClipboardDataFormats.ImageSlashPng))
             {
                 source = FromPNG(data);
             }
-            else if (HasData(data, ClipboardDataFormats.Dib, ClipboardDataFormats.Bitmap))
-            {
-                var imgs = GetImage(new[] { data });
-                if (imgs == null || imgs.Count == 0)
-                {
-                    result = null;
-                    return false;
-                }
-
-                result = imgs[0].Image;
-                return true;
-            }
             else
             {
                 result = null;

+ 5 - 0
src/PixiEditor/ViewModels/Tools/Tools/MoveToolViewModel.cs

@@ -89,6 +89,11 @@ internal class MoveToolViewModel : ToolViewModel, IMoveToolHandler
 
     protected override void OnSelectedLayersChanged(IStructureMemberHandler[] layers)
     {
+        if (ViewModelMain.Current.DocumentManagerSubViewModel.ActiveDocument.TransformViewModel.TransformActive)
+        {
+            return;
+        }
+        
         OnDeselecting();
         OnSelected();
     }