From cb241de5aaaa9c8ab64603acb4781c27b866ed64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Fri, 16 May 2025 14:45:31 +0200 Subject: [PATCH] Shitload of stuff honestly --- samples/PixiEditorExtensionSamples.sln | 6 + samples/Sample7_FlyUI/WindowContentElement.cs | 14 +- .../CommandsSampleExtension.cs | 24 ++ samples/Sample9_Document/Program.cs | 8 + samples/Sample9_Document/Resources/cs.png | Bin 0 -> 13764 bytes .../Sample9_Document/Sample9_Document.csproj | 45 +++ samples/Sample9_Document/extension.json | 44 +++ src/PixiEditor.Browser/Program.cs | 5 +- .../SetReferenceLayer_ChangeInfo.cs | 2 +- src/PixiEditor.Desktop/Program.cs | 2 +- .../Documents/IDocument.cs | 7 + .../FlyUI/Events/ElementEventArgs.cs | 40 ++- .../FlyUI/Events/ElementEventHandler.cs | 4 +- .../FlyUI/Events/NumberEventArgs.cs | 19 ++ .../FlyUI/Events/TextEventArgs.cs | 19 ++ .../FlyUI/Events/ToggleEventArgs.cs | 10 +- .../IO/IDocumentProvider.cs | 6 +- .../Utilities/ByteReader.cs | 62 +++++ .../Utilities/ByteWriter.cs | 60 ++++ .../ExtensionException.cs | 4 +- .../Api/Documents/Document.cs | 21 ++ .../Api/FlyUI/LayoutElement.cs | 21 +- .../Api/FlyUI/SizeInputField.cs | 39 +++ .../Api/FlyUI/StatelessElement.cs | 4 + .../Api/FlyUI/TextField.cs | 27 ++ .../Api/IO/DocumentProvider.cs | 16 +- .../Bridge/Interop.Document.cs | 25 ++ .../Bridge/Native.Document.cs | 8 +- .../Bridge/Native.cs | 18 +- .../build/PixiEditor.Api.CGlueMSBuild.dll | Bin 17920 -> 18944 bytes ...PixiEditor.Extensions.MSPackageBuilder.dll | Bin 10752 -> 11264 bytes .../Api/DocumentsApi.cs | 34 ++- .../Api/FlyUiApi.cs | 9 +- .../Api/LocalizationApi.cs | 2 +- .../Api/Palettes/PalettesApi.cs | 6 +- .../Api/WindowingApi.cs | 6 +- .../WasmExtensionInstance.cs | 13 +- .../Exceptions/RecoverableException.cs | 2 +- .../FlyUI/Elements/SizeInputField.cs | 49 ++++ .../FlyUI/Elements/TextField.cs | 42 +++ .../Metadata/ExtensionMetadata.cs | 2 +- .../PixiEditor.Extensions.csproj | 8 +- .../Behaviors}/TextBoxFocusBehavior.cs | 4 +- .../Controls}/NumberInput.cs | 11 +- .../Controls}/SizeInput.axaml | 21 +- .../Controls}/SizeInput.axaml.cs | 5 +- .../Localization}/EnumHelpers.cs | 2 +- .../Localization}/ExternalProperty.cs | 3 +- .../Localization}/ICustomTranslatorElement.cs | 2 +- .../Localization/ILocalizationProvider.cs | 2 +- .../Localization/Language.cs | 3 +- .../Localization/LanguageData.cs | 2 +- .../Localization/LocalizationData.cs | 3 +- .../Localization/LocalizationKeyShowMode.cs | 2 +- .../Localization/LocalizedString.cs | 2 +- .../Localization}/Translator.cs | 6 +- .../PixiEditor.UI.Common.csproj | 8 + src/PixiEditor.Windows/Win32.cs | 2 +- src/PixiEditor.Windows/WindowsInputKeys.cs | 1 - .../WindowsOperatingSystem.cs | 1 - src/PixiEditor/App.axaml | 2 +- .../Exceptions/CorruptedFileException.cs | 2 +- .../Exceptions/InvalidFileTypeException.cs | 2 +- .../Exceptions/MissingFileException.cs | 2 +- .../Helpers/Collections/ActionDisplayList.cs | 2 +- .../Converters/BlendModeToStringConverter.cs | 2 +- .../Converters/BoolToValueConverter.cs | 2 +- .../EnumToLocalizedStringConverter.cs | 1 + .../Converters/KeyToStringConverter.cs | 2 +- .../Helpers/EnumDescriptionConverter.cs | 1 + .../Helpers/ServiceCollectionHelpers.cs | 2 +- .../Initialization/ClassicDesktopEntry.cs | 16 +- .../Attributes/Commands/CommandAttribute.cs | 2 +- .../Attributes/Commands/FilterAttribute.cs | 2 +- .../Attributes/Commands/GroupAttribute.cs | 2 +- .../Models/Commands/CommandController.cs | 2 +- .../Models/Commands/CommandGroup.cs | 2 +- .../Models/Commands/Commands/Command.cs | 2 +- .../Models/Commands/XAML/NativeMenu.cs | 1 - src/PixiEditor/Models/Constants.cs | 2 +- .../Models/Controllers/ClipboardController.cs | 2 +- .../Models/Controllers/ShortcutController.cs | 7 +- .../Models/Dialogs/ConfirmationDialog.cs | 2 +- src/PixiEditor/Models/Dialogs/NoticeDialog.cs | 2 +- .../Models/Dialogs/OptionsDialog.cs | 2 +- .../DocumentModels/DocumentStructureHelper.cs | 2 +- .../Public/DocumentOperationsModule.cs | 2 +- .../Models/ExceptionHandling/CrashReport.cs | 2 +- .../ExtensionServices/DocumentProvider.cs | 12 +- .../ExtensionServices/WindowProvider.cs | 2 +- src/PixiEditor/Models/Files/BmpFileType.cs | 2 +- src/PixiEditor/Models/Files/GifFileType.cs | 2 +- src/PixiEditor/Models/Files/ImageFileType.cs | 2 +- src/PixiEditor/Models/Files/JpegFileType.cs | 2 +- src/PixiEditor/Models/Files/Mp4FileType.cs | 2 +- src/PixiEditor/Models/Files/OtfFileType.cs | 4 +- src/PixiEditor/Models/Files/PixiFileType.cs | 2 +- src/PixiEditor/Models/Files/PngFileType.cs | 2 +- src/PixiEditor/Models/Files/SvgFileType.cs | 2 +- src/PixiEditor/Models/Files/TtfFileType.cs | 4 +- src/PixiEditor/Models/Files/VideoFileType.cs | 2 +- src/PixiEditor/Models/Files/WebpFileType.cs | 2 +- src/PixiEditor/Models/Handlers/IDocument.cs | 2 +- .../Models/Handlers/IToolHandler.cs | 2 +- .../SvgDocumentBuilder.cs | 2 +- .../Models/IO/FileTypeDialogDataSet.cs | 2 +- src/PixiEditor/Models/IO/Importer.cs | 2 +- .../JascPalFile/JascFileException.cs | 2 +- src/PixiEditor/Models/Input/KeyCombination.cs | 2 +- .../Localization/LocalizationProvider.cs | 2 +- .../Factories/TextSerializationFactory.cs | 2 +- .../Models/Services/NewsFeed/News.cs | 1 + src/PixiEditor/PixiEditor.csproj | 19 -- .../Styles/PixiEditorPopupTemplate.axaml | 5 +- .../Styles/Templates/NodePicker.axaml | 30 +- .../Templates/NodePropertyViewTemplate.axaml | 2 +- .../Styles/Templates/NodeView.axaml | 17 +- .../Templates/ShortcutsTemplateCard.axaml | 4 +- .../Styles/Templates/Timeline.axaml | 22 +- .../ViewModels/CrashReportViewModel.cs | 2 +- .../ViewModels/Dock/ChannelsDockViewModel.cs | 2 +- .../Dock/ColorPickerDockViewModel.cs | 2 +- .../Dock/ColorSlidersDockViewModel.cs | 2 +- .../Dock/DocumentPreviewDockViewModel.cs | 2 +- .../ViewModels/Dock/LayersDockViewModel.cs | 2 +- .../ViewModels/Dock/NodeGraphDockViewModel.cs | 2 +- .../Dock/PaletteViewerDockViewModel.cs | 2 +- .../ViewModels/Dock/SwatchesDockViewModel.cs | 2 +- .../ViewModels/Dock/TimelineDockViewModel.cs | 2 +- .../Document/DocumentManagerViewModel.cs | 1 - .../ViewModels/Document/DocumentViewModel.cs | 7 +- .../Document/Nodes/FolderNodeViewModel.cs | 1 - .../Document/Nodes/LerpColorNodeViewModel.cs | 1 - .../Document/Nodes/MathNodeViewModel.cs | 2 +- .../Document/Nodes/MergeNodeViewModel.cs | 1 - .../Nodes/ModifyImageLeftNodeViewModel.cs | 1 - .../Nodes/ModifyImageRightNodeViewModel.cs | 1 - .../Document/Nodes/NoiseNodeViewModel.cs | 1 - .../Document/Nodes/OutputNodeViewModel.cs | 1 - .../Nodes/SampleImageNodeViewModel.cs | 1 - .../DocumentTransformViewModel.cs | 2 +- .../ViewModels/Menu/MenuBarViewModel.cs | 2 +- .../Menu/MenuBuilders/FileExitMenuBuilder.cs | 2 +- .../MenuBuilders/OpenDockablesMenuBuilder.cs | 1 + .../MenuBuilders/RecentFilesMenuBuilder.cs | 1 + .../Menu/MenuBuilders/SymmetryMenuBuilder.cs | 1 + .../ToggleGridLinesMenuBuilder.cs | 1 + .../ToggleHighResPreviewMenuBuilder.cs | 1 + .../MenuBuilders/ToggleSnappingMenuBuilder.cs | 1 + .../ViewModels/Menu/MenuItemBuilder.cs | 2 +- .../ViewModels/Nodes/NodeTypeInfo.cs | 2 +- .../ViewModels/Nodes/NodeViewModel.cs | 2 +- .../Properties/StringPropertyViewModel.cs | 2 +- .../ViewModels/SettingsWindowViewModel.cs | 2 +- .../SubViewModels/ColorsViewModel.cs | 2 +- .../SubViewModels/DebugViewModel.cs | 2 +- .../ViewModels/SubViewModels/FileViewModel.cs | 2 +- .../SubViewModels/LayersViewModel.cs | 2 +- .../SubViewModels/ToolSetViewModel.cs | 1 - .../SubViewModels/UpdateViewModel.cs | 2 +- .../Settings/FontFamilySettingViewModel.cs | 1 - .../Tools/ToolSettings/Settings/Setting.cs | 2 +- .../ToolSettings/Toolbars/TextToolbar.cs | 2 +- .../ViewModels/Tools/ToolViewModel.cs | 2 +- .../Tools/Tools/BrightnessToolViewModel.cs | 2 +- .../Tools/Tools/ColorPickerToolViewModel.cs | 2 +- .../Tools/Tools/EraserToolViewModel.cs | 2 +- .../Tools/Tools/FloodFillToolViewModel.cs | 2 +- .../Tools/Tools/LassoToolViewModel.cs | 2 +- .../Tools/Tools/MagicWandToolViewModel.cs | 2 +- .../Tools/Tools/MoveToolViewModel.cs | 2 +- .../Tools/Tools/MoveViewportToolViewModel.cs | 2 +- .../Tools/Tools/PenToolViewModel.cs | 2 +- .../Tools/Tools/RasterEllipseToolViewModel.cs | 2 +- .../Tools/Tools/RasterLineToolViewModel.cs | 2 +- .../Tools/RasterRectangleToolViewModel.cs | 2 +- .../Tools/RotateViewportToolViewModel.cs | 2 +- .../Tools/Tools/SelectToolViewModel.cs | 2 +- .../Tools/Tools/TextToolViewModel.cs | 2 +- .../Tools/Tools/VectorEllipseToolViewModel.cs | 2 +- .../Tools/Tools/VectorLineToolViewModel.cs | 2 +- .../Tools/Tools/VectorPathToolViewModel.cs | 2 +- .../Tools/VectorRectangleToolViewModel.cs | 2 +- .../Tools/Tools/ZoomToolViewModel.cs | 2 +- .../UserPreferences/OnboardingViewModel.cs | 2 +- .../Settings/GeneralSettings.cs | 2 +- src/PixiEditor/ViewModels/ViewModelMain.cs | 2 +- src/PixiEditor/Views/AllControlsPanel.axaml | 4 +- src/PixiEditor/Views/Decorators/Chip.axaml.cs | 1 + src/PixiEditor/Views/Dialogs/AboutPopup.axaml | 262 +++++++++--------- .../Views/Dialogs/AboutPopup.axaml.cs | 4 +- .../Views/Dialogs/ConfirmationPopup.axaml | 41 +-- .../Views/Dialogs/ConfirmationPopup.axaml.cs | 2 +- .../Localization/LocalizationDataContext.cs | 2 +- .../LocalizationDebugWindow.axaml | 15 +- .../Debugging/Localization/PoeLanguage.cs | 2 +- .../Views/Dialogs/DialogTitleBar.axaml | 17 +- .../Views/Dialogs/DialogTitleBar.axaml.cs | 1 + .../Views/Dialogs/ExportFilePopup.axaml | 30 +- .../Views/Dialogs/ExportFilePopup.axaml.cs | 2 +- .../Views/Dialogs/NewFilePopup.axaml | 30 +- .../Views/Dialogs/NoticePopup.axaml | 32 +-- .../Views/Dialogs/OnboardingDialog.axaml | 11 +- .../Views/Dialogs/OptionPopup.axaml | 14 +- .../Views/Dialogs/ProgressPopup.axaml | 32 ++- .../Views/Dialogs/ResizeCanvasPopup.axaml | 48 ++-- .../Views/Dialogs/ResizeDocumentPopup.axaml | 2 +- .../Views/Dialogs/ShortcutsPopup.axaml | 28 +- .../Views/Dock/ChannelsDockView.axaml | 2 +- .../Views/Dock/LazyDocumentTemplate.axaml | 7 +- .../Views/Input/AnchorPointPicker.axaml | 2 +- .../Views/Input/BlendModeComboBox.cs | 1 + .../Views/Input/FontFamilyPicker.axaml | 4 +- .../Views/Input/FontFamilyPicker.axaml.cs | 5 +- src/PixiEditor/Views/Input/SizePicker.axaml | 23 +- .../Views/Input/SmallColorPicker.axaml | 3 +- .../Views/Layers/FolderControl.axaml | 2 +- .../Views/Layers/LayerControl.axaml | 2 +- .../Views/Layers/LayersManager.axaml | 78 +++--- .../Views/Layers/ReferenceLayer.axaml | 2 +- .../Views/Main/ActionDisplayBar.axaml | 9 +- .../CommandSearch/CommandSearchControl.axaml | 3 +- .../CommandSearchControl.axaml.cs | 1 + .../Main/CreateDocumentFallbackView.axaml | 2 +- src/PixiEditor/Views/Main/MainTitleBar.axaml | 2 +- .../Views/Main/MiniAnimationPlayer.axaml | 2 +- .../Views/Main/Tools/ToolPickerButton.axaml | 6 +- src/PixiEditor/Views/Main/Tools/Toolbar.axaml | 2 +- .../Main/ViewportControls/Viewport.axaml | 10 +- .../Main/ViewportControls/Viewport.axaml.cs | 1 + src/PixiEditor/Views/MainView.axaml.cs | 1 + src/PixiEditor/Views/MainWindow.axaml | 3 +- .../Properties/BooleanPropertyView.axaml | 3 +- .../Properties/ColorMatrixPropertyView.axaml | 4 +- .../Nodes/Properties/ColorPropertyView.axaml | 2 +- .../Nodes/Properties/DoublePropertyView.axaml | 7 +- .../FontFamilyNamePropertyView.axaml | 8 +- .../Properties/GenericEnumPropertyView.axaml | 2 +- .../Properties/GenericPropertyView.axaml | 20 +- .../Nodes/Properties/Int32PropertyView.axaml | 8 +- .../Nodes/Properties/KernelPropertyView.axaml | 5 +- .../Properties/Matrix4x5FPropertyView.axaml | 6 +- .../Properties/PaintablePropertyView.axaml | 2 +- .../Nodes/Properties/StringPropertyView.axaml | 2 +- .../Properties/StringPropertyView.axaml.cs | 1 - .../Nodes/Properties/Vec3DPropertyView.axaml | 9 +- .../Nodes/Properties/VecDPropertyView.axaml | 7 +- .../Nodes/Properties/VecIPropertyView.axaml | 14 +- .../SymmetryOverlay/SymmetryOverlay.cs | 2 +- .../Views/Palettes/ColorReplacer.axaml | 2 +- .../Views/Palettes/PaletteColorAdder.axaml | 2 +- .../Views/Palettes/PaletteItem.axaml | 74 ++--- .../Views/Palettes/PaletteViewer.axaml | 17 +- .../Views/Palettes/PaletteViewer.axaml.cs | 2 +- src/PixiEditor/Views/Rendering/Scene.cs | 2 +- .../ImportShortcutTemplatePopup.axaml | 2 +- .../ImportShortcutTemplatePopup.axaml.cs | 2 +- .../Shortcuts/KeyCombinationBox.axaml.cs | 2 +- src/PixiEditor/Views/Shortcuts/ShortcutBox.cs | 2 +- .../Views/Shortcuts/ShortcutHint.axaml | 2 +- .../Settings/BoolSettingView.axaml | 5 +- .../Settings/EnumSettingView.axaml | 5 +- .../Settings/FloatSettingView.axaml | 3 +- .../Settings/FontFamilySettingView.axaml | 3 +- .../Settings/PercentSettingView.axaml | 3 +- .../Settings/SizeSettingView.axaml | 3 +- .../Views/Windows/BetaExampleButton.axaml | 3 +- .../Views/Windows/BetaExampleFile.cs | 2 +- .../Views/Windows/HelloTherePopup.axaml | 9 +- .../Views/Windows/PalettesBrowser.axaml | 39 +-- .../Views/Windows/PalettesBrowser.axaml.cs | 2 +- .../Windows/Settings/SettingsWindow.axaml | 29 +- .../Windows/Settings/ShortcutsBinder.axaml | 5 +- 273 files changed, 1472 insertions(+), 772 deletions(-) create mode 100644 samples/Sample9_Document/CommandsSampleExtension.cs create mode 100644 samples/Sample9_Document/Program.cs create mode 100644 samples/Sample9_Document/Resources/cs.png create mode 100644 samples/Sample9_Document/Sample9_Document.csproj create mode 100644 samples/Sample9_Document/extension.json create mode 100644 src/PixiEditor.Extensions.CommonApi/Documents/IDocument.cs create mode 100644 src/PixiEditor.Extensions.CommonApi/FlyUI/Events/NumberEventArgs.cs create mode 100644 src/PixiEditor.Extensions.CommonApi/FlyUI/Events/TextEventArgs.cs create mode 100644 src/PixiEditor.Extensions.CommonApi/Utilities/ByteReader.cs create mode 100644 src/PixiEditor.Extensions.CommonApi/Utilities/ByteWriter.cs create mode 100644 src/PixiEditor.Extensions.Sdk/Api/Documents/Document.cs create mode 100644 src/PixiEditor.Extensions.Sdk/Api/FlyUI/SizeInputField.cs create mode 100644 src/PixiEditor.Extensions.Sdk/Api/FlyUI/TextField.cs create mode 100644 src/PixiEditor.Extensions.Sdk/Bridge/Interop.Document.cs create mode 100644 src/PixiEditor.Extensions/FlyUI/Elements/SizeInputField.cs create mode 100644 src/PixiEditor.Extensions/FlyUI/Elements/TextField.cs rename src/{PixiEditor/Helpers/Behaviours => PixiEditor.UI.Common/Behaviors}/TextBoxFocusBehavior.cs (97%) rename src/{PixiEditor/Views/Input => PixiEditor.UI.Common/Controls}/NumberInput.cs (98%) rename src/{PixiEditor/Views/Input => PixiEditor.UI.Common/Controls}/SizeInput.axaml (76%) rename src/{PixiEditor/Views/Input => PixiEditor.UI.Common/Controls}/SizeInput.axaml.cs (97%) rename src/{PixiEditor.Extensions/Helpers => PixiEditor.UI.Common/Localization}/EnumHelpers.cs (97%) rename src/{PixiEditor.Extensions/UI => PixiEditor.UI.Common/Localization}/ExternalProperty.cs (92%) rename src/{PixiEditor.Extensions/UI => PixiEditor.UI.Common/Localization}/ICustomTranslatorElement.cs (83%) rename src/{PixiEditor.Extensions/Common => PixiEditor.UI.Common}/Localization/ILocalizationProvider.cs (94%) rename src/{PixiEditor.Extensions/Common => PixiEditor.UI.Common}/Localization/Language.cs (93%) rename src/{PixiEditor.Extensions/Common => PixiEditor.UI.Common}/Localization/LanguageData.cs (95%) rename src/{PixiEditor.Extensions/Common => PixiEditor.UI.Common}/Localization/LocalizationData.cs (92%) rename src/{PixiEditor.Extensions/Common => PixiEditor.UI.Common}/Localization/LocalizationKeyShowMode.cs (88%) rename src/{PixiEditor.Extensions/Common => PixiEditor.UI.Common}/Localization/LocalizedString.cs (98%) rename src/{PixiEditor.Extensions/UI => PixiEditor.UI.Common/Localization}/Translator.cs (98%) diff --git a/samples/PixiEditorExtensionSamples.sln b/samples/PixiEditorExtensionSamples.sln index 1f4c38cc1..b62328642 100644 --- a/samples/PixiEditorExtensionSamples.sln +++ b/samples/PixiEditorExtensionSamples.sln @@ -25,6 +25,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample8_Commands", "Sample8 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample8_CommandLibrary", "Sample8_CommandLibrary\Sample8_CommandLibrary.csproj", "{3559A288-DF82-4429-B23C-CFF9E55B372E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample9_Document", "Sample9_Document\Sample9_Document.csproj", "{E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -74,6 +76,10 @@ Global {3559A288-DF82-4429-B23C-CFF9E55B372E}.Debug|Any CPU.Build.0 = Debug|Any CPU {3559A288-DF82-4429-B23C-CFF9E55B372E}.Release|Any CPU.ActiveCfg = Release|Any CPU {3559A288-DF82-4429-B23C-CFF9E55B372E}.Release|Any CPU.Build.0 = Release|Any CPU + {E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E018D2C3-2DD7-4BC7-AAAF-91DA949789E4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {FD9B4C32-4D2E-410E-BC6B-787779BEB6E2} = {7CC35BC4-829F-4EF4-8EB6-E1D46206E7DC} diff --git a/samples/Sample7_FlyUI/WindowContentElement.cs b/samples/Sample7_FlyUI/WindowContentElement.cs index 985ab2275..eec1be6a9 100644 --- a/samples/Sample7_FlyUI/WindowContentElement.cs +++ b/samples/Sample7_FlyUI/WindowContentElement.cs @@ -7,13 +7,20 @@ using PixiEditor.Extensions.Sdk.Api.Window; namespace FlyUISample; -[SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1118:Parameter should not span multiple lines", Justification = "FlyUI style")] +[SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1118:Parameter should not span multiple lines", + Justification = "FlyUI style")] public class WindowContentElement : StatelessElement { public PopupWindow Window { get; set; } public override ControlDefinition BuildNative() { + SizeInputField field = new SizeInputField(); + field.SizeChanged += args => + { + PixiEditorExtension.Api.Logger.Log(field.Value.ToString()); + }; + Layout layout = new Layout(body: new Container(margin: Edges.All(25), child: new Column( @@ -29,7 +36,8 @@ public class WindowContentElement : StatelessElement ), new Align( alignment: Alignment.CenterRight, - child: new Text("- Paulo Coelho, The Alchemist (1233)", textStyle: new TextStyle(fontStyle: FontStyle.Italic)) + child: new Text("- Paulo Coelho, The Alchemist (1233)", + textStyle: new TextStyle(fontStyle: FontStyle.Italic)) ), new Container( margin: Edges.Symmetric(25, 0), @@ -47,6 +55,7 @@ public class WindowContentElement : StatelessElement ? "Checked" : "Unchecked"); }), + field, new Center( new Button( child: new Text("Close"), onClick: _ => { Window.Close(); })) @@ -57,5 +66,4 @@ public class WindowContentElement : StatelessElement return layout.BuildNative(); } - } \ No newline at end of file diff --git a/samples/Sample9_Document/CommandsSampleExtension.cs b/samples/Sample9_Document/CommandsSampleExtension.cs new file mode 100644 index 000000000..91d900d64 --- /dev/null +++ b/samples/Sample9_Document/CommandsSampleExtension.cs @@ -0,0 +1,24 @@ +using PixiEditor.Extensions.CommonApi.Commands; +using PixiEditor.Extensions.Sdk; + +namespace Sample9_Commands; + +public class CommandsSampleExtension : PixiEditorExtension +{ + /// + /// This method is called when extension is loaded. + /// All extensions are first loaded and then initialized. This method is called before . + /// + public override void OnLoaded() + { + } + + /// + /// This method is called when extension is initialized. After this method is called, you can use Api property to access PixiEditor API. + /// + public override void OnInitialized() + { + var doc = Api.Documents.ImportFile("Resources/cs.png", true); // Open file from the extension resources + doc?.Resize(128, 128); // Resizes whole document + } +} \ No newline at end of file diff --git a/samples/Sample9_Document/Program.cs b/samples/Sample9_Document/Program.cs new file mode 100644 index 000000000..24b96b2e0 --- /dev/null +++ b/samples/Sample9_Document/Program.cs @@ -0,0 +1,8 @@ +namespace Sample9_Commands; + +public static class Program +{ + public static void Main() + { + } +} \ No newline at end of file diff --git a/samples/Sample9_Document/Resources/cs.png b/samples/Sample9_Document/Resources/cs.png new file mode 100644 index 0000000000000000000000000000000000000000..518a64bc00a2509b9c0f7fbd8c8145502afd535d GIT binary patch literal 13764 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 literal 0 HcmV?d00001 diff --git a/samples/Sample9_Document/Sample9_Document.csproj b/samples/Sample9_Document/Sample9_Document.csproj new file mode 100644 index 000000000..171adb632 --- /dev/null +++ b/samples/Sample9_Document/Sample9_Document.csproj @@ -0,0 +1,45 @@ + + + + net8.0 + wasi-wasm + Exe + true + true + true + ..\..\src\PixiEditor.Desktop\bin\Debug\net8.0\Extensions + false + false + Sample9_Commands + + + + + + + + + + + PreserveNewest + + + + + + PreserveNewest + + + + + + PreserveNewest + + + + + + + + + diff --git a/samples/Sample9_Document/extension.json b/samples/Sample9_Document/extension.json new file mode 100644 index 000000000..6433016c0 --- /dev/null +++ b/samples/Sample9_Document/extension.json @@ -0,0 +1,44 @@ +{ + "displayName": "Sample Extension - Document", + "uniqueName": "yourCompany.Samples.Document", + "description": "Sample Document extension for PixiEditor", + "version": "1.0.0", + "localization": { + "languages": [ + { + "name": "English", + "code": "en", + "localeFileName": "Localization/en.json" + }, + { + "name": "Polish", + "code": "pl", + "localeFileName": "Localization/pl.json" + } + ] + }, + "author": { + "name": "PixiEditor", + "email": "info@pixieditor.net", + "website": "https://pixieditor.net" + }, + "publisher": { + "name": "PixiEditor", + "email": "info@pixieditor.net", + "website": "https://pixieditor.net" + }, + "contributors": [ + { + "name": "flabbet", + "email": "some@mail.com", + "website": "https://github.com/flabbet" + } + ], + "license": "MIT", + "categories": [ + "Extension" + ], + "permissions": [ + "OpenDocuments" + ] +} \ No newline at end of file diff --git a/src/PixiEditor.Browser/Program.cs b/src/PixiEditor.Browser/Program.cs index c467359ac..d5cf3031d 100644 --- a/src/PixiEditor.Browser/Program.cs +++ b/src/PixiEditor.Browser/Program.cs @@ -2,10 +2,11 @@ using System.Threading.Tasks; using Avalonia; using Avalonia.Browser; -using PixiEditor; [assembly: SupportedOSPlatform("browser")] +namespace PixiEditor.Avalonia.Browser; + internal sealed partial class Program { private static Task Main(string[] args) => BuildAvaloniaApp() @@ -13,4 +14,4 @@ internal sealed partial class Program public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure(); -} +} \ No newline at end of file diff --git a/src/PixiEditor.ChangeableDocument/ChangeInfos/Root/ReferenceLayerChangeInfos/SetReferenceLayer_ChangeInfo.cs b/src/PixiEditor.ChangeableDocument/ChangeInfos/Root/ReferenceLayerChangeInfos/SetReferenceLayer_ChangeInfo.cs index 5b41c6ec2..693d21140 100644 --- a/src/PixiEditor.ChangeableDocument/ChangeInfos/Root/ReferenceLayerChangeInfos/SetReferenceLayer_ChangeInfo.cs +++ b/src/PixiEditor.ChangeableDocument/ChangeInfos/Root/ReferenceLayerChangeInfos/SetReferenceLayer_ChangeInfo.cs @@ -2,6 +2,6 @@ using Drawie.Backend.Core.Numerics; using Drawie.Numerics; -namespace PixiEditor.ChangeableDocument.ChangeInfos.Structure; +namespace PixiEditor.ChangeableDocument.ChangeInfos.Root.ReferenceLayerChangeInfos; public record class SetReferenceLayer_ChangeInfo(ImmutableArray ImagePbgra8888Bytes, VecI ImageSize, ShapeCorners Shape) : IChangeInfo; diff --git a/src/PixiEditor.Desktop/Program.cs b/src/PixiEditor.Desktop/Program.cs index 276205095..03ac8c942 100644 --- a/src/PixiEditor.Desktop/Program.cs +++ b/src/PixiEditor.Desktop/Program.cs @@ -1,7 +1,7 @@ using System; using Avalonia; using Avalonia.Logging; -using Drawie.Interop.VulkanAvalonia; +using Drawie.Interop.Avalonia; namespace PixiEditor.Desktop; diff --git a/src/PixiEditor.Extensions.CommonApi/Documents/IDocument.cs b/src/PixiEditor.Extensions.CommonApi/Documents/IDocument.cs new file mode 100644 index 000000000..1ac1ca77e --- /dev/null +++ b/src/PixiEditor.Extensions.CommonApi/Documents/IDocument.cs @@ -0,0 +1,7 @@ +namespace PixiEditor.Extensions.CommonApi.Documents; + +public interface IDocument +{ + public Guid Id { get; } + public void Resize(int width, int height); +} diff --git a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventArgs.cs b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventArgs.cs index 9c3ab33ba..d91aa32f2 100644 --- a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventArgs.cs +++ b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventArgs.cs @@ -1,12 +1,44 @@ -namespace PixiEditor.Extensions.CommonApi.FlyUI.Events; +using System.Collections; +using PixiEditor.Extensions.CommonApi.Utilities; + +namespace PixiEditor.Extensions.CommonApi.FlyUI.Events; public class ElementEventArgs { - public object Sender { get; set; } - public static ElementEventArgs Empty { get; } = new ElementEventArgs(); + public object Sender { get; set; } + + public static ElementEventArgs Deserialize(byte[] data) + { + if (data == null) return new ElementEventArgs(); + + ByteReader reader = new ByteReader(data); + string eventType = reader.ReadString(); + ElementEventArgs eventArgs = eventType switch // TODO: more generic implementation + { + nameof(ToggleEventArgs) => new ToggleEventArgs(reader.ReadBool()), + nameof(TextEventArgs) => new TextEventArgs(reader.ReadString()), + nameof(NumberEventArgs) => new NumberEventArgs(reader.ReadDouble()), + _ => throw new NotSupportedException($"Event type '{eventType}' is not supported.") + }; + + return eventArgs; + } + + public byte[] Serialize() + { + ByteWriter writer = new ByteWriter(); + writer.WriteString(GetType().Name); + SerializeArgs(writer); + + return writer.ToArray(); + } + + protected virtual void SerializeArgs(ByteWriter writer) + { + // Default implementation does nothing. Override in derived classes to serialize specific properties. + } } public class ElementEventArgs : ElementEventArgs where TEventArgs : ElementEventArgs { - public static new ElementEventArgs Empty { get; } = new ElementEventArgs(); } diff --git a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventHandler.cs b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventHandler.cs index ac141ea6a..bf5dbfe88 100644 --- a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventHandler.cs +++ b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ElementEventHandler.cs @@ -1,4 +1,6 @@ namespace PixiEditor.Extensions.CommonApi.FlyUI.Events; public delegate void ElementEventHandler(ElementEventArgs args); -public delegate void ElementEventHandler(TEventArgs args) where TEventArgs : ElementEventArgs; + +public delegate void ElementEventHandler(TEventArgs args) + where TEventArgs : ElementEventArgs; diff --git a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/NumberEventArgs.cs b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/NumberEventArgs.cs new file mode 100644 index 000000000..698aca09f --- /dev/null +++ b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/NumberEventArgs.cs @@ -0,0 +1,19 @@ +using System.Numerics; +using PixiEditor.Extensions.CommonApi.Utilities; + +namespace PixiEditor.Extensions.CommonApi.FlyUI.Events; + +public class NumberEventArgs : ElementEventArgs +{ + public double Value { get; } + + public NumberEventArgs(double value) + { + Value = value; + } + + protected override void SerializeArgs(ByteWriter writer) + { + writer.WriteDouble(Value); + } +} diff --git a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/TextEventArgs.cs b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/TextEventArgs.cs new file mode 100644 index 000000000..67137a693 --- /dev/null +++ b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/TextEventArgs.cs @@ -0,0 +1,19 @@ +using System.Collections; +using PixiEditor.Extensions.CommonApi.Utilities; + +namespace PixiEditor.Extensions.CommonApi.FlyUI.Events; + +public class TextEventArgs : ElementEventArgs +{ + public string Text { get; set; } + + public TextEventArgs(string newText) + { + Text = newText; + } + + protected override void SerializeArgs(ByteWriter writer) + { + writer.WriteString(Text); + } +} diff --git a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ToggleEventArgs.cs b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ToggleEventArgs.cs index 2d7ac49c4..02f985cf8 100644 --- a/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ToggleEventArgs.cs +++ b/src/PixiEditor.Extensions.CommonApi/FlyUI/Events/ToggleEventArgs.cs @@ -1,4 +1,7 @@ -namespace PixiEditor.Extensions.CommonApi.FlyUI.Events; +using System.Collections; +using PixiEditor.Extensions.CommonApi.Utilities; + +namespace PixiEditor.Extensions.CommonApi.FlyUI.Events; public class ToggleEventArgs : ElementEventArgs { @@ -8,4 +11,9 @@ public class ToggleEventArgs : ElementEventArgs { IsToggled = isToggled; } + + protected override void SerializeArgs(ByteWriter writer) + { + writer.WriteBool(IsToggled); + } } diff --git a/src/PixiEditor.Extensions.CommonApi/IO/IDocumentProvider.cs b/src/PixiEditor.Extensions.CommonApi/IO/IDocumentProvider.cs index 9013d9788..8fd31f7c7 100644 --- a/src/PixiEditor.Extensions.CommonApi/IO/IDocumentProvider.cs +++ b/src/PixiEditor.Extensions.CommonApi/IO/IDocumentProvider.cs @@ -1,6 +1,10 @@ +using PixiEditor.Extensions.CommonApi.Documents; + namespace PixiEditor.Extensions.CommonApi.IO; public interface IDocumentProvider { - public void ImportFile(string path, bool associatePath = true); + public IDocument? ActiveDocument { get; } + public IDocument? ImportFile(string path, bool associatePath = true); + public IDocument? GetDocument(Guid id); } diff --git a/src/PixiEditor.Extensions.CommonApi/Utilities/ByteReader.cs b/src/PixiEditor.Extensions.CommonApi/Utilities/ByteReader.cs new file mode 100644 index 000000000..ac5dcb726 --- /dev/null +++ b/src/PixiEditor.Extensions.CommonApi/Utilities/ByteReader.cs @@ -0,0 +1,62 @@ +namespace PixiEditor.Extensions.CommonApi.Utilities; + +public class ByteReader +{ + private byte[] _buffer; + private int _position; + + public ByteReader(byte[] buffer) + { + _buffer = buffer; + _position = 0; + } + + public byte ReadByte() + { + return _buffer[_position++]; + } + + public string ReadString() + { + int length = ReadInt(); + string result = System.Text.Encoding.UTF8.GetString(_buffer, _position, length); + _position += length; + return result; + } + + public int ReadInt() + { + int result = BitConverter.ToInt32(_buffer, _position); + _position += sizeof(int); + return result; + } + + public float ReadFloat() + { + float result = BitConverter.ToSingle(_buffer, _position); + _position += sizeof(float); + return result; + } + + public bool ReadBool() + { + bool result = BitConverter.ToBoolean(_buffer, _position); + _position += sizeof(bool); + return result; + } + + public byte[] ReadBytes(int length) + { + byte[] result = new byte[length]; + Array.Copy(_buffer, _position, result, 0, length); + _position += length; + return result; + } + + public double ReadDouble() + { + double result = BitConverter.ToDouble(_buffer, _position); + _position += sizeof(double); + return result; + } +} diff --git a/src/PixiEditor.Extensions.CommonApi/Utilities/ByteWriter.cs b/src/PixiEditor.Extensions.CommonApi/Utilities/ByteWriter.cs new file mode 100644 index 000000000..6e5aee0a3 --- /dev/null +++ b/src/PixiEditor.Extensions.CommonApi/Utilities/ByteWriter.cs @@ -0,0 +1,60 @@ +namespace PixiEditor.Extensions.CommonApi.Utilities; + +public class ByteWriter +{ + private List _buffer; + private int _position; + + public ByteWriter() + { + _buffer = new List(); + _position = 0; + } + + public void WriteByte(byte value) + { + _buffer.Add(value); + _position++; + } + + public void WriteString(string value) + { + byte[] stringBytes = System.Text.Encoding.UTF8.GetBytes(value); + WriteInt(stringBytes.Length); + _buffer.AddRange(stringBytes); + } + + public void WriteInt(int value) + { + byte[] intBytes = BitConverter.GetBytes(value); + _buffer.AddRange(intBytes); + } + + public void WriteFloat(float value) + { + byte[] floatBytes = BitConverter.GetBytes(value); + _buffer.AddRange(floatBytes); + } + + public void WriteDouble(double value) + { + byte[] doubleBytes = BitConverter.GetBytes(value); + _buffer.AddRange(doubleBytes); + } + + public void WriteBool(bool value) + { + byte[] boolBytes = BitConverter.GetBytes(value); + _buffer.AddRange(boolBytes); + } + + public void WriteBytes(byte[] value) + { + _buffer.AddRange(value); + } + + public byte[] ToArray() + { + return _buffer.ToArray(); + } +} diff --git a/src/PixiEditor.Extensions.Runtime/ExtensionException.cs b/src/PixiEditor.Extensions.Runtime/ExtensionException.cs index 2251294c6..1ece4578b 100644 --- a/src/PixiEditor.Extensions.Runtime/ExtensionException.cs +++ b/src/PixiEditor.Extensions.Runtime/ExtensionException.cs @@ -1,5 +1,5 @@ -using PixiEditor.Extensions.Common.Localization; -using PixiEditor.Extensions.Exceptions; +using PixiEditor.Extensions.Exceptions; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Extensions.Runtime; diff --git a/src/PixiEditor.Extensions.Sdk/Api/Documents/Document.cs b/src/PixiEditor.Extensions.Sdk/Api/Documents/Document.cs new file mode 100644 index 000000000..f85a29b97 --- /dev/null +++ b/src/PixiEditor.Extensions.Sdk/Api/Documents/Document.cs @@ -0,0 +1,21 @@ +using PixiEditor.Extensions.CommonApi.Documents; +using PixiEditor.Extensions.Sdk.Bridge; + +namespace PixiEditor.Extensions.Sdk.Api.Documents; + +public class Document : IDocument +{ + public Guid Id => documentId; + private Guid documentId; + + internal Document(Guid documentId) + { + this.documentId = documentId; + } + + + public void Resize(int width, int height) + { + Native.resize_document(documentId.ToString(), width, height); + } +} diff --git a/src/PixiEditor.Extensions.Sdk/Api/FlyUI/LayoutElement.cs b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/LayoutElement.cs index 060fd98a8..9a4200db5 100644 --- a/src/PixiEditor.Extensions.Sdk/Api/FlyUI/LayoutElement.cs +++ b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/LayoutElement.cs @@ -6,6 +6,8 @@ namespace PixiEditor.Extensions.Sdk.Api.FlyUI; public abstract class LayoutElement : ILayoutElement { private Dictionary> _events; + private Dictionary<(string, Delegate), ElementEventHandler> _wrappedHandlers = new(); + public List BuildQueuedEvents = new List(); public int UniqueId { get; set; } @@ -74,7 +76,7 @@ public abstract class LayoutElement : ILayoutElement BuildQueuedEvents.Add(eventName); } - /*public void AddEvent(string eventName, ElementEventHandler eventHandler) where TEventArgs : ElementEventArgs + public void AddEvent(string eventName, ElementEventHandler eventHandler) where T : ElementEventArgs { if (_events == null) { @@ -86,9 +88,12 @@ public abstract class LayoutElement : ILayoutElement _events.Add(eventName, new List()); } - _events[eventName].Add((args => eventHandler((TEventArgs)args))); + ElementEventHandler wrapped = x => eventHandler(x as T); + + _wrappedHandlers.Add((eventName, eventHandler), wrapped); + _events[eventName].Add(wrapped); BuildQueuedEvents.Add(eventName); - }*/ + } public void RemoveEvent(string eventName, ElementEventHandler eventHandler) { @@ -105,7 +110,7 @@ public abstract class LayoutElement : ILayoutElement _events[eventName].Remove(eventHandler); } - /*public void RemoveEvent(string eventName, ElementEventHandler eventHandler) where TEventArgs : ElementEventArgs + public void RemoveEvent(string eventName, ElementEventHandler eventHandler) where T : ElementEventArgs { if (_events == null) { @@ -117,8 +122,12 @@ public abstract class LayoutElement : ILayoutElement return; } - _events[eventName].Remove((args => eventHandler((TEventArgs)args))); - }*/ + if (_wrappedHandlers.TryGetValue((eventName, eventHandler), out ElementEventHandler wrapped)) + { + _wrappedHandlers.Remove((eventName, eventHandler)); + _events[eventName].Remove(wrapped); + } + } public void RaiseEvent(string eventName, ElementEventArgs args) { diff --git a/src/PixiEditor.Extensions.Sdk/Api/FlyUI/SizeInputField.cs b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/SizeInputField.cs new file mode 100644 index 000000000..437f90628 --- /dev/null +++ b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/SizeInputField.cs @@ -0,0 +1,39 @@ +using PixiEditor.Extensions.CommonApi.FlyUI; +using PixiEditor.Extensions.CommonApi.FlyUI.Events; + +namespace PixiEditor.Extensions.Sdk.Api.FlyUI; + +public class SizeInputField : LayoutElement +{ + public event ElementEventHandler SizeChanged + { + add => AddEvent(nameof(SizeChanged), value); + remove => RemoveEvent(nameof(SizeChanged), value); + } + public double Value { get; set; } + public double Min { get; set; } + public double Max { get; set; } + public int Decimals { get; set; } + public string Unit { get; set; } + + public SizeInputField(double value = 0, double min = 1, double max = double.MaxValue, int decimals = 0, string unit = "px", Cursor? cursor = null) : base(cursor) + { + Value = value; + Min = min; + Max = max; + Decimals = decimals; + Unit = unit; + SizeChanged += e => Value = e.Value; + } + + protected override ControlDefinition CreateControl() + { + ControlDefinition field = new ControlDefinition(UniqueId, "SizeInputField"); + field.AddProperty(Value); + field.AddProperty(Min); + field.AddProperty(Max); + field.AddProperty(Decimals); + field.AddProperty(Unit); + return field; + } +} diff --git a/src/PixiEditor.Extensions.Sdk/Api/FlyUI/StatelessElement.cs b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/StatelessElement.cs index 576a2a71d..8ad0b3a2c 100644 --- a/src/PixiEditor.Extensions.Sdk/Api/FlyUI/StatelessElement.cs +++ b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/StatelessElement.cs @@ -9,6 +9,10 @@ public abstract class StatelessElement : LayoutElement, IStatelessElement Build() { return this; diff --git a/src/PixiEditor.Extensions.Sdk/Api/FlyUI/TextField.cs b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/TextField.cs new file mode 100644 index 000000000..f5105dc4f --- /dev/null +++ b/src/PixiEditor.Extensions.Sdk/Api/FlyUI/TextField.cs @@ -0,0 +1,27 @@ +using PixiEditor.Extensions.CommonApi.FlyUI; +using PixiEditor.Extensions.CommonApi.FlyUI.Events; + +namespace PixiEditor.Extensions.Sdk.Api.FlyUI; + +public class TextField : LayoutElement +{ + public event ElementEventHandler TextChanged + { + add => AddEvent(nameof(TextChanged), value); + remove => RemoveEvent(nameof(TextChanged), value); + } + public string Text { get; set; } + + public TextField(string? text = null, Cursor? cursor = null) : base(cursor) + { + Text = text ?? string.Empty; + TextChanged += e => Text = e.Text; + } + + protected override ControlDefinition CreateControl() + { + ControlDefinition textField = new ControlDefinition(UniqueId, "TextField"); + textField.AddProperty(Text); + return textField; + } +} diff --git a/src/PixiEditor.Extensions.Sdk/Api/IO/DocumentProvider.cs b/src/PixiEditor.Extensions.Sdk/Api/IO/DocumentProvider.cs index 7c39070e3..fb8c658bd 100644 --- a/src/PixiEditor.Extensions.Sdk/Api/IO/DocumentProvider.cs +++ b/src/PixiEditor.Extensions.Sdk/Api/IO/DocumentProvider.cs @@ -1,12 +1,24 @@ +using PixiEditor.Extensions.CommonApi.Documents; using PixiEditor.Extensions.CommonApi.IO; +using PixiEditor.Extensions.Sdk.Api.Documents; using PixiEditor.Extensions.Sdk.Bridge; namespace PixiEditor.Extensions.Sdk.Api.IO; public class DocumentProvider : IDocumentProvider { - public void ImportFile(string path, bool associatePath = true) + public IDocument ActiveDocument => Interop.GetActiveDocument(); + + public IDocument? ImportFile(string path, bool associatePath = true) { - Native.import_file(path, associatePath); + return Interop.ImportFile(path, associatePath); + } + + public IDocument? GetDocument(Guid id) + { + if (id == Guid.Empty) + throw new ArgumentException("Invalid document ID"); + + return new Document(id); } } diff --git a/src/PixiEditor.Extensions.Sdk/Bridge/Interop.Document.cs b/src/PixiEditor.Extensions.Sdk/Bridge/Interop.Document.cs new file mode 100644 index 000000000..2daa31adc --- /dev/null +++ b/src/PixiEditor.Extensions.Sdk/Bridge/Interop.Document.cs @@ -0,0 +1,25 @@ +using PixiEditor.Extensions.CommonApi.Documents; +using PixiEditor.Extensions.Sdk.Api.Documents; + +namespace PixiEditor.Extensions.Sdk.Bridge; + +internal static partial class Interop +{ + public static IDocument GetActiveDocument() + { + string document = Native.get_active_document(); + if (document == null || !Guid.TryParse(document, out Guid id)) + return null; + + return new Document(id); + } + + public static IDocument? ImportFile(string path, bool associatePath) + { + string document = Native.import_file(path, associatePath); + if (document == null || !Guid.TryParse(document, out Guid id)) + return null; + + return new Document(id); + } +} diff --git a/src/PixiEditor.Extensions.Sdk/Bridge/Native.Document.cs b/src/PixiEditor.Extensions.Sdk/Bridge/Native.Document.cs index 6c1bedaa1..48baa3ed7 100644 --- a/src/PixiEditor.Extensions.Sdk/Bridge/Native.Document.cs +++ b/src/PixiEditor.Extensions.Sdk/Bridge/Native.Document.cs @@ -5,5 +5,11 @@ namespace PixiEditor.Extensions.Sdk.Bridge; internal partial class Native { [MethodImpl(MethodImplOptions.InternalCall)] - internal static extern void import_file(string path, bool associatePath); + internal static extern string import_file(string path, bool associatePath); + + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern string get_active_document(); + + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern void resize_document(string documentId, int width, int height); } diff --git a/src/PixiEditor.Extensions.Sdk/Bridge/Native.cs b/src/PixiEditor.Extensions.Sdk/Bridge/Native.cs index 3df16649c..8893d1b99 100644 --- a/src/PixiEditor.Extensions.Sdk/Bridge/Native.cs +++ b/src/PixiEditor.Extensions.Sdk/Bridge/Native.cs @@ -5,6 +5,8 @@ using System.Runtime.CompilerServices; using PixiEditor.Extensions.CommonApi.FlyUI; using PixiEditor.Extensions.CommonApi.FlyUI.Events; using PixiEditor.Extensions.Sdk.Api.FlyUI; +using PixiEditor.Extensions.Sdk.Utilities; +using ProtoBuf; namespace PixiEditor.Extensions.Sdk.Bridge; @@ -50,11 +52,23 @@ internal static partial class Native } [ApiExport("raise_element_event")] - internal static void EventRaised(int internalControlId, string eventName) //TOOD: Args + internal static void EventRaised(int internalControlId, string eventName, IntPtr eventData, int dataLength) { if (LayoutElementsStore.LayoutElements.TryGetValue((int)internalControlId, out ILayoutElement element)) { - element.RaiseEvent(eventName ?? "", new ElementEventArgs { Sender = element }); + byte[] data = InteropUtility.IntPtrToByteArray(eventData, dataLength); + ElementEventArgs args = ElementEventArgs.Deserialize(data); + args.Sender = element; + element.RaiseEvent(eventName ?? "", args); + } + } + + [ApiExport("raise_element_text_event")] + internal static void TextEventRaised(int internalControlId, string eventName, string text) + { + if (LayoutElementsStore.LayoutElements.TryGetValue((int)internalControlId, out ILayoutElement element)) + { + element.RaiseEvent(eventName ?? "", new TextEventArgs(text) { Sender = element }); } } diff --git a/src/PixiEditor.Extensions.Sdk/build/PixiEditor.Api.CGlueMSBuild.dll b/src/PixiEditor.Extensions.Sdk/build/PixiEditor.Api.CGlueMSBuild.dll index 23e67fcdc2caa35324bd910b636c5ed8d6e6ff74..866c5311ff698c06b6980bbf71865fcac0304945 100644 GIT binary patch literal 18944 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
    NY6=KzPp+`dxa0ze%nSp&7y#vY*KOlw2$Qa~LQ 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 IFA#zM4}z{WmjD0& literal 17920 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 n`EGoEl));RnFVz_I2Zoo^Y1a&3e-ZdUVj$?v diff --git a/src/PixiEditor.Extensions.Sdk/build/PixiEditor.Extensions.MSPackageBuilder.dll b/src/PixiEditor.Extensions.Sdk/build/PixiEditor.Extensions.MSPackageBuilder.dll index 3232fb2553752e7a73ecdd6c33eab8ad81d433b6..63aafd6b7cc09bc593049c06b47f8c877d09da11 100644 GIT binary patch delta 4971 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 delta 4562 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 { - var action = Instance.GetAction("raise_element_event"); + var action = Instance.GetAction("raise_element_event"); var ptr = WasmMemoryUtility.WriteString(eventName); - action.Invoke(controlId, ptr); + var data = args.Serialize(); + var dataPtr = WasmMemoryUtility.WriteBytes(data); + int dataSize = data.Length; + + action.Invoke(controlId, ptr, dataPtr, dataSize); WasmMemoryUtility.Free(ptr); + WasmMemoryUtility.Free(dataPtr); }); } diff --git a/src/PixiEditor.Extensions.WasmRuntime/Api/LocalizationApi.cs b/src/PixiEditor.Extensions.WasmRuntime/Api/LocalizationApi.cs index ee556bfe2..4f0e0cc66 100644 --- a/src/PixiEditor.Extensions.WasmRuntime/Api/LocalizationApi.cs +++ b/src/PixiEditor.Extensions.WasmRuntime/Api/LocalizationApi.cs @@ -1,4 +1,4 @@ -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Extensions.WasmRuntime.Api; diff --git a/src/PixiEditor.Extensions.WasmRuntime/Api/Palettes/PalettesApi.cs b/src/PixiEditor.Extensions.WasmRuntime/Api/Palettes/PalettesApi.cs index f83334000..8446d7ec2 100644 --- a/src/PixiEditor.Extensions.WasmRuntime/Api/Palettes/PalettesApi.cs +++ b/src/PixiEditor.Extensions.WasmRuntime/Api/Palettes/PalettesApi.cs @@ -1,9 +1,7 @@ -using CommunityToolkit.HighPerformance; -using PixiEditor.Extensions.CommonApi.Palettes; -using PixiEditor.Extensions.WasmRuntime.Api.Palettes; +using PixiEditor.Extensions.CommonApi.Palettes; using ProtoBuf; -namespace PixiEditor.Extensions.WasmRuntime.Api; +namespace PixiEditor.Extensions.WasmRuntime.Api.Palettes; internal class PalettesApi : ApiGroupHandler { diff --git a/src/PixiEditor.Extensions.WasmRuntime/Api/WindowingApi.cs b/src/PixiEditor.Extensions.WasmRuntime/Api/WindowingApi.cs index ab7de6f6c..1614ef47d 100644 --- a/src/PixiEditor.Extensions.WasmRuntime/Api/WindowingApi.cs +++ b/src/PixiEditor.Extensions.WasmRuntime/Api/WindowingApi.cs @@ -1,10 +1,8 @@ -using PixiEditor.Extensions.Common.Localization; -using PixiEditor.Extensions.CommonApi.Async; -using PixiEditor.Extensions.CommonApi.Utilities; -using PixiEditor.Extensions.CommonApi.Windowing; +using PixiEditor.Extensions.CommonApi.Windowing; using PixiEditor.Extensions.FlyUI.Elements; using PixiEditor.Extensions.WasmRuntime.Utilities; using PixiEditor.Extensions.Windowing; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Extensions.WasmRuntime.Api; diff --git a/src/PixiEditor.Extensions.WasmRuntime/WasmExtensionInstance.cs b/src/PixiEditor.Extensions.WasmRuntime/WasmExtensionInstance.cs index 4c47f9997..a8ad89a11 100644 --- a/src/PixiEditor.Extensions.WasmRuntime/WasmExtensionInstance.cs +++ b/src/PixiEditor.Extensions.WasmRuntime/WasmExtensionInstance.cs @@ -21,7 +21,7 @@ public partial class WasmExtensionInstance : Extension private Linker Linker { get; } private Store Store { get; } private Module Module { get; } - + private LayoutBuilder LayoutBuilder { get; set; } internal ObjectManager NativeObjectManager { get; set; } internal AsyncCallsManager AsyncHandleManager { get; set; } @@ -30,7 +30,7 @@ public partial class WasmExtensionInstance : Extension private string modulePath; private List modules = new(); - + public override string Location => modulePath; partial void LinkApiFunctions(); @@ -49,7 +49,7 @@ public partial class WasmExtensionInstance : Extension AsyncHandleManager = new AsyncCallsManager(); AsyncHandleManager.OnAsyncCallCompleted += OnAsyncCallCompleted; AsyncHandleManager.OnAsyncCallFaulted += OnAsyncCallFaulted; - + LinkApiFunctions(); Linker.DefineModule(Store, Module); @@ -66,19 +66,20 @@ public partial class WasmExtensionInstance : Extension protected override void OnInitialized() { modules.Add(new PreferencesModule(this, Api.Preferences)); - modules.Add(new CommandModule(this, Api.Commands, (ICommandSupervisor)Api.Services.GetService(typeof(ICommandSupervisor)))); + modules.Add(new CommandModule(this, Api.Commands, + (ICommandSupervisor)Api.Services.GetService(typeof(ICommandSupervisor)))); LayoutBuilder = new LayoutBuilder((ElementMap)Api.Services.GetService(typeof(ElementMap))); //SetElementMap(); Instance.GetAction("initialize").Invoke(); base.OnInitialized(); } - + private void OnAsyncCallCompleted(int handle, int result) { Instance.GetAction("async_call_completed").Invoke(handle, result); } - + private void OnAsyncCallFaulted(int handle, string exceptionMessage) { Instance.GetAction("async_call_faulted").Invoke(handle, exceptionMessage); diff --git a/src/PixiEditor.Extensions/Exceptions/RecoverableException.cs b/src/PixiEditor.Extensions/Exceptions/RecoverableException.cs index 103080899..4521dc03a 100644 --- a/src/PixiEditor.Extensions/Exceptions/RecoverableException.cs +++ b/src/PixiEditor.Extensions/Exceptions/RecoverableException.cs @@ -1,5 +1,5 @@ using System.Runtime.Serialization; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Extensions.Exceptions; diff --git a/src/PixiEditor.Extensions/FlyUI/Elements/SizeInputField.cs b/src/PixiEditor.Extensions/FlyUI/Elements/SizeInputField.cs new file mode 100644 index 000000000..8db29401e --- /dev/null +++ b/src/PixiEditor.Extensions/FlyUI/Elements/SizeInputField.cs @@ -0,0 +1,49 @@ +using Avalonia.Controls; +using Avalonia.Data; +using PixiEditor.Extensions.CommonApi.FlyUI.Events; +using PixiEditor.UI.Common.Controls; + +namespace PixiEditor.Extensions.FlyUI.Elements; + +public class SizeInputField : LayoutElement +{ + public event ElementEventHandler SizeChanged + { + add => AddEvent(nameof(SizeChanged), value); + remove => RemoveEvent(nameof(SizeChanged), value); + } + + public double Value { get; set; } + public double Min { get; set; } = 1; + public double Max { get; set; } + public int Decimals { get; set; } + public string Unit { get; set; } + + protected override Control CreateNativeControl() + { + SizeInput sizeInput = new SizeInput { MinSize = Min, MaxSize = Max, Decimals = Decimals, Unit = Unit }; + + Binding binding = new Binding { Source = this, Path = nameof(Value), Mode = BindingMode.TwoWay, }; + + sizeInput.Bind(SizeInput.SizeProperty, binding); + + sizeInput.PropertyChanged += (sender, args) => + { + if (args.Property != SizeInput.SizeProperty) return; + + Value = sizeInput.Size; + RaiseEvent(nameof(SizeChanged), new NumberEventArgs(Value)); + }; + + return sizeInput; + } + + protected override void DeserializeControlProperties(List values) + { + Value = (double)values[0]; + Min = (double)values[1]; + Max = (double)values[2]; + Decimals = (int)values[3]; + Unit = (string)values[4]; + } +} diff --git a/src/PixiEditor.Extensions/FlyUI/Elements/TextField.cs b/src/PixiEditor.Extensions/FlyUI/Elements/TextField.cs new file mode 100644 index 000000000..50c2917f4 --- /dev/null +++ b/src/PixiEditor.Extensions/FlyUI/Elements/TextField.cs @@ -0,0 +1,42 @@ +using Avalonia.Controls; +using Avalonia.Data; +using PixiEditor.Extensions.CommonApi.FlyUI.Events; + +namespace PixiEditor.Extensions.FlyUI.Elements; + +internal class TextField : LayoutElement +{ + public event ElementEventHandler TextChanged + { + add => AddEvent(nameof(TextChanged), value); + remove => RemoveEvent(nameof(TextChanged), value); + } + + public string Text { get; set; } + + public TextField(string text) + { + Text = text; + } + + protected override Control CreateNativeControl() + { + TextBox textBox = new TextBox(); + + Binding binding = + new Binding(nameof(Text)) { Source = this, Mode = BindingMode.TwoWay }; + textBox.Bind(TextBox.TextProperty, binding); + + textBox.TextChanged += (s, e) => + { + RaiseEvent(nameof(TextChanged), new TextEventArgs(textBox.Text)); + }; + + return textBox; + } + + protected override void DeserializeControlProperties(List values) + { + Text = (string)values[0]; + } +} diff --git a/src/PixiEditor.Extensions/Metadata/ExtensionMetadata.cs b/src/PixiEditor.Extensions/Metadata/ExtensionMetadata.cs index d4e15a56a..b8661c131 100644 --- a/src/PixiEditor.Extensions/Metadata/ExtensionMetadata.cs +++ b/src/PixiEditor.Extensions/Metadata/ExtensionMetadata.cs @@ -1,4 +1,4 @@ -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Extensions.Metadata; diff --git a/src/PixiEditor.Extensions/PixiEditor.Extensions.csproj b/src/PixiEditor.Extensions/PixiEditor.Extensions.csproj index 44c1a4777..4b35709c5 100644 --- a/src/PixiEditor.Extensions/PixiEditor.Extensions.csproj +++ b/src/PixiEditor.Extensions/PixiEditor.Extensions.csproj @@ -9,7 +9,7 @@ PixiEditor Extensions PixiEditor Organization PixiEditor Organization - Package for creating custom extensions for pixel art editor PixiEditor + Package for creating custom extensions for univrsal 2D editor PixiEditor @@ -25,5 +25,11 @@ + + + + + + diff --git a/src/PixiEditor/Helpers/Behaviours/TextBoxFocusBehavior.cs b/src/PixiEditor.UI.Common/Behaviors/TextBoxFocusBehavior.cs similarity index 97% rename from src/PixiEditor/Helpers/Behaviours/TextBoxFocusBehavior.cs rename to src/PixiEditor.UI.Common/Behaviors/TextBoxFocusBehavior.cs index 55d5cc195..5fc17003d 100644 --- a/src/PixiEditor/Helpers/Behaviours/TextBoxFocusBehavior.cs +++ b/src/PixiEditor.UI.Common/Behaviors/TextBoxFocusBehavior.cs @@ -5,9 +5,9 @@ using Avalonia.Interactivity; using Avalonia.Threading; using Avalonia.Xaml.Interactivity; -namespace PixiEditor.Helpers.Behaviours; +namespace PixiEditor.UI.Common.Behaviors; -internal class TextBoxFocusBehavior : Behavior +public class TextBoxFocusBehavior : Behavior { public static readonly StyledProperty SelectOnMouseClickProperty = AvaloniaProperty.Register( diff --git a/src/PixiEditor/Views/Input/NumberInput.cs b/src/PixiEditor.UI.Common/Controls/NumberInput.cs similarity index 98% rename from src/PixiEditor/Views/Input/NumberInput.cs rename to src/PixiEditor.UI.Common/Controls/NumberInput.cs index 439c108f0..29971ea75 100644 --- a/src/PixiEditor/Views/Input/NumberInput.cs +++ b/src/PixiEditor.UI.Common/Controls/NumberInput.cs @@ -1,6 +1,5 @@ using System.Data; using System.Globalization; -using System.Linq; using System.Text.RegularExpressions; using Avalonia; using Avalonia.Controls; @@ -11,13 +10,15 @@ using Avalonia.Interactivity; using Avalonia.Layout; using Avalonia.Media; using Avalonia.Xaml.Interactivity; -using PixiEditor.Helpers.Behaviours; +using PixiEditor.UI.Common.Behaviors; using Action = System.Action; -namespace PixiEditor.Views.Input; +namespace PixiEditor.UI.Common.Controls; -internal partial class NumberInput : TextBox +public partial class NumberInput : TextBox { + public static event Action AttachGlobalBehaviors; + public static readonly StyledProperty ValueProperty = AvaloniaProperty.Register( nameof(Value), 0, coerce: CoerceValue); @@ -154,7 +155,7 @@ internal partial class NumberInput : TextBox public NumberInput() { BehaviorCollection behaviors = Interaction.GetBehaviors(this); - behaviors.Add(new GlobalShortcutFocusBehavior()); + AttachGlobalBehaviors?.Invoke(behaviors); TextBoxFocusBehavior behavior = new() { DeselectOnFocusLoss = true, SelectOnMouseClick = true }; BindTextBoxBehavior(behavior); behaviors.Add(behavior); diff --git a/src/PixiEditor/Views/Input/SizeInput.axaml b/src/PixiEditor.UI.Common/Controls/SizeInput.axaml similarity index 76% rename from src/PixiEditor/Views/Input/SizeInput.axaml rename to src/PixiEditor.UI.Common/Controls/SizeInput.axaml index 7a973d1d4..2948c96e3 100644 --- a/src/PixiEditor/Views/Input/SizeInput.axaml +++ b/src/PixiEditor.UI.Common/Controls/SizeInput.axaml @@ -1,11 +1,10 @@ - @@ -28,23 +27,23 @@ - + Width="53"/> - diff --git a/src/PixiEditor/Views/Input/SizeInput.axaml.cs b/src/PixiEditor.UI.Common/Controls/SizeInput.axaml.cs similarity index 97% rename from src/PixiEditor/Views/Input/SizeInput.axaml.cs rename to src/PixiEditor.UI.Common/Controls/SizeInput.axaml.cs index 4594bd7d6..fcc47fc78 100644 --- a/src/PixiEditor/Views/Input/SizeInput.axaml.cs +++ b/src/PixiEditor.UI.Common/Controls/SizeInput.axaml.cs @@ -1,14 +1,13 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Input; -using PixiEditor.Models.Dialogs; -namespace PixiEditor.Views.Input; +namespace PixiEditor.UI.Common.Controls; /// /// Interaction logic for SizeInput.xaml. /// -internal partial class SizeInput : UserControl +public partial class SizeInput : UserControl { public static readonly StyledProperty SizeProperty = AvaloniaProperty.Register(nameof(Size), defaultValue: 1); diff --git a/src/PixiEditor.Extensions/Helpers/EnumHelpers.cs b/src/PixiEditor.UI.Common/Localization/EnumHelpers.cs similarity index 97% rename from src/PixiEditor.Extensions/Helpers/EnumHelpers.cs rename to src/PixiEditor.UI.Common/Localization/EnumHelpers.cs index 036a50767..e9ced345f 100644 --- a/src/PixiEditor.Extensions/Helpers/EnumHelpers.cs +++ b/src/PixiEditor.UI.Common/Localization/EnumHelpers.cs @@ -1,6 +1,6 @@ using System.ComponentModel; -namespace PixiEditor.Extensions.Helpers; +namespace PixiEditor.UI.Common.Localization; public static class EnumHelpers { diff --git a/src/PixiEditor.Extensions/UI/ExternalProperty.cs b/src/PixiEditor.UI.Common/Localization/ExternalProperty.cs similarity index 92% rename from src/PixiEditor.Extensions/UI/ExternalProperty.cs rename to src/PixiEditor.UI.Common/Localization/ExternalProperty.cs index 5749b25e3..87410afba 100644 --- a/src/PixiEditor.Extensions/UI/ExternalProperty.cs +++ b/src/PixiEditor.UI.Common/Localization/ExternalProperty.cs @@ -1,7 +1,6 @@ using Avalonia; -using PixiEditor.Extensions.Common.Localization; -namespace PixiEditor.Extensions.UI; +namespace PixiEditor.UI.Common.Localization; public abstract class ExternalProperty { diff --git a/src/PixiEditor.Extensions/UI/ICustomTranslatorElement.cs b/src/PixiEditor.UI.Common/Localization/ICustomTranslatorElement.cs similarity index 83% rename from src/PixiEditor.Extensions/UI/ICustomTranslatorElement.cs rename to src/PixiEditor.UI.Common/Localization/ICustomTranslatorElement.cs index 8a281fd27..4b53a7efe 100644 --- a/src/PixiEditor.Extensions/UI/ICustomTranslatorElement.cs +++ b/src/PixiEditor.UI.Common/Localization/ICustomTranslatorElement.cs @@ -1,6 +1,6 @@ using Avalonia; -namespace PixiEditor.Extensions.UI; +namespace PixiEditor.UI.Common.Localization; public interface ICustomTranslatorElement { diff --git a/src/PixiEditor.Extensions/Common/Localization/ILocalizationProvider.cs b/src/PixiEditor.UI.Common/Localization/ILocalizationProvider.cs similarity index 94% rename from src/PixiEditor.Extensions/Common/Localization/ILocalizationProvider.cs rename to src/PixiEditor.UI.Common/Localization/ILocalizationProvider.cs index 694b9ff20..e1c90627c 100644 --- a/src/PixiEditor.Extensions/Common/Localization/ILocalizationProvider.cs +++ b/src/PixiEditor.UI.Common/Localization/ILocalizationProvider.cs @@ -1,4 +1,4 @@ -namespace PixiEditor.Extensions.Common.Localization; +namespace PixiEditor.UI.Common.Localization; public interface ILocalizationProvider { diff --git a/src/PixiEditor.Extensions/Common/Localization/Language.cs b/src/PixiEditor.UI.Common/Localization/Language.cs similarity index 93% rename from src/PixiEditor.Extensions/Common/Localization/Language.cs rename to src/PixiEditor.UI.Common/Localization/Language.cs index 2333418fb..aaf5d2e5d 100644 --- a/src/PixiEditor.Extensions/Common/Localization/Language.cs +++ b/src/PixiEditor.UI.Common/Localization/Language.cs @@ -1,8 +1,7 @@ using System.Diagnostics; -using System.Windows; using Avalonia.Media; -namespace PixiEditor.Extensions.Common.Localization; +namespace PixiEditor.UI.Common.Localization; [DebuggerDisplay("{LanguageData.Name}, strings: {Locale.Count}")] public class Language diff --git a/src/PixiEditor.Extensions/Common/Localization/LanguageData.cs b/src/PixiEditor.UI.Common/Localization/LanguageData.cs similarity index 95% rename from src/PixiEditor.Extensions/Common/Localization/LanguageData.cs rename to src/PixiEditor.UI.Common/Localization/LanguageData.cs index af8e5d9e0..5b5d50424 100644 --- a/src/PixiEditor.Extensions/Common/Localization/LanguageData.cs +++ b/src/PixiEditor.UI.Common/Localization/LanguageData.cs @@ -1,7 +1,7 @@ using System.Globalization; using Newtonsoft.Json; -namespace PixiEditor.Extensions.Common.Localization; +namespace PixiEditor.UI.Common.Localization; public class LanguageData { diff --git a/src/PixiEditor.Extensions/Common/Localization/LocalizationData.cs b/src/PixiEditor.UI.Common/Localization/LocalizationData.cs similarity index 92% rename from src/PixiEditor.Extensions/Common/Localization/LocalizationData.cs rename to src/PixiEditor.UI.Common/Localization/LocalizationData.cs index 33778508b..96a8e980a 100644 --- a/src/PixiEditor.Extensions/Common/Localization/LocalizationData.cs +++ b/src/PixiEditor.UI.Common/Localization/LocalizationData.cs @@ -1,7 +1,6 @@ using System.Diagnostics; -using System.IO; -namespace PixiEditor.Extensions.Common.Localization; +namespace PixiEditor.UI.Common.Localization; [DebuggerDisplay("{Languages.Count} Language(s)")] public class LocalizationData diff --git a/src/PixiEditor.Extensions/Common/Localization/LocalizationKeyShowMode.cs b/src/PixiEditor.UI.Common/Localization/LocalizationKeyShowMode.cs similarity index 88% rename from src/PixiEditor.Extensions/Common/Localization/LocalizationKeyShowMode.cs rename to src/PixiEditor.UI.Common/Localization/LocalizationKeyShowMode.cs index b2a26660d..3aa866c16 100644 --- a/src/PixiEditor.Extensions/Common/Localization/LocalizationKeyShowMode.cs +++ b/src/PixiEditor.UI.Common/Localization/LocalizationKeyShowMode.cs @@ -1,4 +1,4 @@ -namespace PixiEditor.Extensions.Common.Localization; +namespace PixiEditor.UI.Common.Localization; public enum LocalizationKeyShowMode { diff --git a/src/PixiEditor.Extensions/Common/Localization/LocalizedString.cs b/src/PixiEditor.UI.Common/Localization/LocalizedString.cs similarity index 98% rename from src/PixiEditor.Extensions/Common/Localization/LocalizedString.cs rename to src/PixiEditor.UI.Common/Localization/LocalizedString.cs index 26573e22f..a27ed5a62 100644 --- a/src/PixiEditor.Extensions/Common/Localization/LocalizedString.cs +++ b/src/PixiEditor.UI.Common/Localization/LocalizedString.cs @@ -1,4 +1,4 @@ -namespace PixiEditor.Extensions.Common.Localization; +namespace PixiEditor.UI.Common.Localization; public struct LocalizedString { diff --git a/src/PixiEditor.Extensions/UI/Translator.cs b/src/PixiEditor.UI.Common/Localization/Translator.cs similarity index 98% rename from src/PixiEditor.Extensions/UI/Translator.cs rename to src/PixiEditor.UI.Common/Localization/Translator.cs index bb6436ec3..05e7815d0 100644 --- a/src/PixiEditor.Extensions/UI/Translator.cs +++ b/src/PixiEditor.UI.Common/Localization/Translator.cs @@ -2,14 +2,10 @@ using Avalonia.Controls; using Avalonia.Controls.Documents; using Avalonia.Controls.Primitives; -using Avalonia.Data; -using Avalonia.Data.Core; using Avalonia.Media; using Avalonia.Reactive; -using PixiEditor.Extensions.Common.Localization; -using PixiEditor.Extensions.Helpers; -namespace PixiEditor.Extensions.UI; +namespace PixiEditor.UI.Common.Localization; public class Translator : Control { diff --git a/src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj b/src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj index 13694ccfe..3a4007856 100644 --- a/src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj +++ b/src/PixiEditor.UI.Common/PixiEditor.UI.Common.csproj @@ -17,5 +17,13 @@ + + + + + + SizeInput.axaml + Code + diff --git a/src/PixiEditor.Windows/Win32.cs b/src/PixiEditor.Windows/Win32.cs index 051c8d031..996fa1b0b 100644 --- a/src/PixiEditor.Windows/Win32.cs +++ b/src/PixiEditor.Windows/Win32.cs @@ -1,7 +1,7 @@ using System.Runtime.InteropServices; using System.Text; -namespace PixiEditor.Helpers; +namespace PixiEditor.Windows; internal class Win32 { public const uint MONITOR_DEFAULTTONEAREST = 0x00000002; diff --git a/src/PixiEditor.Windows/WindowsInputKeys.cs b/src/PixiEditor.Windows/WindowsInputKeys.cs index 452072ecb..3690ce8e1 100644 --- a/src/PixiEditor.Windows/WindowsInputKeys.cs +++ b/src/PixiEditor.Windows/WindowsInputKeys.cs @@ -1,7 +1,6 @@ using System.Text; using Avalonia.Input; using Avalonia.Win32.Input; -using PixiEditor.Helpers; using PixiEditor.OperatingSystem; namespace PixiEditor.Windows; diff --git a/src/PixiEditor.Windows/WindowsOperatingSystem.cs b/src/PixiEditor.Windows/WindowsOperatingSystem.cs index 735dd4b9e..c17a58a61 100644 --- a/src/PixiEditor.Windows/WindowsOperatingSystem.cs +++ b/src/PixiEditor.Windows/WindowsOperatingSystem.cs @@ -1,7 +1,6 @@ using System.Runtime.InteropServices; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Threading; -using PixiEditor.Helpers; using PixiEditor.OperatingSystem; namespace PixiEditor.Windows; diff --git a/src/PixiEditor/App.axaml b/src/PixiEditor/App.axaml index ae0db1f25..537a6bf11 100644 --- a/src/PixiEditor/App.axaml +++ b/src/PixiEditor/App.axaml @@ -2,8 +2,8 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:themes="clr-namespace:PixiEditor.UI.Common.Themes;assembly=PixiEditor.UI.Common" xmlns:avaloniaUi="clr-namespace:PixiEditor" - xmlns:templates="clr-namespace:ColorPicker.AvaloniaUI.Templates;assembly=ColorPicker.AvaloniaUI" xmlns:avalonia="clr-namespace:PixiDocks.Avalonia;assembly=PixiDocks.Avalonia" + xmlns:templates="clr-namespace:ColorPicker.Templates;assembly=ColorPicker.AvaloniaUI" x:Class="PixiEditor.App" Name="PixiEditor" RequestedThemeVariant="Dark"> diff --git a/src/PixiEditor/Exceptions/CorruptedFileException.cs b/src/PixiEditor/Exceptions/CorruptedFileException.cs index 8d21aad8b..477c318c6 100644 --- a/src/PixiEditor/Exceptions/CorruptedFileException.cs +++ b/src/PixiEditor/Exceptions/CorruptedFileException.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Exceptions; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Exceptions; diff --git a/src/PixiEditor/Exceptions/InvalidFileTypeException.cs b/src/PixiEditor/Exceptions/InvalidFileTypeException.cs index 48a4ffe2b..4bd5ae0ba 100644 --- a/src/PixiEditor/Exceptions/InvalidFileTypeException.cs +++ b/src/PixiEditor/Exceptions/InvalidFileTypeException.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Exceptions; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Exceptions; diff --git a/src/PixiEditor/Exceptions/MissingFileException.cs b/src/PixiEditor/Exceptions/MissingFileException.cs index a64f518dc..dcd6a92b5 100644 --- a/src/PixiEditor/Exceptions/MissingFileException.cs +++ b/src/PixiEditor/Exceptions/MissingFileException.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Exceptions; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Exceptions; diff --git a/src/PixiEditor/Helpers/Collections/ActionDisplayList.cs b/src/PixiEditor/Helpers/Collections/ActionDisplayList.cs index f522e14ad..05234c787 100644 --- a/src/PixiEditor/Helpers/Collections/ActionDisplayList.cs +++ b/src/PixiEditor/Helpers/Collections/ActionDisplayList.cs @@ -1,7 +1,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Helpers.Collections; diff --git a/src/PixiEditor/Helpers/Converters/BlendModeToStringConverter.cs b/src/PixiEditor/Helpers/Converters/BlendModeToStringConverter.cs index 973f44b92..2ccf18ec6 100644 --- a/src/PixiEditor/Helpers/Converters/BlendModeToStringConverter.cs +++ b/src/PixiEditor/Helpers/Converters/BlendModeToStringConverter.cs @@ -1,7 +1,7 @@ using System.Globalization; using PixiEditor.Helpers.Extensions; using PixiEditor.ChangeableDocument.Enums; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Helpers.Converters; internal class BlendModeToStringConverter : SingleInstanceConverter diff --git a/src/PixiEditor/Helpers/Converters/BoolToValueConverter.cs b/src/PixiEditor/Helpers/Converters/BoolToValueConverter.cs index 76689f6ab..81f25b6eb 100644 --- a/src/PixiEditor/Helpers/Converters/BoolToValueConverter.cs +++ b/src/PixiEditor/Helpers/Converters/BoolToValueConverter.cs @@ -1,6 +1,6 @@ using System.Globalization; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Converters; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Helpers.Converters; diff --git a/src/PixiEditor/Helpers/Converters/EnumToLocalizedStringConverter.cs b/src/PixiEditor/Helpers/Converters/EnumToLocalizedStringConverter.cs index bb296bb80..5b68e06fc 100644 --- a/src/PixiEditor/Helpers/Converters/EnumToLocalizedStringConverter.cs +++ b/src/PixiEditor/Helpers/Converters/EnumToLocalizedStringConverter.cs @@ -1,5 +1,6 @@ using System.Globalization; using PixiEditor.Extensions.Helpers; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Helpers.Converters; diff --git a/src/PixiEditor/Helpers/Converters/KeyToStringConverter.cs b/src/PixiEditor/Helpers/Converters/KeyToStringConverter.cs index 8005dfd36..87efb2b1a 100644 --- a/src/PixiEditor/Helpers/Converters/KeyToStringConverter.cs +++ b/src/PixiEditor/Helpers/Converters/KeyToStringConverter.cs @@ -1,10 +1,10 @@ using System.Globalization; using System.Text; using Avalonia.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Helpers; using PixiEditor.Models.Input; using PixiEditor.OperatingSystem; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Helpers.Converters; diff --git a/src/PixiEditor/Helpers/EnumDescriptionConverter.cs b/src/PixiEditor/Helpers/EnumDescriptionConverter.cs index 7179660f5..6c14c50be 100644 --- a/src/PixiEditor/Helpers/EnumDescriptionConverter.cs +++ b/src/PixiEditor/Helpers/EnumDescriptionConverter.cs @@ -1,6 +1,7 @@ using System.Globalization; using PixiEditor.Extensions.Helpers; using PixiEditor.Helpers.Converters; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Helpers; diff --git a/src/PixiEditor/Helpers/ServiceCollectionHelpers.cs b/src/PixiEditor/Helpers/ServiceCollectionHelpers.cs index 12f76fc64..d584c6e27 100644 --- a/src/PixiEditor/Helpers/ServiceCollectionHelpers.cs +++ b/src/PixiEditor/Helpers/ServiceCollectionHelpers.cs @@ -5,7 +5,6 @@ using Microsoft.Extensions.DependencyInjection; using PixiEditor.AnimationRenderer.Core; using PixiEditor.AnimationRenderer.FFmpeg; using PixiEditor.Extensions.Commands; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.Commands; using PixiEditor.Extensions.CommonApi.IO; using PixiEditor.Extensions.CommonApi.Logging; @@ -30,6 +29,7 @@ using PixiEditor.Models.Localization; using PixiEditor.Models.Palettes; using PixiEditor.Models.Preferences; using PixiEditor.Models.Serialization.Factories; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Dock; using PixiEditor.ViewModels.Document; using PixiEditor.ViewModels.Menu; diff --git a/src/PixiEditor/Initialization/ClassicDesktopEntry.cs b/src/PixiEditor/Initialization/ClassicDesktopEntry.cs index 1b5f3a56e..eb433a374 100644 --- a/src/PixiEditor/Initialization/ClassicDesktopEntry.cs +++ b/src/PixiEditor/Initialization/ClassicDesktopEntry.cs @@ -8,17 +8,21 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Threading; -using PixiEditor.Extensions.Common.Localization; +using Avalonia.Xaml.Interactivity; using PixiEditor.Extensions.Runtime; using PixiEditor.Helpers; +using PixiEditor.Helpers.Behaviours; using PixiEditor.Models.Controllers; using PixiEditor.Models.Dialogs; using PixiEditor.Models.ExceptionHandling; using PixiEditor.Models.IO; using PixiEditor.OperatingSystem; using PixiEditor.Platform; +using PixiEditor.UI.Common.Controls; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views; using PixiEditor.Views.Dialogs; +using PixiEditor.Views.Input; using ViewModelMain = PixiEditor.ViewModels.ViewModelMain; using ViewModels_ViewModelMain = PixiEditor.ViewModels.ViewModelMain; @@ -113,6 +117,8 @@ internal class ClassicDesktopEntry InitPlatform(); + NumberInput.AttachGlobalBehaviors += AttachGlobalShortcutBehavior; + ExtensionLoader extensionLoader = new ExtensionLoader(Paths.ExtensionPackagesPath, Paths.UserExtensionsPath); //TODO: fetch from extension store extensionLoader.AddOfficialExtension("pixieditor.founderspack", @@ -224,4 +230,12 @@ internal class ClassicDesktopEntry }); } } + + private void AttachGlobalShortcutBehavior(BehaviorCollection collection) + { + if (collection is null) + return; + + collection.Add(new GlobalShortcutFocusBehavior()); + } } diff --git a/src/PixiEditor/Models/Commands/Attributes/Commands/CommandAttribute.cs b/src/PixiEditor/Models/Commands/Attributes/Commands/CommandAttribute.cs index e5c53ee7a..32d7d23e9 100644 --- a/src/PixiEditor/Models/Commands/Attributes/Commands/CommandAttribute.cs +++ b/src/PixiEditor/Models/Commands/Attributes/Commands/CommandAttribute.cs @@ -1,6 +1,6 @@ using Avalonia.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Input; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Commands.Attributes.Commands; diff --git a/src/PixiEditor/Models/Commands/Attributes/Commands/FilterAttribute.cs b/src/PixiEditor/Models/Commands/Attributes/Commands/FilterAttribute.cs index defa850a8..94362a0d5 100644 --- a/src/PixiEditor/Models/Commands/Attributes/Commands/FilterAttribute.cs +++ b/src/PixiEditor/Models/Commands/Attributes/Commands/FilterAttribute.cs @@ -1,4 +1,4 @@ -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Commands.Attributes.Commands; diff --git a/src/PixiEditor/Models/Commands/Attributes/Commands/GroupAttribute.cs b/src/PixiEditor/Models/Commands/Attributes/Commands/GroupAttribute.cs index 3a673a2db..d08091711 100644 --- a/src/PixiEditor/Models/Commands/Attributes/Commands/GroupAttribute.cs +++ b/src/PixiEditor/Models/Commands/Attributes/Commands/GroupAttribute.cs @@ -1,4 +1,4 @@ -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Commands.Attributes.Commands; diff --git a/src/PixiEditor/Models/Commands/CommandController.cs b/src/PixiEditor/Models/Commands/CommandController.cs index 53e1baf8c..217d3e17c 100644 --- a/src/PixiEditor/Models/Commands/CommandController.cs +++ b/src/PixiEditor/Models/Commands/CommandController.cs @@ -9,7 +9,6 @@ using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using PixiEditor.Exceptions; using PixiEditor.Helpers.Extensions; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.AnalyticsAPI; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Commands.Attributes.Evaluators; @@ -21,6 +20,7 @@ using PixiEditor.Models.Handlers; using PixiEditor.Models.Input; using PixiEditor.Models.Structures; using PixiEditor.OperatingSystem; +using PixiEditor.UI.Common.Localization; using Command = PixiEditor.Models.Commands.Commands.Command; using CommandAttribute = PixiEditor.Models.Commands.Attributes.Commands.Command; diff --git a/src/PixiEditor/Models/Commands/CommandGroup.cs b/src/PixiEditor/Models/Commands/CommandGroup.cs index 6c0149581..dcaf5ef05 100644 --- a/src/PixiEditor/Models/Commands/CommandGroup.cs +++ b/src/PixiEditor/Models/Commands/CommandGroup.cs @@ -3,9 +3,9 @@ using System.Linq; using Avalonia.Input; using CommunityToolkit.Mvvm.ComponentModel; using PixiEditor.Models.Commands.Evaluators; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Commands; using PixiEditor.Models.Input; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Commands; diff --git a/src/PixiEditor/Models/Commands/Commands/Command.cs b/src/PixiEditor/Models/Commands/Commands/Command.cs index ec3418b6a..1c316d1c9 100644 --- a/src/PixiEditor/Models/Commands/Commands/Command.cs +++ b/src/PixiEditor/Models/Commands/Commands/Command.cs @@ -1,9 +1,9 @@ using System.Diagnostics; using Avalonia.Media; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.CommandContext; using PixiEditor.Models.Commands.Evaluators; using PixiEditor.Models.Input; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels; namespace PixiEditor.Models.Commands.Commands; diff --git a/src/PixiEditor/Models/Commands/XAML/NativeMenu.cs b/src/PixiEditor/Models/Commands/XAML/NativeMenu.cs index dffeae328..a9b20ee1e 100644 --- a/src/PixiEditor/Models/Commands/XAML/NativeMenu.cs +++ b/src/PixiEditor/Models/Commands/XAML/NativeMenu.cs @@ -4,7 +4,6 @@ using Avalonia.Layout; using Avalonia.Media; using Avalonia.Media.Imaging; using Avalonia.Platform; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Helpers; using PixiEditor.Helpers.Extensions; using PixiEditor.Models.Commands.CommandContext; diff --git a/src/PixiEditor/Models/Constants.cs b/src/PixiEditor/Models/Constants.cs index e93b3234a..4e582b07f 100644 --- a/src/PixiEditor/Models/Constants.cs +++ b/src/PixiEditor/Models/Constants.cs @@ -6,7 +6,7 @@ internal class Constants public const int MaxPreviewWidth = 128; public const int MaxPreviewHeight = 128; - public const int MaxCanvasSize = 9999; + public const int MaxCanvasSize = 99999; public const string NativeExtensionNoDot = "pixi"; public const string NativeExtension = "." + NativeExtensionNoDot; diff --git a/src/PixiEditor/Models/Controllers/ClipboardController.cs b/src/PixiEditor/Models/Controllers/ClipboardController.cs index 0213dd45f..dd7979f02 100644 --- a/src/PixiEditor/Models/Controllers/ClipboardController.cs +++ b/src/PixiEditor/Models/Controllers/ClipboardController.cs @@ -19,7 +19,6 @@ using Drawie.Backend.Core.Numerics; using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Helpers; using PixiEditor.Helpers.Constants; using PixiEditor.Models.Clipboard; @@ -30,6 +29,7 @@ using Drawie.Numerics; using PixiEditor.ChangeableDocument.Changeables.Animations; using PixiEditor.Models.Handlers; using PixiEditor.Parser; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using Bitmap = Avalonia.Media.Imaging.Bitmap; diff --git a/src/PixiEditor/Models/Controllers/ShortcutController.cs b/src/PixiEditor/Models/Controllers/ShortcutController.cs index 4d189f999..03009304b 100644 --- a/src/PixiEditor/Models/Controllers/ShortcutController.cs +++ b/src/PixiEditor/Models/Controllers/ShortcutController.cs @@ -1,11 +1,8 @@ -using System.Collections.Generic; -using System.Linq; -using Avalonia.Input; +using Avalonia.Input; using PixiEditor.Models.Commands; using PixiEditor.Models.Commands.CommandContext; using PixiEditor.Models.Commands.Commands; using PixiEditor.Models.Input; -using PixiEditor.ViewModels.Tools; namespace PixiEditor.Models.Controllers; @@ -17,8 +14,6 @@ internal class ShortcutController public IEnumerable LastCommands { get; private set; } - public Dictionary TransientShortcuts { get; set; } = new(); - public Type? ActiveContext { get; private set; } public static void BlockShortcutExecution(string blocker) diff --git a/src/PixiEditor/Models/Dialogs/ConfirmationDialog.cs b/src/PixiEditor/Models/Dialogs/ConfirmationDialog.cs index adb4ae099..327aac206 100644 --- a/src/PixiEditor/Models/Dialogs/ConfirmationDialog.cs +++ b/src/PixiEditor/Models/Dialogs/ConfirmationDialog.cs @@ -1,7 +1,7 @@ using System.Threading.Tasks; using Avalonia; using Avalonia.Controls.ApplicationLifetimes; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Dialogs; namespace PixiEditor.Models.Dialogs; diff --git a/src/PixiEditor/Models/Dialogs/NoticeDialog.cs b/src/PixiEditor/Models/Dialogs/NoticeDialog.cs index f8586e439..0293b9453 100644 --- a/src/PixiEditor/Models/Dialogs/NoticeDialog.cs +++ b/src/PixiEditor/Models/Dialogs/NoticeDialog.cs @@ -1,6 +1,6 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Dialogs; namespace PixiEditor.Models.Dialogs; diff --git a/src/PixiEditor/Models/Dialogs/OptionsDialog.cs b/src/PixiEditor/Models/Dialogs/OptionsDialog.cs index d27e9fddf..d235551a7 100644 --- a/src/PixiEditor/Models/Dialogs/OptionsDialog.cs +++ b/src/PixiEditor/Models/Dialogs/OptionsDialog.cs @@ -6,7 +6,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Layout; using Avalonia.Media; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Dialogs; namespace PixiEditor.Models.Dialogs; diff --git a/src/PixiEditor/Models/DocumentModels/DocumentStructureHelper.cs b/src/PixiEditor/Models/DocumentModels/DocumentStructureHelper.cs index 2569ace5f..0883690e3 100644 --- a/src/PixiEditor/Models/DocumentModels/DocumentStructureHelper.cs +++ b/src/PixiEditor/Models/DocumentModels/DocumentStructureHelper.cs @@ -5,9 +5,9 @@ using PixiEditor.ChangeableDocument.Actions.Generated; using PixiEditor.ChangeableDocument.Changeables.Graph.Interfaces; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using PixiEditor.ChangeableDocument.Enums; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Handlers; using PixiEditor.Models.Layers; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.DocumentModels; #nullable enable diff --git a/src/PixiEditor/Models/DocumentModels/Public/DocumentOperationsModule.cs b/src/PixiEditor/Models/DocumentModels/Public/DocumentOperationsModule.cs index a5e8dd3c7..36759d420 100644 --- a/src/PixiEditor/Models/DocumentModels/Public/DocumentOperationsModule.cs +++ b/src/PixiEditor/Models/DocumentModels/Public/DocumentOperationsModule.cs @@ -310,7 +310,7 @@ internal class DocumentOperationsModule : IDocumentOperations /// Where the existing content should be put public void ResizeCanvas(VecI newSize, ResizeAnchor anchor) { - if (Internals.ChangeController.IsBlockingChangeActive || newSize.X > 9999 || newSize.Y > 9999 || + if (Internals.ChangeController.IsBlockingChangeActive || newSize.X > Constants.MaxCanvasSize || newSize.Y > Constants.MaxCanvasSize || newSize.X < 1 || newSize.Y < 1) return; diff --git a/src/PixiEditor/Models/ExceptionHandling/CrashReport.cs b/src/PixiEditor/Models/ExceptionHandling/CrashReport.cs index 68f644eba..036a04376 100644 --- a/src/PixiEditor/Models/ExceptionHandling/CrashReport.cs +++ b/src/PixiEditor/Models/ExceptionHandling/CrashReport.cs @@ -4,7 +4,6 @@ using System.IO.Compression; using System.Reflection; using System.Text; using Newtonsoft.Json; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.UserPreferences; using PixiEditor.Extensions.CommonApi.UserPreferences.Settings.PixiEditor; using PixiEditor.Helpers; @@ -16,6 +15,7 @@ using PixiEditor.Models.Commands; using PixiEditor.Models.DocumentModels.Autosave; using PixiEditor.OperatingSystem; using PixiEditor.Parser; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels; using PixiEditor.ViewModels.Document; using PixiEditor.Views; diff --git a/src/PixiEditor/Models/ExtensionServices/DocumentProvider.cs b/src/PixiEditor/Models/ExtensionServices/DocumentProvider.cs index 51c1b1642..c6bf72cbb 100644 --- a/src/PixiEditor/Models/ExtensionServices/DocumentProvider.cs +++ b/src/PixiEditor/Models/ExtensionServices/DocumentProvider.cs @@ -1,3 +1,4 @@ +using PixiEditor.Extensions.CommonApi.Documents; using PixiEditor.Extensions.CommonApi.IO; using PixiEditor.Models.IO; using PixiEditor.ViewModels; @@ -7,6 +8,7 @@ namespace PixiEditor.Models.ExtensionServices; internal class DocumentProvider : IDocumentProvider { + public IDocument? ActiveDocument => fileViewModel.Owner.DocumentManagerSubViewModel.ActiveDocument; private FileViewModel fileViewModel; public DocumentProvider(FileViewModel fileViewModel) @@ -14,8 +16,14 @@ internal class DocumentProvider : IDocumentProvider this.fileViewModel = fileViewModel; } - public void ImportFile(string path, bool associatePath = true) + public IDocument ImportFile(string path, bool associatePath = true) { - fileViewModel.OpenFromPath(path, associatePath); + return fileViewModel.OpenFromPath(path, associatePath); + } + + public IDocument? GetDocument(Guid id) + { + var document = fileViewModel.Owner.DocumentManagerSubViewModel.Documents.FirstOrDefault(x => x.Id == id); + return document; } } diff --git a/src/PixiEditor/Models/ExtensionServices/WindowProvider.cs b/src/PixiEditor/Models/ExtensionServices/WindowProvider.cs index 3beff2d79..72a6b1a7e 100644 --- a/src/PixiEditor/Models/ExtensionServices/WindowProvider.cs +++ b/src/PixiEditor/Models/ExtensionServices/WindowProvider.cs @@ -1,11 +1,11 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.Windowing; using PixiEditor.Extensions.Helpers; using PixiEditor.Extensions.Runtime; using PixiEditor.Extensions.Windowing; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Dialogs; namespace PixiEditor.Models.ExtensionServices; diff --git a/src/PixiEditor/Models/Files/BmpFileType.cs b/src/PixiEditor/Models/Files/BmpFileType.cs index 01bd63cd7..3c9b7cd4e 100644 --- a/src/PixiEditor/Models/Files/BmpFileType.cs +++ b/src/PixiEditor/Models/Files/BmpFileType.cs @@ -1,6 +1,6 @@ using Avalonia.Media; using Drawie.Backend.Core.Surfaces; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/GifFileType.cs b/src/PixiEditor/Models/Files/GifFileType.cs index e5765869c..536bbcdec 100644 --- a/src/PixiEditor/Models/Files/GifFileType.cs +++ b/src/PixiEditor/Models/Files/GifFileType.cs @@ -1,5 +1,5 @@ using Avalonia.Media; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/ImageFileType.cs b/src/PixiEditor/Models/Files/ImageFileType.cs index b576888d9..de34d1ea9 100644 --- a/src/PixiEditor/Models/Files/ImageFileType.cs +++ b/src/PixiEditor/Models/Files/ImageFileType.cs @@ -5,10 +5,10 @@ using Drawie.Backend.Core; using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.Surfaces; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.IO; using PixiEditor.Models.IO.FileEncoders; using Drawie.Numerics; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/JpegFileType.cs b/src/PixiEditor/Models/Files/JpegFileType.cs index 8f5ef857b..c7d20745d 100644 --- a/src/PixiEditor/Models/Files/JpegFileType.cs +++ b/src/PixiEditor/Models/Files/JpegFileType.cs @@ -1,6 +1,6 @@ using Avalonia.Media; using Drawie.Backend.Core.Surfaces; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/Mp4FileType.cs b/src/PixiEditor/Models/Files/Mp4FileType.cs index 056f16f99..27ef746a6 100644 --- a/src/PixiEditor/Models/Files/Mp4FileType.cs +++ b/src/PixiEditor/Models/Files/Mp4FileType.cs @@ -1,4 +1,4 @@ -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/OtfFileType.cs b/src/PixiEditor/Models/Files/OtfFileType.cs index 4a8ea787d..3c4cc80f8 100644 --- a/src/PixiEditor/Models/Files/OtfFileType.cs +++ b/src/PixiEditor/Models/Files/OtfFileType.cs @@ -1,5 +1,5 @@ -using PixiEditor.Extensions.Common.Localization; -using PixiEditor.Models.IO; +using PixiEditor.Models.IO; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/PixiFileType.cs b/src/PixiEditor/Models/Files/PixiFileType.cs index b0c1ac791..9ab1be68a 100644 --- a/src/PixiEditor/Models/Files/PixiFileType.cs +++ b/src/PixiEditor/Models/Files/PixiFileType.cs @@ -1,9 +1,9 @@ using Avalonia.Media; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.IO; using Drawie.Numerics; using PixiEditor.Helpers; using PixiEditor.Models.ExceptionHandling; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/PngFileType.cs b/src/PixiEditor/Models/Files/PngFileType.cs index 2c2f9d3d8..c439738b1 100644 --- a/src/PixiEditor/Models/Files/PngFileType.cs +++ b/src/PixiEditor/Models/Files/PngFileType.cs @@ -1,6 +1,6 @@ using Avalonia.Media; using Drawie.Backend.Core.Surfaces; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/SvgFileType.cs b/src/PixiEditor/Models/Files/SvgFileType.cs index 39e3cff9f..4dbefe300 100644 --- a/src/PixiEditor/Models/Files/SvgFileType.cs +++ b/src/PixiEditor/Models/Files/SvgFileType.cs @@ -3,10 +3,10 @@ using PixiEditor.ChangeableDocument.Rendering; using PixiEditor.Models.Handlers; using PixiEditor.Models.IO; using Drawie.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.SVG; using PixiEditor.SVG.Elements; using PixiEditor.SVG.Features; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/Models/Files/TtfFileType.cs b/src/PixiEditor/Models/Files/TtfFileType.cs index 3390c4a9d..27f5b7887 100644 --- a/src/PixiEditor/Models/Files/TtfFileType.cs +++ b/src/PixiEditor/Models/Files/TtfFileType.cs @@ -1,5 +1,5 @@ -using PixiEditor.Extensions.Common.Localization; -using PixiEditor.Models.IO; +using PixiEditor.Models.IO; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/VideoFileType.cs b/src/PixiEditor/Models/Files/VideoFileType.cs index 45555be13..d71eec6ec 100644 --- a/src/PixiEditor/Models/Files/VideoFileType.cs +++ b/src/PixiEditor/Models/Files/VideoFileType.cs @@ -1,7 +1,7 @@ using Drawie.Backend.Core; using Drawie.Backend.Core.Surfaces.ImageData; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.IO; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Files/WebpFileType.cs b/src/PixiEditor/Models/Files/WebpFileType.cs index e1c15d385..8d3566e86 100644 --- a/src/PixiEditor/Models/Files/WebpFileType.cs +++ b/src/PixiEditor/Models/Files/WebpFileType.cs @@ -1,6 +1,6 @@ using Avalonia.Media; using Drawie.Backend.Core.Surfaces; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Files; diff --git a/src/PixiEditor/Models/Handlers/IDocument.cs b/src/PixiEditor/Models/Handlers/IDocument.cs index 4e4499bf0..1c16fc875 100644 --- a/src/PixiEditor/Models/Handlers/IDocument.cs +++ b/src/PixiEditor/Models/Handlers/IDocument.cs @@ -22,7 +22,7 @@ using PixiEditor.Models.DocumentPassthroughActions; namespace PixiEditor.Models.Handlers; -internal interface IDocument : IHandler +internal interface IDocument : IHandler, Extensions.CommonApi.Documents.IDocument { public Guid Id { get; } public ObservableRangeCollection Palette { get; set; } diff --git a/src/PixiEditor/Models/Handlers/IToolHandler.cs b/src/PixiEditor/Models/Handlers/IToolHandler.cs index b26aedf8b..42554267e 100644 --- a/src/PixiEditor/Models/Handlers/IToolHandler.cs +++ b/src/PixiEditor/Models/Handlers/IToolHandler.cs @@ -1,8 +1,8 @@ using Avalonia.Input; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Handlers.Toolbars; using Drawie.Numerics; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Handlers; diff --git a/src/PixiEditor/Models/IO/CustomDocumentFormats/SvgDocumentBuilder.cs b/src/PixiEditor/Models/IO/CustomDocumentFormats/SvgDocumentBuilder.cs index a565c98cf..c88a10425 100644 --- a/src/PixiEditor/Models/IO/CustomDocumentFormats/SvgDocumentBuilder.cs +++ b/src/PixiEditor/Models/IO/CustomDocumentFormats/SvgDocumentBuilder.cs @@ -10,7 +10,6 @@ using Drawie.Numerics; using PixiEditor.ChangeableDocument.Changeables.Graph.Interfaces; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Shapes.Data; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Helpers; using PixiEditor.Models.Dialogs; using PixiEditor.Parser.Graph; @@ -18,6 +17,7 @@ using PixiEditor.SVG; using PixiEditor.SVG.Elements; using PixiEditor.SVG.Enums; using PixiEditor.SVG.Exceptions; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.Tools; namespace PixiEditor.Models.IO.CustomDocumentFormats; diff --git a/src/PixiEditor/Models/IO/FileTypeDialogDataSet.cs b/src/PixiEditor/Models/IO/FileTypeDialogDataSet.cs index 1930dd5b4..9b6a41cc1 100644 --- a/src/PixiEditor/Models/IO/FileTypeDialogDataSet.cs +++ b/src/PixiEditor/Models/IO/FileTypeDialogDataSet.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; using System.Linq; using Avalonia.Platform.Storage; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Helpers; using PixiEditor.Models.Files; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.IO; diff --git a/src/PixiEditor/Models/IO/Importer.cs b/src/PixiEditor/Models/IO/Importer.cs index e4a69559f..3fbef005b 100644 --- a/src/PixiEditor/Models/IO/Importer.cs +++ b/src/PixiEditor/Models/IO/Importer.cs @@ -11,12 +11,12 @@ using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using PixiEditor.Exceptions; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Exceptions; using PixiEditor.Helpers; using Drawie.Numerics; using PixiEditor.Parser; using PixiEditor.Parser.Old.PixiV4; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using Bitmap = Avalonia.Media.Imaging.Bitmap; using BlendMode = Drawie.Backend.Core.Surfaces.BlendMode; diff --git a/src/PixiEditor/Models/IO/PaletteParsers/JascPalFile/JascFileException.cs b/src/PixiEditor/Models/IO/PaletteParsers/JascPalFile/JascFileException.cs index 743e9338c..d2f66c56d 100644 --- a/src/PixiEditor/Models/IO/PaletteParsers/JascPalFile/JascFileException.cs +++ b/src/PixiEditor/Models/IO/PaletteParsers/JascPalFile/JascFileException.cs @@ -1,6 +1,6 @@ using System.Runtime.Serialization; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Exceptions; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.IO.PaletteParsers.JascPalFile; diff --git a/src/PixiEditor/Models/Input/KeyCombination.cs b/src/PixiEditor/Models/Input/KeyCombination.cs index f0f4f6deb..d69b3bb50 100644 --- a/src/PixiEditor/Models/Input/KeyCombination.cs +++ b/src/PixiEditor/Models/Input/KeyCombination.cs @@ -2,9 +2,9 @@ using System.Linq; using System.Text; using Avalonia.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Helpers; using PixiEditor.Helpers; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Input; diff --git a/src/PixiEditor/Models/Localization/LocalizationProvider.cs b/src/PixiEditor/Models/Localization/LocalizationProvider.cs index d2460cfa1..7379ba501 100644 --- a/src/PixiEditor/Models/Localization/LocalizationProvider.cs +++ b/src/PixiEditor/Models/Localization/LocalizationProvider.cs @@ -6,9 +6,9 @@ using Avalonia.Platform; using Newtonsoft.Json; using PixiEditor.Helpers.Extensions; using PixiEditor.Extensions; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Runtime; using PixiEditor.Models.IO; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Localization; diff --git a/src/PixiEditor/Models/Serialization/Factories/TextSerializationFactory.cs b/src/PixiEditor/Models/Serialization/Factories/TextSerializationFactory.cs index 36ee0fd82..a538ff74a 100644 --- a/src/PixiEditor/Models/Serialization/Factories/TextSerializationFactory.cs +++ b/src/PixiEditor/Models/Serialization/Factories/TextSerializationFactory.cs @@ -6,9 +6,9 @@ using Drawie.Backend.Core.Text; using Drawie.Backend.Core.Vector; using Drawie.Numerics; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Shapes.Data; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Controllers; using PixiEditor.Models.IO; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Serialization.Factories; diff --git a/src/PixiEditor/Models/Services/NewsFeed/News.cs b/src/PixiEditor/Models/Services/NewsFeed/News.cs index 84277181f..af9f248ad 100644 --- a/src/PixiEditor/Models/Services/NewsFeed/News.cs +++ b/src/PixiEditor/Models/Services/NewsFeed/News.cs @@ -6,6 +6,7 @@ using Newtonsoft.Json; using PixiEditor.Extensions.Helpers; using PixiEditor.Helpers.Converters.JsonConverters; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Models.Services.NewsFeed; diff --git a/src/PixiEditor/PixiEditor.csproj b/src/PixiEditor/PixiEditor.csproj index 6279e0c4b..30e07d628 100644 --- a/src/PixiEditor/PixiEditor.csproj +++ b/src/PixiEditor/PixiEditor.csproj @@ -134,25 +134,6 @@ - - - PercentSettingView.axaml - Code - - - FontFamilySettingView.axaml - Code - - - ColorPropertyView.axaml - Code - - - LazyDocumentTemplate.axaml - Code - - - diff --git a/src/PixiEditor/Styles/PixiEditorPopupTemplate.axaml b/src/PixiEditor/Styles/PixiEditorPopupTemplate.axaml index 76ecd71eb..4e0f3bbc6 100644 --- a/src/PixiEditor/Styles/PixiEditorPopupTemplate.axaml +++ b/src/PixiEditor/Styles/PixiEditorPopupTemplate.axaml @@ -4,7 +4,8 @@ xmlns:behaviours="clr-namespace:PixiEditor.Helpers.Behaviours" xmlns:markupExtensions="clr-namespace:PixiEditor.Helpers.MarkupExtensions" xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions" - xmlns:platform="clr-namespace:Avalonia.Platform;assembly=Avalonia.Controls"> + xmlns:platform="clr-namespace:Avalonia.Platform;assembly=Avalonia.Controls" + xmlns:localization="clr-namespace:PixiEditor.UI.Common.Localization;assembly=PixiEditor.UI.Common"> @@ -41,7 +42,7 @@ - + diff --git a/src/PixiEditor/Styles/Templates/NodePicker.axaml b/src/PixiEditor/Styles/Templates/NodePicker.axaml index 089392f0c..929a49223 100644 --- a/src/PixiEditor/Styles/Templates/NodePicker.axaml +++ b/src/PixiEditor/Styles/Templates/NodePicker.axaml @@ -2,7 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:nodes="clr-namespace:PixiEditor.Views.Nodes" xmlns:visuals="clr-namespace:PixiEditor.Views.Visuals" - xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions" + xmlns:ui="clr-namespace:PixiEditor.UI.Common.Localization;assembly=PixiEditor.UI.Common" xmlns:input="clr-namespace:PixiEditor.Views.Input" xmlns:nodes1="clr-namespace:PixiEditor.ViewModels.Nodes"> @@ -33,7 +33,7 @@ - + - + diff --git a/src/PixiEditor/Styles/Templates/NodePropertyViewTemplate.axaml b/src/PixiEditor/Styles/Templates/NodePropertyViewTemplate.axaml index 47a7bd06f..f3cf70ecf 100644 --- a/src/PixiEditor/Styles/Templates/NodePropertyViewTemplate.axaml +++ b/src/PixiEditor/Styles/Templates/NodePropertyViewTemplate.axaml @@ -1,7 +1,7 @@  - - - + + + @@ -52,7 +53,7 @@ - - + Name="PART_PlayToggle" + IsChecked="{Binding IsPlaying, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" /> diff --git a/src/PixiEditor/ViewModels/CrashReportViewModel.cs b/src/PixiEditor/ViewModels/CrashReportViewModel.cs index 8608c7f8a..a9e97c4bc 100644 --- a/src/PixiEditor/ViewModels/CrashReportViewModel.cs +++ b/src/PixiEditor/ViewModels/CrashReportViewModel.cs @@ -3,12 +3,12 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using CommunityToolkit.Mvvm.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Helpers; using PixiEditor.Initialization; using PixiEditor.Models.Controllers; using PixiEditor.Models.Dialogs; using PixiEditor.Models.ExceptionHandling; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views; using PixiEditor.Views.Dialogs; diff --git a/src/PixiEditor/ViewModels/Dock/ChannelsDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/ChannelsDockViewModel.cs index 466f0759e..e7d3a10ca 100644 --- a/src/PixiEditor/ViewModels/Dock/ChannelsDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/ChannelsDockViewModel.cs @@ -1,7 +1,7 @@ using System.ComponentModel; using CommunityToolkit.Mvvm.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.DocumentModels; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.SubViewModels; namespace PixiEditor.ViewModels.Dock; diff --git a/src/PixiEditor/ViewModels/Dock/ColorPickerDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/ColorPickerDockViewModel.cs index 369035018..14ab16d12 100644 --- a/src/PixiEditor/ViewModels/Dock/ColorPickerDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/ColorPickerDockViewModel.cs @@ -3,8 +3,8 @@ using Avalonia.Controls; using Avalonia.Media; using Avalonia.Svg.Skia; using PixiEditor.Helpers.Converters; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.SubViewModels; namespace PixiEditor.ViewModels.Dock; diff --git a/src/PixiEditor/ViewModels/Dock/ColorSlidersDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/ColorSlidersDockViewModel.cs index 8c7d4510f..061a0b847 100644 --- a/src/PixiEditor/ViewModels/Dock/ColorSlidersDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/ColorSlidersDockViewModel.cs @@ -1,8 +1,8 @@ using Avalonia; using Avalonia.Media; using PixiEditor.Helpers.Converters; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.SubViewModels; namespace PixiEditor.ViewModels.Dock; diff --git a/src/PixiEditor/ViewModels/Dock/DocumentPreviewDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/DocumentPreviewDockViewModel.cs index d0ae74410..669addb59 100644 --- a/src/PixiEditor/ViewModels/Dock/DocumentPreviewDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/DocumentPreviewDockViewModel.cs @@ -1,7 +1,7 @@ using Avalonia.Media; using PixiEditor.Helpers.Converters; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using PixiEditor.ViewModels.SubViewModels; diff --git a/src/PixiEditor/ViewModels/Dock/LayersDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/LayersDockViewModel.cs index 2b3ae0d62..7c27051f1 100644 --- a/src/PixiEditor/ViewModels/Dock/LayersDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/LayersDockViewModel.cs @@ -2,8 +2,8 @@ using PixiDocks.Core.Docking; using PixiDocks.Core.Docking.Events; using PixiEditor.Helpers.Converters; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.ViewModels.Dock; diff --git a/src/PixiEditor/ViewModels/Dock/NodeGraphDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/NodeGraphDockViewModel.cs index 524e80491..04d228fb4 100644 --- a/src/PixiEditor/ViewModels/Dock/NodeGraphDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/NodeGraphDockViewModel.cs @@ -1,8 +1,8 @@ using Avalonia.Input; using PixiDocks.Core.Docking.Events; using PixiEditor.Models.Commands.Attributes.Commands; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.ViewModels.Dock; diff --git a/src/PixiEditor/ViewModels/Dock/PaletteViewerDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/PaletteViewerDockViewModel.cs index 7b813ab80..4e6aafad0 100644 --- a/src/PixiEditor/ViewModels/Dock/PaletteViewerDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/PaletteViewerDockViewModel.cs @@ -1,6 +1,6 @@ using PixiEditor.Helpers.Converters; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using PixiEditor.ViewModels.SubViewModels; diff --git a/src/PixiEditor/ViewModels/Dock/SwatchesDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/SwatchesDockViewModel.cs index 775d630fd..b0452f75f 100644 --- a/src/PixiEditor/ViewModels/Dock/SwatchesDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/SwatchesDockViewModel.cs @@ -1,7 +1,7 @@ using Avalonia; using PixiEditor.Helpers.Converters; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.ViewModels.Dock; diff --git a/src/PixiEditor/ViewModels/Dock/TimelineDockViewModel.cs b/src/PixiEditor/ViewModels/Dock/TimelineDockViewModel.cs index f48354019..39c853953 100644 --- a/src/PixiEditor/ViewModels/Dock/TimelineDockViewModel.cs +++ b/src/PixiEditor/ViewModels/Dock/TimelineDockViewModel.cs @@ -1,6 +1,6 @@ using PixiDocks.Core.Docking.Events; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.ViewModels.Dock; diff --git a/src/PixiEditor/ViewModels/Document/DocumentManagerViewModel.cs b/src/PixiEditor/ViewModels/Document/DocumentManagerViewModel.cs index 417db7459..c72fae1f0 100644 --- a/src/PixiEditor/ViewModels/Document/DocumentManagerViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/DocumentManagerViewModel.cs @@ -207,7 +207,6 @@ internal class DocumentManagerViewModel : SubViewModel, IDocument } } - [Command.Basic("PixiEditor.Document.ResizeDocument", false, "RESIZE_DOCUMENT", "RESIZE_DOCUMENT", CanExecute = "PixiEditor.HasDocument", Key = Key.I, Modifiers = KeyModifiers.Control | KeyModifiers.Shift, Icon = PixiPerfectIcons.Resize, MenuItemPath = "IMAGE/RESIZE_IMAGE", MenuItemOrder = 0, AnalyticsTrack = true)] diff --git a/src/PixiEditor/ViewModels/Document/DocumentViewModel.cs b/src/PixiEditor/ViewModels/Document/DocumentViewModel.cs index 5e18dd34e..12b9a9cd3 100644 --- a/src/PixiEditor/ViewModels/Document/DocumentViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/DocumentViewModel.cs @@ -18,7 +18,6 @@ using Drawie.Backend.Core.Numerics; using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Vector; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.Palettes; using PixiEditor.Helpers; using PixiEditor.Helpers.Collections; @@ -38,6 +37,7 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Workspace; using PixiEditor.Models.IO; using PixiEditor.Parser; using PixiEditor.Parser.Skia; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document.Nodes.Workspace; using PixiEditor.ViewModels.Document.TransformOverlays; using PixiEditor.Views.Overlays.SymmetryOverlay; @@ -1325,4 +1325,9 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument return size; } + + void Extensions.CommonApi.Documents.IDocument.Resize(int width, int height) + { + Operations.ResizeImage(new VecI(width, height), ResamplingMethod.NearestNeighbor); + } } diff --git a/src/PixiEditor/ViewModels/Document/Nodes/FolderNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/FolderNodeViewModel.cs index cb6bbc799..43a0dbdb1 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/FolderNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/FolderNodeViewModel.cs @@ -1,6 +1,5 @@ using System.Collections.ObjectModel; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Handlers; using PixiEditor.ViewModels.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/LerpColorNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/LerpColorNodeViewModel.cs index 129acee81..b7b047e29 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/LerpColorNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/LerpColorNodeViewModel.cs @@ -1,5 +1,4 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.ViewModels.Nodes; namespace PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/MathNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/MathNodeViewModel.cs index 092200a2a..40161647c 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/MathNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/MathNodeViewModel.cs @@ -1,9 +1,9 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using PixiEditor.ChangeableDocument.Enums; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Helpers; using PixiEditor.Models.Events; using PixiEditor.Models.Handlers; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Nodes; using PixiEditor.ViewModels.Nodes.Properties; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/MergeNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/MergeNodeViewModel.cs index 5dd209a3e..908abace7 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/MergeNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/MergeNodeViewModel.cs @@ -1,5 +1,4 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.ViewModels.Nodes; namespace PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageLeftNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageLeftNodeViewModel.cs index c39bda885..bd21d739a 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageLeftNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageLeftNodeViewModel.cs @@ -1,5 +1,4 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.ViewModels.Nodes; namespace PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageRightNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageRightNodeViewModel.cs index d41a29a9e..258d8a62a 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageRightNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/ModifyImageRightNodeViewModel.cs @@ -1,5 +1,4 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.ViewModels.Nodes; namespace PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/NoiseNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/NoiseNodeViewModel.cs index 9bd05d09f..10d96e7da 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/NoiseNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/NoiseNodeViewModel.cs @@ -1,5 +1,4 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.ViewModels.Nodes; namespace PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/OutputNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/OutputNodeViewModel.cs index ca12840f8..47ecba154 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/OutputNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/OutputNodeViewModel.cs @@ -1,5 +1,4 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.ViewModels.Nodes; namespace PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/Nodes/SampleImageNodeViewModel.cs b/src/PixiEditor/ViewModels/Document/Nodes/SampleImageNodeViewModel.cs index 7783a43ae..cb17fe2b9 100644 --- a/src/PixiEditor/ViewModels/Document/Nodes/SampleImageNodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/Nodes/SampleImageNodeViewModel.cs @@ -1,5 +1,4 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.ViewModels.Nodes; namespace PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/Document/TransformOverlays/DocumentTransformViewModel.cs b/src/PixiEditor/ViewModels/Document/TransformOverlays/DocumentTransformViewModel.cs index d8a585f04..4c5fe21d4 100644 --- a/src/PixiEditor/ViewModels/Document/TransformOverlays/DocumentTransformViewModel.cs +++ b/src/PixiEditor/ViewModels/Document/TransformOverlays/DocumentTransformViewModel.cs @@ -4,13 +4,13 @@ using ChunkyImageLib.DataHolders; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Helpers; using PixiEditor.Helpers.UI; using PixiEditor.Models.DocumentModels; using PixiEditor.Models.Handlers; using Drawie.Numerics; using PixiEditor.Models.Controllers.InputDevice; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Overlays.TransformOverlay; namespace PixiEditor.ViewModels.Document.TransformOverlays; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBarViewModel.cs b/src/PixiEditor/ViewModels/Menu/MenuBarViewModel.cs index ef7e91f6a..1ec263246 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBarViewModel.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBarViewModel.cs @@ -4,12 +4,12 @@ using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Data; using Microsoft.Extensions.DependencyInjection; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.UI; using PixiEditor.Models.Commands; using PixiEditor.Models.Commands.Evaluators; using PixiEditor.Models.ExtensionServices; using PixiEditor.OperatingSystem; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.SubViewModels; using PixiEditor.ViewModels.SubViewModels.AdditionalContent; using Command = PixiEditor.Models.Commands.Commands.Command; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBuilders/FileExitMenuBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuBuilders/FileExitMenuBuilder.cs index 79e9bd513..45cd0b983 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBuilders/FileExitMenuBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBuilders/FileExitMenuBuilder.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using Avalonia.Controls; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.UI; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views; namespace PixiEditor.ViewModels.Menu.MenuBuilders; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBuilders/OpenDockablesMenuBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuBuilders/OpenDockablesMenuBuilder.cs index f7b524b34..81fdac068 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBuilders/OpenDockablesMenuBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBuilders/OpenDockablesMenuBuilder.cs @@ -6,6 +6,7 @@ using Avalonia.Media; using PixiEditor.Models.Commands; using PixiEditor.Extensions.UI; using PixiEditor.Helpers.Extensions; +using PixiEditor.UI.Common.Localization; using Dock_LayoutManager = PixiEditor.ViewModels.Dock.LayoutManager; using LayoutManager = PixiEditor.ViewModels.Dock.LayoutManager; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBuilders/RecentFilesMenuBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuBuilders/RecentFilesMenuBuilder.cs index b42b9a594..174107e2f 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBuilders/RecentFilesMenuBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBuilders/RecentFilesMenuBuilder.cs @@ -6,6 +6,7 @@ using Avalonia.Styling; using PixiEditor.Extensions.UI; using PixiEditor.Models.UserData; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.SubViewModels; namespace PixiEditor.ViewModels.Menu.MenuBuilders; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBuilders/SymmetryMenuBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuBuilders/SymmetryMenuBuilder.cs index 2f0b6ad3b..c4e3ffe99 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBuilders/SymmetryMenuBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBuilders/SymmetryMenuBuilder.cs @@ -10,6 +10,7 @@ using PixiEditor.Extensions.UI; using PixiEditor.Helpers.Extensions; using PixiEditor.UI.Common.Controls; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Menu.MenuBuilders; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleGridLinesMenuBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleGridLinesMenuBuilder.cs index ec9fc8ab7..a50ef2373 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleGridLinesMenuBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleGridLinesMenuBuilder.cs @@ -7,6 +7,7 @@ using PixiEditor.Extensions.UI; using PixiEditor.Helpers.Extensions; using PixiEditor.UI.Common.Controls; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Menu.MenuBuilders; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleHighResPreviewMenuBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleHighResPreviewMenuBuilder.cs index 399da638f..30f77ef6b 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleHighResPreviewMenuBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleHighResPreviewMenuBuilder.cs @@ -6,6 +6,7 @@ using PixiEditor.Extensions.UI; using PixiEditor.Helpers.Extensions; using PixiEditor.UI.Common.Controls; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Menu.MenuBuilders; diff --git a/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleSnappingMenuBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleSnappingMenuBuilder.cs index 76aee663b..7a24c4ce9 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleSnappingMenuBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuBuilders/ToggleSnappingMenuBuilder.cs @@ -6,6 +6,7 @@ using PixiEditor.Extensions.UI; using PixiEditor.Helpers.Extensions; using PixiEditor.UI.Common.Controls; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Menu.MenuBuilders; diff --git a/src/PixiEditor/ViewModels/Menu/MenuItemBuilder.cs b/src/PixiEditor/ViewModels/Menu/MenuItemBuilder.cs index 0da8f5c06..6819992bf 100644 --- a/src/PixiEditor/ViewModels/Menu/MenuItemBuilder.cs +++ b/src/PixiEditor/ViewModels/Menu/MenuItemBuilder.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using Avalonia; using Avalonia.Controls; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.UI; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Menu; diff --git a/src/PixiEditor/ViewModels/Nodes/NodeTypeInfo.cs b/src/PixiEditor/ViewModels/Nodes/NodeTypeInfo.cs index fe8bf835a..cfb7e3976 100644 --- a/src/PixiEditor/ViewModels/Nodes/NodeTypeInfo.cs +++ b/src/PixiEditor/ViewModels/Nodes/NodeTypeInfo.cs @@ -1,8 +1,8 @@ using System.Reflection; using PixiEditor.ChangeableDocument.Changeables.Graph; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Nodes; diff --git a/src/PixiEditor/ViewModels/Nodes/NodeViewModel.cs b/src/PixiEditor/ViewModels/Nodes/NodeViewModel.cs index 97097213a..e20a2d1de 100644 --- a/src/PixiEditor/ViewModels/Nodes/NodeViewModel.cs +++ b/src/PixiEditor/ViewModels/Nodes/NodeViewModel.cs @@ -12,12 +12,12 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using PixiEditor.ChangeableDocument.Changeables.Interfaces; using PixiEditor.ChangeableDocument.ChangeInfos.NodeGraph; using Drawie.Backend.Core; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.DocumentModels; using PixiEditor.Models.Handlers; using PixiEditor.Models.Rendering; using PixiEditor.Models.Structures; using Drawie.Numerics; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; namespace PixiEditor.ViewModels.Nodes; diff --git a/src/PixiEditor/ViewModels/Nodes/Properties/StringPropertyViewModel.cs b/src/PixiEditor/ViewModels/Nodes/Properties/StringPropertyViewModel.cs index 738ecb411..98a6c3a6b 100644 --- a/src/PixiEditor/ViewModels/Nodes/Properties/StringPropertyViewModel.cs +++ b/src/PixiEditor/ViewModels/Nodes/Properties/StringPropertyViewModel.cs @@ -2,12 +2,12 @@ using Avalonia.Interactivity; using Avalonia.Threading; using CommunityToolkit.Mvvm.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Helpers; using PixiEditor.Models.Dialogs; using PixiEditor.Models.Handlers; using PixiEditor.Models.IO; using PixiEditor.OperatingSystem; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Nodes.Properties; diff --git a/src/PixiEditor/ViewModels/SettingsWindowViewModel.cs b/src/PixiEditor/ViewModels/SettingsWindowViewModel.cs index ffd065fc3..1b8ee45eb 100644 --- a/src/PixiEditor/ViewModels/SettingsWindowViewModel.cs +++ b/src/PixiEditor/ViewModels/SettingsWindowViewModel.cs @@ -5,12 +5,12 @@ using System.Linq; using System.Threading.Tasks; using Avalonia.Platform.Storage; using CommunityToolkit.Mvvm.ComponentModel; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Exceptions; using PixiEditor.Models.Commands; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Commands.Templates; using PixiEditor.Models.Dialogs; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.UserPreferences; using PixiEditor.Views; using PixiEditor.Views.Shortcuts; diff --git a/src/PixiEditor/ViewModels/SubViewModels/ColorsViewModel.cs b/src/PixiEditor/ViewModels/SubViewModels/ColorsViewModel.cs index dc365c7c8..abaa05155 100644 --- a/src/PixiEditor/ViewModels/SubViewModels/ColorsViewModel.cs +++ b/src/PixiEditor/ViewModels/SubViewModels/ColorsViewModel.cs @@ -12,7 +12,6 @@ using ColorPicker.Models; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.DependencyInjection; using PixiEditor.Helpers.Extensions; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.Palettes; using PixiEditor.Extensions.CommonApi.Palettes.Parsers; using PixiEditor.Models.Commands.Attributes.Evaluators; @@ -24,6 +23,7 @@ using PixiEditor.Models.ExternalServices; using PixiEditor.Models.Handlers; using PixiEditor.Models.Palettes; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using PixiEditor.Views.Dialogs; using PixiEditor.Views.Windows; diff --git a/src/PixiEditor/ViewModels/SubViewModels/DebugViewModel.cs b/src/PixiEditor/ViewModels/SubViewModels/DebugViewModel.cs index 2e4db518a..1fe409943 100644 --- a/src/PixiEditor/ViewModels/SubViewModels/DebugViewModel.cs +++ b/src/PixiEditor/ViewModels/SubViewModels/DebugViewModel.cs @@ -14,7 +14,6 @@ using DrawiEngine; using Newtonsoft.Json; using PixiEditor.Helpers.Extensions; using PixiEditor.Models.Commands.Attributes.Evaluators; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.UserPreferences.Settings; using PixiEditor.Extensions.CommonApi.UserPreferences.Settings.PixiEditor; using PixiEditor.Helpers; @@ -24,6 +23,7 @@ using PixiEditor.Models.Dialogs; using PixiEditor.Models.IO; using PixiEditor.OperatingSystem; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views; using PixiEditor.Views.Dialogs.Debugging; using PixiEditor.Views.Dialogs.Debugging.Localization; diff --git a/src/PixiEditor/ViewModels/SubViewModels/FileViewModel.cs b/src/PixiEditor/ViewModels/SubViewModels/FileViewModel.cs index d844e34a5..52ec4a230 100644 --- a/src/PixiEditor/ViewModels/SubViewModels/FileViewModel.cs +++ b/src/PixiEditor/ViewModels/SubViewModels/FileViewModel.cs @@ -7,7 +7,6 @@ using Avalonia.Threading; using Drawie.Backend.Core; using Drawie.Backend.Core.Surfaces.ImageData; using PixiEditor.Exceptions; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.UserPreferences.Settings.PixiEditor; using PixiEditor.Extensions.Exceptions; using PixiEditor.Helpers; @@ -27,6 +26,7 @@ using PixiEditor.Models.IO.CustomDocumentFormats; using PixiEditor.OperatingSystem; using PixiEditor.Parser; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using PixiEditor.Views; using PixiEditor.Views.Dialogs; diff --git a/src/PixiEditor/ViewModels/SubViewModels/LayersViewModel.cs b/src/PixiEditor/ViewModels/SubViewModels/LayersViewModel.cs index dc61f525c..720cf83ed 100644 --- a/src/PixiEditor/ViewModels/SubViewModels/LayersViewModel.cs +++ b/src/PixiEditor/ViewModels/SubViewModels/LayersViewModel.cs @@ -15,7 +15,6 @@ using PixiEditor.Helpers.Converters; using PixiEditor.Helpers.Extensions; using PixiEditor.ChangeableDocument.Enums; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.Exceptions; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Commands.Attributes.Evaluators; @@ -26,6 +25,7 @@ using PixiEditor.Models.Layers; using Drawie.Numerics; using PixiEditor.Helpers; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Dock; using PixiEditor.ViewModels.Document; using PixiEditor.ViewModels.Document.Nodes; diff --git a/src/PixiEditor/ViewModels/SubViewModels/ToolSetViewModel.cs b/src/PixiEditor/ViewModels/SubViewModels/ToolSetViewModel.cs index 74dd324ff..9254bfa4d 100644 --- a/src/PixiEditor/ViewModels/SubViewModels/ToolSetViewModel.cs +++ b/src/PixiEditor/ViewModels/SubViewModels/ToolSetViewModel.cs @@ -1,5 +1,4 @@ using System.Collections.ObjectModel; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Handlers; using PixiEditor.ViewModels.Tools; diff --git a/src/PixiEditor/ViewModels/SubViewModels/UpdateViewModel.cs b/src/PixiEditor/ViewModels/SubViewModels/UpdateViewModel.cs index 184d90c83..5a03dc3da 100644 --- a/src/PixiEditor/ViewModels/SubViewModels/UpdateViewModel.cs +++ b/src/PixiEditor/ViewModels/SubViewModels/UpdateViewModel.cs @@ -10,7 +10,6 @@ using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Threading; using CommunityToolkit.Mvvm.Input; using PixiEditor.Views.Dialogs; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.UserPreferences.Settings.PixiEditor; using PixiEditor.Helpers; using PixiEditor.Models.Commands.Attributes.Commands; @@ -18,6 +17,7 @@ using PixiEditor.Models.Dialogs; using PixiEditor.Models.IO; using PixiEditor.OperatingSystem; using PixiEditor.Platform; +using PixiEditor.UI.Common.Localization; using PixiEditor.UpdateModule; namespace PixiEditor.ViewModels.SubViewModels; diff --git a/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/FontFamilySettingViewModel.cs b/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/FontFamilySettingViewModel.cs index ce0bba6d1..d75ebfd77 100644 --- a/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/FontFamilySettingViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/FontFamilySettingViewModel.cs @@ -7,7 +7,6 @@ using Avalonia.Media.Fonts; using Avalonia.Platform.Storage; using CommunityToolkit.Mvvm.Input; using Drawie.Backend.Core.Text; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Controllers; using PixiEditor.Models.IO; using PixiEditor.ViewModels.UserPreferences; diff --git a/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/Setting.cs b/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/Setting.cs index d0f77ae12..f85ea558a 100644 --- a/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/Setting.cs +++ b/src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/Setting.cs @@ -1,7 +1,7 @@ using Avalonia.Controls; using CommunityToolkit.Mvvm.ComponentModel; using DiscordRPC; -using PixiEditor.Extensions.Common.Localization; +using PixiEditor.UI.Common.Localization; #pragma warning disable SA1402 // File may only contain a single type, Justification: "Same class with generic value" diff --git a/src/PixiEditor/ViewModels/Tools/ToolSettings/Toolbars/TextToolbar.cs b/src/PixiEditor/ViewModels/Tools/ToolSettings/Toolbars/TextToolbar.cs index e6d23f764..fe55dc928 100644 --- a/src/PixiEditor/ViewModels/Tools/ToolSettings/Toolbars/TextToolbar.cs +++ b/src/PixiEditor/ViewModels/Tools/ToolSettings/Toolbars/TextToolbar.cs @@ -1,8 +1,8 @@ using Drawie.Backend.Core.Text; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Controllers; using PixiEditor.Models.Handlers.Toolbars; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Settings; namespace PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; diff --git a/src/PixiEditor/ViewModels/Tools/ToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/ToolViewModel.cs index d67d95a34..79cafdd72 100644 --- a/src/PixiEditor/ViewModels/Tools/ToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/ToolViewModel.cs @@ -4,11 +4,11 @@ using System.Runtime.CompilerServices; using Avalonia.Input; using CommunityToolkit.Mvvm.ComponentModel; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Toolbars; using PixiEditor.Models.Input; using Drawie.Numerics; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Settings; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/BrightnessToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/BrightnessToolViewModel.cs index f1e3e00b0..8646fcb0d 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/BrightnessToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/BrightnessToolViewModel.cs @@ -1,7 +1,6 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; @@ -9,6 +8,7 @@ using PixiEditor.Models.Tools; using Drawie.Numerics; using PixiEditor.Models.Handlers.Toolbars; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/ColorPickerToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/ColorPickerToolViewModel.cs index ab1bd11b1..c3098a62f 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/ColorPickerToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/ColorPickerToolViewModel.cs @@ -1,13 +1,13 @@ using System.ComponentModel; using Avalonia.Input; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using PixiEditor.Models.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using PixiEditor.ViewModels.Document.TransformOverlays; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/EraserToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/EraserToolViewModel.cs index d54c6f5d7..866249fa7 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/EraserToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/EraserToolViewModel.cs @@ -1,13 +1,13 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.Models.Handlers.Toolbars; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/FloodFillToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/FloodFillToolViewModel.cs index 2c7cb084f..79e80671c 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/FloodFillToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/FloodFillToolViewModel.cs @@ -1,12 +1,12 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/LassoToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/LassoToolViewModel.cs index 46439678b..153be0758 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/LassoToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/LassoToolViewModel.cs @@ -1,11 +1,11 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Enums; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/MagicWandToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/MagicWandToolViewModel.cs index 45a86e33f..180baa0f2 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/MagicWandToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/MagicWandToolViewModel.cs @@ -1,13 +1,13 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Enums; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using PixiEditor.Models.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/MoveToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/MoveToolViewModel.cs index 4300d7c02..a723f8606 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/MoveToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/MoveToolViewModel.cs @@ -3,11 +3,11 @@ using ChunkyImageLib.DataHolders; using PixiEditor.Models.DocumentModels; using PixiEditor.Models.Handlers; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/MoveViewportToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/MoveViewportToolViewModel.cs index 3d85ac9b7..f828e6075 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/MoveViewportToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/MoveViewportToolViewModel.cs @@ -1,7 +1,7 @@ using Avalonia.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Overlays.BrushShapeOverlay; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/PenToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/PenToolViewModel.cs index c7e3a22e3..78b562a63 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/PenToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/PenToolViewModel.cs @@ -1,6 +1,5 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.UserPreferences.Settings.PixiEditor; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; @@ -9,6 +8,7 @@ using PixiEditor.Models.Input; using Drawie.Numerics; using PixiEditor.Models.Handlers.Toolbars; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Settings; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/RasterEllipseToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/RasterEllipseToolViewModel.cs index a9b55bc5f..2c43d6d45 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/RasterEllipseToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/RasterEllipseToolViewModel.cs @@ -1,12 +1,12 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/RasterLineToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/RasterLineToolViewModel.cs index eb29a5158..606754f3d 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/RasterLineToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/RasterLineToolViewModel.cs @@ -2,12 +2,12 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using PixiEditor.Views.Overlays.BrushShapeOverlay; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/RasterRectangleToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/RasterRectangleToolViewModel.cs index 6a50ebf57..ad8a1f357 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/RasterRectangleToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/RasterRectangleToolViewModel.cs @@ -1,12 +1,12 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/RotateViewportToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/RotateViewportToolViewModel.cs index 0972c62df..414025583 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/RotateViewportToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/RotateViewportToolViewModel.cs @@ -1,7 +1,7 @@ using Avalonia.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Overlays.BrushShapeOverlay; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/SelectToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/SelectToolViewModel.cs index 4f39b21f7..4e5de962e 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/SelectToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/SelectToolViewModel.cs @@ -1,12 +1,12 @@ using Avalonia.Input; using PixiEditor.ChangeableDocument.Enums; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers.Tools; using PixiEditor.Models.Position; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; using PixiEditor.Views.Overlays.BrushShapeOverlay; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/TextToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/TextToolViewModel.cs index 4ae5879ef..d724f031a 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/TextToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/TextToolViewModel.cs @@ -1,11 +1,11 @@ using Avalonia.Input; using Drawie.Numerics; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/VectorEllipseToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/VectorEllipseToolViewModel.cs index 143ac158d..aef858ff1 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/VectorEllipseToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/VectorEllipseToolViewModel.cs @@ -2,13 +2,13 @@ using ChunkyImageLib.DataHolders; using PixiEditor.ChangeableDocument.Changeables.Graph.Interfaces.Shapes; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.DocumentModels; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/VectorLineToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/VectorLineToolViewModel.cs index 02cfb48b3..46bb2b573 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/VectorLineToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/VectorLineToolViewModel.cs @@ -5,13 +5,13 @@ using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes.Shapes.Data; using PixiEditor.Views.Overlays.BrushShapeOverlay; using Drawie.Backend.Core.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.DocumentModels; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/VectorPathToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/VectorPathToolViewModel.cs index 702b35c8a..abebfea8d 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/VectorPathToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/VectorPathToolViewModel.cs @@ -4,11 +4,11 @@ using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Vector; using Drawie.Numerics; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/VectorRectangleToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/VectorRectangleToolViewModel.cs index bce255990..b7e29ba2e 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/VectorRectangleToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/VectorRectangleToolViewModel.cs @@ -2,13 +2,13 @@ using ChunkyImageLib.DataHolders; using PixiEditor.ChangeableDocument.Changeables.Graph.Interfaces.Shapes; using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.Models.DocumentModels; using PixiEditor.Models.Handlers; using PixiEditor.Models.Handlers.Tools; using Drawie.Numerics; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Tools.ToolSettings.Toolbars; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/Tools/Tools/ZoomToolViewModel.cs b/src/PixiEditor/ViewModels/Tools/Tools/ZoomToolViewModel.cs index 222c4a6b4..6c8c441a7 100644 --- a/src/PixiEditor/ViewModels/Tools/Tools/ZoomToolViewModel.cs +++ b/src/PixiEditor/ViewModels/Tools/Tools/ZoomToolViewModel.cs @@ -1,7 +1,7 @@ using Avalonia.Input; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands.Attributes.Commands; using PixiEditor.UI.Common.Fonts; +using PixiEditor.UI.Common.Localization; using PixiEditor.Views.Overlays.BrushShapeOverlay; namespace PixiEditor.ViewModels.Tools.Tools; diff --git a/src/PixiEditor/ViewModels/UserPreferences/OnboardingViewModel.cs b/src/PixiEditor/ViewModels/UserPreferences/OnboardingViewModel.cs index b97ae8501..ac41478de 100644 --- a/src/PixiEditor/ViewModels/UserPreferences/OnboardingViewModel.cs +++ b/src/PixiEditor/ViewModels/UserPreferences/OnboardingViewModel.cs @@ -3,10 +3,10 @@ using System.Windows.Input; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Drawie.Numerics; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Models.Commands; using PixiEditor.Models.Commands.Templates; using PixiEditor.Models.Handlers; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.SubViewModels; using PixiEditor.ViewModels.UserPreferences.Settings; using PixiEditor.Views.Shortcuts; diff --git a/src/PixiEditor/ViewModels/UserPreferences/Settings/GeneralSettings.cs b/src/PixiEditor/ViewModels/UserPreferences/Settings/GeneralSettings.cs index 18b2435be..9ab2102de 100644 --- a/src/PixiEditor/ViewModels/UserPreferences/Settings/GeneralSettings.cs +++ b/src/PixiEditor/ViewModels/UserPreferences/Settings/GeneralSettings.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.UserPreferences; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.ViewModels.UserPreferences.Settings; diff --git a/src/PixiEditor/ViewModels/ViewModelMain.cs b/src/PixiEditor/ViewModels/ViewModelMain.cs index 410693862..58452c410 100644 --- a/src/PixiEditor/ViewModels/ViewModelMain.cs +++ b/src/PixiEditor/ViewModels/ViewModelMain.cs @@ -5,7 +5,6 @@ using Avalonia.Threading; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.DependencyInjection; using Drawie.Backend.Core.ColorsImpl; -using PixiEditor.Extensions.Common.Localization; using PixiEditor.Extensions.CommonApi.UserPreferences; using PixiEditor.Helpers; using PixiEditor.Helpers.Collections; @@ -20,6 +19,7 @@ using PixiEditor.Models.ExtensionServices; using PixiEditor.Models.Files; using PixiEditor.Models.Handlers; using PixiEditor.OperatingSystem; +using PixiEditor.UI.Common.Localization; using PixiEditor.ViewModels.Document; using PixiEditor.ViewModels.Menu; using PixiEditor.ViewModels.SubViewModels; diff --git a/src/PixiEditor/Views/AllControlsPanel.axaml b/src/PixiEditor/Views/AllControlsPanel.axaml index 34c660ac3..91bcacdd3 100644 --- a/src/PixiEditor/Views/AllControlsPanel.axaml +++ b/src/PixiEditor/Views/AllControlsPanel.axaml @@ -3,7 +3,7 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:dialogs="clr-namespace:Avalonia.Dialogs;assembly=Avalonia.Dialogs" - xmlns:ui="clr-namespace:PixiEditor.Extensions.UI;assembly=PixiEditor.Extensions" + xmlns:localization="clr-namespace:PixiEditor.UI.Common.Localization;assembly=PixiEditor.UI.Common" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="PixiEditor.Views.AllControlsPanel" Background="{DynamicResource ThemeBackgroundBrush}"> @@ -18,7 +18,7 @@ - + diff --git a/src/PixiEditor/Views/Decorators/Chip.axaml.cs b/src/PixiEditor/Views/Decorators/Chip.axaml.cs index 7658b266a..3ac3a8428 100644 --- a/src/PixiEditor/Views/Decorators/Chip.axaml.cs +++ b/src/PixiEditor/Views/Decorators/Chip.axaml.cs @@ -2,6 +2,7 @@ using Avalonia.Controls; using Avalonia.Media; using PixiEditor.Extensions.UI; +using PixiEditor.UI.Common.Localization; namespace PixiEditor.Views.Decorators; diff --git a/src/PixiEditor/Views/Dialogs/AboutPopup.axaml b/src/PixiEditor/Views/Dialogs/AboutPopup.axaml index 48fae9060..8df20bb89 100644 --- a/src/PixiEditor/Views/Dialogs/AboutPopup.axaml +++ b/src/PixiEditor/Views/Dialogs/AboutPopup.axaml @@ -1,126 +1,140 @@ - - - - PixiEditor - - - - - + \ No newline at end of file diff --git a/src/PixiEditor/Views/Dialogs/NoticePopup.axaml b/src/PixiEditor/Views/Dialogs/NoticePopup.axaml index 9b9df70d2..a1d63c992 100644 --- a/src/PixiEditor/Views/Dialogs/NoticePopup.axaml +++ b/src/PixiEditor/Views/Dialogs/NoticePopup.axaml @@ -1,26 +1,26 @@  + x:ClassModifier="internal" + xmlns="https://github.com/avaloniaui" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:ui="clr-namespace:PixiEditor.UI.Common.Localization;assembly=PixiEditor.UI.Common" + xmlns:dialogs="clr-namespace:PixiEditor.Views.Dialogs" + mc:Ignorable="d" + d:Title="Notice" Height="180" Width="400" MinHeight="180" MinWidth="400" + CanResize="False" + CanMinimize="False" + x:Name="popup" + ui:Translator.Key="{Binding ElementName=popup, Path=Title, Mode=OneTime}"> -