Browse Source

Added drag drop

Krzysztof Krysiński 1 year ago
parent
commit
c439fc86bd

+ 2 - 2
src/PixiEditor.AvaloniaUI/Helpers/ColorHelper.cs

@@ -31,14 +31,14 @@ public class ColorHelper
         string text = "";
         string text = "";
         if (data.Contains(DataFormats.Text))
         if (data.Contains(DataFormats.Text))
         {
         {
-            text = ((DataObject)data).GetText().Trim();
+            text = (data).GetText().Trim();
         }
         }
         else
         else
         {
         {
             var formats = data.GetDataFormats().ToList();
             var formats = data.GetDataFormats().ToList();
             if(formats.Count > 0)
             if(formats.Count > 0)
             {
             {
-                text = ((DataObject)data).Get(formats[0]).ToString().Trim();
+                text = (data).Get(formats[0]).ToString().Trim();
             }
             }
         }
         }
 
 

+ 1 - 1
src/PixiEditor.AvaloniaUI/Views/Main/ViewportControls/Viewport.axaml

@@ -51,7 +51,7 @@
                                   ui:Translator.TooltipKey="VIEWPORT_SETTINGS"
                                   ui:Translator.TooltipKey="VIEWPORT_SETTINGS"
                                   ZIndex="2" HorizontalAlignment="Right" VerticalAlignment="Top">
                                   ZIndex="2" HorizontalAlignment="Right" VerticalAlignment="Top">
             <overlays:TogglableFlyout.Child>
             <overlays:TogglableFlyout.Child>
-                <Border BorderThickness="1" CornerRadius="5" Padding="5" Background="#C8202020" ZIndex="2">
+                <Border BorderThickness="1" CornerRadius="5" Padding="5" Background="{DynamicResource ThemeBackgroundBrush}" ZIndex="2">
                     <StackPanel Orientation="Vertical">
                     <StackPanel Orientation="Vertical">
                         <StackPanel Orientation="Horizontal">
                         <StackPanel Orientation="Horizontal">
                             <TextBlock Margin="5 0" TextAlignment="Center"
                             <TextBlock Margin="5 0" TextAlignment="Center"

+ 1 - 0
src/PixiEditor.AvaloniaUI/Views/Main/ViewportControls/Viewport.axaml.cs

@@ -12,6 +12,7 @@ using PixiEditor.AvaloniaUI.Helpers.UI;
 using PixiEditor.AvaloniaUI.Models.Controllers.InputDevice;
 using PixiEditor.AvaloniaUI.Models.Controllers.InputDevice;
 using PixiEditor.AvaloniaUI.Models.DocumentModels;
 using PixiEditor.AvaloniaUI.Models.DocumentModels;
 using PixiEditor.AvaloniaUI.Models.Position;
 using PixiEditor.AvaloniaUI.Models.Position;
+using PixiEditor.AvaloniaUI.ViewModels;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.Views.Overlays;
 using PixiEditor.AvaloniaUI.Views.Overlays;
 using PixiEditor.AvaloniaUI.Views.Rendering;
 using PixiEditor.AvaloniaUI.Views.Rendering;

+ 3 - 1
src/PixiEditor.AvaloniaUI/Views/MainView.axaml

@@ -7,6 +7,7 @@
              xmlns:tools="clr-namespace:PixiEditor.AvaloniaUI.Views.Main.Tools"
              xmlns:tools="clr-namespace:PixiEditor.AvaloniaUI.Views.Main.Tools"
              xmlns:commandSearch="clr-namespace:PixiEditor.AvaloniaUI.Views.Main.CommandSearch"
              xmlns:commandSearch="clr-namespace:PixiEditor.AvaloniaUI.Views.Main.CommandSearch"
              xmlns:controls="clr-namespace:PixiDocks.Avalonia.Controls;assembly=PixiDocks.Avalonia"
              xmlns:controls="clr-namespace:PixiDocks.Avalonia.Controls;assembly=PixiDocks.Avalonia"
+             xmlns:ui="clr-namespace:PixiEditor.AvaloniaUI.Helpers.UI"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
              x:Class="PixiEditor.AvaloniaUI.Views.MainView"
              x:Class="PixiEditor.AvaloniaUI.Views.MainView"
              x:DataType="viewModels1:ViewModelMain">
              x:DataType="viewModels1:ViewModelMain">
@@ -18,7 +19,8 @@
             <InvokeCommandAction Command="{Binding StartupCommand}" />
             <InvokeCommandAction Command="{Binding StartupCommand}" />
         </EventTriggerBehavior>
         </EventTriggerBehavior>
     </Interaction.Behaviors>
     </Interaction.Behaviors>
-    <Grid>
+    <Grid DragDrop.AllowDrop="True" ui:DragDropEvents.DragEnter="MainView_DragEnter" ui:DragDropEvents.DragLeave="MainView_DragLeave"
+          ui:DragDropEvents.Drop="MainView_Drop">
         <DockPanel>
         <DockPanel>
             <main1:MainTitleBar DockPanel.Dock="Top" DataContext="{Binding MenuBarViewModel}"/>
             <main1:MainTitleBar DockPanel.Dock="Top" DataContext="{Binding MenuBarViewModel}"/>
             <Grid Focusable="True" Name="FocusableGrid">
             <Grid Focusable="True" Name="FocusableGrid">

+ 54 - 0
src/PixiEditor.AvaloniaUI/Views/MainView.axaml.cs

@@ -1,13 +1,67 @@
 using Avalonia.Controls;
 using Avalonia.Controls;
+using Avalonia.Input;
+using PixiEditor.AvaloniaUI.Helpers;
 using PixiEditor.AvaloniaUI.Helpers.Behaviours;
 using PixiEditor.AvaloniaUI.Helpers.Behaviours;
+using PixiEditor.AvaloniaUI.Helpers.Extensions;
+using PixiEditor.AvaloniaUI.Models.Controllers;
+using PixiEditor.AvaloniaUI.Models.IO;
+using PixiEditor.AvaloniaUI.ViewModels;
 
 
 namespace PixiEditor.AvaloniaUI.Views;
 namespace PixiEditor.AvaloniaUI.Views;
 
 
 public partial class MainView : UserControl
 public partial class MainView : UserControl
 {
 {
+    private ViewModelMain Context => (ViewModelMain)DataContext;
     public MainView()
     public MainView()
     {
     {
         InitializeComponent();
         InitializeComponent();
         TextBoxFocusBehavior.FallbackFocusElement = FocusableGrid;
         TextBoxFocusBehavior.FallbackFocusElement = FocusableGrid;
     }
     }
+    
+    private void MainView_Drop(object sender, DragEventArgs e)
+    {
+        Context.ActionDisplays[nameof(MainView_Drop)] = null;
+
+        var fileDropList = e.Data.GetFileDropList();
+        if (fileDropList == null || fileDropList.Length == 0)
+        {
+            if (!ColorHelper.ParseAnyFormat(e.Data, out var color))
+            {
+                return;
+            }
+
+            e.DragEffects = DragDropEffects.Copy;
+            Context.ColorsSubViewModel.PrimaryColor = color.Value;
+            return;
+        }
+        
+        if (fileDropList is { Length: > 0 } && Importer.IsSupportedFile(fileDropList[0].Path.LocalPath))
+        {
+            Context.FileSubViewModel.OpenFromPath(fileDropList[0].Path.LocalPath);
+        }
+    }
+
+    private void MainView_DragEnter(object sender, DragEventArgs e)
+    {
+        if (!ClipboardController.IsImage(e.Data))
+        {
+            if (ColorHelper.ParseAnyFormat(e.Data, out _))
+            {
+                Context.ActionDisplays[nameof(MainView_Drop)] = "PASTE_AS_PRIMARY_COLOR";
+                e.DragEffects = DragDropEffects.Copy;
+                return;
+            }
+            
+            e.DragEffects = DragDropEffects.None;
+            e.Handled = true;
+            return;
+        }
+
+        Context.ActionDisplays[nameof(MainView_Drop)] = "IMPORT_AS_NEW_FILE";
+    }
+
+    private void MainView_DragLeave(object sender, DragEventArgs e)
+    {
+        Context.ActionDisplays[nameof(MainView_Drop)] = null;
+    }
 }
 }

+ 0 - 5
src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj

@@ -10,11 +10,6 @@
       <AvaloniaResource Include="Assets\Animations\LoadingIndicator.json" />
       <AvaloniaResource Include="Assets\Animations\LoadingIndicator.json" />
       <AvaloniaResource Include="Assets\ChevronDown.png" />
       <AvaloniaResource Include="Assets\ChevronDown.png" />
       <AvaloniaResource Include="Assets\PixiEditorLogo.png" />
       <AvaloniaResource Include="Assets\PixiEditorLogo.png" />
-      <None Remove="Assets\Fonts\Oxygen-Bold.ttf" />
-      <None Remove="Assets\Fonts\Oxygen-Light.ttf" />
-      <None Remove="Assets\Fonts\Oxygen-Regular.ttf" />
-      <None Remove="Assets\Fonts\Jost-VariableFont_wght.ttf" />
-      <None Remove="Assets\Fonts\Jost-Regular.ttf" />
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>