Browse Source

PixiDock babyyy

Krzysztof Krysiński 1 year ago
parent
commit
05c15971dc
57 changed files with 443 additions and 1816 deletions
  1. 2 0
      src/PixiEditor.AvaloniaUI/App.axaml
  2. 1 0
      src/PixiEditor.AvaloniaUI/Data/Localization/Languages/en.json
  3. 6 0
      src/PixiEditor.AvaloniaUI/Helpers/Converters/ImagePathToBitmapConverter.cs
  4. 1 1
      src/PixiEditor.AvaloniaUI/Helpers/ServiceCollectionHelpers.cs
  5. BIN
      src/PixiEditor.AvaloniaUI/Images/Dockables/ColorPicker.png
  6. BIN
      src/PixiEditor.AvaloniaUI/Images/Dockables/Layers.png
  7. BIN
      src/PixiEditor.AvaloniaUI/Images/Dockables/Navigator.png
  8. 4 2
      src/PixiEditor.AvaloniaUI/PixiEditor.AvaloniaUI.csproj
  9. 3 2
      src/PixiEditor.AvaloniaUI/ViewLocator.cs
  10. 14 6
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/ColorPickerDockViewModel.cs
  11. 0 42
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/DockDocumentViewModel.cs
  12. 0 217
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/DockFactory.cs
  13. 18 13
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/LayersDockViewModel.cs
  14. 154 0
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/LayoutManager.cs
  15. 17 11
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/NavigationDockViewModel.cs
  16. 8 13
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/PaletteViewerDockViewModel.cs
  17. 0 55
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/PixiEditorDocumentDock.cs
  18. 4 6
      src/PixiEditor.AvaloniaUI/ViewModels/Dock/SwatchesDockViewModel.cs
  19. 21 0
      src/PixiEditor.AvaloniaUI/ViewModels/DockableViewModel.cs
  20. 1 0
      src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/LayersViewModel.cs
  21. 0 25
      src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/LayoutDockViewModel.cs
  22. 32 0
      src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/LayoutViewModel.cs
  23. 33 3
      src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/ViewportWindowViewModel.cs
  24. 3 2
      src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/WindowViewModel.cs
  25. 7 4
      src/PixiEditor.AvaloniaUI/ViewModels/ViewModelMain.cs
  26. 3 3
      src/PixiEditor.AvaloniaUI/Views/Dialogs/ConfirmationPopup.axaml
  27. 10 5
      src/PixiEditor.AvaloniaUI/Views/Dock/DocumentTemplate.axaml
  28. 1 1
      src/PixiEditor.AvaloniaUI/Views/Dock/DocumentTemplate.axaml.cs
  29. 7 1
      src/PixiEditor.AvaloniaUI/Views/MainView.axaml
  30. 0 4
      src/PixiEditor.AvaloniaUI/Views/Visuals/Scene.cs
  31. 24 0
      src/PixiEditor.AvaloniaUI/Views/Visuals/SurfaceImage.cs
  32. 0 49
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DockControl.axaml
  33. 0 37
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DockDockControl.axaml
  34. 0 112
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DockTarget.axaml
  35. 0 20
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentContentControl.axaml
  36. 0 71
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentControl.axaml
  37. 0 22
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentDockControl.axaml
  38. 0 79
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentTabStrip.axaml
  39. 0 140
      src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentTabStripItem.axaml
  40. 0 111
      src/PixiEditor.UI.Common/Controls/Dock/Controls/HostWindow.axaml
  41. 0 59
      src/PixiEditor.UI.Common/Controls/Dock/Controls/HostWindowTitleBar.axaml
  42. 0 37
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ProportionalDockControl.axaml
  43. 0 18
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ProportionalStackPanelSplitter.axaml
  44. 0 41
      src/PixiEditor.UI.Common/Controls/Dock/Controls/RootDockControl.axaml
  45. 0 25
      src/PixiEditor.UI.Common/Controls/Dock/Controls/StretchableStackPanel.cs
  46. 0 198
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolChromeControl.axaml
  47. 0 20
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolContentControl.axaml
  48. 0 57
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolControl.axaml
  49. 0 24
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolDockControl.axaml
  50. 0 63
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolPinItemControl.axaml
  51. 0 34
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolPinnedControl.axaml
  52. 0 56
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolTabStrip.axaml
  53. 0 94
      src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolTabStripItem.axaml
  54. 0 31
      src/PixiEditor.UI.Common/Controls/Dock/PixiEditorDockTheme.axaml
  55. 25 1
      src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj
  56. 0 1
      src/PixiEditor.UI.Common/Themes/PixiEditorTheme.axaml
  57. 44 0
      src/PixiEditor.sln

+ 2 - 0
src/PixiEditor.AvaloniaUI/App.axaml

@@ -3,6 +3,7 @@
              xmlns:themes="clr-namespace:PixiEditor.UI.Common.Themes;assembly=PixiEditor.UI.Common"
              xmlns:themes="clr-namespace:PixiEditor.UI.Common.Themes;assembly=PixiEditor.UI.Common"
              xmlns:avaloniaUi="clr-namespace:PixiEditor.AvaloniaUI"
              xmlns:avaloniaUi="clr-namespace:PixiEditor.AvaloniaUI"
              xmlns:templates="clr-namespace:ColorPicker.AvaloniaUI.Templates;assembly=ColorPicker.AvaloniaUI"
              xmlns:templates="clr-namespace:ColorPicker.AvaloniaUI.Templates;assembly=ColorPicker.AvaloniaUI"
+             xmlns:avalonia="clr-namespace:PixiDocks.Avalonia;assembly=PixiDocks.Avalonia"
              x:Class="PixiEditor.AvaloniaUI.App"
              x:Class="PixiEditor.AvaloniaUI.App"
              RequestedThemeVariant="Dark">
              RequestedThemeVariant="Dark">
     <!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
     <!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
@@ -11,6 +12,7 @@
     </Application.DataTemplates>
     </Application.DataTemplates>
     <Application.Styles>
     <Application.Styles>
         <themes:PixiEditorTheme />
         <themes:PixiEditorTheme />
+        <avalonia:PixiDockSimpleTheme />
         <templates:PixiPerfectColorPickerTheme />
         <templates:PixiPerfectColorPickerTheme />
         <StyleInclude Source="/Styles/PixiEditor.Controls.axaml" />
         <StyleInclude Source="/Styles/PixiEditor.Controls.axaml" />
         <StyleInclude Source="/Styles/PixiEditor.Animators.axaml" />
         <StyleInclude Source="/Styles/PixiEditor.Animators.axaml" />

+ 1 - 0
src/PixiEditor.AvaloniaUI/Data/Localization/Languages/en.json

@@ -587,4 +587,5 @@
   "ADD_PRIMARY_COLOR_TO_PALETTE_DESCRIPTIVE": "Add primary color to current palette",
   "ADD_PRIMARY_COLOR_TO_PALETTE_DESCRIPTIVE": "Add primary color to current palette",
 
 
   "EXPORT_SAVE_TITLE": "Choose a location to save the image",
   "EXPORT_SAVE_TITLE": "Choose a location to save the image",
+  "COLOR_PICKER_DOCKABLE_TITLE": "Color Picker"
 }
 }

+ 6 - 0
src/PixiEditor.AvaloniaUI/Helpers/Converters/ImagePathToBitmapConverter.cs

@@ -32,4 +32,10 @@ internal class ImagePathToBitmapConverter : SingleInstanceConverter<ImagePathToB
 
 
         return new Bitmap(AssetLoader.Open(uri));
         return new Bitmap(AssetLoader.Open(uri));
     }
     }
+
+    public static Bitmap? TryLoadBitmapFromRelativePath(string path)
+    {
+        Uri uri = new($"avares://{Assembly.GetExecutingAssembly().FullName}{path}");
+        return !AssetLoader.Exists(uri) ? null : new Bitmap(AssetLoader.Open(uri));
+    }
 }
 }

+ 1 - 1
src/PixiEditor.AvaloniaUI/Helpers/ServiceCollectionHelpers.cs

@@ -61,7 +61,7 @@ internal static class ServiceCollectionHelpers
             .AddSingleton<SearchViewModel>()
             .AddSingleton<SearchViewModel>()
             .AddSingleton<ISearchHandler, SearchViewModel>(x => x.GetRequiredService<SearchViewModel>())
             .AddSingleton<ISearchHandler, SearchViewModel>(x => x.GetRequiredService<SearchViewModel>())
             .AddSingleton<AdditionalContentViewModel>()
             .AddSingleton<AdditionalContentViewModel>()
-            .AddSingleton<LayoutDockViewModel>()
+            .AddSingleton<LayoutViewModel>()
             .AddSingleton(x => new ExtensionsViewModel(x.GetService<ViewModelMain>(), extensionLoader))
             .AddSingleton(x => new ExtensionsViewModel(x.GetService<ViewModelMain>(), extensionLoader))
             // Controllers
             // Controllers
             .AddSingleton<ShortcutController>()
             .AddSingleton<ShortcutController>()

BIN
src/PixiEditor.AvaloniaUI/Images/Dockables/ColorPicker.png


BIN
src/PixiEditor.AvaloniaUI/Images/Dockables/Layers.png


BIN
src/PixiEditor.AvaloniaUI/Images/Dockables/Navigator.png


+ 4 - 2
src/PixiEditor.AvaloniaUI/PixiEditor.AvaloniaUI.csproj

@@ -34,8 +34,6 @@
         <PackageReference Include="CLSEncoderDecoder" Version="1.0.0" />
         <PackageReference Include="CLSEncoderDecoder" Version="1.0.0" />
         <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
         <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
         <PackageReference Include="DiscordRichPresence" Version="1.2.1.24" />
         <PackageReference Include="DiscordRichPresence" Version="1.2.1.24" />
-        <PackageReference Include="Dock.Avalonia" Version="11.0.0.5" />
-        <PackageReference Include="Dock.Model.Avalonia" Version="11.0.0.5" />
         <PackageReference Include="Hardware.Info" Version="11.0.0" />
         <PackageReference Include="Hardware.Info" Version="11.0.0" />
         <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
         <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
         <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
         <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
@@ -47,6 +45,7 @@
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>
+      <ProjectReference Include="..\..\..\PixiDocks\src\PixiDocks.Avalonia\PixiDocks.Avalonia.csproj" />
       <ProjectReference Include="..\ChunkyImageLib\ChunkyImageLib.csproj" />
       <ProjectReference Include="..\ChunkyImageLib\ChunkyImageLib.csproj" />
       <ProjectReference Include="..\PixiEditor.ChangeableDocument.Gen\PixiEditor.ChangeableDocument.Gen.csproj" />
       <ProjectReference Include="..\PixiEditor.ChangeableDocument.Gen\PixiEditor.ChangeableDocument.Gen.csproj" />
       <ProjectReference Include="..\PixiEditor.ChangeableDocument\PixiEditor.ChangeableDocument.csproj" />
       <ProjectReference Include="..\PixiEditor.ChangeableDocument\PixiEditor.ChangeableDocument.csproj" />
@@ -99,6 +98,9 @@
       <Reference Include="Microsoft.Xaml.Behaviors">
       <Reference Include="Microsoft.Xaml.Behaviors">
         <HintPath>..\..\..\..\Users\flubb\.nuget\packages\microsoft.xaml.behaviors.wpf\1.1.31\lib\net5.0-windows7.0\Microsoft.Xaml.Behaviors.dll</HintPath>
         <HintPath>..\..\..\..\Users\flubb\.nuget\packages\microsoft.xaml.behaviors.wpf\1.1.31\lib\net5.0-windows7.0\Microsoft.Xaml.Behaviors.dll</HintPath>
       </Reference>
       </Reference>
+      <Reference Include="PixiDocks.Core">
+        <HintPath>..\..\..\PixiDocks\src\PixiDocks.Core\bin\Debug\net8.0\PixiDocks.Core.dll</HintPath>
+      </Reference>
     </ItemGroup>
     </ItemGroup>
 
 
   <ItemGroup>
   <ItemGroup>

+ 3 - 2
src/PixiEditor.AvaloniaUI/ViewLocator.cs

@@ -2,8 +2,9 @@ using System.Collections.Generic;
 using Avalonia.Controls;
 using Avalonia.Controls;
 using Avalonia.Controls.Templates;
 using Avalonia.Controls.Templates;
 using CommunityToolkit.Mvvm.ComponentModel;
 using CommunityToolkit.Mvvm.ComponentModel;
-using Dock.Model.Core;
+using PixiDocks.Core.Docking;
 using PixiEditor.AvaloniaUI.ViewModels.Dock;
 using PixiEditor.AvaloniaUI.ViewModels.Dock;
+using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 using PixiEditor.AvaloniaUI.Views.Dock;
 using PixiEditor.AvaloniaUI.Views.Dock;
 using PixiEditor.AvaloniaUI.Views.Layers;
 using PixiEditor.AvaloniaUI.Views.Layers;
 
 
@@ -13,7 +14,7 @@ public class ViewLocator : IDataTemplate
 {
 {
     public static Dictionary<Type, Type> ViewBindingsMap = new Dictionary<Type, Type>()
     public static Dictionary<Type, Type> ViewBindingsMap = new Dictionary<Type, Type>()
     {
     {
-        [typeof(DockDocumentViewModel)] = typeof(DocumentTemplate),
+        [typeof(ViewportWindowViewModel)] = typeof(DocumentTemplate),
         [typeof(LayersDockViewModel)] = typeof(LayersManager),
         [typeof(LayersDockViewModel)] = typeof(LayersManager),
     };
     };
 
 

+ 14 - 6
src/PixiEditor.AvaloniaUI/ViewModels/Dock/ColorPickerDockViewModel.cs

@@ -1,18 +1,26 @@
 using Avalonia;
 using Avalonia;
-using Dock.Model.Avalonia.Controls;
+using Avalonia.Media;
+using PixiEditor.AvaloniaUI.Helpers.Converters;
 using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
+using PixiEditor.Extensions.Common.Localization;
 
 
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 
 
-internal class ColorPickerDockViewModel : Tool
+internal class ColorPickerDockViewModel : DockableViewModel
 {
 {
-    public static readonly StyledProperty<ColorsViewModel> ColorsViewModelProperty = AvaloniaProperty.Register<ColorPickerDockViewModel, ColorsViewModel>(
-        nameof(ColorsSubViewModel));
+    public const string TabId = "ColorPicker";
+    public override string Id => TabId;
+    public override string Title => new LocalizedString("COLOR_PICKER_DOCKABLE_TITLE");
+    public override bool CanFloat => true;
+    public override bool CanClose => true;
+    public override IImage? Icon { get; } = ImagePathToBitmapConverter.TryLoadBitmapFromRelativePath("/Images/Dockables/ColorPicker.png");
+
+    private ColorsViewModel colorsSubViewModel;
 
 
     public ColorsViewModel ColorsSubViewModel
     public ColorsViewModel ColorsSubViewModel
     {
     {
-        get => GetValue(ColorsViewModelProperty);
-        set => SetValue(ColorsViewModelProperty, value);
+        get => colorsSubViewModel;
+        set => SetProperty(ref colorsSubViewModel, value);
     }
     }
 
 
     public ColorPickerDockViewModel(ColorsViewModel colorsSubVm)
     public ColorPickerDockViewModel(ColorsViewModel colorsSubVm)

+ 0 - 42
src/PixiEditor.AvaloniaUI/ViewModels/Dock/DockDocumentViewModel.cs

@@ -1,42 +0,0 @@
-using System.Threading.Tasks;
-using Avalonia;
-using Avalonia.Threading;
-using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
-
-namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
-
-internal class DockDocumentViewModel : global::Dock.Model.Avalonia.Controls.Document
-{
-    public static readonly StyledProperty<ViewportWindowViewModel> ViewModelProperty =
-        AvaloniaProperty.Register<DockDocumentViewModel, ViewportWindowViewModel>(nameof(ViewModel));
-
-    public ViewportWindowViewModel ViewModel
-    {
-        get { return (ViewportWindowViewModel)GetValue(ViewModelProperty); }
-        set { SetValue(ViewModelProperty, value); }
-    }
-
-    private bool _closeRequested;
-    public DockDocumentViewModel(ViewportWindowViewModel viewportViewModel)
-    {
-        ViewModel = viewportViewModel;
-    }
-
-
-    public override bool OnClose()
-    {
-        if (!_closeRequested)
-        {
-            Task.Run(async () =>
-            {
-                await Dispatcher.UIThread.InvokeAsync(async () =>
-                {
-                    _closeRequested =
-                        await ViewModel.Owner.Owner.DisposeDocumentWithSaveConfirmation(ViewModel.Document);
-                });
-            });
-        }
-
-        return _closeRequested;
-    }
-}

+ 0 - 217
src/PixiEditor.AvaloniaUI/ViewModels/Dock/DockFactory.cs

@@ -1,217 +0,0 @@
-using System.Collections.Generic;
-using Dock.Avalonia.Controls;
-using Dock.Model.Avalonia;
-using Dock.Model.Avalonia.Controls;
-using Dock.Model.Controls;
-using Dock.Model.Core;
-using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
-
-namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
-
-internal class DockFactory : Factory
-{
-    private DockDock mainLayout;
-    private DocumentDock documentDock;
-    private ToolDock toolDock;
-    private ToolDock layersDock;
-    private ToolDock colorPickerDock;
-    private ToolDock navigationDock;
-
-    private FileViewModel fileVm;
-    private ColorsViewModel colorsVm;
-
-    public DockFactory(FileViewModel fileViewModel, ColorsViewModel colorsViewModel)
-    {
-        fileVm = fileViewModel;
-        colorsVm = colorsViewModel;
-    }
-
-    public override IDocumentDock CreateDocumentDock() => new PixiEditorDocumentDock(fileVm);
-
-    public override IRootDock CreateLayout()
-    {
-        mainLayout = BuildMainLayout();
-        RootDock root = new()
-        {
-            Id = "Root",
-            IsCollapsable = false,
-            VisibleDockables = new List<IDockable>()
-            {
-                mainLayout,
-            },
-            ActiveDockable = mainLayout
-        };
-        return root;
-    }
-
-    private DockDock BuildMainLayout()
-    {
-        var dockables = BuildDockables();
-        DockDock dock = new DockDock()
-        {
-            Name = "MainLayout",
-            Id = "MainLayout",
-            VisibleDockables = dockables,
-            ActiveDockable = dockables[0],
-        };
-
-        return dock;
-    }
-
-    private IList<IDockable>? BuildDockables()
-    {
-        List<IDockable> dockables = new List<IDockable>();
-
-        IDockable documentDock = BuildDocumentDock();
-
-        ProportionalDock topPane = new ProportionalDock()
-        {
-            Id = "TopPane",
-            Orientation = Orientation.Vertical,
-            VisibleDockables = new List<IDockable>()
-            {
-                new ProportionalDock()
-                {
-                    Id = "RightPane",
-                    Orientation = Orientation.Horizontal,
-                    VisibleDockables = new List<IDockable>()
-                    {
-                        documentDock,
-                        BuildPropertiesDock()
-                    },
-                    ActiveDockable = documentDock
-                },
-            },
-        };
-
-        dockables.Add(topPane);
-
-        return dockables;
-    }
-
-    private IDockable BuildDocumentDock()
-    {
-        documentDock = new PixiEditorDocumentDock(fileVm)
-        {
-            Id = "DocumentsPane",
-            Title = "DocumentsPane",
-            CanCreateDocument = true
-        };
-
-        return documentDock;
-    }
-
-    private IDockable BuildPropertiesDock()
-    {
-        layersDock = BuildLayersDock();
-        colorPickerDock = BuildColorPickerDock();
-        navigationDock = BuildNavigationDock();
-        return new ProportionalDock()
-        {
-            Proportion = 0.20,
-            Orientation = Orientation.Vertical,
-            VisibleDockables = new List<IDockable>()
-            {
-                colorPickerDock,
-                layersDock,
-                navigationDock,
-            },
-            ActiveDockable = layersDock,
-        };
-    }
-
-    private ToolDock BuildNavigationDock()
-    {
-        NavigationDockViewModel navigationVm = new(colorsVm, fileVm.Owner.DocumentManagerSubViewModel)
-        {
-            Id = "NavigationPane",
-            Title = "NavigationPane",
-        };
-
-        ToolDock navigation = new()
-        {
-            Id = "NavigationPane",
-            Title = "NavigationPane",
-            VisibleDockables = new List<IDockable>() { navigationVm },
-            ActiveDockable = navigationVm,
-        };
-
-        return navigation;
-    }
-
-    private ToolDock BuildColorPickerDock()
-    {
-        ColorPickerDockViewModel colorPickerVm = new(colorsVm)
-        {
-            Id = "ColorPickerPane",
-            Title = "ColorPickerPane",
-        };
-
-        PaletteViewerDockViewModel paletteViewerVm = new(colorsVm, fileVm.Owner.DocumentManagerSubViewModel)
-        {
-            Id = "PaletteViewerPane",
-            Title = "PaletteViewerPane",
-        };
-
-        SwatchesDockViewModel swatchesVm = new(fileVm.Owner.DocumentManagerSubViewModel)
-        {
-            Id = "SwatchesPane",
-            Title = "SwatchesPane",
-        };
-
-        ToolDock colorPicker = new()
-        {
-            Id = "ColorPickerPane",
-            Title = "ColorPickerPane",
-            VisibleDockables = new List<IDockable>() { colorPickerVm, paletteViewerVm, swatchesVm },
-            ActiveDockable = colorPickerVm,
-        };
-
-        return colorPicker;
-    }
-
-    private ToolDock BuildLayersDock()
-    {
-        LayersDockViewModel layersVm = new(fileVm.Owner.DocumentManagerSubViewModel)
-        {
-            Id = "LayersPane",
-            Title = "LayersPane",
-        };
-
-        ToolDock layers = new()
-        {
-            Id = "LayersPane",
-            Title = "LayersPane",
-            VisibleDockables = new List<IDockable>() { layersVm },
-            ActiveDockable = layersVm,
-        };
-
-        return layers;
-    }
-
-    public override void InitLayout(IDockable layout)
-    {
-        DockableLocator = new Dictionary<string, Func<IDockable?>>()
-        {
-            { "MainLayout", () => mainLayout },
-            { "DocumentsPane", () => documentDock },
-            { "ToolsPane", () => toolDock },
-            { "LayersPane", () => layersDock },
-        };
-
-        ContextLocator = new Dictionary<string, Func<object?>>()
-        {
-            { "MainLayout", () => layout },
-            { "ToolsPane", () => layout },
-            { "DocumentsPane", () => layout },
-            { "LayersPane", () => layout },
-        };
-
-        HostWindowLocator = new Dictionary<string, Func<IHostWindow?>>()
-        {
-            [nameof(IDockWindow)] = () => new HostWindow()
-        };
-
-        base.InitLayout(layout);
-    }
-}

+ 18 - 13
src/PixiEditor.AvaloniaUI/ViewModels/Dock/LayersDockViewModel.cs

@@ -1,29 +1,34 @@
-using Avalonia;
-using Dock.Model.Avalonia.Controls;
+using Avalonia.Media;
+using PixiDocks.Core.Docking;
+using PixiEditor.AvaloniaUI.Helpers.Converters;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 
 
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 
 
-internal class LayersDockViewModel : Tool
+internal class LayersDockViewModel : DockableViewModel
 {
 {
-    public static readonly StyledProperty<DocumentManagerViewModel> DocumentManagerProperty = AvaloniaProperty.Register<LayersDockViewModel, DocumentManagerViewModel>(
-        nameof(DocumentManager));
+    public const string TabId = "Layers";
+    public override string Id => TabId;
+    public override string Title => "Layers";
+    public override bool CanFloat => true;
+    public override bool CanClose => true;
+    public override IImage? Icon { get; } = ImagePathToBitmapConverter.TryLoadBitmapFromRelativePath("/Images/Dockables/Layers.png");
+
+    private DocumentManagerViewModel documentManager;
+    private DocumentViewModel activeDocument;
 
 
     public DocumentManagerViewModel DocumentManager
     public DocumentManagerViewModel DocumentManager
     {
     {
-        get => GetValue(DocumentManagerProperty);
-        set => SetValue(DocumentManagerProperty, value);
+        get => documentManager;
+        set => SetProperty(ref documentManager, value);
     }
     }
 
 
-    public static readonly StyledProperty<DocumentViewModel> ActiveDocumentProperty = AvaloniaProperty.Register<LayersDockViewModel, DocumentViewModel>(
-        nameof(ActiveDocument));
-
     public DocumentViewModel ActiveDocument
     public DocumentViewModel ActiveDocument
     {
     {
-        get => GetValue(ActiveDocumentProperty);
-        set => SetValue(ActiveDocumentProperty, value);
+        get => activeDocument;
+        set => SetProperty(ref activeDocument, value);
     }
     }
-    
+
     public LayersDockViewModel(DocumentManagerViewModel documentManager)
     public LayersDockViewModel(DocumentManagerViewModel documentManager)
     {
     {
         DocumentManager = documentManager;
         DocumentManager = documentManager;

+ 154 - 0
src/PixiEditor.AvaloniaUI/ViewModels/Dock/LayoutManager.cs

@@ -0,0 +1,154 @@
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using PixiDocks.Avalonia;
+using PixiDocks.Avalonia.Controls;
+using PixiDocks.Core.Docking;
+using PixiDocks.Core.Serialization;
+using PixiEditor.AvaloniaUI.ViewModels.Document;
+using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
+
+namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
+
+internal class LayoutManager
+{
+    public LayoutTree DefaultLayout { get; set; }
+
+    public LayoutTree ActiveLayout { get; set; }
+
+    public DockContext DockContext { get; set; } = new DockContext();
+
+    public IReadOnlyCollection<IDockableContent> RegisteredDockables => registeredDockables;
+
+    private readonly List<IDockableContent> registeredDockables = new();
+
+    public LayoutManager()
+    {
+
+    }
+
+    public void InitLayout(ViewModelMain mainViewModel)
+    {
+        LayersDockViewModel layersDockViewModel = new(mainViewModel.DocumentManagerSubViewModel);
+        ColorPickerDockViewModel colorPickerDockViewModel = new(mainViewModel.ColorsSubViewModel);
+        NavigationDockViewModel navigationDockViewModel = new(mainViewModel.ColorsSubViewModel, mainViewModel.DocumentManagerSubViewModel);
+        RegisterDockable(layersDockViewModel);
+        RegisterDockable(colorPickerDockViewModel);
+        RegisterDockable(navigationDockViewModel);
+
+        DefaultLayout = new LayoutTree
+        {
+            Root = new DockableTree
+            {
+                First = new DockableArea()
+                {
+                    Id = "DocumentArea"
+                },
+                FirstSize = 0.75,
+                SplitDirection = DockingDirection.Right,
+                Second = new DockableTree
+                {
+                    Id = "PropertiesArea",
+                    First = new DockableTree
+                    {
+                        First = new DockableArea
+                        {
+                            Id = "ColorsArea",
+                            ActiveDockable = DockContext.CreateDockable(colorPickerDockViewModel),
+                        },
+                        FirstSize = 0.5,
+                        SplitDirection = DockingDirection.Bottom,
+                        Second = new DockableArea
+                        {
+                            Id = "LayersArea",
+                            ActiveDockable = DockContext.CreateDockable(layersDockViewModel)
+                        },
+                    },
+                    FirstSize = 0.66,
+                    SplitDirection = DockingDirection.Bottom,
+                    Second = new DockableArea
+                    {
+                        Id = "NavigatorArea",
+                        ActiveDockable = DockContext.CreateDockable(navigationDockViewModel)
+                    }
+                }
+            }
+        };
+
+        ActiveLayout = DefaultLayout;
+        ActiveLayout.SetContext(DockContext);
+    }
+
+    private IDockable? TryCreateDockable(string name)
+    {
+        var foundDockable = RegisteredDockables.FirstOrDefault(x => x.Id == name);
+        if (foundDockable != null)
+        {
+            return DockContext.CreateDockable(foundDockable);
+        }
+
+        return null;
+    }
+
+    public void RegisterDockable(IDockableContent dockable)
+    {
+        if (registeredDockables.Contains(dockable))
+        {
+            return;
+        }
+
+        registeredDockables.Add(dockable);
+    }
+
+    public void UnregisterDockable(IDockableContent dockable)
+    {
+        registeredDockables.Remove(dockable);
+    }
+
+    public void AddViewport(ViewportWindowViewModel viewportWindowViewModel)
+    {
+        RegisterDockable(viewportWindowViewModel);
+        DockableArea? documentsArea = TryFindArea("DocumentArea");
+        IDockable dockable = DockContext.CreateDockable(viewportWindowViewModel);
+        if (documentsArea != null)
+        {
+            documentsArea.AddDockable(dockable);
+            documentsArea.ActiveDockable = dockable;
+        }
+        else
+        {
+            DockContext.Float(dockable, 0, 0);
+        }
+    }
+
+    private DockableArea? TryFindArea(string name)
+    {
+        DockableArea? result = null;
+        foreach(var element in ActiveLayout.Root)
+        {
+            if (element is DockableArea area && area.Id == name)
+            {
+                result = area;
+            }
+        };
+
+        return result;
+    }
+
+    public void RemoveViewport(ViewportWindowViewModel viewportWindowViewModel)
+    {
+        foreach (var element in ActiveLayout.Root)
+        {
+            if (element is IDockableHost dockableHost)
+            {
+                var dockable = dockableHost.Dockables.FirstOrDefault(x => x.Id == viewportWindowViewModel.Id);
+                if (dockable != null)
+                {
+                    dockableHost?.RemoveDockable(dockable);
+                    UnregisterDockable(viewportWindowViewModel);
+                    return;
+                }
+            }
+        }
+    }
+}

+ 17 - 11
src/PixiEditor.AvaloniaUI/ViewModels/Dock/NavigationDockViewModel.cs

@@ -1,28 +1,34 @@
-using Avalonia;
-using Dock.Model.Avalonia.Controls;
+using Avalonia.Media;
+using PixiEditor.AvaloniaUI.Helpers.Converters;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 
 
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 
 
-internal class NavigationDockViewModel : Tool
+internal class NavigationDockViewModel : DockableViewModel
 {
 {
-    public static readonly StyledProperty<ColorsViewModel> ColorsViewModelProperty = AvaloniaProperty.Register<ColorPickerDockViewModel, ColorsViewModel>(
-        nameof(ColorsSubViewModel));
+    public const string TabId = "Navigator";
+
+    public override string Id => TabId;
+    public override string Title => "Navigator";
+    public override bool CanFloat => true;
+    public override bool CanClose => true;
+    public override IImage? Icon { get; } = ImagePathToBitmapConverter.TryLoadBitmapFromRelativePath("/Images/Dockables/Navigator.png");
+
+    private ColorsViewModel colorsSubViewModel;
 
 
     public ColorsViewModel ColorsSubViewModel
     public ColorsViewModel ColorsSubViewModel
     {
     {
-        get => GetValue(ColorsViewModelProperty);
-        set => SetValue(ColorsViewModelProperty, value);
+        get => colorsSubViewModel;
+        set => SetProperty(ref colorsSubViewModel, value);
     }
     }
 
 
-    public static readonly StyledProperty<DocumentManagerViewModel> DocumentManagerSubViewModelProperty = AvaloniaProperty.Register<PaletteViewerDockViewModel, DocumentManagerViewModel>(
-        "DocumentManagerSubViewModel");
+    private DocumentManagerViewModel documentManagerSubViewModel;
 
 
     public DocumentManagerViewModel DocumentManagerSubViewModel
     public DocumentManagerViewModel DocumentManagerSubViewModel
     {
     {
-        get => GetValue(DocumentManagerSubViewModelProperty);
-        set => SetValue(DocumentManagerSubViewModelProperty, value);
+        get => documentManagerSubViewModel;
+        set => SetProperty(ref documentManagerSubViewModel, value);
     }
     }
 
 
     public NavigationDockViewModel(ColorsViewModel colorsSubViewModel, DocumentManagerViewModel documentManagerViewModel)
     public NavigationDockViewModel(ColorsViewModel colorsSubViewModel, DocumentManagerViewModel documentManagerViewModel)

+ 8 - 13
src/PixiEditor.AvaloniaUI/ViewModels/Dock/PaletteViewerDockViewModel.cs

@@ -1,28 +1,23 @@
-using Avalonia;
-using Dock.Model.Avalonia.Controls;
-using PixiEditor.AvaloniaUI.ViewModels.Document;
+using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 
 
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 
 
-internal class PaletteViewerDockViewModel : Tool
+internal class PaletteViewerDockViewModel : ViewModelBase
 {
 {
-    public static readonly StyledProperty<ColorsViewModel> ColorsViewModelProperty = AvaloniaProperty.Register<ColorPickerDockViewModel, ColorsViewModel>(
-        nameof(ColorsSubViewModel));
+    private ColorsViewModel colorsSubViewModel;
+    private DocumentManagerViewModel documentManagerSubViewModel;
 
 
     public ColorsViewModel ColorsSubViewModel
     public ColorsViewModel ColorsSubViewModel
     {
     {
-        get => GetValue(ColorsViewModelProperty);
-        set => SetValue(ColorsViewModelProperty, value);
+        get => colorsSubViewModel;
+        set => SetProperty(ref colorsSubViewModel, value);
     }
     }
 
 
-    public static readonly StyledProperty<DocumentManagerViewModel> DocumentManagerSubViewModelProperty = AvaloniaProperty.Register<PaletteViewerDockViewModel, DocumentManagerViewModel>(
-        "DocumentManagerSubViewModel");
-
     public DocumentManagerViewModel DocumentManagerSubViewModel
     public DocumentManagerViewModel DocumentManagerSubViewModel
     {
     {
-        get => GetValue(DocumentManagerSubViewModelProperty);
-        set => SetValue(DocumentManagerSubViewModelProperty, value);
+        get => documentManagerSubViewModel;
+        set => SetProperty(ref documentManagerSubViewModel, value);
     }
     }
 
 
     public PaletteViewerDockViewModel(ColorsViewModel colorsSubViewModel, DocumentManagerViewModel documentManagerViewModel)
     public PaletteViewerDockViewModel(ColorsViewModel colorsSubViewModel, DocumentManagerViewModel documentManagerViewModel)

+ 0 - 55
src/PixiEditor.AvaloniaUI/ViewModels/Dock/PixiEditorDocumentDock.cs

@@ -1,55 +0,0 @@
-using System.Linq;
-using System.Threading.Tasks;
-using CommunityToolkit.Mvvm.Input;
-using Dock.Model.Avalonia.Controls;
-using PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
-
-namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
-
-internal class PixiEditorDocumentDock : DocumentDock
-{
-    private FileViewModel manager;
-    public PixiEditorDocumentDock(FileViewModel manager)
-    {
-        this.manager = manager;
-        manager.Owner.WindowSubViewModel.ViewportAdded += AddNewViewport;
-        manager.Owner.WindowSubViewModel.ViewportClosed += RemoveViewport;
-        CreateDocument = new AsyncRelayCommand(CreateDockDocument);
-    }
-
-    private void AddNewViewport(ViewportWindowViewModel e)
-    {
-        var document = new DockDocumentViewModel(e) { Title = e.Document.FileName };
-
-        Factory?.AddDockable(this, document);
-        Factory?.SetActiveDockable(document);
-        Factory?.SetFocusedDockable(this, document);
-    }
-
-    private void RemoveViewport(ViewportWindowViewModel e)
-    {
-        var document = VisibleDockables?.OfType<DockDocumentViewModel>().FirstOrDefault(x => x.ViewModel == e);
-        if (document != null)
-        {
-            Factory?.RemoveDockable(document, true);
-        }
-    }
-
-    private async Task CreateDockDocument()
-    {
-        if (!CanCreateDocument)
-        {
-            return;
-        }
-
-        await manager.CreateFromNewFileDialog();
-    }
-
-    public override bool OnClose()
-    {
-        manager.Owner.WindowSubViewModel.ViewportAdded -= AddNewViewport;
-        manager.Owner.WindowSubViewModel.ViewportClosed -= RemoveViewport;
-
-        return base.OnClose();
-    }
-}

+ 4 - 6
src/PixiEditor.AvaloniaUI/ViewModels/Dock/SwatchesDockViewModel.cs

@@ -1,18 +1,16 @@
 using Avalonia;
 using Avalonia;
-using Dock.Model.Avalonia.Controls;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 
 
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 namespace PixiEditor.AvaloniaUI.ViewModels.Dock;
 
 
-internal class SwatchesDockViewModel : Tool
+internal class SwatchesDockViewModel : ViewModelBase
 {
 {
-    public static readonly StyledProperty<DocumentManagerViewModel> DocumentManagerSubViewModelProperty = AvaloniaProperty.Register<PaletteViewerDockViewModel, DocumentManagerViewModel>(
-        "DocumentManagerSubViewModel");
+    private DocumentManagerViewModel documentManagerSubViewModel;
 
 
     public DocumentManagerViewModel DocumentManagerSubViewModel
     public DocumentManagerViewModel DocumentManagerSubViewModel
     {
     {
-        get => GetValue(DocumentManagerSubViewModelProperty);
-        set => SetValue(DocumentManagerSubViewModelProperty, value);
+        get => documentManagerSubViewModel;
+        set => SetProperty(ref documentManagerSubViewModel, value);
     }
     }
 
 
     public SwatchesDockViewModel(DocumentManagerViewModel documentManagerViewModel)
     public SwatchesDockViewModel(DocumentManagerViewModel documentManagerViewModel)

+ 21 - 0
src/PixiEditor.AvaloniaUI/ViewModels/DockableViewModel.cs

@@ -0,0 +1,21 @@
+using Avalonia.Media;
+using PixiDocks.Core.Docking;
+using PixiDocks.Core.Docking.Events;
+using PixiEditor.AvaloniaUI.ViewModels.Dock;
+
+namespace PixiEditor.AvaloniaUI.ViewModels;
+
+internal abstract class DockableViewModel : ViewModelBase, IDockableContent
+{
+    public abstract string Id { get; }
+    public abstract string Title { get; }
+    public abstract bool CanFloat { get; }
+    public abstract bool CanClose { get; }
+    public abstract IImage? Icon { get; }
+
+    object? IDockableContent.Icon => Icon;
+
+    public DockableViewModel()
+    {
+    }
+}

+ 1 - 0
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/LayersViewModel.cs

@@ -16,6 +16,7 @@ using PixiEditor.AvaloniaUI.Models.Commands.Attributes.Evaluators;
 using PixiEditor.AvaloniaUI.Models.Dialogs;
 using PixiEditor.AvaloniaUI.Models.Dialogs;
 using PixiEditor.AvaloniaUI.Models.IO;
 using PixiEditor.AvaloniaUI.Models.IO;
 using PixiEditor.AvaloniaUI.Models.Layers;
 using PixiEditor.AvaloniaUI.Models.Layers;
+using PixiEditor.AvaloniaUI.ViewModels.Dock;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.ChangeableDocument.Enums;
 using PixiEditor.ChangeableDocument.Enums;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.DrawingApi.Core.Numerics;

+ 0 - 25
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/LayoutDockViewModel.cs

@@ -1,25 +0,0 @@
-using Dock.Model.Controls;
-using PixiEditor.AvaloniaUI.ViewModels.Dock;
-
-namespace PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
-
-internal class LayoutDockViewModel : SubViewModel<ViewModelMain>
-{
-    private IRootDock layout;
-
-    public IRootDock Layout
-    {
-        get => layout;
-        set => SetProperty(ref layout, value);
-    }
-
-    public LayoutDockViewModel(ViewModelMain owner) : base(owner)
-    {
-        DockFactory factory = new(owner.FileSubViewModel, owner.ColorsSubViewModel);
-        Layout = factory.CreateLayout();
-        if (Layout is { })
-        {
-            factory.InitLayout(Layout);
-        }
-    }
-}

+ 32 - 0
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/LayoutViewModel.cs

@@ -0,0 +1,32 @@
+using System.Collections.ObjectModel;
+using PixiDocks.Core.Docking;
+using PixiEditor.AvaloniaUI.ViewModels.Dock;
+
+namespace PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
+
+internal class LayoutViewModel : SubViewModel<ViewModelMain>
+{
+    private LayoutManager layoutManagerManager;
+    public LayoutManager LayoutManager
+    {
+        get => layoutManagerManager;
+        private init => SetProperty(ref layoutManagerManager, value);
+    }
+
+    public LayoutViewModel(ViewModelMain owner) : base(owner)
+    {
+        LayoutManager = new();
+        owner.WindowSubViewModel.ViewportAdded += WindowSubViewModel_ViewportAdded;
+        owner.WindowSubViewModel.ViewportClosed += WindowSubViewModel_ViewportRemoved;
+    }
+
+    private void WindowSubViewModel_ViewportAdded(ViewportWindowViewModel obj)
+    {
+        LayoutManager.AddViewport(obj);
+    }
+
+    private void WindowSubViewModel_ViewportRemoved(ViewportWindowViewModel obj)
+    {
+        LayoutManager.RemoveViewport(obj);
+    }
+}

+ 33 - 3
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/ViewportWindowViewModel.cs

@@ -1,11 +1,16 @@
-using CommunityToolkit.Mvvm.Input;
+using System.Threading.Tasks;
+using Avalonia.Threading;
+using CommunityToolkit.Mvvm.Input;
+using PixiDocks.Core.Docking;
+using PixiDocks.Core.Docking.Events;
 using PixiEditor.AvaloniaUI.Helpers.UI;
 using PixiEditor.AvaloniaUI.Helpers.UI;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
+using PixiEditor.AvaloniaUI.Views.Visuals;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.DrawingApi.Core.Numerics;
 
 
 namespace PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 namespace PixiEditor.AvaloniaUI.ViewModels.SubViewModels;
 #nullable enable
 #nullable enable
-internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>
+internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockableContent, IDockableCloseEvents
 {
 {
     public DocumentViewModel Document { get; }
     public DocumentViewModel Document { get; }
     public ExecutionTrigger<VecI> CenterViewportTrigger { get; } = new ExecutionTrigger<VecI>();
     public ExecutionTrigger<VecI> CenterViewportTrigger { get; } = new ExecutionTrigger<VecI>();
@@ -15,6 +20,14 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>
 
 
     public RelayCommand RequestCloseCommand { get; }
     public RelayCommand RequestCloseCommand { get; }
 
 
+    public string Id => $"{Document.FileName}{Index}";
+    public string Title => $"{Document.FileName}{Index}";
+    public bool CanFloat => true;
+    public bool CanClose => true;
+    public object? Icon => new SurfaceImage(Document.PreviewSurface);
+
+    private bool _closeRequested;
+
     private bool _flipX;
     private bool _flipX;
 
 
     public bool FlipX
     public bool FlipX
@@ -47,6 +60,23 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>
     public ViewportWindowViewModel(WindowViewModel owner, DocumentViewModel document) : base(owner)
     public ViewportWindowViewModel(WindowViewModel owner, DocumentViewModel document) : base(owner)
     {
     {
         Document = document;
         Document = document;
-        RequestCloseCommand = new RelayCommand(() => ViewModelMain.Current?.WindowSubViewModel.OnViewportWindowCloseButtonPressed(this));
+        RequestCloseCommand = new RelayCommand(() => Owner.OnViewportWindowCloseButtonPressed(this));
+    }
+
+    bool IDockableCloseEvents.OnClose()
+    {
+        if (!_closeRequested)
+        {
+            Task.Run(async () =>
+            {
+                await Dispatcher.UIThread.InvokeAsync(async () =>
+                {
+                    _closeRequested =
+                        await Owner.Owner.DisposeDocumentWithSaveConfirmation(Document);
+                });
+            });
+        }
+
+        return _closeRequested;
     }
     }
 }
 }

+ 3 - 2
src/PixiEditor.AvaloniaUI/ViewModels/SubViewModels/WindowViewModel.cs

@@ -2,6 +2,7 @@
 using System.Linq;
 using System.Linq;
 using Avalonia.Input;
 using Avalonia.Input;
 using CommunityToolkit.Mvvm.Input;
 using CommunityToolkit.Mvvm.Input;
+using PixiDocks.Core.Docking;
 using PixiEditor.AvaloniaUI.Models.Commands;
 using PixiEditor.AvaloniaUI.Models.Commands;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.ViewModels.Document;
 using PixiEditor.AvaloniaUI.Views;
 using PixiEditor.AvaloniaUI.Views;
@@ -43,7 +44,7 @@ internal class WindowViewModel : SubViewModel<ViewModelMain>
     public WindowViewModel(ViewModelMain owner, CommandController commandController)
     public WindowViewModel(ViewModelMain owner, CommandController commandController)
         : base(owner)
         : base(owner)
     {
     {
-        ShowAvalonDockWindowCommand = new(ShowAvalonDockWindow);
+        ShowAvalonDockWindowCommand = new(ShowDockWindow);
         this.commandController = commandController;
         this.commandController = commandController;
     }
     }
 
 
@@ -180,7 +181,7 @@ internal class WindowViewModel : SubViewModel<ViewModelMain>
     }
     }
 
 
     [Command.Basic("PixiEditor.Window.OpenNavigationWindow", "navigation", "OPEN_NAVIGATION_WINDOW", "OPEN_NAVIGATION_WINDOW")]
     [Command.Basic("PixiEditor.Window.OpenNavigationWindow", "navigation", "OPEN_NAVIGATION_WINDOW", "OPEN_NAVIGATION_WINDOW")]
-    public static void ShowAvalonDockWindow(string id)
+    public static void ShowDockWindow(string id)
     {
     {
         //TODO: Implement this
         //TODO: Implement this
         /*if (MainWindow.Current?.LayoutRoot?.Manager?.Layout == null) return;
         /*if (MainWindow.Current?.LayoutRoot?.Manager?.Layout == null) return;

+ 7 - 4
src/PixiEditor.AvaloniaUI/ViewModels/ViewModelMain.cs

@@ -71,7 +71,7 @@ internal partial class ViewModelMain : ViewModelBase, ICommandsHandler
 
 
     public ExtensionsViewModel ExtensionsSubViewModel { get; set; }
     public ExtensionsViewModel ExtensionsSubViewModel { get; set; }
 
 
-    public LayoutDockViewModel LayoutDockSubViewModel { get; set; }
+    public LayoutViewModel LayoutSubViewModel { get; set; }
 
 
     public IPreferences Preferences { get; set; }
     public IPreferences Preferences { get; set; }
     public ILocalizationProvider LocalizationProvider { get; set; }
     public ILocalizationProvider LocalizationProvider { get; set; }
@@ -111,10 +111,14 @@ internal partial class ViewModelMain : ViewModelBase, ICommandsHandler
         Preferences = services.GetRequiredService<IPreferences>();
         Preferences = services.GetRequiredService<IPreferences>();
         Preferences.Init();
         Preferences.Init();
 
 
+        CommandController = services.GetService<CommandController>();
+
         LocalizationProvider = services.GetRequiredService<ILocalizationProvider>();
         LocalizationProvider = services.GetRequiredService<ILocalizationProvider>();
         LocalizationProvider.LoadData();
         LocalizationProvider.LoadData();
 
 
         WindowSubViewModel = services.GetService<WindowViewModel>();
         WindowSubViewModel = services.GetService<WindowViewModel>();
+        LayoutSubViewModel = services.GetService<LayoutViewModel>();
+
         DocumentManagerSubViewModel = services.GetRequiredService<DocumentManagerViewModel>();
         DocumentManagerSubViewModel = services.GetRequiredService<DocumentManagerViewModel>();
         SelectionSubViewModel = services.GetService<SelectionViewModel>();
         SelectionSubViewModel = services.GetService<SelectionViewModel>();
 
 
@@ -141,12 +145,11 @@ internal partial class ViewModelMain : ViewModelBase, ICommandsHandler
 
 
         AdditionalContentSubViewModel = services.GetService<AdditionalContentViewModel>();
         AdditionalContentSubViewModel = services.GetService<AdditionalContentViewModel>();
 
 
-        LayoutDockSubViewModel = services.GetService<LayoutDockViewModel>();
+        CommandController.Init(services);
+        LayoutSubViewModel.LayoutManager.InitLayout(this);
 
 
         MiscSubViewModel = services.GetService<MiscViewModel>();
         MiscSubViewModel = services.GetService<MiscViewModel>();
 
 
-        CommandController = services.GetService<CommandController>();
-        CommandController.Init(services);
         ShortcutController = new ShortcutController();
         ShortcutController = new ShortcutController();
 
 
         ToolsSubViewModel?.SetupToolsTooltipShortcuts(services);
         ToolsSubViewModel?.SetupToolsTooltipShortcuts(services);

+ 3 - 3
src/PixiEditor.AvaloniaUI/Views/Dialogs/ConfirmationPopup.axaml

@@ -17,20 +17,20 @@
         <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Center"
         <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Center"
                     Margin="0,0,10,15">
                     Margin="0,0,10,15">
             <Button Margin="10,0,10,0" IsDefault="True" Padding="5 0"
             <Button Margin="10,0,10,0" IsDefault="True" Padding="5 0"
-                    ui:Translator.LocalizedString="{Binding FirstOptionText}"
+                    ui:Translator.LocalizedString="{Binding FirstOptionText}" MinWidth="70"
                     Command="{Binding Path=SetConfirmationResultAndCloseCommand, ElementName=popup}">
                     Command="{Binding Path=SetConfirmationResultAndCloseCommand, ElementName=popup}">
                 <Button.CommandParameter>
                 <Button.CommandParameter>
                     <system:Boolean>True</system:Boolean>
                     <system:Boolean>True</system:Boolean>
                 </Button.CommandParameter>
                 </Button.CommandParameter>
             </Button>
             </Button>
             <Button Padding="5 0"
             <Button Padding="5 0"
-                    Command="{Binding Path=SetConfirmationResultAndCloseCommand, ElementName=popup}"
+                    Command="{Binding Path=SetConfirmationResultAndCloseCommand, ElementName=popup}" MinWidth="70"
                     ui:Translator.LocalizedString="{Binding SecondOptionText}">
                     ui:Translator.LocalizedString="{Binding SecondOptionText}">
                 <Button.CommandParameter>
                 <Button.CommandParameter>
                     <system:Boolean>False</system:Boolean>
                     <system:Boolean>False</system:Boolean>
                 </Button.CommandParameter>
                 </Button.CommandParameter>
             </Button>
             </Button>
-            <Button Margin="10,0,10,0" ui:Translator.Key="CANCEL"
+            <Button Margin="10,0,10,0" ui:Translator.Key="CANCEL" MinWidth="70"
                     Command="{Binding CancelCommand, ElementName=popup}" />
                     Command="{Binding CancelCommand, ElementName=popup}" />
         </StackPanel>
         </StackPanel>
 
 

+ 10 - 5
src/PixiEditor.AvaloniaUI/Views/Dock/DocumentTemplate.axaml

@@ -8,11 +8,16 @@
              xmlns:converters="clr-namespace:PixiEditor.AvaloniaUI.Helpers.Converters"
              xmlns:converters="clr-namespace:PixiEditor.AvaloniaUI.Helpers.Converters"
              xmlns:palettes1="clr-namespace:PixiEditor.AvaloniaUI.Views.Palettes"
              xmlns:palettes1="clr-namespace:PixiEditor.AvaloniaUI.Views.Palettes"
              xmlns:viewportControls="clr-namespace:PixiEditor.AvaloniaUI.Views.Main.ViewportControls"
              xmlns:viewportControls="clr-namespace:PixiEditor.AvaloniaUI.Views.Main.ViewportControls"
+             xmlns:subViewModels="clr-namespace:PixiEditor.AvaloniaUI.ViewModels.SubViewModels"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+             x:DataType="subViewModels:ViewportWindowViewModel"
              x:Class="PixiEditor.AvaloniaUI.Views.Dock.DocumentTemplate">
              x:Class="PixiEditor.AvaloniaUI.Views.Dock.DocumentTemplate">
+    <Design.DataContext>
+        <subViewModels:ViewportWindowViewModel />
+    </Design.DataContext>
     <viewportControls:Viewport
     <viewportControls:Viewport
-        CenterViewportTrigger="{Binding ViewModel.DockCenterViewportTrigger}"
-        ZoomViewportTrigger="{Binding ViewModel.ZoomViewportTrigger}"
+        CenterViewportTrigger="{Binding DockCenterViewportTrigger}"
+        ZoomViewportTrigger="{Binding ZoomViewportTrigger}"
         MouseDownCommand="{Binding Path=IoSubViewModel.MouseDownCommand, Source={viewModels1:MainVM}}"
         MouseDownCommand="{Binding Path=IoSubViewModel.MouseDownCommand, Source={viewModels1:MainVM}}"
         MouseMoveCommand="{Binding Path=IoSubViewModel.MouseMoveCommand, Source={viewModels1:MainVM}}"
         MouseMoveCommand="{Binding Path=IoSubViewModel.MouseMoveCommand, Source={viewModels1:MainVM}}"
         MouseUpCommand="{Binding Path=IoSubViewModel.MouseUpCommand, Source={viewModels1:MainVM}}"
         MouseUpCommand="{Binding Path=IoSubViewModel.MouseUpCommand, Source={viewModels1:MainVM}}"
@@ -22,10 +27,10 @@
         ZoomMode="{Binding ToolsSubViewModel.ActiveTool, Source={viewModels1:MainVM}, Converter={converters:ActiveToolToZoomModeConverter}}"
         ZoomMode="{Binding ToolsSubViewModel.ActiveTool, Source={viewModels1:MainVM}, Converter={converters:ActiveToolToZoomModeConverter}}"
         ZoomOutOnClick="{Binding ToolsSubViewModel.ZoomTool.ZoomOutOnClick, Source={viewModels1:MainVM}}"
         ZoomOutOnClick="{Binding ToolsSubViewModel.ZoomTool.ZoomOutOnClick, Source={viewModels1:MainVM}}"
         UseTouchGestures="{Binding StylusSubViewModel.UseTouchGestures, Source={viewModels1:MainVM}}"
         UseTouchGestures="{Binding StylusSubViewModel.UseTouchGestures, Source={viewModels1:MainVM}}"
-        FlipX="{Binding ViewModel.FlipX, Mode=TwoWay}"
-        FlipY="{Binding ViewModel.FlipY, Mode=TwoWay}"
+        FlipX="{Binding FlipX, Mode=TwoWay}"
+        FlipY="{Binding FlipY, Mode=TwoWay}"
         ContextRequested="Viewport_OnContextMenuOpening"
         ContextRequested="Viewport_OnContextMenuOpening"
-        Document="{Binding ViewModel.Document}">
+        Document="{Binding Document}">
         <viewportControls:Viewport.ContextMenu>
         <viewportControls:Viewport.ContextMenu>
             <ContextMenu DataContext="{Binding PlacementTarget.Document, RelativeSource={RelativeSource Self}}">
             <ContextMenu DataContext="{Binding PlacementTarget.Document, RelativeSource={RelativeSource Self}}">
                 <ContextMenu.Template>
                 <ContextMenu.Template>

+ 1 - 1
src/PixiEditor.AvaloniaUI/Views/Dock/DocumentTemplate.axaml.cs

@@ -15,7 +15,7 @@ public partial class DocumentTemplate : UserControl
 
 
     private void Viewport_OnContextMenuOpening(object? sender, ContextRequestedEventArgs e)
     private void Viewport_OnContextMenuOpening(object? sender, ContextRequestedEventArgs e)
     {
     {
-        ViewportWindowViewModel vm = ((DockDocumentViewModel)DataContext).ViewModel;
+        ViewportWindowViewModel vm = ((ViewportWindowViewModel)DataContext);
         var tools = vm.Owner.Owner.ToolsSubViewModel;
         var tools = vm.Owner.Owner.ToolsSubViewModel;
 
 
         var superSpecialBrightnessTool = tools.RightClickMode == RightClickMode.SecondaryColor && tools.ActiveTool is BrightnessToolViewModel;
         var superSpecialBrightnessTool = tools.RightClickMode == RightClickMode.SecondaryColor && tools.ActiveTool is BrightnessToolViewModel;

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

@@ -6,9 +6,13 @@
              xmlns:main1="clr-namespace:PixiEditor.AvaloniaUI.Views.Main"
              xmlns:main1="clr-namespace:PixiEditor.AvaloniaUI.Views.Main"
              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"
              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">
+    <Design.DataContext>
+        <viewModels1:ViewModelMain />
+    </Design.DataContext>
     <Interaction.Behaviors>
     <Interaction.Behaviors>
         <EventTriggerBehavior EventName="Loaded">
         <EventTriggerBehavior EventName="Loaded">
             <InvokeCommandAction Command="{Binding StartupCommand}" />
             <InvokeCommandAction Command="{Binding StartupCommand}" />
@@ -29,7 +33,9 @@
                                    HorizontalAlignment="Left"
                                    HorizontalAlignment="Left"
                                    VerticalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Tools="{Binding Path=ToolsSubViewModel.ToolSet}" />
                                    Tools="{Binding Path=ToolsSubViewModel.ToolSet}" />
-                <DockControl Grid.Row="1" Layout="{Binding LayoutDockSubViewModel.Layout}" />
+                <controls:DockableAreaRegion Grid.Row="1"
+                                             Root="{Binding LayoutSubViewModel.LayoutManager.ActiveLayout.Root}"
+                                             Context="{Binding LayoutSubViewModel.LayoutManager.DockContext}"/>
             </Grid>
             </Grid>
         </DockPanel>
         </DockPanel>
         <commandSearch:CommandSearchControl
         <commandSearch:CommandSearchControl

+ 0 - 4
src/PixiEditor.AvaloniaUI/Views/Visuals/Scene.cs

@@ -1,10 +1,6 @@
-using System.Diagnostics;
-using System.Linq;
 using Avalonia;
 using Avalonia;
 using Avalonia.Controls;
 using Avalonia.Controls;
 using Avalonia.Media;
 using Avalonia.Media;
-using Avalonia.OpenGL;
-using Avalonia.OpenGL.Controls;
 using Avalonia.Rendering.SceneGraph;
 using Avalonia.Rendering.SceneGraph;
 using Avalonia.Skia;
 using Avalonia.Skia;
 using ChunkyImageLib;
 using ChunkyImageLib;

+ 24 - 0
src/PixiEditor.AvaloniaUI/Views/Visuals/SurfaceImage.cs

@@ -0,0 +1,24 @@
+using Avalonia;
+using Avalonia.Media;
+using ChunkyImageLib;
+
+namespace PixiEditor.AvaloniaUI.Views.Visuals;
+
+public class SurfaceImage : IImage
+{
+    public Surface Surface { get; set; }
+    public Stretch Stretch { get; set; } = Stretch.Uniform;
+
+    public Size Size { get; }
+
+    public SurfaceImage(Surface surface)
+    {
+        Surface = surface;
+        Size = new Size(surface.Size.X, surface.Size.Y);
+    }
+
+    public void Draw(DrawingContext context, Rect sourceRect, Rect destRect)
+    {
+        context.Custom(new DrawSurfaceOperation(destRect, Surface, Stretch));
+    }
+}

+ 0 - 49
src/PixiEditor.UI.Common/Controls/Dock/Controls/DockControl.axaml

@@ -1,49 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:dmc="using:Dock.Model.Controls"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <DockControl Width="600" Height="400" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type DockControl}" TargetType="DockControl">
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <ContentControl x:Name="PART_ContentControl"
-                        Content="{TemplateBinding Layout}"
-                        x:DataType="core:IDock"
-                        x:CompileBindings="True">
-          <ContentControl.DataTemplates>
-            <!--<DataTemplate DataType="dmc:IDocumentContent"> This should be added in the application
-              <DocumentContentControl />
-            </DataTemplate>-->
-            <!--<DataTemplate DataType="dmc:IToolContent">
-              <ToolContentControl />
-            </DataTemplate>-->
-            <DataTemplate DataType="dmc:IProportionalDockSplitter">
-              <ProportionalStackPanelSplitter />
-            </DataTemplate>
-            <DataTemplate DataType="dmc:IDocumentDock">
-              <DocumentDockControl />
-            </DataTemplate>
-            <DataTemplate DataType="dmc:IToolDock">
-              <ToolDockControl />
-            </DataTemplate>
-            <DataTemplate DataType="dmc:IProportionalDock">
-              <ProportionalDockControl />
-            </DataTemplate>
-            <DataTemplate DataType="dmc:IDockDock">
-              <DockDockControl />
-            </DataTemplate>
-            <DataTemplate DataType="dmc:IRootDock">
-              <RootDockControl />
-            </DataTemplate>
-          </ContentControl.DataTemplates>
-        </ContentControl>
-      </ControlTemplate>
-    </Setter>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 37
src/PixiEditor.UI.Common/Controls/Dock/Controls/DockDockControl.axaml

@@ -1,37 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:converters="using:Dock.Avalonia.Converters"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <DockDockControl Width="300" Height="300" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type DockDockControl}" TargetType="DockDockControl">
-
-    <Setter Property="(ProportionalStackPanelSplitter.Proportion)" Value="{Binding Proportion}" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Visible">
-          <ItemsControl ItemsSource="{Binding VisibleDockables}">
-            <ItemsControl.Styles>
-              <Style Selector="ItemsControl > ContentPresenter" x:DataType="core:IDock">
-                <Setter Property="(DockPanel.Dock)"
-                        Value="{Binding Dock, Converter={x:Static converters:DockModeConverter.Instance}}" />
-              </Style>
-            </ItemsControl.Styles>
-            <ItemsControl.ItemsPanel>
-              <ItemsPanelTemplate>
-                <DockPanel DockProperties.IsDropArea="True"
-                           Background="Transparent"
-                           LastChildFill="{Binding LastChildFill}"/>
-              </ItemsPanelTemplate>
-            </ItemsControl.ItemsPanel>
-          </ItemsControl>
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 112
src/PixiEditor.UI.Common/Controls/Dock/Controls/DockTarget.axaml

@@ -1,112 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-  <Design.PreviewWith>
-    <Panel Width="300" Height="300">
-      <DockTarget>
-        <DockTarget.Styles>
-          <Style Selector="^/template/ Panel#PART_TopIndicator">
-            <Setter Property="Opacity" Value="0.0" />
-          </Style>
-          <Style Selector="^/template/ Panel#PART_BottomIndicator">
-            <Setter Property="Opacity" Value="0.0" />
-          </Style>
-          <Style Selector="^/template/ Panel#PART_LeftIndicator">
-            <Setter Property="Opacity" Value="0.0" />
-          </Style>
-          <Style Selector="^/template/ Panel#PART_RightIndicator">
-            <Setter Property="Opacity" Value="0.0" />
-          </Style>
-          <Style Selector="^/template/ Panel#PART_CenterIndicator">
-            <Setter Property="Opacity" Value="0.0" />
-          </Style>
-        </DockTarget.Styles>
-      </DockTarget>
-    </Panel>
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type DockTarget}" TargetType="DockTarget">
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <Grid x:Name="PART_IndicatorGrid" RowDefinitions="*,*" ColumnDefinitions="*,*" x:CompileBindings="True">
-          <Panel x:Name="PART_TopIndicator" Grid.Row="0" Grid.ColumnSpan="2" Grid.Column="0" />
-          <Panel x:Name="PART_BottomIndicator" Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="0" />
-          <Panel x:Name="PART_LeftIndicator" Grid.Row="0" Grid.RowSpan="2" Grid.Column="0" />
-          <Panel x:Name="PART_RightIndicator" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" />
-          <Panel x:Name="PART_CenterIndicator" Grid.ColumnSpan="2" Grid.Column="0" Grid.Row="0" Grid.RowSpan="2" />
-          <Panel x:Name="PART_SelectorPanel" Grid.Row="0" Grid.RowSpan="2" Grid.ColumnSpan="2" Grid.Column="0">
-            <Grid x:Name="PART_SelectorGrid" RowDefinitions="*,*,*" ColumnDefinitions="*,*,*">
-              <Image x:Name="PART_TopSelector" Grid.Row="0" Grid.Column="1" />
-              <Image x:Name="PART_BottomSelector" Grid.Row="2" Grid.Column="1" />
-              <Image x:Name="PART_LeftSelector" Grid.Row="1" Grid.Column="0" />
-              <Image x:Name="PART_RightSelector" Grid.Row="1" Grid.Column="2" />
-              <Image x:Name="PART_CenterSelector" Grid.Row="1" Grid.Column="1" />
-            </Grid>
-          </Panel>
-        </Grid>
-      </ControlTemplate>
-    </Setter>
-
-    <Style Selector="^/template/ Grid#PART_SelectorGrid">
-      <Setter Property="MaxWidth" Value="125" />
-      <Setter Property="MaxHeight" Value="125" />
-    </Style>
-
-    <Style Selector="^/template/ Panel#PART_TopIndicator">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushIndicator}" />
-      <Setter Property="Opacity" Value="0" />
-    </Style>
-
-    <Style Selector="^/template/ Panel#PART_BottomIndicator">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushIndicator}" />
-      <Setter Property="Opacity" Value="0" />
-    </Style>
-
-    <Style Selector="^/template/ Panel#PART_LeftIndicator">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushIndicator}" />
-      <Setter Property="Opacity" Value="0" />
-    </Style>
-
-    <Style Selector="^/template/ Panel#PART_RightIndicator">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushIndicator}" />
-      <Setter Property="Opacity" Value="0" />
-    </Style>
-
-    <Style Selector="^/template/ Panel#PART_CenterIndicator">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushIndicator}" />
-      <Setter Property="Opacity" Value="0" />
-    </Style>
-
-    <Style Selector="^/template/ Image#PART_TopSelector">
-      <Setter Property="Source" Value="avares://Dock.Avalonia/Assets/DockAnchorableTop.png" />
-      <Setter Property="Width" Value="40" />
-      <Setter Property="Height" Value="40" />
-    </Style>
-
-    <Style Selector="^/template/ Image#PART_BottomSelector">
-      <Setter Property="Source" Value="avares://Dock.Avalonia/Assets/DockAnchorableBottom.png" />
-      <Setter Property="Width" Value="40" />
-      <Setter Property="Height" Value="40" />
-    </Style>
-
-    <Style Selector="^/template/ Image#PART_LeftSelector">
-      <Setter Property="Source" Value="avares://Dock.Avalonia/Assets/DockAnchorableLeft.png" />
-      <Setter Property="Width" Value="40" />
-      <Setter Property="Height" Value="40" />
-    </Style>
-
-    <Style Selector="^/template/ Image#PART_RightSelector">
-      <Setter Property="Source" Value="avares://Dock.Avalonia/Assets/DockAnchorableRight.png" />
-      <Setter Property="Width" Value="40" />
-      <Setter Property="Height" Value="40" />
-    </Style>
-
-    <Style Selector="^/template/ Image#PART_CenterSelector">
-      <Setter Property="Source" Value="avares://Dock.Avalonia/Assets/DockDocumentInside.png" />
-      <Setter Property="Width" Value="40" />
-      <Setter Property="Height" Value="40" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 20
src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentContentControl.axaml

@@ -1,20 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-  <Design.PreviewWith>
-    <DocumentContentControl Width="300" Height="300" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type DocumentContentControl}" TargetType="DocumentContentControl">
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Visible">
-          <ContentControl Content="{Binding}" 
-                          ContentTemplate="{Binding}" />
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 71
src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentControl.axaml

@@ -1,71 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:dmc="using:Dock.Model.Controls"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <DocumentControl Width="300" Height="400" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type DocumentControl}" TargetType="DocumentControl">
-
-    <Setter Property="HeaderTemplate">
-      <DataTemplate DataType="core:IDockable">
-        <TextBlock Text="{Binding Title}" Padding="2" />
-      </DataTemplate>
-    </Setter>
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockPanel x:Name="PART_DockPanel"
-                   DockProperties.IsDropArea="True"
-                   DockProperties.IsDockTarget="True"
-                   Background="Transparent"
-                   ZIndex="1"
-                   x:DataType="dmc:IDocumentDock"
-                   x:CompileBindings="True">
-          <DocumentTabStrip x:Name="PART_TabStrip"
-                            ItemsSource="{Binding VisibleDockables}"
-                            SelectedItem="{Binding ActiveDockable, Mode=TwoWay}"
-                            CanCreateItem="{Binding CanCreateDocument}"
-                            IsActive="{TemplateBinding IsActive}"
-                            DockPanel.Dock="Top"
-                            DockProperties.IsDropArea="True">
-            <DocumentTabStrip.Styles>
-              <Style Selector="DocumentTabStripItem">
-                <Setter Property="IsActive" Value="{Binding $parent[DocumentTabStrip].IsActive}" />
-              </Style>
-            </DocumentTabStrip.Styles>
-          </DocumentTabStrip>
-          <Grid x:Name="PART_Grid"
-                IsVisible="{Binding #PART_TabStrip.IsVisible}" />
-          <Border x:Name="PART_Border">
-            <DockableControl DataContext="{Binding ActiveDockable}"
-                             TrackingMode="Visible">
-              <ContentControl x:Name="PART_ContentPresenter"
-                              Content="{Binding}"
-                              HorizontalAlignment="Stretch"
-                              VerticalAlignment="Stretch" />
-            </DockableControl>
-          </Border>
-        </DockPanel>
-      </ControlTemplate>
-    </Setter>
-
-    <Style Selector="^/template/ Grid#PART_Grid">
-      <Setter Property="Background" Value="{DynamicResource DockThemeBorderLowBrush}" />
-      <Setter Property="Height" Value="2" />
-      <Setter Property="DockPanel.Dock" Value="Top" />
-    </Style>
-
-    <Style Selector="^:active /template/ Grid#PART_Grid">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushLow}" />
-    </Style>
-
-    <Style Selector="^/template/ Border#PART_Border">
-      <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-      <Setter Property="BorderThickness" Value="1,1,1,1" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 22
src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentDockControl.axaml

@@ -1,22 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-  <Design.PreviewWith>
-    <DocumentDockControl Width="300" Height="300" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type DocumentDockControl}" TargetType="DocumentDockControl">
-
-    <Setter Property="(ProportionalStackPanelSplitter.Proportion)" Value="{Binding Proportion}" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Visible"
-                         ProportionalStackPanelSplitter.Proportion="{Binding Proportion}">
-          <DocumentControl IsActive="{Binding IsActive}" />
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 79
src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentTabStrip.axaml

@@ -1,79 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:dmc="using:Dock.Model.Controls">
-  <Design.PreviewWith>
-    <Border Padding="20">
-      <DocumentTabStrip>
-        <DocumentTabStripItem>Item 1</DocumentTabStripItem>
-        <DocumentTabStripItem>Item 2</DocumentTabStripItem>
-        <DocumentTabStripItem IsEnabled="False">Disabled</DocumentTabStripItem>
-      </DocumentTabStrip>
-    </Border>
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="ButtonCreateDocument" TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
-    <Setter Property="BorderThickness" Value="0" />
-    <Setter Property="Padding" Value="0" />
-    <Setter Property="Margin" Value="0" />
-    <Setter Property="Width" Value="26" />
-    <Setter Property="Height" Value="24" />
-    <Setter Property="HorizontalAlignment" Value="Right" />
-    <Setter Property="HorizontalContentAlignment" Value="Center" />
-    <Setter Property="VerticalAlignment" Value="Top" />
-    <Setter Property="VerticalContentAlignment" Value="Center" />
-    <Setter Property="Background" Value="Transparent" />
-    <Style Selector="^:pointerover">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushHigh}" />
-    </Style>
-  </ControlTheme>
-
-  <ControlTheme x:Key="{x:Type DocumentTabStrip}" TargetType="DocumentTabStrip">
-
-    <Setter Property="Background" Value="Transparent" />
-    <Setter Property="Focusable" Value="False" />
-    <Setter Property="ClipToBounds" Value="False" />
-    <Setter Property="ZIndex" Value="1" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockPanel Background="Transparent"
-                   ClipToBounds="False"
-                   x:DataType="dmc:IDocumentDock"
-                   x:CompileBindings="True">
-          <Button x:Name="PART_ButtonCreate"
-                  Command="{Binding CreateDocument}"
-                  Theme="{StaticResource ButtonCreateDocument}"
-                  IsVisible="{Binding CanCreateDocument}"
-                  DockPanel.Dock="Right">
-            <Path x:Name="PART_PathCreate">
-              <Path.Styles>
-                <Style Selector="Path">
-                  <Setter Property="Margin" Value="5" />
-                  <Setter Property="Stretch" Value="Uniform" />
-                  <Setter Property="UseLayoutRounding" Value="False" />
-                  <Setter Property="Fill" Value="{DynamicResource DockThemeForegroundBrush}" />
-                  <Setter Property="Data"
-                          Value="M8.41687 7.57953V2.41851C8.41687 2.18743 8.22932 1.99988 7.99823 1.99988C7.76715 1.99988 7.5796 2.18743 7.5796 2.41851V7.57953H2.41863C2.18755 7.57953 2 7.76708 2 7.99816C2 8.22925 2.18755 8.41679 2.41863 8.41679H7.5796V13.5812C7.5796 13.8123 7.76715 13.9999 7.99823 13.9999C8.22932 13.9999 8.41687 13.8123 8.41687 13.5812V8.41679L13.5799 8.41851C13.811 8.41851 13.9985 8.23096 13.9985 7.99988C13.9985 7.76879 13.811 7.58125 13.5799 7.58125L8.41687 7.57953Z" />
-                </Style>
-              </Path.Styles>
-            </Path>
-          </Button>
-          <ItemsPresenter x:Name="PART_ItemsPresenter"
-                          ItemsPanel="{TemplateBinding ItemsPanel}" />
-        </DockPanel>
-      </ControlTemplate>
-    </Setter>
-
-    <Setter Property="ItemsPanel">
-      <ItemsPanelTemplate>
-        <WrapPanel ClipToBounds="False" />
-      </ItemsPanelTemplate>
-    </Setter>
-
-    <Style Selector="^:not(:create):empty">
-      <Setter Property="IsVisible" Value="False" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 140
src/PixiEditor.UI.Common/Controls/Dock/Controls/DocumentTabStripItem.axaml

@@ -1,140 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:core="using:Dock.Model.Core"
-                    x:CompileBindings="True">
-  <Design.PreviewWith>
-    <Border Padding="20">
-      <StackPanel Spacing="20">
-        <DocumentTabStripItem>Leaf</DocumentTabStripItem>
-        <DocumentTabStripItem IsSelected="True">Arch</DocumentTabStripItem>
-        <DocumentTabStripItem Background="Yellow">Background</DocumentTabStripItem>
-      </StackPanel>
-    </Border>
-  </Design.PreviewWith>
-
-  <ContextMenu x:Key="DocumentTabStripItemContextMenu" x:DataType="core:IDockable" x:CompileBindings="True">
-    <MenuItem Header="_Float"
-              Command="{Binding Owner.Factory.FloatDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanFloat}"/>
-    <MenuItem Header="_Close"
-              Command="{Binding Owner.Factory.CloseDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanClose}"/>
-    <MenuItem Header="Close other tabs"
-              Command="{Binding Owner.Factory.CloseOtherDockables}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanClose}"/>
-    <MenuItem Header="Close all tabs"
-              Command="{Binding Owner.Factory.CloseAllDockables}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanClose}"/>
-    <MenuItem Header="_Close tabs to the left"
-              Command="{Binding Owner.Factory.CloseLeftDockables}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanClose}"/>
-    <MenuItem Header="_Close tabs to the right"
-              Command="{Binding Owner.Factory.CloseRightDockables}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanClose}"/>
-  </ContextMenu>
-
-  <ControlTheme x:Key="{x:Type DocumentTabStripItem}" TargetType="DocumentTabStripItem">
-
-    <Setter Property="(TextElement.FontSize)" Value="{DynamicResource DockFontSizeNormal}" />
-    <Setter Property="FontWeight" Value="Normal" />
-    <Setter Property="MinHeight" Value="24" />
-    <Setter Property="VerticalContentAlignment" Value="Center" />
-    <Setter Property="Background" Value="Transparent" />
-    <Setter Property="Foreground" Value="{DynamicResource DockThemeForegroundBrush}" />
-    <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-    <Setter Property="BorderThickness" Value="0" />
-    <Setter Property="Margin" Value="0" />
-    <Setter Property="Padding" Value="4 0 4 0" />
-
-    <Setter Property="Template" x:DataType="core:IDockable">
-      <ControlTemplate>
-          <Border Background="{TemplateBinding Background}"
-                  TextElement.FontFamily="{TemplateBinding FontFamily}"
-                  TextElement.FontSize="{TemplateBinding FontSize}"
-                  TextElement.FontWeight="{TemplateBinding FontWeight}"
-                  BorderBrush="{TemplateBinding BorderBrush}"
-                  BorderThickness="{TemplateBinding BorderThickness}"
-                  Padding="{TemplateBinding Padding}"
-                  ContextMenu="{DynamicResource DocumentTabStripItemContextMenu}">
-            <DockableControl TrackingMode="Tab">
-              <StackPanel Background="Transparent"
-                          Orientation="Horizontal"
-                          Spacing="2"
-                          DockProperties.IsDragArea="True"
-                          DockProperties.IsDropArea="True">
-                <Panel Margin="2">
-                  <ContentPresenter ContentTemplate="{Binding $parent[DocumentControl].HeaderTemplate}"
-                                    Content="{Binding}" />
-                </Panel>
-                <Button x:Name="PART_CloseButton"
-                        Command="{Binding Owner.Factory.CloseDockable}"
-                        CommandParameter="{Binding}"
-                        IsVisible="{Binding CanClose}">
-                  <Button.Styles>
-                    <Style Selector="Button">
-                      <Setter Property="BorderThickness" Value="0" />
-                      <Setter Property="Padding" Value="0" />
-                      <Setter Property="Margin" Value="0" />
-                      <Setter Property="Width" Value="14" />
-                      <Setter Property="Height" Value="14" />
-                      <Setter Property="Background" Value="Transparent" />
-                      <Style Selector="^:pointerover">
-                        <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushHigh}" />
-                      </Style>
-                    </Style>
-                  </Button.Styles>
-                  <Path x:Name="PART_ClosePath">
-                    <Path.Styles>
-                      <Style Selector="Path">
-                        <Setter Property="Margin" Value="2" />
-                        <Setter Property="Stretch" Value="Uniform" />
-                        <Setter Property="UseLayoutRounding" Value="False" />
-                        <Setter Property="Data"
-                                Value="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" />
-                      </Style>
-                    </Path.Styles>
-                  </Path>
-                </Button>
-              </StackPanel>
-            </DockableControl>
-          </Border>
-      </ControlTemplate>
-    </Setter>
-
-    <Style Selector="^:selected /template/ Path#PART_ClosePath">
-      <Setter Property="Fill" Value="{DynamicResource DockApplicationAccentForegroundBrush}" />
-    </Style>
-
-    <Style Selector="^:pointerover /template/ Path#PART_ClosePath">
-      <Setter Property="Fill" Value="{DynamicResource DockApplicationAccentForegroundBrush}" />
-    </Style>
-
-    <Style Selector="^:not(:active):selected">
-      <Setter Property="Background" Value="{DynamicResource DockThemeBorderLowBrush}" />
-      <Setter Property="Foreground" Value="{DynamicResource DockThemeForegroundBrush}" />
-    </Style>
-
-    <Style Selector="^:active:selected">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushLow}" />
-      <Setter Property="Foreground" Value="{DynamicResource DockApplicationAccentForegroundBrush}" />
-    </Style>
-
-    <Style Selector="^:pointerover">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushMed}" />
-      <Setter Property="Foreground" Value="{DynamicResource DockApplicationAccentForegroundBrush}" />
-    </Style>
-
-    <Style Selector="^:selected:pointerover">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushLow}" />
-      <Setter Property="Foreground" Value="{DynamicResource DockApplicationAccentForegroundBrush}" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 111
src/PixiEditor.UI.Common/Controls/Dock/Controls/HostWindow.axaml

@@ -1,111 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <HostWindow IsToolWindow="False" Width="300" Height="400" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type HostWindow}" TargetType="HostWindow">
-
-    <Setter Property="Background" Value="{DynamicResource DockThemeBackgroundBrush}" />
-    <Setter Property="(TextElement.FontSize)" Value="{DynamicResource DockFontSizeNormal}" />
-    <Setter Property="FontFamily" Value="{TemplateBinding FontFamily}" />
-    <Setter Property="TextBlock.Foreground" Value="{DynamicResource DockThemeForegroundBrush}" />
-    <Setter Property="WindowState" Value="Normal" />
-    <Setter Property="UseLayoutRounding" Value="True" />
-    <Setter Property="Title" Value="{Binding ActiveDockable.Title}" />
-    <Setter Property="SystemDecorations" Value="Full" />
-    <Setter Property="ExtendClientAreaToDecorationsHint" Value="True" />
-    <Setter Property="ExtendClientAreaChromeHints" Value="PreferSystemChrome" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <Panel>
-          <Border Name="PART_TransparencyFallback" IsHitTestVisible="False" />
-          <Border Background="{TemplateBinding Background}" IsHitTestVisible="False" />
-          <Panel Background="Transparent" Margin="{TemplateBinding WindowDecorationMargin}" />
-          <VisualLayerManager>
-            <VisualLayerManager.ChromeOverlayLayer>
-              <HostWindowTitleBar Name="PART_TitleBar" />
-            </VisualLayerManager.ChromeOverlayLayer>
-            <ContentPresenter Name="PART_ContentPresenter"
-                              ContentTemplate="{TemplateBinding ContentTemplate}"
-                              Content="{TemplateBinding Content}"
-                              Margin="{TemplateBinding Padding}"
-                              HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
-                              VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
-          </VisualLayerManager>
-        </Panel>
-      </ControlTemplate>
-    </Setter>
-
-    <Setter Property="Content">
-      <Template>
-        <Panel Margin="{Binding $parent[HostWindow].OffScreenMargin}">
-          <Panel Margin="{Binding $parent[HostWindow].WindowDecorationMargin}">
-            <DockControl Layout="{Binding}"
-                         x:DataType="core:IHostWindow"
-                         x:CompileBindings="True" />
-          </Panel>
-        </Panel>
-      </Template>
-    </Setter>
-
-    <Style Selector="^:toolwindow">
-
-      <Setter Property="SystemDecorations" Value="None" />
-      <Setter Property="ExtendClientAreaToDecorationsHint" Value="True" />
-      <Setter Property="ExtendClientAreaChromeHints" Value="PreferSystemChrome" />
-
-      <Setter Property="Template">
-        <ControlTemplate>
-          <Panel>
-            <Border Name="PART_TransparencyFallback" IsHitTestVisible="False" />
-            <Border Background="{TemplateBinding Background}" IsHitTestVisible="False" />
-            <Panel Background="Transparent" Margin="{TemplateBinding WindowDecorationMargin}" />
-            <VisualLayerManager>
-              <VisualLayerManager.ChromeOverlayLayer>
-                <!-- <TitleBar/> -->
-              </VisualLayerManager.ChromeOverlayLayer>
-              <ContentPresenter Name="PART_ContentPresenter"
-                                ContentTemplate="{TemplateBinding ContentTemplate}"
-                                Content="{TemplateBinding Content}"
-                                Margin="{TemplateBinding Padding}"
-                                HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
-                                VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
-            </VisualLayerManager>
-          </Panel>
-        </ControlTemplate>
-      </Setter>
-
-      <Setter Property="Content">
-        <Template>
-          <Panel Margin="{Binding $parent[HostWindow].OffScreenMargin}">
-            <DockControl Layout="{Binding}"
-                         x:DataType="core:IHostWindow"
-                         x:CompileBindings="True" />
-          </Panel>
-        </Template>
-      </Setter>
-
-    </Style>
-
-    <Style Selector="^:toolwindow">
-      <Setter Property="Background" Value="{DynamicResource DockThemeBackgroundBrush}" />
-      <Setter Property="TransparencyLevelHint" Value="None"/>
-      <Setter Property="Opacity" Value="1.0" />
-    </Style>
-
-    <Style Selector="^:toolwindow:dragging">
-      <Setter Property="Background" Value="{x:Null}" />
-      <Setter Property="TransparencyLevelHint" Value="Transparent"/>
-      <Setter Property="Opacity" Value="0.5" />
-    </Style>
-
-    <Style Selector="^TitleBar /template/ Border#PART_Background">
-      <Setter Property="IsHitTestVisible" Value="True" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 59
src/PixiEditor.UI.Common/Controls/Dock/Controls/HostWindowTitleBar.axaml

@@ -1,59 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-  <Design.PreviewWith>
-    <Border>
-      <HostWindowTitleBar Background="SkyBlue" Height="30" Width="300" Foreground="Black" />
-    </Border>
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type HostWindowTitleBar}" TargetType="HostWindowTitleBar">
-
-    <Setter Property="Foreground" Value="{DynamicResource SystemControlForegroundBaseHighBrush}"/>    
-    <Setter Property="VerticalAlignment" Value="Top" />
-    <Setter Property="HorizontalAlignment" Value="Stretch" />
-    <Setter Property="Background" Value="Transparent" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <Panel HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="Stretch">
-          <Panel x:Name="PART_MouseTracker" Height="1" VerticalAlignment="Top" />
-          <Panel x:Name="PART_Container">
-            <Border x:Name="PART_Background" Background="{TemplateBinding Background}" />
-            <CaptionButtons x:Name="PART_CaptionButtons" VerticalAlignment="Top" HorizontalAlignment="Right" Foreground="{TemplateBinding Foreground}" />
-          </Panel>
-        </Panel>
-      </ControlTemplate>
-    </Setter>
- 
-    <Style Selector="^:fullscreen">
-      <Setter Property="Background" Value="{DynamicResource SystemAccentColor}" />
-    </Style>
-
-    <Style Selector="^/template/ Border#PART_Background">
-      <Setter Property="IsHitTestVisible" Value="False" />
-    </Style>
-
-    <Style Selector="^:fullscreen /template/ Border#PART_Background">
-      <Setter Property="IsHitTestVisible" Value="True" />
-    </Style>
-
-    <Style Selector="^:fullscreen /template/ Panel#PART_MouseTracker">
-      <Setter Property="Background" Value="Transparent" />
-    </Style>
-
-    <Style Selector="^:fullscreen /template/ Panel#PART_Container">
-      <Setter Property="RenderTransform" Value="translateY(-30px)" />
-      <Setter Property="Transitions">
-        <Transitions>
-          <TransformOperationsTransition Property="RenderTransform" Duration="0:0:.25" />
-        </Transitions>
-      </Setter>
-    </Style>
-
-    <Style Selector="^:fullscreen:pointerover /template/ Panel#PART_Container">
-      <Setter Property="RenderTransform" Value="none" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 37
src/PixiEditor.UI.Common/Controls/Dock/Controls/ProportionalDockControl.axaml

@@ -1,37 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:converters="using:Dock.Avalonia.Converters"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <ProportionalDockControl Width="300" Height="300" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type ProportionalDockControl}" TargetType="ProportionalDockControl">
-
-    <Setter Property="(ProportionalStackPanelSplitter.Proportion)" Value="{Binding Proportion}" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Visible"
-                         ProportionalStackPanelSplitter.Proportion="{Binding Proportion}">
-          <ItemsControl ItemsSource="{Binding VisibleDockables}">
-            <ItemsControl.Styles>
-              <Style Selector="ItemsControl > ContentPresenter > :is(core|IDock)" x:DataType="core:IDock">
-                <Setter Property="(ProportionalStackPanelSplitter.Proportion)" Value="{Binding Proportion}" />
-              </Style>
-            </ItemsControl.Styles>
-            <ItemsControl.ItemsPanel>
-              <ItemsPanelTemplate>
-                <ProportionalStackPanel DockProperties.IsDropArea="True"
-                                        Background="Transparent"
-                                        Orientation="{Binding Orientation, Converter={x:Static converters:OrientationConverter.Instance}}" />
-              </ItemsPanelTemplate>
-            </ItemsControl.ItemsPanel>
-          </ItemsControl>
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 18
src/PixiEditor.UI.Common/Controls/Dock/Controls/ProportionalStackPanelSplitter.axaml

@@ -1,18 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-
-    <ControlTheme x:Key="{x:Type ProportionalStackPanelSplitter}" TargetType="ProportionalStackPanelSplitter">
-
-        <Setter Property="Background" Value="Transparent" />
-
-        <Setter Property="Template">
-            <ControlTemplate>
-                <Border Background="{TemplateBinding Background}"
-                        BorderBrush="{TemplateBinding BorderBrush}"
-                        BorderThickness="{TemplateBinding BorderThickness}" />
-            </ControlTemplate>
-        </Setter>
-
-    </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 41
src/PixiEditor.UI.Common/Controls/Dock/Controls/RootDockControl.axaml

@@ -1,41 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:dmc="using:Dock.Model.Controls">
-  <Design.PreviewWith>
-    <RootDockControl Width="300" Height="300" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type RootDockControl}" TargetType="RootDockControl">
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Visible"
-                         x:DataType="dmc:IRootDock"
-                         x:CompileBindings="True">
-          <DockPanel Background="Transparent"
-                     DockProperties.IsDropArea="False">
-            <ToolPinnedControl DockPanel.Dock="Left" 
-                               Orientation="Vertical"
-                               Items="{Binding LeftPinnedDockables}"
-                               IsVisible="{Binding !!LeftPinnedDockables.Count}" />
-            <ToolPinnedControl DockPanel.Dock="Right" 
-                               Orientation="Vertical"
-                               Items="{Binding RightPinnedDockables}"
-                               IsVisible="{Binding !!RightPinnedDockables.Count}" />
-            <ToolPinnedControl DockPanel.Dock="Top" 
-                               Orientation="Horizontal"
-                               Items="{Binding TopPinnedDockables}"
-                               IsVisible="{Binding !!TopPinnedDockables.Count}" />
-            <ToolPinnedControl DockPanel.Dock="Bottom" 
-                               Orientation="Horizontal"
-                               Items="{Binding BottomPinnedDockables}"
-                               IsVisible="{Binding !!BottomPinnedDockables.Count}" />
-            <ContentControl Content="{Binding ActiveDockable}" />
-          </DockPanel>
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 25
src/PixiEditor.UI.Common/Controls/Dock/Controls/StretchableStackPanel.cs

@@ -1,25 +0,0 @@
-using Avalonia;
-using Avalonia.Controls;
-
-namespace PixiEditor.UI.Common.Controls.Dock.Controls;
-
-/// <summary>
-///     StretchableStackPanel resizes all children equally to fit the width of the panel if panel is smaller than desirable children size.
-/// </summary>
-public class StretchableStackPanel : StackPanel
-{
-    protected override Size MeasureOverride(Size availableSize)
-    {
-        var size = base.MeasureOverride(availableSize);
-        if (size.Width > availableSize.Width)
-        {
-            var width = availableSize.Width / Children.Count;
-            foreach (var child in Children)
-            {
-                child.Measure(new Size(width, availableSize.Height));
-            }
-        }
-
-        return size;
-    }
-}

+ 0 - 198
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolChromeControl.axaml

@@ -1,198 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:converters="using:Dock.Avalonia.Converters"
-                    xmlns:controls="using:Dock.Model.Controls">
-  <Design.PreviewWith>
-    <ToolChromeControl Width="300" Height="400" />
-  </Design.PreviewWith>
-
-  <ContextMenu x:Key="ToolChromeControlContextMenu" 
-               x:DataType="controls:IToolDock" x:CompileBindings="True"
-               IsVisible="{Binding !!ActiveDockable}">
-    <MenuItem Header="_Float"
-              Command="{Binding Owner.Factory.FloatDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding ActiveDockable.CanFloat, FallbackValue=False}"/>
-    <MenuItem Header="_Hide"
-              Command="{Binding Owner.Factory.PinDockable}"
-              CommandParameter="{Binding ActiveDockable}"
-              IsVisible="{Binding ActiveDockable.CanPin, FallbackValue=False}"/>
-    <MenuItem Header="_Close"
-              Command="{Binding Owner.Factory.CloseDockable}"
-              CommandParameter="{Binding ActiveDockable}"
-              IsVisible="{Binding ActiveDockable.CanClose, FallbackValue=False}"/>
-  </ContextMenu>
-  
-  <ControlTheme x:Key="{x:Type ToolChromeControl}" TargetType="ToolChromeControl">
-
-    <Setter Property="Background" Value="{DynamicResource DockThemeBackgroundBrush}" />
-    <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-    <Setter Property="BorderThickness" Value="0" />
-    <Setter Property="Padding" Value="0" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <Grid RowDefinitions="Auto,*" x:DataType="controls:IToolDock" x:CompileBindings="True">
-          <ContentPresenter x:Name="PART_ContentPresenter"
-                            Background="{TemplateBinding Background}"
-                            BorderBrush="{TemplateBinding BorderBrush}"
-                            BorderThickness="{TemplateBinding BorderThickness}"
-                            Content="{TemplateBinding Content}"
-                            Padding="{TemplateBinding Padding}"
-                            Grid.Row="1" />
-          <Border x:Name="PART_Border"
-                  BorderBrush="{TemplateBinding BorderBrush}"
-                  VerticalAlignment="Top"
-                  ContextMenu="{DynamicResource ToolChromeControlContextMenu}"
-                  Grid.Row="{Binding GripMode, Converter={x:Static converters:GripModeConverters.GridRowAutoHideConverter}}">
-            <Grid x:Name="PART_Grip">
-              <DockPanel LastChildFill="True" Margin="8 0">
-                <Panel DockPanel.Dock="Left">
-                  <TextBlock x:Name="PART_Title"
-                             Text="{Binding ActiveDockable.Title, FallbackValue=TITLE}" />
-                </Panel>
-                <Button x:Name="PART_CloseButton"
-                        Command="{Binding Owner.Factory.CloseDockable}"
-                        CommandParameter="{Binding ActiveDockable}"
-                        IsVisible="{Binding ActiveDockable.CanClose, FallbackValue=False}"
-                        DockPanel.Dock="Right">
-                  <Viewbox>
-                    <Path x:Name="PART_ClosePath" />
-                  </Viewbox>
-                </Button>
-                <Button x:Name="PART_PinButton"
-                        Command="{Binding Owner.Factory.PinDockable}"
-                        CommandParameter="{Binding ActiveDockable}"
-                        IsVisible="{Binding ActiveDockable.CanPin, FallbackValue=False}"
-                        DockPanel.Dock="Right">
-                  <Viewbox>
-                    <Path x:Name="PART_PinPath" />
-                  </Viewbox>
-                </Button>
-                <Grid x:Name="PART_Grid" />
-              </DockPanel>
-            </Grid>
-          </Border>
-          <Panel x:Name="PART_Panel"
-                 Background="{TemplateBinding BorderBrush}"
-                 Height="1"
-                 VerticalAlignment="Top"
-                 Grid.Row="{Binding GripMode, Converter={x:Static converters:GripModeConverters.GridRowAutoHideConverter}}" />
-        </Grid>
-      </ControlTemplate>
-    </Setter>
-
-    <Style Selector="^/template/ Border#PART_Border">
-      <Setter Property="BorderThickness" Value="1 1 1 0" />
-      <Setter Property="IsVisible"
-              Value="{Binding GripMode, Converter={x:Static converters:GripModeConverters.IsVisibleVisibleConverter}}" />
-    </Style>
-
-    <Style Selector="^:pointerover /template/ Border#PART_Border">
-      <Setter Property="IsVisible"
-              Value="{Binding GripMode, Converter={x:Static converters:GripModeConverters.IsVisibleAutoHideOrVisibleConverter}}" />
-    </Style>
-
-    <Style Selector="^:floating /template/ Border#PART_Border">
-      <Setter Property="BorderThickness" Value="0" />
-    </Style>
-
-    <Style Selector="^/template/ Panel#PART_Panel">
-      <Setter Property="IsVisible"
-              Value="{Binding GripMode, Converter={x:Static converters:GripModeConverters.IsVisibleAutoHideOrHiddenConverter}}" />
-    </Style>
-
-    <Style Selector="^:pointerover /template/ Panel#PART_Panel">
-      <Setter Property="IsVisible"
-              Value="{Binding GripMode, Converter={x:Static converters:GripModeConverters.IsVisibleVisibleOrHiddenConverter}}" />
-    </Style>
-
-    <Style Selector="^:floating:pointerover /template/ Panel#PART_Panel">
-      <Setter Property="Height" Value="0" />
-      <Setter Property="IsVisible" Value="False" />
-    </Style>
-
-    <Style Selector="^/template/ TextBlock#PART_Title">
-      <Setter Property="Background" Value="Transparent" />
-      <Setter Property="HorizontalAlignment" Value="Left" />
-      <Setter Property="TextAlignment" Value="Left" />
-      <Setter Property="VerticalAlignment" Value="Stretch" />
-      <Setter Property="Margin" Value="0 4 8 4" />
-      <Setter Property="(TextElement.FontSize)" Value="{DynamicResource DockFontSizeNormal}" />
-    </Style>
-
-    <Style Selector="^:active /template/ TextBlock#PART_Title">
-      <Setter Property="Background" Value="Transparent" />
-      <Setter Property="Foreground" Value="{DynamicResource DockApplicationAccentForegroundBrush}" />
-    </Style>
-
-    <Style Selector="^/template/ Grid#PART_Grip">
-      <Setter Property="Background" Value="{DynamicResource DockThemeBackgroundBrush}" />
-    </Style>
-
-    <Style Selector="^/template/ Grid#PART_Grip">
-      <Setter Property="(DockProperties.IsDragArea)" Value="True" />
-    </Style>
-
-    <Style Selector="^:floating /template/ Grid#PART_Grip">
-      <Setter Property="(DockProperties.IsDragArea)" Value="False" />
-    </Style>
-
-    <Style Selector="^:active /template/ Grid#PART_Grip">
-      <Setter Property="Background" Value="{DynamicResource DockThemeAccentBrush}" />
-    </Style>
-
-    <Style Selector="^/template/ Grid#PART_Grid">
-      <Setter Property="Height" Value="5" />
-      <Setter Property="VerticalAlignment" Value="Center" />
-      <Setter Property="Margin" Value="0 0 2 0" />
-      <Setter Property="Background">
-        <VisualBrush SourceRect="0,0,4,5"
-                     DestinationRect="0,0,4,5"
-                     TileMode="Tile"
-                     Stretch="UniformToFill">
-          <VisualBrush.Visual>
-            <Canvas Width="4" Height="5" Background="Transparent">
-              <Rectangle Height="1" Width="1" Fill="#474747" />
-              <Rectangle Height="1" Width="1" Fill="#474747" Canvas.Top="2" Canvas.Left="2" />
-              <Rectangle Height="1" Width="1" Fill="#474747" Canvas.Top="4" />
-            </Canvas>
-          </VisualBrush.Visual>
-        </VisualBrush>
-      </Setter>
-    </Style>
-
-    <Style Selector="^/template/ Button#PART_CloseButton">
-      <Setter Property="Margin" Value="2 0 0 0" />
-      <Setter Property="Padding" Value="3" />
-      <Setter Property="Background" Value="Transparent" />
-      <Setter Property="BorderThickness" Value="0" />
-      <Setter Property="Width" Value="18" />
-      <Setter Property="Height" Value="16" />
-    </Style>
-
-    <Style Selector="^/template/ Button#PART_PinButton">
-      <Setter Property="Margin" Value="2 0 0 0" />
-      <Setter Property="Padding" Value="3" />
-      <Setter Property="Background" Value="Transparent" />
-      <Setter Property="BorderThickness" Value="0" />
-      <Setter Property="Width" Value="18" />
-      <Setter Property="Height" Value="16" />
-    </Style>
-
-    <Style Selector="^/template/ Path#PART_ClosePath">
-      <Setter Property="Stretch" Value="UniformToFill" />
-      <Setter Property="Fill" Value="#474747" />
-      <Setter Property="Data"
-              Value="M1169 1024l879 -879l-145 -145l-879 879l-879 -879l-145 145l879 879l-879 879l145 145l879 -879l879 879l145 -145z" />
-    </Style>
-
-    <Style Selector="^/template/ Path#PART_PinPath">
-      <Setter Property="Stretch" Value="UniformToFill" />
-      <Setter Property="Fill" Value="#474747" />
-      <Setter Property="Data" Value="M2048 1229v-205h-2048v205h2048z" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 20
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolContentControl.axaml

@@ -1,20 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-  <Design.PreviewWith>
-    <ToolContentControl Width="300" Height="300" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type ToolContentControl}" TargetType="ToolContentControl">
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Visible">
-          <ContentControl Content="{Binding}" 
-                          ContentTemplate="{Binding}" />
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 57
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolControl.axaml

@@ -1,57 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:dmc="using:Dock.Model.Controls"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <ToolControl Width="300" Height="400" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type ToolControl}" TargetType="ToolControl">
-
-    <Setter Property="HeaderTemplate">
-      <DataTemplate DataType="core:IDockable">
-        <TextBlock Text="{Binding Title}" Padding="2" />
-      </DataTemplate>
-    </Setter>
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockPanel x:Name="PART_DockPanel"
-                   DockProperties.IsDropArea="True"
-                   DockProperties.IsDockTarget="True"
-                   x:DataType="dmc:IToolDock"
-                   x:CompileBindings="True">
-          <ToolTabStrip x:Name="PART_TabStrip"
-                        ItemsSource="{Binding VisibleDockables}"
-                        SelectedItem="{Binding ActiveDockable, Mode=TwoWay}"
-                        DockPanel.Dock="Bottom"
-                        DockProperties.IsDropArea="True" />
-          <Border x:Name="PART_Border">
-            <DockableControl DataContext="{Binding ActiveDockable}"
-                             TrackingMode="Visible">
-              <ContentControl x:Name="PART_ContentPresenter"
-                              Content="{Binding}"
-                              HorizontalAlignment="Stretch"
-                              VerticalAlignment="Stretch" />
-            </DockableControl>
-          </Border>
-        </DockPanel>
-      </ControlTemplate>
-    </Setter>
-
-    <Style Selector="^/template/ DockPanel#PART_DockPanel">
-      <Setter Property="Background" Value="Transparent" />
-      <Setter Property="ZIndex" Value="1" />
-    </Style>
-
-    <Style Selector="^/template/ Border#PART_Border">
-      <Setter Property="ZIndex" Value="-1" />
-      <Setter Property="Background" Value="{DynamicResource DockThemeBackgroundBrush}" />
-      <Setter Property="Margin" Value="0" />
-      <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-      <Setter Property="BorderThickness" Value="1 0 1 0" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 24
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolDockControl.axaml

@@ -1,24 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-  <Design.PreviewWith>
-    <ToolDockControl Width="300" Height="300" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type ToolDockControl}" TargetType="ToolDockControl">
-
-    <Setter Property="(ProportionalStackPanelSplitter.Proportion)" Value="{Binding Proportion}" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Visible" 
-                         ProportionalStackPanelSplitter.Proportion="{Binding Proportion}">
-          <ToolChromeControl IsActive="{Binding IsActive}"
-                             IsVisible="{Binding !!VisibleDockables.Count}">
-            <ToolControl />
-          </ToolChromeControl>
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 63
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolPinItemControl.axaml

@@ -1,63 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <ToolPinItemControl Width="30" Height="400" />
-  </Design.PreviewWith>
-
-  <ContextMenu x:Key="ToolPinItemControlContextMenu" x:DataType="core:IDockable" x:CompileBindings="True">
-    <MenuItem Header="_Float"
-              Command="{Binding Owner.Factory.FloatDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanFloat}"/>
-    <MenuItem Header="_Show"
-              Command="{Binding Owner.Factory.PinDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanPin}"/>
-    <MenuItem Header="_Close"
-              Command="{Binding Owner.Factory.CloseDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanClose}"/>
-  </ContextMenu>
-
-  <ControlTheme x:Key="{x:Type ToolPinItemControl}" TargetType="ToolPinItemControl">
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockableControl TrackingMode="Pinned"
-                         x:DataType="core:IDockable"
-                         x:CompileBindings="True">
-          <LayoutTransformControl x:Name="PART_LayoutTransformControl">
-            <Button Background="Transparent"
-                    BorderBrush="Transparent"
-                    BorderThickness="0"
-                    CornerRadius="0"
-                    Command="{Binding Owner.Factory.PinDockable}"
-                    CommandParameter="{Binding}"
-                    IsVisible="{Binding CanPin}">
-              <TextBlock Text="{Binding Title}"
-                         VerticalAlignment="Center"
-                         HorizontalAlignment="Left"
-                         ContextMenu="{DynamicResource ToolPinItemControlContextMenu}">
-              </TextBlock>
-            </Button>
-          </LayoutTransformControl>
-        </DockableControl>
-      </ControlTemplate>
-    </Setter>
-
-    <Style Selector="^[Orientation=Vertical]/template/ LayoutTransformControl#PART_LayoutTransformControl">
-      <Setter Property="LayoutTransform">
-        <RotateTransform Angle="270" />
-      </Setter>
-    </Style>
-
-    <Style Selector="^[Orientation=Horizontal]/template/ LayoutTransformControl#PART_LayoutTransformControl">
-      <Setter Property="LayoutTransform">
-        <RotateTransform Angle="0" />
-      </Setter>
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 34
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolPinnedControl.axaml

@@ -1,34 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:dmc="using:Dock.Model.Controls"
-                    xmlns:core="using:Dock.Model.Core">
-  <Design.PreviewWith>
-    <ToolPinnedControl Width="30" Height="400" />
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type ToolPinnedControl}" TargetType="ToolPinnedControl">
-
-    <Setter Property="Orientation" Value="Vertical" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <ItemsControl ItemsSource="{TemplateBinding Items}"
-                      x:DataType="dmc:IRootDock"
-                      x:CompileBindings="True">
-          <ItemsControl.ItemsPanel>
-            <ItemsPanelTemplate>
-              <StackPanel Orientation="{Binding $parent[ToolPinnedControl].Orientation}"
-                          DockProperties.IsDropArea="True" />
-            </ItemsPanelTemplate>
-          </ItemsControl.ItemsPanel>
-          <ItemsControl.DataTemplates>
-            <DataTemplate DataType="core:IDockable">
-              <ToolPinItemControl Orientation="{Binding $parent[ToolPinnedControl].Orientation}" />
-            </DataTemplate>
-          </ItemsControl.DataTemplates>
-        </ItemsControl>
-      </ControlTemplate>
-    </Setter>
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 56
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolTabStrip.axaml

@@ -1,56 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:controls="clr-namespace:PixiEditor.UI.Common.Controls.Dock.Controls">
-  <Design.PreviewWith>
-    <Border Padding="20">
-      <ToolTabStrip>
-        <ToolTabStripItem>Item 1</ToolTabStripItem>
-        <ToolTabStripItem>Item 2</ToolTabStripItem>
-        <ToolTabStripItem IsEnabled="False">Disabled</ToolTabStripItem>
-      </ToolTabStrip>
-    </Border>
-  </Design.PreviewWith>
-
-  <ControlTheme x:Key="{x:Type ToolTabStrip}" TargetType="ToolTabStrip">
-
-    <Setter Property="Background" Value="Transparent" />
-    <Setter Property="Focusable" Value="False" />
-    <Setter Property="ClipToBounds" Value="False" />
-    <Setter Property="ZIndex" Value="1" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-        <DockPanel>
-          <Border Name="PART_Border"
-                  Background="{TemplateBinding Background}"
-                  BorderBrush="{TemplateBinding BorderBrush}"
-                  BorderThickness="{TemplateBinding BorderThickness}"
-                  CornerRadius="{TemplateBinding CornerRadius}"
-                  Padding="{TemplateBinding Padding}"
-                  DockPanel.Dock="Left">
-            <ItemsPresenter Name="PART_ItemsPresenter"
-                            ItemsPanel="{TemplateBinding ItemsPanel}"/>
-          </Border>
-          <Border Name="PART_BorderFill" />
-        </DockPanel>
-      </ControlTemplate>
-    </Setter>
-
-    <Setter Property="ItemsPanel">
-      <ItemsPanelTemplate>
-        <controls:StretchableStackPanel Orientation="Horizontal" ClipToBounds="False" />
-      </ItemsPanelTemplate>
-    </Setter>
-
-    <Style Selector="^:singleitem">
-      <Setter Property="IsVisible" Value="False" />
-    </Style>
-
-    <Style Selector="^/template/ Border#PART_BorderFill">
-      <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-      <Setter Property="BorderThickness" Value="0 1 0  0" />
-    </Style>
-
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 94
src/PixiEditor.UI.Common/Controls/Dock/Controls/ToolTabStripItem.axaml

@@ -1,94 +0,0 @@
-<ResourceDictionary xmlns="https://github.com/avaloniaui"
-                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-                    xmlns:dmc="using:Dock.Model.Controls"
-                    x:CompileBindings="True">
-  <Design.PreviewWith>
-    <Border Padding="20">
-      <StackPanel Spacing="20">
-        <ToolTabStripItem>Leaf</ToolTabStripItem>
-        <ToolTabStripItem IsSelected="True">Arch</ToolTabStripItem>
-        <ToolTabStripItem Background="Yellow">Background</ToolTabStripItem>
-      </StackPanel>
-    </Border>
-  </Design.PreviewWith>
-
-  <x:Double x:Key="TabStripItemMinHeight">48</x:Double>
-  <x:Double x:Key="TabStripItemPipeThickness">2</x:Double>
-
-  <ContextMenu x:Key="ToolTabStripItemContextMenu" x:DataType="dmc:IToolDock" x:CompileBindings="True">
-    <MenuItem Header="_Float"
-              Command="{Binding Owner.Factory.FloatDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanFloat}"/>
-    <MenuItem Header="_Hide"
-              Command="{Binding Owner.Factory.PinDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanPin}"/>
-    <MenuItem Header="_Close"
-              Command="{Binding Owner.Factory.CloseDockable}"
-              CommandParameter="{Binding}"
-              IsVisible="{Binding CanClose}"/>
-  </ContextMenu>
-  
-  <ControlTheme x:Key="{x:Type ToolTabStripItem}" TargetType="ToolTabStripItem">
-
-      <Setter Property="(TextElement.FontSize)" Value="{DynamicResource DockFontSizeNormal}" />
-      <Setter Property="FontWeight" Value="Normal" />
-    <Setter Property="MinHeight" Value="0" />
-    <Setter Property="VerticalContentAlignment" Value="Center" />
-    <Setter Property="Background" Value="Transparent" />
-    <Setter Property="Foreground" Value="{DynamicResource ThemeForegroundSecondaryBrush}" />
-    <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-    <Setter Property="BorderThickness" Value="0 1 0 0" />
-    <Setter Property="Margin" Value="0" />
-    <Setter Property="Padding" Value="4 1 4 0" />
-
-    <Setter Property="Template">
-      <ControlTemplate>
-          <Border Background="{TemplateBinding Background}"
-                  TextElement.FontFamily="{TemplateBinding FontFamily}"
-                  TextElement.FontSize="{TemplateBinding FontSize}"
-                  TextElement.FontWeight="{TemplateBinding FontWeight}"
-                  BorderBrush="{TemplateBinding BorderBrush}"
-                  BorderThickness="{TemplateBinding BorderThickness}"
-                  Padding="{TemplateBinding Padding}"
-                  ContextMenu="{DynamicResource ToolTabStripItemContextMenu}"
-                  x:DataType="dmc:IToolDock" x:CompileBindings="True">
-            <DockableControl TrackingMode="Tab">
-              <StackPanel x:Name="DragTool"
-                          Background="Transparent"
-                          Orientation="Horizontal"
-                          Spacing="2"
-                          DockProperties.IsDragArea="True"
-                          DockProperties.IsDropArea="True">
-                <Panel Margin="2">
-                  <ContentPresenter x:Name="child" TextTrimming="CharacterEllipsis" ContentTemplate="{Binding $parent[ToolControl].HeaderTemplate}"
-                                    Content="{Binding}" />
-                </Panel>
-              </StackPanel>
-            </DockableControl>
-          </Border>
-      </ControlTemplate>
-    </Setter>
-
-    <Style Selector="^:pointerover">
-      <Setter Property="Background" Value="{DynamicResource DockApplicationAccentBrushMed}" />
-    </Style>
-
-    <Style Selector="^:selected">
-      <Setter Property="Background" Value="{DynamicResource DockThemeBackgroundBrush}" />
-      <Setter Property="Foreground" Value="{DynamicResource ThemeForegroundBrush}" />
-      <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-      <Setter Property="BorderThickness" Value="1 0 1 1" />
-      <Setter Property="Margin" Value="0 0 0 0" />
-      <Setter Property="Padding" Value="4 2 4 0" />
-    </Style>
-
-    <Style Selector="^:selected:pointerover">
-      <Setter Property="Background" Value="{DynamicResource DockThemeBackgroundBrush}" />
-      <Setter Property="BorderBrush" Value="{DynamicResource DockThemeBorderLowBrush}" />
-    </Style> 
-    
-  </ControlTheme>
-
-</ResourceDictionary>

+ 0 - 31
src/PixiEditor.UI.Common/Controls/Dock/PixiEditorDockTheme.axaml

@@ -1,31 +0,0 @@
-<Styles xmlns="https://github.com/avaloniaui"
-        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
-    <Styles.Resources>
-        <ResourceDictionary>
-            <ResourceDictionary.MergedDictionaries>
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ProportionalStackPanelSplitter.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DocumentTabStripItem.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DocumentTabStrip.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolTabStripItem.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolTabStrip.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DockTarget.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DocumentControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolChromeControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolPinItemControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolPinnedControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DockDockControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DocumentContentControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DocumentDockControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ProportionalDockControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/RootDockControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolContentControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/ToolDockControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/DockControl.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/HostWindowTitleBar.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Controls/Dock/Controls/HostWindow.axaml" />
-                <ResourceInclude Source="avares://PixiEditor.UI.Common/Accents/Base.axaml" />
-            </ResourceDictionary.MergedDictionaries>
-        </ResourceDictionary>
-    </Styles.Resources>
-</Styles>

+ 25 - 1
src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj

@@ -21,15 +21,39 @@
       <PackageReference Include="Avalonia" Version="$(AvaloniaVersion)" />
       <PackageReference Include="Avalonia" Version="$(AvaloniaVersion)" />
       <PackageReference Include="Avalonia.Themes.Fluent" Version="$(AvaloniaVersion)" />
       <PackageReference Include="Avalonia.Themes.Fluent" Version="$(AvaloniaVersion)" />
       <PackageReference Include="Avalonia.Xaml.Behaviors" Version="11.0.5" />
       <PackageReference Include="Avalonia.Xaml.Behaviors" Version="11.0.5" />
-      <PackageReference Include="Dock.Avalonia" Version="11.0.0.3" />
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>
       <UpToDateCheckInput Remove="Animations\Processing.axaml" />
       <UpToDateCheckInput Remove="Animations\Processing.axaml" />
       <UpToDateCheckInput Remove="Controls\Dock\Accents\Base.axaml" />
       <UpToDateCheckInput Remove="Controls\Dock\Accents\Base.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DockControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DockDockControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DockTarget.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DocumentContentControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DocumentControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DocumentDockControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DocumentTabStrip.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\DocumentTabStripItem.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\HostWindow.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\HostWindowTitleBar.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ProportionalDockControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ProportionalStackPanelSplitter.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\RootDockControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolChromeControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolContentControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolDockControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolPinItemControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolPinnedControl.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolTabStrip.axaml" />
+      <UpToDateCheckInput Remove="Controls\Dock\Controls\ToolTabStripItem.axaml" />
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>
       <AvaloniaResource Include="Fonts\feather.ttf" />
       <AvaloniaResource Include="Fonts\feather.ttf" />
     </ItemGroup>
     </ItemGroup>
+
+    <ItemGroup>
+      <Folder Include="Controls\Dock\" />
+    </ItemGroup>
 </Project>
 </Project>

+ 0 - 1
src/PixiEditor.UI.Common/Themes/PixiEditorTheme.axaml

@@ -11,5 +11,4 @@
 
 
     <StyleInclude Source="/Styles/PixiEditor.Controls.axaml"/>
     <StyleInclude Source="/Styles/PixiEditor.Controls.axaml"/>
     <StyleInclude Source="/Styles/PixiEditor.Styles.axaml"/>
     <StyleInclude Source="/Styles/PixiEditor.Styles.axaml"/>
-    <StyleInclude Source="/Controls/Dock/PixiEditorDockTheme.axaml"/>
 </Styles>
 </Styles>

+ 44 - 0
src/PixiEditor.sln

@@ -106,6 +106,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{F1FDFA82
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PixiEditor.Extensions.MSBuildLayoutCompiler", "PixiEditor.Extensions.MSBuildLayoutCompiler\PixiEditor.Extensions.MSBuildLayoutCompiler.csproj", "{174E2684-9C49-460C-A9F1-A6920F00C036}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PixiEditor.Extensions.MSBuildLayoutCompiler", "PixiEditor.Extensions.MSBuildLayoutCompiler\PixiEditor.Extensions.MSBuildLayoutCompiler.csproj", "{174E2684-9C49-460C-A9F1-A6920F00C036}"
 EndProject
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PixiDocks.Avalonia", "..\..\PixiDocks\src\PixiDocks.Avalonia\PixiDocks.Avalonia.csproj", "{6D90B6D9-2B6B-4CCA-A522-047546C2147A}"
+EndProject
 Global
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Debug|Any CPU = Debug|Any CPU
@@ -1787,6 +1789,48 @@ Global
 		{174E2684-9C49-460C-A9F1-A6920F00C036}.Steam|x64.Build.0 = Debug|Any CPU
 		{174E2684-9C49-460C-A9F1-A6920F00C036}.Steam|x64.Build.0 = Debug|Any CPU
 		{174E2684-9C49-460C-A9F1-A6920F00C036}.Steam|x86.ActiveCfg = Debug|Any CPU
 		{174E2684-9C49-460C-A9F1-A6920F00C036}.Steam|x86.ActiveCfg = Debug|Any CPU
 		{174E2684-9C49-460C-A9F1-A6920F00C036}.Steam|x86.Build.0 = Debug|Any CPU
 		{174E2684-9C49-460C-A9F1-A6920F00C036}.Steam|x86.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Debug|x64.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Debug|x86.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevRelease|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevRelease|Any CPU.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevRelease|x64.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevRelease|x64.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevRelease|x86.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevRelease|x86.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevSteam|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevSteam|Any CPU.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevSteam|x64.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevSteam|x64.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevSteam|x86.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.DevSteam|x86.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX Debug|x64.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX Debug|x64.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX Debug|x86.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX Debug|x86.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX|Any CPU.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX|x64.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX|x64.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX|x86.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.MSIX|x86.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Release|x64.ActiveCfg = Release|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Release|x64.Build.0 = Release|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Release|x86.ActiveCfg = Release|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Release|x86.Build.0 = Release|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Steam|Any CPU.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Steam|Any CPU.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Steam|x64.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Steam|x64.Build.0 = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Steam|x86.ActiveCfg = Debug|Any CPU
+		{6D90B6D9-2B6B-4CCA-A522-047546C2147A}.Steam|x86.Build.0 = Debug|Any CPU
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE