From 847e9e628cb016afb64d0ebb26982339c74e4c8a Mon Sep 17 00:00:00 2001 From: Anish Mishra Date: Sun, 13 Jul 2025 19:42:09 +0530 Subject: [PATCH] Sync with upstream --- assets/fonts/Font.ttf.import | 1 + assets/icons/ApplyMatrix.svg | 2 +- assets/icons/ApplyMatrix.svg.import | 35 +- assets/icons/Arrow.svg | 2 +- assets/icons/Arrow.svg.import | 35 +- assets/icons/BWHandle.svg.import | 35 +- assets/icons/Clear.svg | 2 +- assets/icons/Clear.svg.import | 35 +- assets/icons/Close.svg | 2 +- assets/icons/Close.svg.import | 35 +- assets/icons/CodeEditor.svg | 2 +- assets/icons/CodeEditor.svg.import | 35 +- assets/icons/CodeOptions.svg | 2 +- assets/icons/CodeOptions.svg.import | 35 +- assets/icons/Compress.svg | 2 +- assets/icons/Compress.svg.import | 35 +- assets/icons/Config.svg | 2 +- assets/icons/Config.svg.import | 35 +- assets/icons/Copy.svg | 2 +- assets/icons/Copy.svg.import | 35 +- assets/icons/CreateFolder.svg | 2 +- assets/icons/CreateFolder.svg.import | 35 +- assets/icons/CreateTab.svg | 2 +- assets/icons/CreateTab.svg.import | 35 +- assets/icons/Cube.svg | 2 +- assets/icons/Cube.svg.import | 35 +- assets/icons/Cut.svg | 2 +- assets/icons/Cut.svg.import | 35 +- assets/icons/Debug.svg | 2 +- assets/icons/Debug.svg.import | 35 +- assets/icons/Delete.svg | 2 +- assets/icons/Delete.svg.import | 35 +- assets/icons/DirDesktop.svg | 2 +- assets/icons/DirDesktop.svg.import | 35 +- assets/icons/DirDocuments.svg | 2 +- assets/icons/DirDocuments.svg.import | 35 +- assets/icons/DirDownloads.svg | 2 +- assets/icons/DirDownloads.svg.import | 35 +- assets/icons/DirMovies.svg | 2 +- assets/icons/DirMovies.svg.import | 35 +- assets/icons/DirMusic.svg | 2 +- assets/icons/DirMusic.svg.import | 35 +- assets/icons/DirPictures.svg | 2 +- assets/icons/DirPictures.svg.import | 35 +- assets/icons/DotPatternSegment.svg | 2 +- assets/icons/DotPatternSegment.svg.import | 35 +- assets/icons/Duplicate.svg | 2 +- assets/icons/Duplicate.svg.import | 35 +- assets/icons/Edit.svg | 2 +- assets/icons/Edit.svg.import | 35 +- assets/icons/Expand.svg | 2 +- assets/icons/Expand.svg.import | 35 +- assets/icons/Export.svg | 2 +- assets/icons/Export.svg.import | 35 +- assets/icons/Eyedropper.svg | 2 +- assets/icons/Eyedropper.svg.import | 35 +- assets/icons/FileBroken.svg.import | 35 +- assets/icons/Folder.svg.import | 35 +- assets/icons/FolderUp.svg | 2 +- assets/icons/FolderUp.svg.import | 35 +- assets/icons/Gear.svg | 2 +- assets/icons/Gear.svg.import | 35 +- assets/icons/GearOutlined.svg | 2 +- assets/icons/GearOutlined.svg.import | 35 +- assets/icons/Heart.svg.import | 35 +- assets/icons/Import.svg | 2 +- assets/icons/Import.svg.import | 35 +- assets/icons/Info.svg | 2 +- assets/icons/Info.svg.import | 35 +- assets/icons/InsertAfter.svg | 2 +- assets/icons/InsertAfter.svg.import | 35 +- assets/icons/InsertBefore.svg | 2 +- assets/icons/InsertBefore.svg.import | 35 +- assets/icons/Inspector.svg | 2 +- assets/icons/Inspector.svg.import | 35 +- assets/icons/Languages.svg | 2 +- assets/icons/Languages.svg.import | 35 +- assets/icons/Layouts.svg | 2 +- assets/icons/Layouts.svg.import | 35 +- assets/icons/Link.svg | 2 +- assets/icons/Link.svg.import | 35 +- assets/icons/Matrix.svg | 2 +- assets/icons/Matrix.svg.import | 35 +- assets/icons/Minus.svg | 2 +- assets/icons/Minus.svg.import | 35 +- assets/icons/More.svg | 2 +- assets/icons/More.svg.import | 35 +- assets/icons/MoveDown.svg | 2 +- assets/icons/MoveDown.svg.import | 35 +- assets/icons/MoveUp.svg | 2 +- assets/icons/MoveUp.svg.import | 35 +- assets/icons/NoneColor.svg | 2 +- assets/icons/NoneColor.svg.import | 35 +- assets/icons/OpenFile.svg | 2 +- assets/icons/OpenFile.svg.import | 35 +- assets/icons/OpenFolder.svg | 2 +- assets/icons/OpenFolder.svg.import | 35 +- assets/icons/Paste.svg | 2 +- assets/icons/Paste.svg.import | 35 +- assets/icons/Placeholder.svg | 2 +- assets/icons/Placeholder.svg.import | 35 +- assets/icons/PlatformAndroid.svg | 2 +- assets/icons/PlatformAndroid.svg.import | 35 +- assets/icons/PlatformLinux.svg | 2 +- assets/icons/PlatformLinux.svg.import | 35 +- assets/icons/PlatformMacOS.svg | 2 +- assets/icons/PlatformMacOS.svg.import | 35 +- assets/icons/PlatformWindows.svg | 2 +- assets/icons/PlatformWindows.svg.import | 35 +- assets/icons/Plus.svg | 2 +- assets/icons/Plus.svg.import | 35 +- assets/icons/PopupArrow.svg | 2 +- assets/icons/PopupArrow.svg.import | 35 +- assets/icons/PresetGrayscale.svg.import | 35 +- assets/icons/PresetPure.svg.import | 35 +- assets/icons/QuestionMark.svg | 2 +- assets/icons/QuestionMark.svg.import | 35 +- assets/icons/Quit.svg | 2 +- assets/icons/Quit.svg.import | 35 +- assets/icons/Redo.svg | 2 +- assets/icons/Redo.svg.import | 35 +- assets/icons/Reference.svg | 2 +- assets/icons/Reference.svg.import | 35 +- assets/icons/Reload.svg | 2 +- assets/icons/Reload.svg.import | 35 +- assets/icons/Rename.svg | 2 +- assets/icons/Rename.svg.import | 35 +- assets/icons/Rotate.svg | 2 +- assets/icons/Rotate.svg.import | 35 +- assets/icons/Save.svg | 2 +- assets/icons/Save.svg.import | 35 +- assets/icons/Scale.svg | 2 +- assets/icons/Scale.svg.import | 35 +- assets/icons/ScrollBackwards.svg | 2 +- assets/icons/ScrollBackwards.svg.import | 35 +- assets/icons/ScrollForwards.svg | 2 +- assets/icons/ScrollForwards.svg.import | 35 +- assets/icons/Search.svg | 2 +- assets/icons/Search.svg.import | 35 +- assets/icons/SideSliderArrow.svg | 2 +- assets/icons/SideSliderArrow.svg.import | 35 +- assets/icons/SkewX.svg | 2 +- assets/icons/SkewX.svg.import | 35 +- assets/icons/SkewY.svg | 2 +- assets/icons/SkewY.svg.import | 35 +- assets/icons/SliderArrow.svg | 2 +- assets/icons/SliderArrow.svg.import | 35 +- assets/icons/SmallMore.svg | 2 +- assets/icons/SmallMore.svg.import | 35 +- assets/icons/SmallQuestionMark.svg | 2 +- assets/icons/SmallQuestionMark.svg.import | 35 +- assets/icons/Snap.svg | 2 +- assets/icons/Snap.svg.import | 35 +- assets/icons/TabSwitcher.svg.import | 6 + assets/icons/TextFile.svg.import | 35 +- assets/icons/Translate.svg | 2 +- assets/icons/Translate.svg.import | 35 +- assets/icons/Undo.svg | 2 +- assets/icons/Undo.svg.import | 35 +- assets/icons/Viewport.svg | 2 +- assets/icons/Viewport.svg.import | 35 +- assets/icons/Visuals.svg | 2 +- assets/icons/Visuals.svg.import | 35 +- assets/icons/Warning.svg | 2 +- assets/icons/Warning.svg.import | 35 +- .../icons/backgrounds/Checkerboard.svg.import | 35 +- .../backgrounds/CheckerboardMini.svg.import | 35 +- .../backgrounds/ColorButtonBG.svg.import | 35 +- assets/icons/element/circle.svg | 2 +- assets/icons/element/circle.svg.import | 35 +- assets/icons/element/ellipse.svg | 2 +- assets/icons/element/ellipse.svg.import | 35 +- assets/icons/element/g.svg | 2 +- assets/icons/element/g.svg.import | 35 +- assets/icons/element/image.svg | 2 +- assets/icons/element/image.svg.import | 35 +- assets/icons/element/line.svg | 2 +- assets/icons/element/line.svg.import | 35 +- assets/icons/element/linearGradient.svg | 2 +- .../icons/element/linearGradient.svg.import | 35 +- assets/icons/element/mask.svg | 2 +- assets/icons/element/mask.svg.import | 35 +- assets/icons/element/path.svg | 2 +- assets/icons/element/path.svg.import | 35 +- assets/icons/element/polygon.svg | 2 +- assets/icons/element/polygon.svg.import | 35 +- assets/icons/element/polyline.svg | 2 +- assets/icons/element/polyline.svg.import | 35 +- assets/icons/element/radialGradient.svg | 2 +- .../icons/element/radialGradient.svg.import | 35 +- assets/icons/element/rect.svg | 2 +- assets/icons/element/rect.svg.import | 35 +- assets/icons/element/stop.svg | 2 +- assets/icons/element/stop.svg.import | 35 +- assets/icons/element/svg.svg | 2 +- assets/icons/element/svg.svg.import | 35 +- assets/icons/element/text.svg | 2 +- assets/icons/element/text.svg.import | 35 +- assets/icons/element/unrecognized.svg | 2 +- assets/icons/element/unrecognized.svg.import | 35 +- assets/icons/element/use.svg | 2 +- assets/icons/element/use.svg.import | 35 +- assets/icons/element/xmlnodeCDATA.svg | 2 +- assets/icons/element/xmlnodeCDATA.svg.import | 35 +- assets/icons/element/xmlnodeComment.svg | 2 +- .../icons/element/xmlnodeComment.svg.import | 35 +- assets/icons/element/xmlnodeText.svg | 2 +- assets/icons/element/xmlnodeText.svg.import | 35 +- .../icons/foreign_logos/GithubLogo.svg.import | 35 +- .../icons/foreign_logos/KoFiLogo.svg.import | 35 +- .../foreign_logos/PatreonLogo.svg.import | 35 +- assets/icons/theme/GuiBoxChecked.svg | 1 - assets/icons/theme/GuiBoxChecked.svg.import | 37 - assets/icons/theme/GuiBoxCheckedDisabled.svg | 1 - .../theme/GuiBoxCheckedDisabled.svg.import | 37 - assets/icons/theme/GuiBoxUnchecked.svg | 1 - assets/icons/theme/GuiBoxUnchecked.svg.import | 37 - .../icons/theme/GuiBoxUncheckedDisabled.svg | 1 - .../theme/GuiBoxUncheckedDisabled.svg.import | 37 - assets/icons/theme/GuiToggleChecked.svg | 1 - .../icons/theme/GuiToggleChecked.svg.import | 37 - assets/icons/theme/GuiToggleUnchecked.svg | 1 - .../icons/theme/GuiToggleUnchecked.svg.import | 37 - assets/icons/theme/SplitGrabber.svg | 1 - assets/icons/theme/SplitGrabber.svg.import | 37 - assets/icons/theme/SplitGrabber2.svg | 1 - assets/icons/theme/SplitGrabber2.svg.import | 37 - assets/logos/icon.svg.import | 35 +- .../android_icons/monochrome_white.png.import | 6 + godot_only/scripts/Stopwatch.gd | 21 + godot_only/scripts/Stopwatch.gd.uid | 1 + godot_only/scripts/tests.gd | 131 ++- godot_only/scripts/update_translations.gd | 27 +- project.godot | 1 + src/autoload/Configs.gd | 41 +- src/autoload/HandlerGUI.gd | 63 +- src/config_classes/ConfigResource.gd | 13 +- src/config_classes/SVGHighlighter.gd | 4 +- src/config_classes/SaveData.gd | 376 +++++++-- src/data_classes/Attribute.gd | 2 +- src/data_classes/AttributePathdata.gd | 260 +++--- src/data_classes/AttributeTransformList.gd | 148 ++-- src/data_classes/ColorParser.gd | 2 +- src/data_classes/DB.gd | 15 +- src/data_classes/Element.gd | 10 +- ...radientUtils.gd => ElementBaseGradient.gd} | 44 +- src/data_classes/ElementBaseGradient.gd.uid | 1 + src/data_classes/ElementCircle.gd | 2 +- src/data_classes/ElementEllipse.gd | 2 +- src/data_classes/ElementG.gd | 17 +- src/data_classes/ElementLine.gd | 2 +- src/data_classes/ElementLinearGradient.gd | 67 +- src/data_classes/ElementPath.gd | 2 +- src/data_classes/ElementPolygon.gd | 2 +- src/data_classes/ElementPolyline.gd | 2 +- src/data_classes/ElementRadialGradient.gd | 85 +- src/data_classes/ElementRect.gd | 2 +- src/data_classes/ElementSVG.gd | 8 +- src/data_classes/ElementStop.gd | 2 +- src/data_classes/ElementUnrecognized.gd | 2 +- src/data_classes/ElementUse.gd | 5 +- src/data_classes/GradientUtils.gd.uid | 1 - src/data_classes/ListParser.gd | 2 +- src/data_classes/NumberParser.gd | 2 +- src/data_classes/NumstringParser.gd | 218 ++++- src/data_classes/PathCommand.gd | 2 +- src/data_classes/SVGParser.gd | 2 +- src/data_classes/Transform.gd | 2 +- src/data_classes/XNode.gd | 2 +- src/shaders/animated_stroke_static.gdshader | 21 + .../animated_stroke_static.gdshader.uid | 1 + src/ui_parts/about_menu.gd | 3 +- src/ui_parts/about_menu.tscn | 11 + src/ui_parts/code_editor.gd | 15 +- src/ui_parts/display.gd | 6 +- src/ui_parts/display_texture.gd | 9 +- src/ui_parts/donate_menu.gd | 11 +- src/ui_parts/donate_menu.tscn | 6 + src/ui_parts/export_menu.gd | 6 +- src/ui_parts/export_menu.tscn | 13 +- src/ui_parts/global_actions.gd | 21 +- src/ui_parts/good_file_dialog.gd | 17 +- src/ui_parts/good_file_dialog.tscn | 3 +- src/ui_parts/handles_manager.gd | 58 +- src/ui_parts/inspector.gd | 4 +- src/ui_parts/layout_popup.gd | 13 +- src/ui_parts/settings_menu.gd | 182 ++-- src/ui_parts/settings_menu.tscn | 1 - src/ui_parts/shortcut_panel.gd | 22 +- src/ui_parts/shortcut_panel_config.gd | 7 +- src/ui_parts/shortcut_panel_config.tscn | 1 + src/ui_parts/tab_bar.gd | 62 +- src/ui_widgets/BetterButton.gd | 36 +- src/ui_widgets/BetterLineEdit.gd | 8 +- src/ui_widgets/BetterTextEdit.gd | 5 +- src/ui_widgets/ContextPopup.gd | 12 +- src/ui_widgets/Handle.gd | 2 +- src/ui_widgets/LineEditButton.gd | 3 +- src/ui_widgets/PanelGrid.gd | 8 +- src/ui_widgets/TitledPanel.gd | 2 +- src/ui_widgets/UndoRedoRef.gd | 2 +- src/ui_widgets/alert_dialog.tscn | 6 +- src/ui_widgets/basic_xnode_frame.gd | 25 +- src/ui_widgets/choose_name_dialog.gd | 4 +- src/ui_widgets/choose_name_dialog.tscn | 6 +- src/ui_widgets/color_field.gd | 6 +- src/ui_widgets/color_field_popup.gd | 2 +- src/ui_widgets/color_swatch.gd | 4 +- src/ui_widgets/configure_color_popup.gd | 2 +- src/ui_widgets/confirm_dialog.tscn | 6 +- src/ui_widgets/element_frame.gd | 22 +- src/ui_widgets/flag_field.tscn | 22 +- src/ui_widgets/fps_limit_dropdown.gd | 47 ++ src/ui_widgets/fps_limit_dropdown.gd.uid | 1 + src/ui_widgets/fps_limit_dropdown.tscn | 31 + src/ui_widgets/good_color_picker.gd | 31 +- src/ui_widgets/good_color_picker.tscn | 2 +- src/ui_widgets/number_dropdown.gd | 8 + src/ui_widgets/number_dropdown.tscn | 4 - src/ui_widgets/number_field.gd | 9 + src/ui_widgets/number_field_with_slider.gd | 6 +- src/ui_widgets/options_dialog.gd | 2 +- src/ui_widgets/options_dialog.tscn | 6 +- src/ui_widgets/palette_config.gd | 9 +- src/ui_widgets/path_command_button.gd | 4 +- src/ui_widgets/path_command_button.tscn | 2 +- src/ui_widgets/path_popup.gd | 1 + src/ui_widgets/path_popup.tscn | 6 +- src/ui_widgets/pathdata_field.gd | 53 +- src/ui_widgets/pathdata_field.tscn | 104 +-- src/ui_widgets/points_field.gd | 21 +- src/ui_widgets/profile_frame.gd | 28 +- src/ui_widgets/profile_frame.tscn | 24 +- src/ui_widgets/setting_frame.gd | 38 +- src/ui_widgets/setting_shortcut.gd | 14 +- src/utils/AttributeFieldBuilder.gd | 2 +- src/utils/ClipboardUtils.gd | 151 ++++ src/utils/ClipboardUtils.gd.uid | 1 + src/utils/FileUtils.gd | 2 +- src/utils/ImageExportData.gd | 2 +- src/utils/ShortcutUtils.gd | 2 +- src/utils/ThemeUtils.gd | 797 ++++++++++++------ src/utils/TranslationUtils.gd | 2 +- src/utils/Translator.gd | 2 +- src/utils/Utils.gd | 2 +- src/utils/Utils64Bit.gd | 2 +- src/utils/XIDUtils.gd | 2 +- src/utils/XNodeChildrenBuilder.gd | 2 +- translations/GodSVG.pot | 217 +++-- translations/bg.po | 266 +++--- translations/de.po | 325 ++++--- translations/en.po | 217 +++-- translations/es.po | 339 ++++---- translations/et.po | 293 ++++--- translations/fr.po | 453 +++++----- translations/nl.po | 315 ++++--- translations/pt_BR.po | 309 ++++--- translations/ru.po | 314 ++++--- translations/uk.po | 310 ++++--- translations/zh_CN.po | 274 +++--- 360 files changed, 5554 insertions(+), 6198 deletions(-) delete mode 100644 assets/icons/theme/GuiBoxChecked.svg delete mode 100644 assets/icons/theme/GuiBoxChecked.svg.import delete mode 100644 assets/icons/theme/GuiBoxCheckedDisabled.svg delete mode 100644 assets/icons/theme/GuiBoxCheckedDisabled.svg.import delete mode 100644 assets/icons/theme/GuiBoxUnchecked.svg delete mode 100644 assets/icons/theme/GuiBoxUnchecked.svg.import delete mode 100644 assets/icons/theme/GuiBoxUncheckedDisabled.svg delete mode 100644 assets/icons/theme/GuiBoxUncheckedDisabled.svg.import delete mode 100644 assets/icons/theme/GuiToggleChecked.svg delete mode 100644 assets/icons/theme/GuiToggleChecked.svg.import delete mode 100644 assets/icons/theme/GuiToggleUnchecked.svg delete mode 100644 assets/icons/theme/GuiToggleUnchecked.svg.import delete mode 100644 assets/icons/theme/SplitGrabber.svg delete mode 100644 assets/icons/theme/SplitGrabber.svg.import delete mode 100644 assets/icons/theme/SplitGrabber2.svg delete mode 100644 assets/icons/theme/SplitGrabber2.svg.import create mode 100644 godot_only/scripts/Stopwatch.gd create mode 100644 godot_only/scripts/Stopwatch.gd.uid rename src/data_classes/{GradientUtils.gd => ElementBaseGradient.gd} (57%) create mode 100644 src/data_classes/ElementBaseGradient.gd.uid delete mode 100644 src/data_classes/GradientUtils.gd.uid create mode 100644 src/shaders/animated_stroke_static.gdshader create mode 100644 src/shaders/animated_stroke_static.gdshader.uid create mode 100644 src/ui_widgets/fps_limit_dropdown.gd create mode 100644 src/ui_widgets/fps_limit_dropdown.gd.uid create mode 100644 src/ui_widgets/fps_limit_dropdown.tscn create mode 100644 src/utils/ClipboardUtils.gd create mode 100644 src/utils/ClipboardUtils.gd.uid diff --git a/assets/fonts/Font.ttf.import b/assets/fonts/Font.ttf.import index fd23a39..19acc79 100644 --- a/assets/fonts/Font.ttf.import +++ b/assets/fonts/Font.ttf.import @@ -21,6 +21,7 @@ msdf_pixel_range=8 msdf_size=48 allow_system_fallback=true force_autohinter=false +modulate_color_glyphs=false hinting=1 subpixel_positioning=1 keep_rounding_remainders=true diff --git a/assets/icons/ApplyMatrix.svg b/assets/icons/ApplyMatrix.svg index 7ecd54e..8afa585 100644 --- a/assets/icons/ApplyMatrix.svg +++ b/assets/icons/ApplyMatrix.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/ApplyMatrix.svg.import b/assets/icons/ApplyMatrix.svg.import index cb41847..5fa1c0b 100644 --- a/assets/icons/ApplyMatrix.svg.import +++ b/assets/icons/ApplyMatrix.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cqg7ga6y3m0v1" -path="res://.godot/imported/ApplyMatrix.svg-4b4fb4d9ae9b2b8df69ee71dac2db3d2.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/ApplyMatrix.svg-4b4fb4d9ae9b2b8df69ee71dac2db3d2.svgtex" [deps] source_file="res://assets/icons/ApplyMatrix.svg" -dest_files=["res://.godot/imported/ApplyMatrix.svg-4b4fb4d9ae9b2b8df69ee71dac2db3d2.ctex"] +dest_files=["res://.godot/imported/ApplyMatrix.svg-4b4fb4d9ae9b2b8df69ee71dac2db3d2.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Arrow.svg b/assets/icons/Arrow.svg index 3128945..ebdedde 100644 --- a/assets/icons/Arrow.svg +++ b/assets/icons/Arrow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Arrow.svg.import b/assets/icons/Arrow.svg.import index 3f2255b..4a5f214 100644 --- a/assets/icons/Arrow.svg.import +++ b/assets/icons/Arrow.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://coda6chhcatal" -path="res://.godot/imported/Arrow.svg-454f1a120b660e1c200a4fee4bc9d4e9.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Arrow.svg-454f1a120b660e1c200a4fee4bc9d4e9.svgtex" [deps] source_file="res://assets/icons/Arrow.svg" -dest_files=["res://.godot/imported/Arrow.svg-454f1a120b660e1c200a4fee4bc9d4e9.ctex"] +dest_files=["res://.godot/imported/Arrow.svg-454f1a120b660e1c200a4fee4bc9d4e9.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/BWHandle.svg.import b/assets/icons/BWHandle.svg.import index 1078b13..fe75941 100644 --- a/assets/icons/BWHandle.svg.import +++ b/assets/icons/BWHandle.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ksx758sjihau" -path="res://.godot/imported/BWHandle.svg-9588bc79a1c5a24e3ab185d58c8cacd6.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/BWHandle.svg-9588bc79a1c5a24e3ab185d58c8cacd6.svgtex" [deps] source_file="res://assets/icons/BWHandle.svg" -dest_files=["res://.godot/imported/BWHandle.svg-9588bc79a1c5a24e3ab185d58c8cacd6.ctex"] +dest_files=["res://.godot/imported/BWHandle.svg-9588bc79a1c5a24e3ab185d58c8cacd6.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Clear.svg b/assets/icons/Clear.svg index 8d8b36b..16ed450 100644 --- a/assets/icons/Clear.svg +++ b/assets/icons/Clear.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Clear.svg.import b/assets/icons/Clear.svg.import index 5eab9d8..856db5c 100644 --- a/assets/icons/Clear.svg.import +++ b/assets/icons/Clear.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dw7ho4df0uh4p" -path="res://.godot/imported/Clear.svg-3a871eef1b434e2f0f43b3b19cfa4303.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Clear.svg-3a871eef1b434e2f0f43b3b19cfa4303.svgtex" [deps] source_file="res://assets/icons/Clear.svg" -dest_files=["res://.godot/imported/Clear.svg-3a871eef1b434e2f0f43b3b19cfa4303.ctex"] +dest_files=["res://.godot/imported/Clear.svg-3a871eef1b434e2f0f43b3b19cfa4303.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Close.svg b/assets/icons/Close.svg index 4879911..b507d81 100644 --- a/assets/icons/Close.svg +++ b/assets/icons/Close.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Close.svg.import b/assets/icons/Close.svg.import index ffddd08..a90efdd 100644 --- a/assets/icons/Close.svg.import +++ b/assets/icons/Close.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://b0y4h5tuyrais" -path="res://.godot/imported/Close.svg-ec226890f15a36af010397a4558772f4.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Close.svg-ec226890f15a36af010397a4558772f4.svgtex" [deps] source_file="res://assets/icons/Close.svg" -dest_files=["res://.godot/imported/Close.svg-ec226890f15a36af010397a4558772f4.ctex"] +dest_files=["res://.godot/imported/Close.svg-ec226890f15a36af010397a4558772f4.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/CodeEditor.svg b/assets/icons/CodeEditor.svg index eb9075a..dd920fb 100644 --- a/assets/icons/CodeEditor.svg +++ b/assets/icons/CodeEditor.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/CodeEditor.svg.import b/assets/icons/CodeEditor.svg.import index 28cc648..1e39cbb 100644 --- a/assets/icons/CodeEditor.svg.import +++ b/assets/icons/CodeEditor.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://drl587rrnbwo3" -path="res://.godot/imported/CodeEditor.svg-0e7e65ddead32356f4603181bf8c379c.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/CodeEditor.svg-0e7e65ddead32356f4603181bf8c379c.svgtex" [deps] source_file="res://assets/icons/CodeEditor.svg" -dest_files=["res://.godot/imported/CodeEditor.svg-0e7e65ddead32356f4603181bf8c379c.ctex"] +dest_files=["res://.godot/imported/CodeEditor.svg-0e7e65ddead32356f4603181bf8c379c.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/CodeOptions.svg b/assets/icons/CodeOptions.svg index 040ad83..c5a60c4 100644 --- a/assets/icons/CodeOptions.svg +++ b/assets/icons/CodeOptions.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/CodeOptions.svg.import b/assets/icons/CodeOptions.svg.import index af09a94..a968e1c 100644 --- a/assets/icons/CodeOptions.svg.import +++ b/assets/icons/CodeOptions.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dthdjf4v2vlvg" -path="res://.godot/imported/CodeOptions.svg-494ca15fb7ae22eb042af52beb4677fd.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/CodeOptions.svg-494ca15fb7ae22eb042af52beb4677fd.svgtex" [deps] source_file="res://assets/icons/CodeOptions.svg" -dest_files=["res://.godot/imported/CodeOptions.svg-494ca15fb7ae22eb042af52beb4677fd.ctex"] +dest_files=["res://.godot/imported/CodeOptions.svg-494ca15fb7ae22eb042af52beb4677fd.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Compress.svg b/assets/icons/Compress.svg index a6c4f97..595504e 100644 --- a/assets/icons/Compress.svg +++ b/assets/icons/Compress.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Compress.svg.import b/assets/icons/Compress.svg.import index 7837613..dc2d395 100644 --- a/assets/icons/Compress.svg.import +++ b/assets/icons/Compress.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c5kgvxffw35gi" -path="res://.godot/imported/Compress.svg-108f53e6f660b13f0dc7d2a72d7cff0f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Compress.svg-108f53e6f660b13f0dc7d2a72d7cff0f.svgtex" [deps] source_file="res://assets/icons/Compress.svg" -dest_files=["res://.godot/imported/Compress.svg-108f53e6f660b13f0dc7d2a72d7cff0f.ctex"] +dest_files=["res://.godot/imported/Compress.svg-108f53e6f660b13f0dc7d2a72d7cff0f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Config.svg b/assets/icons/Config.svg index 913e7e6..dbb7360 100644 --- a/assets/icons/Config.svg +++ b/assets/icons/Config.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Config.svg.import b/assets/icons/Config.svg.import index aef5154..45e9b31 100644 --- a/assets/icons/Config.svg.import +++ b/assets/icons/Config.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://qm5bah5fncuy" -path="res://.godot/imported/Config.svg-2731db6c5d5933d8f40d2eb4ac5c9112.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Config.svg-2731db6c5d5933d8f40d2eb4ac5c9112.svgtex" [deps] source_file="res://assets/icons/Config.svg" -dest_files=["res://.godot/imported/Config.svg-2731db6c5d5933d8f40d2eb4ac5c9112.ctex"] +dest_files=["res://.godot/imported/Config.svg-2731db6c5d5933d8f40d2eb4ac5c9112.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Copy.svg b/assets/icons/Copy.svg index 2c89667..1122af1 100644 --- a/assets/icons/Copy.svg +++ b/assets/icons/Copy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Copy.svg.import b/assets/icons/Copy.svg.import index 8d9ac91..9aed1dd 100644 --- a/assets/icons/Copy.svg.import +++ b/assets/icons/Copy.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ccvjkdd0s7rb4" -path="res://.godot/imported/Copy.svg-ff5026a49044a654e1790e2dfe8ef364.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Copy.svg-ff5026a49044a654e1790e2dfe8ef364.svgtex" [deps] source_file="res://assets/icons/Copy.svg" -dest_files=["res://.godot/imported/Copy.svg-ff5026a49044a654e1790e2dfe8ef364.ctex"] +dest_files=["res://.godot/imported/Copy.svg-ff5026a49044a654e1790e2dfe8ef364.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/CreateFolder.svg b/assets/icons/CreateFolder.svg index 7cb8188..d9f2b14 100644 --- a/assets/icons/CreateFolder.svg +++ b/assets/icons/CreateFolder.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/CreateFolder.svg.import b/assets/icons/CreateFolder.svg.import index a1eaf7f..8d59e7a 100644 --- a/assets/icons/CreateFolder.svg.import +++ b/assets/icons/CreateFolder.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bhxd4l64dq2jy" -path="res://.godot/imported/CreateFolder.svg-913d7182fde1b4bb6fe68c275a28a374.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/CreateFolder.svg-913d7182fde1b4bb6fe68c275a28a374.svgtex" [deps] source_file="res://assets/icons/CreateFolder.svg" -dest_files=["res://.godot/imported/CreateFolder.svg-913d7182fde1b4bb6fe68c275a28a374.ctex"] +dest_files=["res://.godot/imported/CreateFolder.svg-913d7182fde1b4bb6fe68c275a28a374.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/CreateTab.svg b/assets/icons/CreateTab.svg index aa7635d..88a07af 100644 --- a/assets/icons/CreateTab.svg +++ b/assets/icons/CreateTab.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/CreateTab.svg.import b/assets/icons/CreateTab.svg.import index 1a75ed2..cb3af3f 100644 --- a/assets/icons/CreateTab.svg.import +++ b/assets/icons/CreateTab.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bnl24bflj771n" -path="res://.godot/imported/CreateTab.svg-5a4a2c79f40bbfe654b40ae41510476b.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/CreateTab.svg-5a4a2c79f40bbfe654b40ae41510476b.svgtex" [deps] source_file="res://assets/icons/CreateTab.svg" -dest_files=["res://.godot/imported/CreateTab.svg-5a4a2c79f40bbfe654b40ae41510476b.ctex"] +dest_files=["res://.godot/imported/CreateTab.svg-5a4a2c79f40bbfe654b40ae41510476b.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Cube.svg b/assets/icons/Cube.svg index f735d8b..8efc1ab 100644 --- a/assets/icons/Cube.svg +++ b/assets/icons/Cube.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Cube.svg.import b/assets/icons/Cube.svg.import index cc7604c..c6655f2 100644 --- a/assets/icons/Cube.svg.import +++ b/assets/icons/Cube.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://7vnn8bloi26s" -path="res://.godot/imported/Cube.svg-e714e55d7ae8d48f4e15ef31cdfdb647.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Cube.svg-e714e55d7ae8d48f4e15ef31cdfdb647.svgtex" [deps] source_file="res://assets/icons/Cube.svg" -dest_files=["res://.godot/imported/Cube.svg-e714e55d7ae8d48f4e15ef31cdfdb647.ctex"] +dest_files=["res://.godot/imported/Cube.svg-e714e55d7ae8d48f4e15ef31cdfdb647.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Cut.svg b/assets/icons/Cut.svg index cb3389b..89f28c2 100644 --- a/assets/icons/Cut.svg +++ b/assets/icons/Cut.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Cut.svg.import b/assets/icons/Cut.svg.import index a43c34c..a4a6363 100644 --- a/assets/icons/Cut.svg.import +++ b/assets/icons/Cut.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://boihbt4421eu8" -path="res://.godot/imported/Cut.svg-9fcfd8686ef77f78ed2688cfb69d7644.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Cut.svg-9fcfd8686ef77f78ed2688cfb69d7644.svgtex" [deps] source_file="res://assets/icons/Cut.svg" -dest_files=["res://.godot/imported/Cut.svg-9fcfd8686ef77f78ed2688cfb69d7644.ctex"] +dest_files=["res://.godot/imported/Cut.svg-9fcfd8686ef77f78ed2688cfb69d7644.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Debug.svg b/assets/icons/Debug.svg index a22942b..ec10401 100644 --- a/assets/icons/Debug.svg +++ b/assets/icons/Debug.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Debug.svg.import b/assets/icons/Debug.svg.import index e691f2b..93178d4 100644 --- a/assets/icons/Debug.svg.import +++ b/assets/icons/Debug.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bfqay6kyf0guc" -path="res://.godot/imported/Debug.svg-10e83314f10b353cebaa94e1c70de967.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Debug.svg-10e83314f10b353cebaa94e1c70de967.svgtex" [deps] source_file="res://assets/icons/Debug.svg" -dest_files=["res://.godot/imported/Debug.svg-10e83314f10b353cebaa94e1c70de967.ctex"] +dest_files=["res://.godot/imported/Debug.svg-10e83314f10b353cebaa94e1c70de967.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Delete.svg b/assets/icons/Delete.svg index 293ccd3..097e28e 100644 --- a/assets/icons/Delete.svg +++ b/assets/icons/Delete.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Delete.svg.import b/assets/icons/Delete.svg.import index 1c35cb2..ae5e0d2 100644 --- a/assets/icons/Delete.svg.import +++ b/assets/icons/Delete.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cj5x2ti8150ja" -path="res://.godot/imported/Delete.svg-fb617ed67411fb32cbb6cbd03041205f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Delete.svg-fb617ed67411fb32cbb6cbd03041205f.svgtex" [deps] source_file="res://assets/icons/Delete.svg" -dest_files=["res://.godot/imported/Delete.svg-fb617ed67411fb32cbb6cbd03041205f.ctex"] +dest_files=["res://.godot/imported/Delete.svg-fb617ed67411fb32cbb6cbd03041205f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/DirDesktop.svg b/assets/icons/DirDesktop.svg index 8022efb..c3bf57c 100644 --- a/assets/icons/DirDesktop.svg +++ b/assets/icons/DirDesktop.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/DirDesktop.svg.import b/assets/icons/DirDesktop.svg.import index 27e1288..90748f4 100644 --- a/assets/icons/DirDesktop.svg.import +++ b/assets/icons/DirDesktop.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://7tukdjdfcrwg" -path="res://.godot/imported/DirDesktop.svg-b7a2d67676de3b45f53c5d5fb9d04055.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/DirDesktop.svg-b7a2d67676de3b45f53c5d5fb9d04055.svgtex" [deps] source_file="res://assets/icons/DirDesktop.svg" -dest_files=["res://.godot/imported/DirDesktop.svg-b7a2d67676de3b45f53c5d5fb9d04055.ctex"] +dest_files=["res://.godot/imported/DirDesktop.svg-b7a2d67676de3b45f53c5d5fb9d04055.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/DirDocuments.svg b/assets/icons/DirDocuments.svg index e1e368e..47f0d95 100644 --- a/assets/icons/DirDocuments.svg +++ b/assets/icons/DirDocuments.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/DirDocuments.svg.import b/assets/icons/DirDocuments.svg.import index 782e225..72961e4 100644 --- a/assets/icons/DirDocuments.svg.import +++ b/assets/icons/DirDocuments.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bpmks3pbl18rl" -path="res://.godot/imported/DirDocuments.svg-df89f18957b052f6296002d8d0a41440.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/DirDocuments.svg-df89f18957b052f6296002d8d0a41440.svgtex" [deps] source_file="res://assets/icons/DirDocuments.svg" -dest_files=["res://.godot/imported/DirDocuments.svg-df89f18957b052f6296002d8d0a41440.ctex"] +dest_files=["res://.godot/imported/DirDocuments.svg-df89f18957b052f6296002d8d0a41440.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/DirDownloads.svg b/assets/icons/DirDownloads.svg index 35b4e58..90c2135 100644 --- a/assets/icons/DirDownloads.svg +++ b/assets/icons/DirDownloads.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/DirDownloads.svg.import b/assets/icons/DirDownloads.svg.import index 21f39aa..3b08af1 100644 --- a/assets/icons/DirDownloads.svg.import +++ b/assets/icons/DirDownloads.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://biq08throgeuw" -path="res://.godot/imported/DirDownloads.svg-5704048e3ee9a7ac86a49b059bd6a059.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/DirDownloads.svg-5704048e3ee9a7ac86a49b059bd6a059.svgtex" [deps] source_file="res://assets/icons/DirDownloads.svg" -dest_files=["res://.godot/imported/DirDownloads.svg-5704048e3ee9a7ac86a49b059bd6a059.ctex"] +dest_files=["res://.godot/imported/DirDownloads.svg-5704048e3ee9a7ac86a49b059bd6a059.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/DirMovies.svg b/assets/icons/DirMovies.svg index c2ecc8b..633cd98 100644 --- a/assets/icons/DirMovies.svg +++ b/assets/icons/DirMovies.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/DirMovies.svg.import b/assets/icons/DirMovies.svg.import index 36bef7b..5fc7755 100644 --- a/assets/icons/DirMovies.svg.import +++ b/assets/icons/DirMovies.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bix0itrhquk43" -path="res://.godot/imported/DirMovies.svg-2d6571f0e062e42f434e9d816096b73f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/DirMovies.svg-2d6571f0e062e42f434e9d816096b73f.svgtex" [deps] source_file="res://assets/icons/DirMovies.svg" -dest_files=["res://.godot/imported/DirMovies.svg-2d6571f0e062e42f434e9d816096b73f.ctex"] +dest_files=["res://.godot/imported/DirMovies.svg-2d6571f0e062e42f434e9d816096b73f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/DirMusic.svg b/assets/icons/DirMusic.svg index 7ba2143..6699489 100644 --- a/assets/icons/DirMusic.svg +++ b/assets/icons/DirMusic.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/DirMusic.svg.import b/assets/icons/DirMusic.svg.import index 9ad0806..b22fdf8 100644 --- a/assets/icons/DirMusic.svg.import +++ b/assets/icons/DirMusic.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://yspvgvx4p5i7" -path="res://.godot/imported/DirMusic.svg-a00acecf89df9970f2430b62ecb1c948.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/DirMusic.svg-a00acecf89df9970f2430b62ecb1c948.svgtex" [deps] source_file="res://assets/icons/DirMusic.svg" -dest_files=["res://.godot/imported/DirMusic.svg-a00acecf89df9970f2430b62ecb1c948.ctex"] +dest_files=["res://.godot/imported/DirMusic.svg-a00acecf89df9970f2430b62ecb1c948.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/DirPictures.svg b/assets/icons/DirPictures.svg index ebf151e..b6501ba 100644 --- a/assets/icons/DirPictures.svg +++ b/assets/icons/DirPictures.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/DirPictures.svg.import b/assets/icons/DirPictures.svg.import index d4adfe7..b5862ac 100644 --- a/assets/icons/DirPictures.svg.import +++ b/assets/icons/DirPictures.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ctulth0ybk2l7" -path="res://.godot/imported/DirPictures.svg-d937c884a9108699c403087d49b8911d.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/DirPictures.svg-d937c884a9108699c403087d49b8911d.svgtex" [deps] source_file="res://assets/icons/DirPictures.svg" -dest_files=["res://.godot/imported/DirPictures.svg-d937c884a9108699c403087d49b8911d.ctex"] +dest_files=["res://.godot/imported/DirPictures.svg-d937c884a9108699c403087d49b8911d.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/DotPatternSegment.svg b/assets/icons/DotPatternSegment.svg index bfff879..30dfe37 100644 --- a/assets/icons/DotPatternSegment.svg +++ b/assets/icons/DotPatternSegment.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/DotPatternSegment.svg.import b/assets/icons/DotPatternSegment.svg.import index 3a89838..a05e33c 100644 --- a/assets/icons/DotPatternSegment.svg.import +++ b/assets/icons/DotPatternSegment.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bjo2bdb1cgusy" -path="res://.godot/imported/DotPatternSegment.svg-014783b79e9ccf4aa6aad42fedc56aec.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/DotPatternSegment.svg-014783b79e9ccf4aa6aad42fedc56aec.svgtex" [deps] source_file="res://assets/icons/DotPatternSegment.svg" -dest_files=["res://.godot/imported/DotPatternSegment.svg-014783b79e9ccf4aa6aad42fedc56aec.ctex"] +dest_files=["res://.godot/imported/DotPatternSegment.svg-014783b79e9ccf4aa6aad42fedc56aec.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Duplicate.svg b/assets/icons/Duplicate.svg index e8e9323..3765044 100644 --- a/assets/icons/Duplicate.svg +++ b/assets/icons/Duplicate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Duplicate.svg.import b/assets/icons/Duplicate.svg.import index 496fa81..35410f7 100644 --- a/assets/icons/Duplicate.svg.import +++ b/assets/icons/Duplicate.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c47mt41k028j2" -path="res://.godot/imported/Duplicate.svg-959ae53cae0657548eb01f107c8bac01.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Duplicate.svg-959ae53cae0657548eb01f107c8bac01.svgtex" [deps] source_file="res://assets/icons/Duplicate.svg" -dest_files=["res://.godot/imported/Duplicate.svg-959ae53cae0657548eb01f107c8bac01.ctex"] +dest_files=["res://.godot/imported/Duplicate.svg-959ae53cae0657548eb01f107c8bac01.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Edit.svg b/assets/icons/Edit.svg index b210f32..113aedd 100644 --- a/assets/icons/Edit.svg +++ b/assets/icons/Edit.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Edit.svg.import b/assets/icons/Edit.svg.import index 632d472..b83cafd 100644 --- a/assets/icons/Edit.svg.import +++ b/assets/icons/Edit.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dr2erka82g6j4" -path="res://.godot/imported/Edit.svg-40006b452883af7dafa16974b9dda14a.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Edit.svg-40006b452883af7dafa16974b9dda14a.svgtex" [deps] source_file="res://assets/icons/Edit.svg" -dest_files=["res://.godot/imported/Edit.svg-40006b452883af7dafa16974b9dda14a.ctex"] +dest_files=["res://.godot/imported/Edit.svg-40006b452883af7dafa16974b9dda14a.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Expand.svg b/assets/icons/Expand.svg index e53c7ff..628e878 100644 --- a/assets/icons/Expand.svg +++ b/assets/icons/Expand.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Expand.svg.import b/assets/icons/Expand.svg.import index faef64a..11f54cf 100644 --- a/assets/icons/Expand.svg.import +++ b/assets/icons/Expand.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://0xptbhyrvsk1" -path="res://.godot/imported/Expand.svg-54a09277a628926ed67d8eb42ef8926e.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Expand.svg-54a09277a628926ed67d8eb42ef8926e.svgtex" [deps] source_file="res://assets/icons/Expand.svg" -dest_files=["res://.godot/imported/Expand.svg-54a09277a628926ed67d8eb42ef8926e.ctex"] +dest_files=["res://.godot/imported/Expand.svg-54a09277a628926ed67d8eb42ef8926e.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Export.svg b/assets/icons/Export.svg index bacb145..b32a7c4 100644 --- a/assets/icons/Export.svg +++ b/assets/icons/Export.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Export.svg.import b/assets/icons/Export.svg.import index 25bd0d6..dc193a2 100644 --- a/assets/icons/Export.svg.import +++ b/assets/icons/Export.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://d0uvwj0t44n6v" -path="res://.godot/imported/Export.svg-6941de360a1bbebc9741d069d3bfeced.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Export.svg-6941de360a1bbebc9741d069d3bfeced.svgtex" [deps] source_file="res://assets/icons/Export.svg" -dest_files=["res://.godot/imported/Export.svg-6941de360a1bbebc9741d069d3bfeced.ctex"] +dest_files=["res://.godot/imported/Export.svg-6941de360a1bbebc9741d069d3bfeced.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Eyedropper.svg b/assets/icons/Eyedropper.svg index 973a54b..f0e2ae2 100644 --- a/assets/icons/Eyedropper.svg +++ b/assets/icons/Eyedropper.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Eyedropper.svg.import b/assets/icons/Eyedropper.svg.import index 2812627..817c5c3 100644 --- a/assets/icons/Eyedropper.svg.import +++ b/assets/icons/Eyedropper.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://brff7fx0puj6" -path="res://.godot/imported/Eyedropper.svg-22a2f037b51e69561fa914953a212e31.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Eyedropper.svg-22a2f037b51e69561fa914953a212e31.svgtex" [deps] source_file="res://assets/icons/Eyedropper.svg" -dest_files=["res://.godot/imported/Eyedropper.svg-22a2f037b51e69561fa914953a212e31.ctex"] +dest_files=["res://.godot/imported/Eyedropper.svg-22a2f037b51e69561fa914953a212e31.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/FileBroken.svg.import b/assets/icons/FileBroken.svg.import index 562824b..7e3cb45 100644 --- a/assets/icons/FileBroken.svg.import +++ b/assets/icons/FileBroken.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cr4fc0hsu58lf" -path="res://.godot/imported/FileBroken.svg-e9da65d10479a56ef147774312af3ca7.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/FileBroken.svg-e9da65d10479a56ef147774312af3ca7.svgtex" [deps] source_file="res://assets/icons/FileBroken.svg" -dest_files=["res://.godot/imported/FileBroken.svg-e9da65d10479a56ef147774312af3ca7.ctex"] +dest_files=["res://.godot/imported/FileBroken.svg-e9da65d10479a56ef147774312af3ca7.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Folder.svg.import b/assets/icons/Folder.svg.import index 1b399a2..88b8803 100644 --- a/assets/icons/Folder.svg.import +++ b/assets/icons/Folder.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cba8p7b8tjiv3" -path="res://.godot/imported/Folder.svg-22bb452791dc5b3ede2a4bc12d5c1d9b.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Folder.svg-22bb452791dc5b3ede2a4bc12d5c1d9b.svgtex" [deps] source_file="res://assets/icons/Folder.svg" -dest_files=["res://.godot/imported/Folder.svg-22bb452791dc5b3ede2a4bc12d5c1d9b.ctex"] +dest_files=["res://.godot/imported/Folder.svg-22bb452791dc5b3ede2a4bc12d5c1d9b.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/FolderUp.svg b/assets/icons/FolderUp.svg index 151dc5c..1092fea 100644 --- a/assets/icons/FolderUp.svg +++ b/assets/icons/FolderUp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/FolderUp.svg.import b/assets/icons/FolderUp.svg.import index 106ede5..a3a66d9 100644 --- a/assets/icons/FolderUp.svg.import +++ b/assets/icons/FolderUp.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://rrhdja8l17cn" -path="res://.godot/imported/FolderUp.svg-7eb1d635a1955e89cf029a3e96626a9c.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/FolderUp.svg-7eb1d635a1955e89cf029a3e96626a9c.svgtex" [deps] source_file="res://assets/icons/FolderUp.svg" -dest_files=["res://.godot/imported/FolderUp.svg-7eb1d635a1955e89cf029a3e96626a9c.ctex"] +dest_files=["res://.godot/imported/FolderUp.svg-7eb1d635a1955e89cf029a3e96626a9c.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Gear.svg b/assets/icons/Gear.svg index b2ce606..914c135 100644 --- a/assets/icons/Gear.svg +++ b/assets/icons/Gear.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Gear.svg.import b/assets/icons/Gear.svg.import index d1ec47d..0f27a50 100644 --- a/assets/icons/Gear.svg.import +++ b/assets/icons/Gear.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ckkkgof1hcbld" -path="res://.godot/imported/Gear.svg-ca94d59e8c536d42f979019c85e0d8ba.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Gear.svg-ca94d59e8c536d42f979019c85e0d8ba.svgtex" [deps] source_file="res://assets/icons/Gear.svg" -dest_files=["res://.godot/imported/Gear.svg-ca94d59e8c536d42f979019c85e0d8ba.ctex"] +dest_files=["res://.godot/imported/Gear.svg-ca94d59e8c536d42f979019c85e0d8ba.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/GearOutlined.svg b/assets/icons/GearOutlined.svg index 0aab8bd..9f39a03 100644 --- a/assets/icons/GearOutlined.svg +++ b/assets/icons/GearOutlined.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/GearOutlined.svg.import b/assets/icons/GearOutlined.svg.import index e47d10e..51638b7 100644 --- a/assets/icons/GearOutlined.svg.import +++ b/assets/icons/GearOutlined.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bhxr0nv6bs5j2" -path="res://.godot/imported/GearOutlined.svg-9ffca79f703b36dfc1fb5067906e0876.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/GearOutlined.svg-9ffca79f703b36dfc1fb5067906e0876.svgtex" [deps] source_file="res://assets/icons/GearOutlined.svg" -dest_files=["res://.godot/imported/GearOutlined.svg-9ffca79f703b36dfc1fb5067906e0876.ctex"] +dest_files=["res://.godot/imported/GearOutlined.svg-9ffca79f703b36dfc1fb5067906e0876.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Heart.svg.import b/assets/icons/Heart.svg.import index a64364d..7829f8e 100644 --- a/assets/icons/Heart.svg.import +++ b/assets/icons/Heart.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bvm6h1qda67ys" -path="res://.godot/imported/Heart.svg-0ab6963a35d0b59270531cd65b47ee68.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Heart.svg-0ab6963a35d0b59270531cd65b47ee68.svgtex" [deps] source_file="res://assets/icons/Heart.svg" -dest_files=["res://.godot/imported/Heart.svg-0ab6963a35d0b59270531cd65b47ee68.ctex"] +dest_files=["res://.godot/imported/Heart.svg-0ab6963a35d0b59270531cd65b47ee68.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Import.svg b/assets/icons/Import.svg index 7921525..4526cbe 100644 --- a/assets/icons/Import.svg +++ b/assets/icons/Import.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Import.svg.import b/assets/icons/Import.svg.import index 63e3e82..27b25e5 100644 --- a/assets/icons/Import.svg.import +++ b/assets/icons/Import.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://6ymbl3jqersp" -path="res://.godot/imported/Import.svg-192a814e11a31699451eba5a11b8d95f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Import.svg-192a814e11a31699451eba5a11b8d95f.svgtex" [deps] source_file="res://assets/icons/Import.svg" -dest_files=["res://.godot/imported/Import.svg-192a814e11a31699451eba5a11b8d95f.ctex"] +dest_files=["res://.godot/imported/Import.svg-192a814e11a31699451eba5a11b8d95f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Info.svg b/assets/icons/Info.svg index dfdaf68..96b2852 100644 --- a/assets/icons/Info.svg +++ b/assets/icons/Info.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Info.svg.import b/assets/icons/Info.svg.import index 447e8eb..be11652 100644 --- a/assets/icons/Info.svg.import +++ b/assets/icons/Info.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://v0lqyuvo50yq" -path="res://.godot/imported/Info.svg-b6a970b105b815abf501807a06233c56.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Info.svg-b6a970b105b815abf501807a06233c56.svgtex" [deps] source_file="res://assets/icons/Info.svg" -dest_files=["res://.godot/imported/Info.svg-b6a970b105b815abf501807a06233c56.ctex"] +dest_files=["res://.godot/imported/Info.svg-b6a970b105b815abf501807a06233c56.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/InsertAfter.svg b/assets/icons/InsertAfter.svg index ad4c204..997e1ce 100644 --- a/assets/icons/InsertAfter.svg +++ b/assets/icons/InsertAfter.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/InsertAfter.svg.import b/assets/icons/InsertAfter.svg.import index 78c9f31..534d7ba 100644 --- a/assets/icons/InsertAfter.svg.import +++ b/assets/icons/InsertAfter.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c5iyi2abx0ja1" -path="res://.godot/imported/InsertAfter.svg-ecdb8075972644ee5295e10c7410dd81.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/InsertAfter.svg-ecdb8075972644ee5295e10c7410dd81.svgtex" [deps] source_file="res://assets/icons/InsertAfter.svg" -dest_files=["res://.godot/imported/InsertAfter.svg-ecdb8075972644ee5295e10c7410dd81.ctex"] +dest_files=["res://.godot/imported/InsertAfter.svg-ecdb8075972644ee5295e10c7410dd81.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/InsertBefore.svg b/assets/icons/InsertBefore.svg index 2824d8d..281c8e9 100644 --- a/assets/icons/InsertBefore.svg +++ b/assets/icons/InsertBefore.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/InsertBefore.svg.import b/assets/icons/InsertBefore.svg.import index 846aa06..ca627c1 100644 --- a/assets/icons/InsertBefore.svg.import +++ b/assets/icons/InsertBefore.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dav1phw6au0c1" -path="res://.godot/imported/InsertBefore.svg-8dc67cab8823221d311f91e90cdd6e9b.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/InsertBefore.svg-8dc67cab8823221d311f91e90cdd6e9b.svgtex" [deps] source_file="res://assets/icons/InsertBefore.svg" -dest_files=["res://.godot/imported/InsertBefore.svg-8dc67cab8823221d311f91e90cdd6e9b.ctex"] +dest_files=["res://.godot/imported/InsertBefore.svg-8dc67cab8823221d311f91e90cdd6e9b.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Inspector.svg b/assets/icons/Inspector.svg index befba79..8f95396 100644 --- a/assets/icons/Inspector.svg +++ b/assets/icons/Inspector.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Inspector.svg.import b/assets/icons/Inspector.svg.import index 76bd231..c61c9f2 100644 --- a/assets/icons/Inspector.svg.import +++ b/assets/icons/Inspector.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://oha0oauf4kup" -path="res://.godot/imported/Inspector.svg-16dc105bb2fde5191bb55e4179b50443.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Inspector.svg-16dc105bb2fde5191bb55e4179b50443.svgtex" [deps] source_file="res://assets/icons/Inspector.svg" -dest_files=["res://.godot/imported/Inspector.svg-16dc105bb2fde5191bb55e4179b50443.ctex"] +dest_files=["res://.godot/imported/Inspector.svg-16dc105bb2fde5191bb55e4179b50443.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Languages.svg b/assets/icons/Languages.svg index b6a51bb..784781b 100644 --- a/assets/icons/Languages.svg +++ b/assets/icons/Languages.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Languages.svg.import b/assets/icons/Languages.svg.import index 0f5f11f..0f24371 100644 --- a/assets/icons/Languages.svg.import +++ b/assets/icons/Languages.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c528knojuxbw6" -path="res://.godot/imported/Languages.svg-56e992e4c3e11801226f5281fef7e603.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Languages.svg-56e992e4c3e11801226f5281fef7e603.svgtex" [deps] source_file="res://assets/icons/Languages.svg" -dest_files=["res://.godot/imported/Languages.svg-56e992e4c3e11801226f5281fef7e603.ctex"] +dest_files=["res://.godot/imported/Languages.svg-56e992e4c3e11801226f5281fef7e603.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Layouts.svg b/assets/icons/Layouts.svg index 2eb318c..40c0f57 100644 --- a/assets/icons/Layouts.svg +++ b/assets/icons/Layouts.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Layouts.svg.import b/assets/icons/Layouts.svg.import index 8b9c759..4ab31a7 100644 --- a/assets/icons/Layouts.svg.import +++ b/assets/icons/Layouts.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://b6mqp088ef65" -path="res://.godot/imported/Layouts.svg-1c07a3528e532f1c03ca36a1edac552d.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Layouts.svg-1c07a3528e532f1c03ca36a1edac552d.svgtex" [deps] source_file="res://assets/icons/Layouts.svg" -dest_files=["res://.godot/imported/Layouts.svg-1c07a3528e532f1c03ca36a1edac552d.ctex"] +dest_files=["res://.godot/imported/Layouts.svg-1c07a3528e532f1c03ca36a1edac552d.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Link.svg b/assets/icons/Link.svg index f094400..35f5fb2 100644 --- a/assets/icons/Link.svg +++ b/assets/icons/Link.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Link.svg.import b/assets/icons/Link.svg.import index 7d8908e..602d24d 100644 --- a/assets/icons/Link.svg.import +++ b/assets/icons/Link.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cgxpm1e3v0i3v" -path="res://.godot/imported/Link.svg-84f27e7b995bc01f3def6f6291cc9881.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Link.svg-84f27e7b995bc01f3def6f6291cc9881.svgtex" [deps] source_file="res://assets/icons/Link.svg" -dest_files=["res://.godot/imported/Link.svg-84f27e7b995bc01f3def6f6291cc9881.ctex"] +dest_files=["res://.godot/imported/Link.svg-84f27e7b995bc01f3def6f6291cc9881.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Matrix.svg b/assets/icons/Matrix.svg index bddaa9c..55ae44a 100644 --- a/assets/icons/Matrix.svg +++ b/assets/icons/Matrix.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Matrix.svg.import b/assets/icons/Matrix.svg.import index b03ee3e..25e4886 100644 --- a/assets/icons/Matrix.svg.import +++ b/assets/icons/Matrix.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://crtn52j7mlh11" -path="res://.godot/imported/Matrix.svg-6cf1c1474bd06db6496e8f3cc865c4b5.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Matrix.svg-6cf1c1474bd06db6496e8f3cc865c4b5.svgtex" [deps] source_file="res://assets/icons/Matrix.svg" -dest_files=["res://.godot/imported/Matrix.svg-6cf1c1474bd06db6496e8f3cc865c4b5.ctex"] +dest_files=["res://.godot/imported/Matrix.svg-6cf1c1474bd06db6496e8f3cc865c4b5.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Minus.svg b/assets/icons/Minus.svg index 77fd2c8..5b0c03a 100644 --- a/assets/icons/Minus.svg +++ b/assets/icons/Minus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Minus.svg.import b/assets/icons/Minus.svg.import index b3f5fc2..56ab413 100644 --- a/assets/icons/Minus.svg.import +++ b/assets/icons/Minus.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c2h5snkvemm4p" -path="res://.godot/imported/Minus.svg-ad675dfc85c1db1496d38b10f0c0cd89.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Minus.svg-ad675dfc85c1db1496d38b10f0c0cd89.svgtex" [deps] source_file="res://assets/icons/Minus.svg" -dest_files=["res://.godot/imported/Minus.svg-ad675dfc85c1db1496d38b10f0c0cd89.ctex"] +dest_files=["res://.godot/imported/Minus.svg-ad675dfc85c1db1496d38b10f0c0cd89.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/More.svg b/assets/icons/More.svg index 67f8928..ca44088 100644 --- a/assets/icons/More.svg +++ b/assets/icons/More.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/More.svg.import b/assets/icons/More.svg.import index 1b44a24..6998a2e 100644 --- a/assets/icons/More.svg.import +++ b/assets/icons/More.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ccbta5q43jobk" -path="res://.godot/imported/More.svg-5dd0ba59b51b3ab03606873cef088a40.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/More.svg-5dd0ba59b51b3ab03606873cef088a40.svgtex" [deps] source_file="res://assets/icons/More.svg" -dest_files=["res://.godot/imported/More.svg-5dd0ba59b51b3ab03606873cef088a40.ctex"] +dest_files=["res://.godot/imported/More.svg-5dd0ba59b51b3ab03606873cef088a40.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/MoveDown.svg b/assets/icons/MoveDown.svg index e0b71db..9630c12 100644 --- a/assets/icons/MoveDown.svg +++ b/assets/icons/MoveDown.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/MoveDown.svg.import b/assets/icons/MoveDown.svg.import index 303338f..b7d7168 100644 --- a/assets/icons/MoveDown.svg.import +++ b/assets/icons/MoveDown.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ciirlvjd2efd3" -path="res://.godot/imported/MoveDown.svg-f1fb57bee54d2faca78973dd8c78186f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/MoveDown.svg-f1fb57bee54d2faca78973dd8c78186f.svgtex" [deps] source_file="res://assets/icons/MoveDown.svg" -dest_files=["res://.godot/imported/MoveDown.svg-f1fb57bee54d2faca78973dd8c78186f.ctex"] +dest_files=["res://.godot/imported/MoveDown.svg-f1fb57bee54d2faca78973dd8c78186f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/MoveUp.svg b/assets/icons/MoveUp.svg index 4066bf1..04af1ff 100644 --- a/assets/icons/MoveUp.svg +++ b/assets/icons/MoveUp.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/MoveUp.svg.import b/assets/icons/MoveUp.svg.import index 49c16a4..edf43a1 100644 --- a/assets/icons/MoveUp.svg.import +++ b/assets/icons/MoveUp.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dgfyegqnsoqgd" -path="res://.godot/imported/MoveUp.svg-2cc1a895a069a8144f501bfb0706c099.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/MoveUp.svg-2cc1a895a069a8144f501bfb0706c099.svgtex" [deps] source_file="res://assets/icons/MoveUp.svg" -dest_files=["res://.godot/imported/MoveUp.svg-2cc1a895a069a8144f501bfb0706c099.ctex"] +dest_files=["res://.godot/imported/MoveUp.svg-2cc1a895a069a8144f501bfb0706c099.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/NoneColor.svg b/assets/icons/NoneColor.svg index 39de2cd..a025321 100644 --- a/assets/icons/NoneColor.svg +++ b/assets/icons/NoneColor.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/NoneColor.svg.import b/assets/icons/NoneColor.svg.import index 8dfcf2f..208f242 100644 --- a/assets/icons/NoneColor.svg.import +++ b/assets/icons/NoneColor.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://d36qn2f7a0nok" -path="res://.godot/imported/NoneColor.svg-e4f700f4b24e186abc5e7387ac1bab3a.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/NoneColor.svg-e4f700f4b24e186abc5e7387ac1bab3a.svgtex" [deps] source_file="res://assets/icons/NoneColor.svg" -dest_files=["res://.godot/imported/NoneColor.svg-e4f700f4b24e186abc5e7387ac1bab3a.ctex"] +dest_files=["res://.godot/imported/NoneColor.svg-e4f700f4b24e186abc5e7387ac1bab3a.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/OpenFile.svg b/assets/icons/OpenFile.svg index 93d6a20..fa4196e 100644 --- a/assets/icons/OpenFile.svg +++ b/assets/icons/OpenFile.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/OpenFile.svg.import b/assets/icons/OpenFile.svg.import index 516e884..9e8b1db 100644 --- a/assets/icons/OpenFile.svg.import +++ b/assets/icons/OpenFile.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ckw03ghmca5ho" -path="res://.godot/imported/OpenFile.svg-f562e243f1340cda3a0958b28a11a58e.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/OpenFile.svg-f562e243f1340cda3a0958b28a11a58e.svgtex" [deps] source_file="res://assets/icons/OpenFile.svg" -dest_files=["res://.godot/imported/OpenFile.svg-f562e243f1340cda3a0958b28a11a58e.ctex"] +dest_files=["res://.godot/imported/OpenFile.svg-f562e243f1340cda3a0958b28a11a58e.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/OpenFolder.svg b/assets/icons/OpenFolder.svg index b5a8769..2eaf88d 100644 --- a/assets/icons/OpenFolder.svg +++ b/assets/icons/OpenFolder.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/OpenFolder.svg.import b/assets/icons/OpenFolder.svg.import index d5229cd..893feef 100644 --- a/assets/icons/OpenFolder.svg.import +++ b/assets/icons/OpenFolder.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dn3bunuaxmdru" -path="res://.godot/imported/OpenFolder.svg-db8ccfafc61095e1348d9d50464796f6.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/OpenFolder.svg-db8ccfafc61095e1348d9d50464796f6.svgtex" [deps] source_file="res://assets/icons/OpenFolder.svg" -dest_files=["res://.godot/imported/OpenFolder.svg-db8ccfafc61095e1348d9d50464796f6.ctex"] +dest_files=["res://.godot/imported/OpenFolder.svg-db8ccfafc61095e1348d9d50464796f6.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Paste.svg b/assets/icons/Paste.svg index 13ea248..e648007 100644 --- a/assets/icons/Paste.svg +++ b/assets/icons/Paste.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Paste.svg.import b/assets/icons/Paste.svg.import index c122755..dc416a3 100644 --- a/assets/icons/Paste.svg.import +++ b/assets/icons/Paste.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dngu00dcl6ate" -path="res://.godot/imported/Paste.svg-d9eab6865dcb4939a280855c07f79527.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Paste.svg-d9eab6865dcb4939a280855c07f79527.svgtex" [deps] source_file="res://assets/icons/Paste.svg" -dest_files=["res://.godot/imported/Paste.svg-d9eab6865dcb4939a280855c07f79527.ctex"] +dest_files=["res://.godot/imported/Paste.svg-d9eab6865dcb4939a280855c07f79527.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Placeholder.svg b/assets/icons/Placeholder.svg index 70b055c..09298c1 100644 --- a/assets/icons/Placeholder.svg +++ b/assets/icons/Placeholder.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Placeholder.svg.import b/assets/icons/Placeholder.svg.import index f8d6387..3a84c12 100644 --- a/assets/icons/Placeholder.svg.import +++ b/assets/icons/Placeholder.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://b4fycrn6ejomu" -path="res://.godot/imported/Placeholder.svg-9c0dcc2e6f90dd567f3e217a181e4e00.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Placeholder.svg-9c0dcc2e6f90dd567f3e217a181e4e00.svgtex" [deps] source_file="res://assets/icons/Placeholder.svg" -dest_files=["res://.godot/imported/Placeholder.svg-9c0dcc2e6f90dd567f3e217a181e4e00.ctex"] +dest_files=["res://.godot/imported/Placeholder.svg-9c0dcc2e6f90dd567f3e217a181e4e00.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/PlatformAndroid.svg b/assets/icons/PlatformAndroid.svg index 5c89cf0..649d498 100644 --- a/assets/icons/PlatformAndroid.svg +++ b/assets/icons/PlatformAndroid.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/PlatformAndroid.svg.import b/assets/icons/PlatformAndroid.svg.import index 4781138..6e881de 100644 --- a/assets/icons/PlatformAndroid.svg.import +++ b/assets/icons/PlatformAndroid.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bo5c20hy73tpr" -path="res://.godot/imported/PlatformAndroid.svg-507e6984f29f635a4ac46090e9514435.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PlatformAndroid.svg-507e6984f29f635a4ac46090e9514435.svgtex" [deps] source_file="res://assets/icons/PlatformAndroid.svg" -dest_files=["res://.godot/imported/PlatformAndroid.svg-507e6984f29f635a4ac46090e9514435.ctex"] +dest_files=["res://.godot/imported/PlatformAndroid.svg-507e6984f29f635a4ac46090e9514435.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/PlatformLinux.svg b/assets/icons/PlatformLinux.svg index 042f171..c7c3b56 100644 --- a/assets/icons/PlatformLinux.svg +++ b/assets/icons/PlatformLinux.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/PlatformLinux.svg.import b/assets/icons/PlatformLinux.svg.import index 440f402..36f6ef6 100644 --- a/assets/icons/PlatformLinux.svg.import +++ b/assets/icons/PlatformLinux.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bg37vrltk5npr" -path="res://.godot/imported/PlatformLinux.svg-2b9393fef43df6991d3292a35024aa68.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PlatformLinux.svg-2b9393fef43df6991d3292a35024aa68.svgtex" [deps] source_file="res://assets/icons/PlatformLinux.svg" -dest_files=["res://.godot/imported/PlatformLinux.svg-2b9393fef43df6991d3292a35024aa68.ctex"] +dest_files=["res://.godot/imported/PlatformLinux.svg-2b9393fef43df6991d3292a35024aa68.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/PlatformMacOS.svg b/assets/icons/PlatformMacOS.svg index 0de9ca7..207e301 100644 --- a/assets/icons/PlatformMacOS.svg +++ b/assets/icons/PlatformMacOS.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/PlatformMacOS.svg.import b/assets/icons/PlatformMacOS.svg.import index 054f378..efb3603 100644 --- a/assets/icons/PlatformMacOS.svg.import +++ b/assets/icons/PlatformMacOS.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c5mof6sypo2j0" -path="res://.godot/imported/PlatformMacOS.svg-eb55b56d762e1eeb8182c190d04b7895.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PlatformMacOS.svg-eb55b56d762e1eeb8182c190d04b7895.svgtex" [deps] source_file="res://assets/icons/PlatformMacOS.svg" -dest_files=["res://.godot/imported/PlatformMacOS.svg-eb55b56d762e1eeb8182c190d04b7895.ctex"] +dest_files=["res://.godot/imported/PlatformMacOS.svg-eb55b56d762e1eeb8182c190d04b7895.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/PlatformWindows.svg b/assets/icons/PlatformWindows.svg index efb3782..7a0c2db 100644 --- a/assets/icons/PlatformWindows.svg +++ b/assets/icons/PlatformWindows.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/PlatformWindows.svg.import b/assets/icons/PlatformWindows.svg.import index f2ed689..d187e7d 100644 --- a/assets/icons/PlatformWindows.svg.import +++ b/assets/icons/PlatformWindows.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c0xmtbtcke0hx" -path="res://.godot/imported/PlatformWindows.svg-d7704fc273c534bb6222a0f5b4001182.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PlatformWindows.svg-d7704fc273c534bb6222a0f5b4001182.svgtex" [deps] source_file="res://assets/icons/PlatformWindows.svg" -dest_files=["res://.godot/imported/PlatformWindows.svg-d7704fc273c534bb6222a0f5b4001182.ctex"] +dest_files=["res://.godot/imported/PlatformWindows.svg-d7704fc273c534bb6222a0f5b4001182.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Plus.svg b/assets/icons/Plus.svg index 92db187..379c4ca 100644 --- a/assets/icons/Plus.svg +++ b/assets/icons/Plus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Plus.svg.import b/assets/icons/Plus.svg.import index 0bfd335..55aec7b 100644 --- a/assets/icons/Plus.svg.import +++ b/assets/icons/Plus.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://eif2ioi0mw17" -path="res://.godot/imported/Plus.svg-70cbe6fe53491e8891df68dbf74967ef.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Plus.svg-70cbe6fe53491e8891df68dbf74967ef.svgtex" [deps] source_file="res://assets/icons/Plus.svg" -dest_files=["res://.godot/imported/Plus.svg-70cbe6fe53491e8891df68dbf74967ef.ctex"] +dest_files=["res://.godot/imported/Plus.svg-70cbe6fe53491e8891df68dbf74967ef.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/PopupArrow.svg b/assets/icons/PopupArrow.svg index 9cd4d9f..bdfd115 100644 --- a/assets/icons/PopupArrow.svg +++ b/assets/icons/PopupArrow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/PopupArrow.svg.import b/assets/icons/PopupArrow.svg.import index f88a16c..a17bb2b 100644 --- a/assets/icons/PopupArrow.svg.import +++ b/assets/icons/PopupArrow.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://crdbyje1tji4h" -path="res://.godot/imported/PopupArrow.svg-4e1f1544d59b20621caa7c87d9004cd1.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PopupArrow.svg-4e1f1544d59b20621caa7c87d9004cd1.svgtex" [deps] source_file="res://assets/icons/PopupArrow.svg" -dest_files=["res://.godot/imported/PopupArrow.svg-4e1f1544d59b20621caa7c87d9004cd1.ctex"] +dest_files=["res://.godot/imported/PopupArrow.svg-4e1f1544d59b20621caa7c87d9004cd1.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/PresetGrayscale.svg.import b/assets/icons/PresetGrayscale.svg.import index bfc851f..ccb6b09 100644 --- a/assets/icons/PresetGrayscale.svg.import +++ b/assets/icons/PresetGrayscale.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dv1aldaqix1bo" -path="res://.godot/imported/PresetGrayscale.svg-bbea35708ad1c100df741b38f49d3124.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PresetGrayscale.svg-bbea35708ad1c100df741b38f49d3124.svgtex" [deps] source_file="res://assets/icons/PresetGrayscale.svg" -dest_files=["res://.godot/imported/PresetGrayscale.svg-bbea35708ad1c100df741b38f49d3124.ctex"] +dest_files=["res://.godot/imported/PresetGrayscale.svg-bbea35708ad1c100df741b38f49d3124.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/PresetPure.svg.import b/assets/icons/PresetPure.svg.import index 77b8ce6..abacb91 100644 --- a/assets/icons/PresetPure.svg.import +++ b/assets/icons/PresetPure.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://doonh5ev61dlb" -path="res://.godot/imported/PresetPure.svg-7dd9763847a507207d95c81435faf89f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PresetPure.svg-7dd9763847a507207d95c81435faf89f.svgtex" [deps] source_file="res://assets/icons/PresetPure.svg" -dest_files=["res://.godot/imported/PresetPure.svg-7dd9763847a507207d95c81435faf89f.ctex"] +dest_files=["res://.godot/imported/PresetPure.svg-7dd9763847a507207d95c81435faf89f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/QuestionMark.svg b/assets/icons/QuestionMark.svg index 0ac6871..44b37ec 100644 --- a/assets/icons/QuestionMark.svg +++ b/assets/icons/QuestionMark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/QuestionMark.svg.import b/assets/icons/QuestionMark.svg.import index 40a1bf7..763cd3e 100644 --- a/assets/icons/QuestionMark.svg.import +++ b/assets/icons/QuestionMark.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bi38k4pq83omf" -path="res://.godot/imported/QuestionMark.svg-df448d271c6b8fa0659330eda85bb8f6.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/QuestionMark.svg-df448d271c6b8fa0659330eda85bb8f6.svgtex" [deps] source_file="res://assets/icons/QuestionMark.svg" -dest_files=["res://.godot/imported/QuestionMark.svg-df448d271c6b8fa0659330eda85bb8f6.ctex"] +dest_files=["res://.godot/imported/QuestionMark.svg-df448d271c6b8fa0659330eda85bb8f6.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Quit.svg b/assets/icons/Quit.svg index ee8b477..8d0d7ac 100644 --- a/assets/icons/Quit.svg +++ b/assets/icons/Quit.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Quit.svg.import b/assets/icons/Quit.svg.import index c7fefa3..150f3aa 100644 --- a/assets/icons/Quit.svg.import +++ b/assets/icons/Quit.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cbkrorp0b7qgb" -path="res://.godot/imported/Quit.svg-27ce495cfd421ac10bdab78eb7fc0164.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Quit.svg-27ce495cfd421ac10bdab78eb7fc0164.svgtex" [deps] source_file="res://assets/icons/Quit.svg" -dest_files=["res://.godot/imported/Quit.svg-27ce495cfd421ac10bdab78eb7fc0164.ctex"] +dest_files=["res://.godot/imported/Quit.svg-27ce495cfd421ac10bdab78eb7fc0164.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Redo.svg b/assets/icons/Redo.svg index 164f6a8..7e8e7c3 100644 --- a/assets/icons/Redo.svg +++ b/assets/icons/Redo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Redo.svg.import b/assets/icons/Redo.svg.import index 3a23f50..0bcebde 100644 --- a/assets/icons/Redo.svg.import +++ b/assets/icons/Redo.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://x7hsvbn0k3i8" -path="res://.godot/imported/Redo.svg-1cd6dd40037832a4dcd7098e88d1d853.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Redo.svg-1cd6dd40037832a4dcd7098e88d1d853.svgtex" [deps] source_file="res://assets/icons/Redo.svg" -dest_files=["res://.godot/imported/Redo.svg-1cd6dd40037832a4dcd7098e88d1d853.ctex"] +dest_files=["res://.godot/imported/Redo.svg-1cd6dd40037832a4dcd7098e88d1d853.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Reference.svg b/assets/icons/Reference.svg index 54d3fa9..476ef94 100644 --- a/assets/icons/Reference.svg +++ b/assets/icons/Reference.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Reference.svg.import b/assets/icons/Reference.svg.import index c7661bd..d6c9aca 100644 --- a/assets/icons/Reference.svg.import +++ b/assets/icons/Reference.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://iglrqrqyg4kn" -path="res://.godot/imported/Reference.svg-c3d4e58aff06c4a897251410324037f7.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Reference.svg-c3d4e58aff06c4a897251410324037f7.svgtex" [deps] source_file="res://assets/icons/Reference.svg" -dest_files=["res://.godot/imported/Reference.svg-c3d4e58aff06c4a897251410324037f7.ctex"] +dest_files=["res://.godot/imported/Reference.svg-c3d4e58aff06c4a897251410324037f7.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Reload.svg b/assets/icons/Reload.svg index 827018d..d96092a 100644 --- a/assets/icons/Reload.svg +++ b/assets/icons/Reload.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Reload.svg.import b/assets/icons/Reload.svg.import index 8990ad6..d15c611 100644 --- a/assets/icons/Reload.svg.import +++ b/assets/icons/Reload.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cvh3kwbucf2n1" -path="res://.godot/imported/Reload.svg-dc62252f416f3dae43a809a2b7e34a97.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Reload.svg-dc62252f416f3dae43a809a2b7e34a97.svgtex" [deps] source_file="res://assets/icons/Reload.svg" -dest_files=["res://.godot/imported/Reload.svg-dc62252f416f3dae43a809a2b7e34a97.ctex"] +dest_files=["res://.godot/imported/Reload.svg-dc62252f416f3dae43a809a2b7e34a97.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Rename.svg b/assets/icons/Rename.svg index f618fd6..5cb4d3a 100644 --- a/assets/icons/Rename.svg +++ b/assets/icons/Rename.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Rename.svg.import b/assets/icons/Rename.svg.import index 7fa6542..a37405e 100644 --- a/assets/icons/Rename.svg.import +++ b/assets/icons/Rename.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bjajwlfhfgo38" -path="res://.godot/imported/Rename.svg-1fe4ae6b401a2b2e6c18a5b851cbea12.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Rename.svg-1fe4ae6b401a2b2e6c18a5b851cbea12.svgtex" [deps] source_file="res://assets/icons/Rename.svg" -dest_files=["res://.godot/imported/Rename.svg-1fe4ae6b401a2b2e6c18a5b851cbea12.ctex"] +dest_files=["res://.godot/imported/Rename.svg-1fe4ae6b401a2b2e6c18a5b851cbea12.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Rotate.svg b/assets/icons/Rotate.svg index c1264cb..f132597 100644 --- a/assets/icons/Rotate.svg +++ b/assets/icons/Rotate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Rotate.svg.import b/assets/icons/Rotate.svg.import index f4ed6a8..2274aa1 100644 --- a/assets/icons/Rotate.svg.import +++ b/assets/icons/Rotate.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://mop8xvnp8qcv" -path="res://.godot/imported/Rotate.svg-cf69348aedb12eed0517c4deb4d4a3d9.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Rotate.svg-cf69348aedb12eed0517c4deb4d4a3d9.svgtex" [deps] source_file="res://assets/icons/Rotate.svg" -dest_files=["res://.godot/imported/Rotate.svg-cf69348aedb12eed0517c4deb4d4a3d9.ctex"] +dest_files=["res://.godot/imported/Rotate.svg-cf69348aedb12eed0517c4deb4d4a3d9.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Save.svg b/assets/icons/Save.svg index a995951..3b1db3f 100644 --- a/assets/icons/Save.svg +++ b/assets/icons/Save.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Save.svg.import b/assets/icons/Save.svg.import index 9849c1c..b0831a7 100644 --- a/assets/icons/Save.svg.import +++ b/assets/icons/Save.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://rxfu7kcmo7c1" -path="res://.godot/imported/Save.svg-f607b0fa97b42169cf4d3d08791c1dd2.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Save.svg-f607b0fa97b42169cf4d3d08791c1dd2.svgtex" [deps] source_file="res://assets/icons/Save.svg" -dest_files=["res://.godot/imported/Save.svg-f607b0fa97b42169cf4d3d08791c1dd2.ctex"] +dest_files=["res://.godot/imported/Save.svg-f607b0fa97b42169cf4d3d08791c1dd2.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Scale.svg b/assets/icons/Scale.svg index 97cb7f2..6e51c1c 100644 --- a/assets/icons/Scale.svg +++ b/assets/icons/Scale.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Scale.svg.import b/assets/icons/Scale.svg.import index ffbaacf..ba3970d 100644 --- a/assets/icons/Scale.svg.import +++ b/assets/icons/Scale.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://b2cpjg74rpkjs" -path="res://.godot/imported/Scale.svg-e6ed2a774e150c90b08960eddeb56b79.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Scale.svg-e6ed2a774e150c90b08960eddeb56b79.svgtex" [deps] source_file="res://assets/icons/Scale.svg" -dest_files=["res://.godot/imported/Scale.svg-e6ed2a774e150c90b08960eddeb56b79.ctex"] +dest_files=["res://.godot/imported/Scale.svg-e6ed2a774e150c90b08960eddeb56b79.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/ScrollBackwards.svg b/assets/icons/ScrollBackwards.svg index 2562102..9dff416 100644 --- a/assets/icons/ScrollBackwards.svg +++ b/assets/icons/ScrollBackwards.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/ScrollBackwards.svg.import b/assets/icons/ScrollBackwards.svg.import index e0362b0..c66427f 100644 --- a/assets/icons/ScrollBackwards.svg.import +++ b/assets/icons/ScrollBackwards.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://b6wvqmor1sq08" -path="res://.godot/imported/ScrollBackwards.svg-1ff0ea66adb12029ac78f704d80e6248.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/ScrollBackwards.svg-1ff0ea66adb12029ac78f704d80e6248.svgtex" [deps] source_file="res://assets/icons/ScrollBackwards.svg" -dest_files=["res://.godot/imported/ScrollBackwards.svg-1ff0ea66adb12029ac78f704d80e6248.ctex"] +dest_files=["res://.godot/imported/ScrollBackwards.svg-1ff0ea66adb12029ac78f704d80e6248.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/ScrollForwards.svg b/assets/icons/ScrollForwards.svg index b8e8c7e..f09ce9a 100644 --- a/assets/icons/ScrollForwards.svg +++ b/assets/icons/ScrollForwards.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/ScrollForwards.svg.import b/assets/icons/ScrollForwards.svg.import index 838e820..0a0f272 100644 --- a/assets/icons/ScrollForwards.svg.import +++ b/assets/icons/ScrollForwards.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://raxijmbc48q5" -path="res://.godot/imported/ScrollForwards.svg-6f6937f4ac0b631bdce59141e49cba7f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/ScrollForwards.svg-6f6937f4ac0b631bdce59141e49cba7f.svgtex" [deps] source_file="res://assets/icons/ScrollForwards.svg" -dest_files=["res://.godot/imported/ScrollForwards.svg-6f6937f4ac0b631bdce59141e49cba7f.ctex"] +dest_files=["res://.godot/imported/ScrollForwards.svg-6f6937f4ac0b631bdce59141e49cba7f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Search.svg b/assets/icons/Search.svg index 884a523..9d10d6f 100644 --- a/assets/icons/Search.svg +++ b/assets/icons/Search.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Search.svg.import b/assets/icons/Search.svg.import index 2160cae..89a374d 100644 --- a/assets/icons/Search.svg.import +++ b/assets/icons/Search.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://d4c7haflm8evm" -path="res://.godot/imported/Search.svg-d0bd9765f428db07389c3df694314dd0.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Search.svg-d0bd9765f428db07389c3df694314dd0.svgtex" [deps] source_file="res://assets/icons/Search.svg" -dest_files=["res://.godot/imported/Search.svg-d0bd9765f428db07389c3df694314dd0.ctex"] +dest_files=["res://.godot/imported/Search.svg-d0bd9765f428db07389c3df694314dd0.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/SideSliderArrow.svg b/assets/icons/SideSliderArrow.svg index 20b64e7..6b884ae 100644 --- a/assets/icons/SideSliderArrow.svg +++ b/assets/icons/SideSliderArrow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/SideSliderArrow.svg.import b/assets/icons/SideSliderArrow.svg.import index ff8de68..939387c 100644 --- a/assets/icons/SideSliderArrow.svg.import +++ b/assets/icons/SideSliderArrow.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cmu6r4ipti60x" -path="res://.godot/imported/SideSliderArrow.svg-12020a4c094bbac9e72e1e1468d7b2eb.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/SideSliderArrow.svg-12020a4c094bbac9e72e1e1468d7b2eb.svgtex" [deps] source_file="res://assets/icons/SideSliderArrow.svg" -dest_files=["res://.godot/imported/SideSliderArrow.svg-12020a4c094bbac9e72e1e1468d7b2eb.ctex"] +dest_files=["res://.godot/imported/SideSliderArrow.svg-12020a4c094bbac9e72e1e1468d7b2eb.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/SkewX.svg b/assets/icons/SkewX.svg index 18e1270..356a66d 100644 --- a/assets/icons/SkewX.svg +++ b/assets/icons/SkewX.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/SkewX.svg.import b/assets/icons/SkewX.svg.import index 9763763..2fa2418 100644 --- a/assets/icons/SkewX.svg.import +++ b/assets/icons/SkewX.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://mkfxc0srhfek" -path="res://.godot/imported/SkewX.svg-9d46edf162778638ca700ba521a7233e.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/SkewX.svg-9d46edf162778638ca700ba521a7233e.svgtex" [deps] source_file="res://assets/icons/SkewX.svg" -dest_files=["res://.godot/imported/SkewX.svg-9d46edf162778638ca700ba521a7233e.ctex"] +dest_files=["res://.godot/imported/SkewX.svg-9d46edf162778638ca700ba521a7233e.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/SkewY.svg b/assets/icons/SkewY.svg index fd2e4c5..4a6f004 100644 --- a/assets/icons/SkewY.svg +++ b/assets/icons/SkewY.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/SkewY.svg.import b/assets/icons/SkewY.svg.import index bfa16f7..6cda010 100644 --- a/assets/icons/SkewY.svg.import +++ b/assets/icons/SkewY.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c7mdaue5rmbt3" -path="res://.godot/imported/SkewY.svg-9134b8e566b5fa1dd453f9cc051d0e02.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/SkewY.svg-9134b8e566b5fa1dd453f9cc051d0e02.svgtex" [deps] source_file="res://assets/icons/SkewY.svg" -dest_files=["res://.godot/imported/SkewY.svg-9134b8e566b5fa1dd453f9cc051d0e02.ctex"] +dest_files=["res://.godot/imported/SkewY.svg-9134b8e566b5fa1dd453f9cc051d0e02.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/SliderArrow.svg b/assets/icons/SliderArrow.svg index 011e94c..835084a 100644 --- a/assets/icons/SliderArrow.svg +++ b/assets/icons/SliderArrow.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/SliderArrow.svg.import b/assets/icons/SliderArrow.svg.import index 7678ff6..7a934ce 100644 --- a/assets/icons/SliderArrow.svg.import +++ b/assets/icons/SliderArrow.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cnq1u5hrcqrho" -path="res://.godot/imported/SliderArrow.svg-3255a7e763b23bacca933c954b6460e9.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/SliderArrow.svg-3255a7e763b23bacca933c954b6460e9.svgtex" [deps] source_file="res://assets/icons/SliderArrow.svg" -dest_files=["res://.godot/imported/SliderArrow.svg-3255a7e763b23bacca933c954b6460e9.ctex"] +dest_files=["res://.godot/imported/SliderArrow.svg-3255a7e763b23bacca933c954b6460e9.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/SmallMore.svg b/assets/icons/SmallMore.svg index 9821e3d..6c97a7b 100644 --- a/assets/icons/SmallMore.svg +++ b/assets/icons/SmallMore.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/SmallMore.svg.import b/assets/icons/SmallMore.svg.import index 033f5b3..c6c229f 100644 --- a/assets/icons/SmallMore.svg.import +++ b/assets/icons/SmallMore.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cmepkbqde0jh0" -path="res://.godot/imported/SmallMore.svg-498d9628e37505d7aed18d97a65e9a4f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/SmallMore.svg-498d9628e37505d7aed18d97a65e9a4f.svgtex" [deps] source_file="res://assets/icons/SmallMore.svg" -dest_files=["res://.godot/imported/SmallMore.svg-498d9628e37505d7aed18d97a65e9a4f.ctex"] +dest_files=["res://.godot/imported/SmallMore.svg-498d9628e37505d7aed18d97a65e9a4f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/SmallQuestionMark.svg b/assets/icons/SmallQuestionMark.svg index 72e8e0c..d8bf4b7 100644 --- a/assets/icons/SmallQuestionMark.svg +++ b/assets/icons/SmallQuestionMark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/SmallQuestionMark.svg.import b/assets/icons/SmallQuestionMark.svg.import index f22d3fd..0b6b375 100644 --- a/assets/icons/SmallQuestionMark.svg.import +++ b/assets/icons/SmallQuestionMark.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://crx4kcj4o01bs" -path="res://.godot/imported/SmallQuestionMark.svg-45851b1324383ed0de300bfbcf33768f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/SmallQuestionMark.svg-45851b1324383ed0de300bfbcf33768f.svgtex" [deps] source_file="res://assets/icons/SmallQuestionMark.svg" -dest_files=["res://.godot/imported/SmallQuestionMark.svg-45851b1324383ed0de300bfbcf33768f.ctex"] +dest_files=["res://.godot/imported/SmallQuestionMark.svg-45851b1324383ed0de300bfbcf33768f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Snap.svg b/assets/icons/Snap.svg index 4f39fe8..b64129d 100644 --- a/assets/icons/Snap.svg +++ b/assets/icons/Snap.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Snap.svg.import b/assets/icons/Snap.svg.import index 0e6e3ee..bfb035b 100644 --- a/assets/icons/Snap.svg.import +++ b/assets/icons/Snap.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://buire51l0mifg" -path="res://.godot/imported/Snap.svg-29a77ee514cb049b624c9e02f460f90d.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Snap.svg-29a77ee514cb049b624c9e02f460f90d.svgtex" [deps] source_file="res://assets/icons/Snap.svg" -dest_files=["res://.godot/imported/Snap.svg-29a77ee514cb049b624c9e02f460f90d.ctex"] +dest_files=["res://.godot/imported/Snap.svg-29a77ee514cb049b624c9e02f460f90d.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/TabSwitcher.svg.import b/assets/icons/TabSwitcher.svg.import index 119ab39..caac937 100644 --- a/assets/icons/TabSwitcher.svg.import +++ b/assets/icons/TabSwitcher.svg.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/TabSwitcher.svg-2223859299d150806d6ebc1516a36 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/assets/icons/TextFile.svg.import b/assets/icons/TextFile.svg.import index 85ec33c..25f52ae 100644 --- a/assets/icons/TextFile.svg.import +++ b/assets/icons/TextFile.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bjlwi2il3cimk" -path="res://.godot/imported/TextFile.svg-6ff5d6328ddeeb7ed6f836de669cd220.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/TextFile.svg-6ff5d6328ddeeb7ed6f836de669cd220.svgtex" [deps] source_file="res://assets/icons/TextFile.svg" -dest_files=["res://.godot/imported/TextFile.svg-6ff5d6328ddeeb7ed6f836de669cd220.ctex"] +dest_files=["res://.godot/imported/TextFile.svg-6ff5d6328ddeeb7ed6f836de669cd220.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Translate.svg b/assets/icons/Translate.svg index 89f58e7..82f2f6b 100644 --- a/assets/icons/Translate.svg +++ b/assets/icons/Translate.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Translate.svg.import b/assets/icons/Translate.svg.import index 6631433..bf1e800 100644 --- a/assets/icons/Translate.svg.import +++ b/assets/icons/Translate.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://b7r171i82g3xl" -path="res://.godot/imported/Translate.svg-6935e923a254420d209e5265a6bcc11e.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Translate.svg-6935e923a254420d209e5265a6bcc11e.svgtex" [deps] source_file="res://assets/icons/Translate.svg" -dest_files=["res://.godot/imported/Translate.svg-6935e923a254420d209e5265a6bcc11e.ctex"] +dest_files=["res://.godot/imported/Translate.svg-6935e923a254420d209e5265a6bcc11e.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Undo.svg b/assets/icons/Undo.svg index 9c136a1..d1dc30d 100644 --- a/assets/icons/Undo.svg +++ b/assets/icons/Undo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Undo.svg.import b/assets/icons/Undo.svg.import index cdc68f1..3bddd82 100644 --- a/assets/icons/Undo.svg.import +++ b/assets/icons/Undo.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dgwjiijcgblou" -path="res://.godot/imported/Undo.svg-cf90b08882c5b785e9e31418171ad387.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Undo.svg-cf90b08882c5b785e9e31418171ad387.svgtex" [deps] source_file="res://assets/icons/Undo.svg" -dest_files=["res://.godot/imported/Undo.svg-cf90b08882c5b785e9e31418171ad387.ctex"] +dest_files=["res://.godot/imported/Undo.svg-cf90b08882c5b785e9e31418171ad387.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Viewport.svg b/assets/icons/Viewport.svg index b7910b6..a3fa402 100644 --- a/assets/icons/Viewport.svg +++ b/assets/icons/Viewport.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Viewport.svg.import b/assets/icons/Viewport.svg.import index a3dec21..5b5df03 100644 --- a/assets/icons/Viewport.svg.import +++ b/assets/icons/Viewport.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://baxqpqub1hxmr" -path="res://.godot/imported/Viewport.svg-f8c0ca66b45914e279c67a6c13d5852c.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Viewport.svg-f8c0ca66b45914e279c67a6c13d5852c.svgtex" [deps] source_file="res://assets/icons/Viewport.svg" -dest_files=["res://.godot/imported/Viewport.svg-f8c0ca66b45914e279c67a6c13d5852c.ctex"] +dest_files=["res://.godot/imported/Viewport.svg-f8c0ca66b45914e279c67a6c13d5852c.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Visuals.svg b/assets/icons/Visuals.svg index 39d5f46..1520af6 100644 --- a/assets/icons/Visuals.svg +++ b/assets/icons/Visuals.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Visuals.svg.import b/assets/icons/Visuals.svg.import index c2d715c..ff4e302 100644 --- a/assets/icons/Visuals.svg.import +++ b/assets/icons/Visuals.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://kkxyv1gyrjgj" -path="res://.godot/imported/Visuals.svg-cd178d1fd0b469993938ca905876831b.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Visuals.svg-cd178d1fd0b469993938ca905876831b.svgtex" [deps] source_file="res://assets/icons/Visuals.svg" -dest_files=["res://.godot/imported/Visuals.svg-cd178d1fd0b469993938ca905876831b.ctex"] +dest_files=["res://.godot/imported/Visuals.svg-cd178d1fd0b469993938ca905876831b.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/Warning.svg b/assets/icons/Warning.svg index bca7ff9..b48a34f 100644 --- a/assets/icons/Warning.svg +++ b/assets/icons/Warning.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/Warning.svg.import b/assets/icons/Warning.svg.import index 5c247d2..34b848c 100644 --- a/assets/icons/Warning.svg.import +++ b/assets/icons/Warning.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dbyjet4nt246k" -path="res://.godot/imported/Warning.svg-1fa9c55d4ce2374a5650b357c6c25038.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Warning.svg-1fa9c55d4ce2374a5650b357c6c25038.svgtex" [deps] source_file="res://assets/icons/Warning.svg" -dest_files=["res://.godot/imported/Warning.svg-1fa9c55d4ce2374a5650b357c6c25038.ctex"] +dest_files=["res://.godot/imported/Warning.svg-1fa9c55d4ce2374a5650b357c6c25038.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/backgrounds/Checkerboard.svg.import b/assets/icons/backgrounds/Checkerboard.svg.import index 5146c91..fa94a35 100644 --- a/assets/icons/backgrounds/Checkerboard.svg.import +++ b/assets/icons/backgrounds/Checkerboard.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c68og6bsqt0lb" -path="res://.godot/imported/Checkerboard.svg-f7e80961b46cfe0abb1fe7c57bd5c311.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/Checkerboard.svg-f7e80961b46cfe0abb1fe7c57bd5c311.svgtex" [deps] source_file="res://assets/icons/backgrounds/Checkerboard.svg" -dest_files=["res://.godot/imported/Checkerboard.svg-f7e80961b46cfe0abb1fe7c57bd5c311.ctex"] +dest_files=["res://.godot/imported/Checkerboard.svg-f7e80961b46cfe0abb1fe7c57bd5c311.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/backgrounds/CheckerboardMini.svg.import b/assets/icons/backgrounds/CheckerboardMini.svg.import index 465afec..1bff5b5 100644 --- a/assets/icons/backgrounds/CheckerboardMini.svg.import +++ b/assets/icons/backgrounds/CheckerboardMini.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://stpallv5q0rb" -path="res://.godot/imported/CheckerboardMini.svg-231a39c4ad6a476f0b2ee9407382b18a.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/CheckerboardMini.svg-231a39c4ad6a476f0b2ee9407382b18a.svgtex" [deps] source_file="res://assets/icons/backgrounds/CheckerboardMini.svg" -dest_files=["res://.godot/imported/CheckerboardMini.svg-231a39c4ad6a476f0b2ee9407382b18a.ctex"] +dest_files=["res://.godot/imported/CheckerboardMini.svg-231a39c4ad6a476f0b2ee9407382b18a.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/backgrounds/ColorButtonBG.svg.import b/assets/icons/backgrounds/ColorButtonBG.svg.import index db03505..28ea6d0 100644 --- a/assets/icons/backgrounds/ColorButtonBG.svg.import +++ b/assets/icons/backgrounds/ColorButtonBG.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://y0l74x73w0co" -path="res://.godot/imported/ColorButtonBG.svg-f05e8d9d784151a74a26cfdebd155a7f.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/ColorButtonBG.svg-f05e8d9d784151a74a26cfdebd155a7f.svgtex" [deps] source_file="res://assets/icons/backgrounds/ColorButtonBG.svg" -dest_files=["res://.godot/imported/ColorButtonBG.svg-f05e8d9d784151a74a26cfdebd155a7f.ctex"] +dest_files=["res://.godot/imported/ColorButtonBG.svg-f05e8d9d784151a74a26cfdebd155a7f.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/circle.svg b/assets/icons/element/circle.svg index 0befcc7..8dae339 100644 --- a/assets/icons/element/circle.svg +++ b/assets/icons/element/circle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/circle.svg.import b/assets/icons/element/circle.svg.import index 3ec4af7..150e9c4 100644 --- a/assets/icons/element/circle.svg.import +++ b/assets/icons/element/circle.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://i3nv3rexgpfx" -path="res://.godot/imported/circle.svg-254daa85021abdd2364d2dd025bedc16.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/circle.svg-254daa85021abdd2364d2dd025bedc16.svgtex" [deps] source_file="res://assets/icons/element/circle.svg" -dest_files=["res://.godot/imported/circle.svg-254daa85021abdd2364d2dd025bedc16.ctex"] +dest_files=["res://.godot/imported/circle.svg-254daa85021abdd2364d2dd025bedc16.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/ellipse.svg b/assets/icons/element/ellipse.svg index 17de190..f576e1d 100644 --- a/assets/icons/element/ellipse.svg +++ b/assets/icons/element/ellipse.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/ellipse.svg.import b/assets/icons/element/ellipse.svg.import index 419e5b1..3fff9b8 100644 --- a/assets/icons/element/ellipse.svg.import +++ b/assets/icons/element/ellipse.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c1atigsxatxdg" -path="res://.godot/imported/ellipse.svg-f48ede7bc4d2db2cf368294bd6f65f65.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/ellipse.svg-f48ede7bc4d2db2cf368294bd6f65f65.svgtex" [deps] source_file="res://assets/icons/element/ellipse.svg" -dest_files=["res://.godot/imported/ellipse.svg-f48ede7bc4d2db2cf368294bd6f65f65.ctex"] +dest_files=["res://.godot/imported/ellipse.svg-f48ede7bc4d2db2cf368294bd6f65f65.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/g.svg b/assets/icons/element/g.svg index 344393c..4e27593 100644 --- a/assets/icons/element/g.svg +++ b/assets/icons/element/g.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/g.svg.import b/assets/icons/element/g.svg.import index 2454bf3..7d5ad38 100644 --- a/assets/icons/element/g.svg.import +++ b/assets/icons/element/g.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://v4diytxx43vs" -path="res://.godot/imported/g.svg-a723a78028fb034e0a1d8d362d47af18.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/g.svg-a723a78028fb034e0a1d8d362d47af18.svgtex" [deps] source_file="res://assets/icons/element/g.svg" -dest_files=["res://.godot/imported/g.svg-a723a78028fb034e0a1d8d362d47af18.ctex"] +dest_files=["res://.godot/imported/g.svg-a723a78028fb034e0a1d8d362d47af18.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/image.svg b/assets/icons/element/image.svg index c1ae0be..0feafc5 100644 --- a/assets/icons/element/image.svg +++ b/assets/icons/element/image.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/image.svg.import b/assets/icons/element/image.svg.import index 30b43d7..655eaeb 100644 --- a/assets/icons/element/image.svg.import +++ b/assets/icons/element/image.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://qolmbksjgn8e" -path="res://.godot/imported/image.svg-4cc52c9b2f69e61f2b8246fc15eaf0de.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/image.svg-4cc52c9b2f69e61f2b8246fc15eaf0de.svgtex" [deps] source_file="res://assets/icons/element/image.svg" -dest_files=["res://.godot/imported/image.svg-4cc52c9b2f69e61f2b8246fc15eaf0de.ctex"] +dest_files=["res://.godot/imported/image.svg-4cc52c9b2f69e61f2b8246fc15eaf0de.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/line.svg b/assets/icons/element/line.svg index 8f49bee..9ee2487 100644 --- a/assets/icons/element/line.svg +++ b/assets/icons/element/line.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/line.svg.import b/assets/icons/element/line.svg.import index 116f9be..04a202d 100644 --- a/assets/icons/element/line.svg.import +++ b/assets/icons/element/line.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dckywhfjhuxke" -path="res://.godot/imported/line.svg-44f9040ac1bfabe0cb9ef28359626b8e.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/line.svg-44f9040ac1bfabe0cb9ef28359626b8e.svgtex" [deps] source_file="res://assets/icons/element/line.svg" -dest_files=["res://.godot/imported/line.svg-44f9040ac1bfabe0cb9ef28359626b8e.ctex"] +dest_files=["res://.godot/imported/line.svg-44f9040ac1bfabe0cb9ef28359626b8e.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/linearGradient.svg b/assets/icons/element/linearGradient.svg index 058681e..afbbcaf 100644 --- a/assets/icons/element/linearGradient.svg +++ b/assets/icons/element/linearGradient.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/linearGradient.svg.import b/assets/icons/element/linearGradient.svg.import index 2330d4d..e209dba 100644 --- a/assets/icons/element/linearGradient.svg.import +++ b/assets/icons/element/linearGradient.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ld6hoxtl7q6y" -path="res://.godot/imported/linearGradient.svg-8506328381653c4530e74ebe8f871359.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/linearGradient.svg-8506328381653c4530e74ebe8f871359.svgtex" [deps] source_file="res://assets/icons/element/linearGradient.svg" -dest_files=["res://.godot/imported/linearGradient.svg-8506328381653c4530e74ebe8f871359.ctex"] +dest_files=["res://.godot/imported/linearGradient.svg-8506328381653c4530e74ebe8f871359.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/mask.svg b/assets/icons/element/mask.svg index 1df7e1a..363bf28 100644 --- a/assets/icons/element/mask.svg +++ b/assets/icons/element/mask.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/mask.svg.import b/assets/icons/element/mask.svg.import index bb9d459..4a396a3 100644 --- a/assets/icons/element/mask.svg.import +++ b/assets/icons/element/mask.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cq12fgmfrreh5" -path="res://.godot/imported/mask.svg-28cbb8910d54bf756daeb08a25dbd973.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/mask.svg-28cbb8910d54bf756daeb08a25dbd973.svgtex" [deps] source_file="res://assets/icons/element/mask.svg" -dest_files=["res://.godot/imported/mask.svg-28cbb8910d54bf756daeb08a25dbd973.ctex"] +dest_files=["res://.godot/imported/mask.svg-28cbb8910d54bf756daeb08a25dbd973.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/path.svg b/assets/icons/element/path.svg index bf27000..08b0bf3 100644 --- a/assets/icons/element/path.svg +++ b/assets/icons/element/path.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/path.svg.import b/assets/icons/element/path.svg.import index 162f9af..25a7b9a 100644 --- a/assets/icons/element/path.svg.import +++ b/assets/icons/element/path.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dtogqqow1jfum" -path="res://.godot/imported/path.svg-ee6b5ae9f042c5906830667e7a304e4b.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/path.svg-ee6b5ae9f042c5906830667e7a304e4b.svgtex" [deps] source_file="res://assets/icons/element/path.svg" -dest_files=["res://.godot/imported/path.svg-ee6b5ae9f042c5906830667e7a304e4b.ctex"] +dest_files=["res://.godot/imported/path.svg-ee6b5ae9f042c5906830667e7a304e4b.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/polygon.svg b/assets/icons/element/polygon.svg index 334e157..bb713e2 100644 --- a/assets/icons/element/polygon.svg +++ b/assets/icons/element/polygon.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/polygon.svg.import b/assets/icons/element/polygon.svg.import index 297e626..6e9ccbd 100644 --- a/assets/icons/element/polygon.svg.import +++ b/assets/icons/element/polygon.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://g7je50vyh0l8" -path="res://.godot/imported/polygon.svg-30f7ae5550207b78aaf4e1aa664e8a70.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/polygon.svg-30f7ae5550207b78aaf4e1aa664e8a70.svgtex" [deps] source_file="res://assets/icons/element/polygon.svg" -dest_files=["res://.godot/imported/polygon.svg-30f7ae5550207b78aaf4e1aa664e8a70.ctex"] +dest_files=["res://.godot/imported/polygon.svg-30f7ae5550207b78aaf4e1aa664e8a70.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/polyline.svg b/assets/icons/element/polyline.svg index b33495f..9a67505 100644 --- a/assets/icons/element/polyline.svg +++ b/assets/icons/element/polyline.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/polyline.svg.import b/assets/icons/element/polyline.svg.import index 3685c6e..fb2d7d7 100644 --- a/assets/icons/element/polyline.svg.import +++ b/assets/icons/element/polyline.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bmuevffyav7ev" -path="res://.godot/imported/polyline.svg-2bbaec19007f0e891c2042cdc620cec8.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/polyline.svg-2bbaec19007f0e891c2042cdc620cec8.svgtex" [deps] source_file="res://assets/icons/element/polyline.svg" -dest_files=["res://.godot/imported/polyline.svg-2bbaec19007f0e891c2042cdc620cec8.ctex"] +dest_files=["res://.godot/imported/polyline.svg-2bbaec19007f0e891c2042cdc620cec8.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/radialGradient.svg b/assets/icons/element/radialGradient.svg index 76efa05..2a82c82 100644 --- a/assets/icons/element/radialGradient.svg +++ b/assets/icons/element/radialGradient.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/radialGradient.svg.import b/assets/icons/element/radialGradient.svg.import index 44521a3..4dae2c3 100644 --- a/assets/icons/element/radialGradient.svg.import +++ b/assets/icons/element/radialGradient.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://m0bt2nyq6axl" -path="res://.godot/imported/radialGradient.svg-9a92a6ab7242431f519efb0f151b16d3.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/radialGradient.svg-9a92a6ab7242431f519efb0f151b16d3.svgtex" [deps] source_file="res://assets/icons/element/radialGradient.svg" -dest_files=["res://.godot/imported/radialGradient.svg-9a92a6ab7242431f519efb0f151b16d3.ctex"] +dest_files=["res://.godot/imported/radialGradient.svg-9a92a6ab7242431f519efb0f151b16d3.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/rect.svg b/assets/icons/element/rect.svg index 1ba514b..999f2b1 100644 --- a/assets/icons/element/rect.svg +++ b/assets/icons/element/rect.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/rect.svg.import b/assets/icons/element/rect.svg.import index 1f8a883..ca3324c 100644 --- a/assets/icons/element/rect.svg.import +++ b/assets/icons/element/rect.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://d32xg5svmjkb5" -path="res://.godot/imported/rect.svg-d6a3f7f28d2b15590d408089237cd0f2.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/rect.svg-d6a3f7f28d2b15590d408089237cd0f2.svgtex" [deps] source_file="res://assets/icons/element/rect.svg" -dest_files=["res://.godot/imported/rect.svg-d6a3f7f28d2b15590d408089237cd0f2.ctex"] +dest_files=["res://.godot/imported/rect.svg-d6a3f7f28d2b15590d408089237cd0f2.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/stop.svg b/assets/icons/element/stop.svg index c490893..5463c3a 100644 --- a/assets/icons/element/stop.svg +++ b/assets/icons/element/stop.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/stop.svg.import b/assets/icons/element/stop.svg.import index fdeba47..5fdc16b 100644 --- a/assets/icons/element/stop.svg.import +++ b/assets/icons/element/stop.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cpict35mitaab" -path="res://.godot/imported/stop.svg-2d7bf5bf2ae7f3caeb19ddca64f29801.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/stop.svg-2d7bf5bf2ae7f3caeb19ddca64f29801.svgtex" [deps] source_file="res://assets/icons/element/stop.svg" -dest_files=["res://.godot/imported/stop.svg-2d7bf5bf2ae7f3caeb19ddca64f29801.ctex"] +dest_files=["res://.godot/imported/stop.svg-2d7bf5bf2ae7f3caeb19ddca64f29801.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/svg.svg b/assets/icons/element/svg.svg index ad5711a..7e810e3 100644 --- a/assets/icons/element/svg.svg +++ b/assets/icons/element/svg.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/svg.svg.import b/assets/icons/element/svg.svg.import index fb555d2..a300ff9 100644 --- a/assets/icons/element/svg.svg.import +++ b/assets/icons/element/svg.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://d04w7h3k83w8u" -path="res://.godot/imported/svg.svg-01f7f70f43cb14a0bd0e88e66f5f601c.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/svg.svg-01f7f70f43cb14a0bd0e88e66f5f601c.svgtex" [deps] source_file="res://assets/icons/element/svg.svg" -dest_files=["res://.godot/imported/svg.svg-01f7f70f43cb14a0bd0e88e66f5f601c.ctex"] +dest_files=["res://.godot/imported/svg.svg-01f7f70f43cb14a0bd0e88e66f5f601c.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/text.svg b/assets/icons/element/text.svg index fa11868..59505ca 100644 --- a/assets/icons/element/text.svg +++ b/assets/icons/element/text.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/text.svg.import b/assets/icons/element/text.svg.import index 496802d..9c02b25 100644 --- a/assets/icons/element/text.svg.import +++ b/assets/icons/element/text.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c2ienefxrtut" -path="res://.godot/imported/text.svg-61984c9e1264a1413aac57ad546d8800.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/text.svg-61984c9e1264a1413aac57ad546d8800.svgtex" [deps] source_file="res://assets/icons/element/text.svg" -dest_files=["res://.godot/imported/text.svg-61984c9e1264a1413aac57ad546d8800.ctex"] +dest_files=["res://.godot/imported/text.svg-61984c9e1264a1413aac57ad546d8800.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/unrecognized.svg b/assets/icons/element/unrecognized.svg index d020e43..b47b6db 100644 --- a/assets/icons/element/unrecognized.svg +++ b/assets/icons/element/unrecognized.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/unrecognized.svg.import b/assets/icons/element/unrecognized.svg.import index 7157acc..b8b3aeb 100644 --- a/assets/icons/element/unrecognized.svg.import +++ b/assets/icons/element/unrecognized.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://brua6wag257kc" -path="res://.godot/imported/unrecognized.svg-6aef9b7b04edb69be4536f6db80bf7de.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/unrecognized.svg-6aef9b7b04edb69be4536f6db80bf7de.svgtex" [deps] source_file="res://assets/icons/element/unrecognized.svg" -dest_files=["res://.godot/imported/unrecognized.svg-6aef9b7b04edb69be4536f6db80bf7de.ctex"] +dest_files=["res://.godot/imported/unrecognized.svg-6aef9b7b04edb69be4536f6db80bf7de.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/use.svg b/assets/icons/element/use.svg index 4301e10..76df601 100644 --- a/assets/icons/element/use.svg +++ b/assets/icons/element/use.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/use.svg.import b/assets/icons/element/use.svg.import index cc0ca0a..e853cf8 100644 --- a/assets/icons/element/use.svg.import +++ b/assets/icons/element/use.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://c1k88bqfhsvp5" -path="res://.godot/imported/use.svg-7ae354a656abf9c2d947f0f7d986cf9a.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/use.svg-7ae354a656abf9c2d947f0f7d986cf9a.svgtex" [deps] source_file="res://assets/icons/element/use.svg" -dest_files=["res://.godot/imported/use.svg-7ae354a656abf9c2d947f0f7d986cf9a.ctex"] +dest_files=["res://.godot/imported/use.svg-7ae354a656abf9c2d947f0f7d986cf9a.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/xmlnodeCDATA.svg b/assets/icons/element/xmlnodeCDATA.svg index 822c9f4..6db9c84 100644 --- a/assets/icons/element/xmlnodeCDATA.svg +++ b/assets/icons/element/xmlnodeCDATA.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/xmlnodeCDATA.svg.import b/assets/icons/element/xmlnodeCDATA.svg.import index 356a45d..4a7b38b 100644 --- a/assets/icons/element/xmlnodeCDATA.svg.import +++ b/assets/icons/element/xmlnodeCDATA.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://cah2rt7uoi1qe" -path="res://.godot/imported/xmlnodeCDATA.svg-821b4f23e43a14458164d978a1c917fa.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/xmlnodeCDATA.svg-821b4f23e43a14458164d978a1c917fa.svgtex" [deps] source_file="res://assets/icons/element/xmlnodeCDATA.svg" -dest_files=["res://.godot/imported/xmlnodeCDATA.svg-821b4f23e43a14458164d978a1c917fa.ctex"] +dest_files=["res://.godot/imported/xmlnodeCDATA.svg-821b4f23e43a14458164d978a1c917fa.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/xmlnodeComment.svg b/assets/icons/element/xmlnodeComment.svg index f2801b1..9eda589 100644 --- a/assets/icons/element/xmlnodeComment.svg +++ b/assets/icons/element/xmlnodeComment.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/xmlnodeComment.svg.import b/assets/icons/element/xmlnodeComment.svg.import index e30985f..95b4100 100644 --- a/assets/icons/element/xmlnodeComment.svg.import +++ b/assets/icons/element/xmlnodeComment.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://bpr1u3rvovpne" -path="res://.godot/imported/xmlnodeComment.svg-e64e8cdac96d13dedef1f5b7f5fb6d44.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/xmlnodeComment.svg-e64e8cdac96d13dedef1f5b7f5fb6d44.svgtex" [deps] source_file="res://assets/icons/element/xmlnodeComment.svg" -dest_files=["res://.godot/imported/xmlnodeComment.svg-e64e8cdac96d13dedef1f5b7f5fb6d44.ctex"] +dest_files=["res://.godot/imported/xmlnodeComment.svg-e64e8cdac96d13dedef1f5b7f5fb6d44.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/element/xmlnodeText.svg b/assets/icons/element/xmlnodeText.svg index 889e7ed..da983d8 100644 --- a/assets/icons/element/xmlnodeText.svg +++ b/assets/icons/element/xmlnodeText.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/assets/icons/element/xmlnodeText.svg.import b/assets/icons/element/xmlnodeText.svg.import index ff4d728..9321f4b 100644 --- a/assets/icons/element/xmlnodeText.svg.import +++ b/assets/icons/element/xmlnodeText.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://df4xrdgy2buli" -path="res://.godot/imported/xmlnodeText.svg-1f05904b91e0239ca71b1204fe3661ac.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/xmlnodeText.svg-1f05904b91e0239ca71b1204fe3661ac.svgtex" [deps] source_file="res://assets/icons/element/xmlnodeText.svg" -dest_files=["res://.godot/imported/xmlnodeText.svg-1f05904b91e0239ca71b1204fe3661ac.ctex"] +dest_files=["res://.godot/imported/xmlnodeText.svg-1f05904b91e0239ca71b1204fe3661ac.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/foreign_logos/GithubLogo.svg.import b/assets/icons/foreign_logos/GithubLogo.svg.import index 0dbd776..d941cd2 100644 --- a/assets/icons/foreign_logos/GithubLogo.svg.import +++ b/assets/icons/foreign_logos/GithubLogo.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://ccc0q21h8owg1" -path="res://.godot/imported/GithubLogo.svg-87728d1afe1eb4558de9b480e244157b.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/GithubLogo.svg-87728d1afe1eb4558de9b480e244157b.svgtex" [deps] source_file="res://assets/icons/foreign_logos/GithubLogo.svg" -dest_files=["res://.godot/imported/GithubLogo.svg-87728d1afe1eb4558de9b480e244157b.ctex"] +dest_files=["res://.godot/imported/GithubLogo.svg-87728d1afe1eb4558de9b480e244157b.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/foreign_logos/KoFiLogo.svg.import b/assets/icons/foreign_logos/KoFiLogo.svg.import index 6801ccf..7e9017d 100644 --- a/assets/icons/foreign_logos/KoFiLogo.svg.import +++ b/assets/icons/foreign_logos/KoFiLogo.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dcn1rq4e0p2jt" -path="res://.godot/imported/KoFiLogo.svg-c60c977b7417aae3dea96e2b4511aab1.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/KoFiLogo.svg-c60c977b7417aae3dea96e2b4511aab1.svgtex" [deps] source_file="res://assets/icons/foreign_logos/KoFiLogo.svg" -dest_files=["res://.godot/imported/KoFiLogo.svg-c60c977b7417aae3dea96e2b4511aab1.ctex"] +dest_files=["res://.godot/imported/KoFiLogo.svg-c60c977b7417aae3dea96e2b4511aab1.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/foreign_logos/PatreonLogo.svg.import b/assets/icons/foreign_logos/PatreonLogo.svg.import index 21e3675..1a96600 100644 --- a/assets/icons/foreign_logos/PatreonLogo.svg.import +++ b/assets/icons/foreign_logos/PatreonLogo.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://dq1muwo84c6yv" -path="res://.godot/imported/PatreonLogo.svg-936c5e07b71ef46c2ce08ed38c6f3f4b.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/PatreonLogo.svg-936c5e07b71ef46c2ce08ed38c6f3f4b.svgtex" [deps] source_file="res://assets/icons/foreign_logos/PatreonLogo.svg" -dest_files=["res://.godot/imported/PatreonLogo.svg-936c5e07b71ef46c2ce08ed38c6f3f4b.ctex"] +dest_files=["res://.godot/imported/PatreonLogo.svg-936c5e07b71ef46c2ce08ed38c6f3f4b.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/assets/icons/theme/GuiBoxChecked.svg b/assets/icons/theme/GuiBoxChecked.svg deleted file mode 100644 index db416df..0000000 --- a/assets/icons/theme/GuiBoxChecked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/GuiBoxChecked.svg.import b/assets/icons/theme/GuiBoxChecked.svg.import deleted file mode 100644 index a763af2..0000000 --- a/assets/icons/theme/GuiBoxChecked.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://wdrpwa7gwmg" -path="res://.godot/imported/GuiBoxChecked.svg-0b81fe49eae795bf0c65b284c995bf23.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/GuiBoxChecked.svg" -dest_files=["res://.godot/imported/GuiBoxChecked.svg-0b81fe49eae795bf0c65b284c995bf23.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/icons/theme/GuiBoxCheckedDisabled.svg b/assets/icons/theme/GuiBoxCheckedDisabled.svg deleted file mode 100644 index 8e07b5f..0000000 --- a/assets/icons/theme/GuiBoxCheckedDisabled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/GuiBoxCheckedDisabled.svg.import b/assets/icons/theme/GuiBoxCheckedDisabled.svg.import deleted file mode 100644 index bf9ec9a..0000000 --- a/assets/icons/theme/GuiBoxCheckedDisabled.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d07xfjdtgtvop" -path="res://.godot/imported/GuiBoxCheckedDisabled.svg-1a93efc893aebadff9e0b4f29007f60b.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/GuiBoxCheckedDisabled.svg" -dest_files=["res://.godot/imported/GuiBoxCheckedDisabled.svg-1a93efc893aebadff9e0b4f29007f60b.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/icons/theme/GuiBoxUnchecked.svg b/assets/icons/theme/GuiBoxUnchecked.svg deleted file mode 100644 index 3169bf2..0000000 --- a/assets/icons/theme/GuiBoxUnchecked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/GuiBoxUnchecked.svg.import b/assets/icons/theme/GuiBoxUnchecked.svg.import deleted file mode 100644 index c52fa69..0000000 --- a/assets/icons/theme/GuiBoxUnchecked.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d3a3xgsb8klyk" -path="res://.godot/imported/GuiBoxUnchecked.svg-6e192c9acff30a10fef6cd012185a66d.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/GuiBoxUnchecked.svg" -dest_files=["res://.godot/imported/GuiBoxUnchecked.svg-6e192c9acff30a10fef6cd012185a66d.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/icons/theme/GuiBoxUncheckedDisabled.svg b/assets/icons/theme/GuiBoxUncheckedDisabled.svg deleted file mode 100644 index 6456c5a..0000000 --- a/assets/icons/theme/GuiBoxUncheckedDisabled.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/GuiBoxUncheckedDisabled.svg.import b/assets/icons/theme/GuiBoxUncheckedDisabled.svg.import deleted file mode 100644 index 2d9df12..0000000 --- a/assets/icons/theme/GuiBoxUncheckedDisabled.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://xbycstdv7g3m" -path="res://.godot/imported/GuiBoxUncheckedDisabled.svg-f3e230fd3d62561ea43cf23f6a6a4132.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/GuiBoxUncheckedDisabled.svg" -dest_files=["res://.godot/imported/GuiBoxUncheckedDisabled.svg-f3e230fd3d62561ea43cf23f6a6a4132.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/icons/theme/GuiToggleChecked.svg b/assets/icons/theme/GuiToggleChecked.svg deleted file mode 100644 index c3ed5f0..0000000 --- a/assets/icons/theme/GuiToggleChecked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/GuiToggleChecked.svg.import b/assets/icons/theme/GuiToggleChecked.svg.import deleted file mode 100644 index 76d65be..0000000 --- a/assets/icons/theme/GuiToggleChecked.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dwlr4bgptgwho" -path="res://.godot/imported/GuiToggleChecked.svg-4019ea7f600c5c80e2418ed0d8365df3.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/GuiToggleChecked.svg" -dest_files=["res://.godot/imported/GuiToggleChecked.svg-4019ea7f600c5c80e2418ed0d8365df3.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/icons/theme/GuiToggleUnchecked.svg b/assets/icons/theme/GuiToggleUnchecked.svg deleted file mode 100644 index 19b7a6d..0000000 --- a/assets/icons/theme/GuiToggleUnchecked.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/GuiToggleUnchecked.svg.import b/assets/icons/theme/GuiToggleUnchecked.svg.import deleted file mode 100644 index 8106f30..0000000 --- a/assets/icons/theme/GuiToggleUnchecked.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c12tg3dnydily" -path="res://.godot/imported/GuiToggleUnchecked.svg-e2841c8a1316d6f4769485b0082b165b.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/GuiToggleUnchecked.svg" -dest_files=["res://.godot/imported/GuiToggleUnchecked.svg-e2841c8a1316d6f4769485b0082b165b.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/icons/theme/SplitGrabber.svg b/assets/icons/theme/SplitGrabber.svg deleted file mode 100644 index f72bdd8..0000000 --- a/assets/icons/theme/SplitGrabber.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/SplitGrabber.svg.import b/assets/icons/theme/SplitGrabber.svg.import deleted file mode 100644 index b331cc1..0000000 --- a/assets/icons/theme/SplitGrabber.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cnig3sejwsrf3" -path="res://.godot/imported/SplitGrabber.svg-b13ab8037db30039b965a06e36bacf27.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/SplitGrabber.svg" -dest_files=["res://.godot/imported/SplitGrabber.svg-b13ab8037db30039b965a06e36bacf27.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/icons/theme/SplitGrabber2.svg b/assets/icons/theme/SplitGrabber2.svg deleted file mode 100644 index c3bcb36..0000000 --- a/assets/icons/theme/SplitGrabber2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/icons/theme/SplitGrabber2.svg.import b/assets/icons/theme/SplitGrabber2.svg.import deleted file mode 100644 index a5a30a7..0000000 --- a/assets/icons/theme/SplitGrabber2.svg.import +++ /dev/null @@ -1,37 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://co75w07yqmcro" -path="res://.godot/imported/SplitGrabber2.svg-5f4dbb5977ce370963d5ee5a6881e9b5.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/icons/theme/SplitGrabber2.svg" -dest_files=["res://.godot/imported/SplitGrabber2.svg-5f4dbb5977ce370963d5ee5a6881e9b5.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false diff --git a/assets/logos/icon.svg.import b/assets/logos/icon.svg.import index 57dec04..85d78af 100644 --- a/assets/logos/icon.svg.import +++ b/assets/logos/icon.svg.import @@ -1,37 +1,18 @@ [remap] -importer="texture" -type="CompressedTexture2D" +importer="svg" +type="SVGTexture" uid="uid://barsurula6j8n" -path="res://.godot/imported/icon.svg-6128c91ba220bf70fcc2a632eba0b81d.ctex" -metadata={ -"vram_texture": false -} +path="res://.godot/imported/icon.svg-6128c91ba220bf70fcc2a632eba0b81d.svgtex" [deps] source_file="res://assets/logos/icon.svg" -dest_files=["res://.godot/imported/icon.svg-6128c91ba220bf70fcc2a632eba0b81d.ctex"] +dest_files=["res://.godot/imported/icon.svg-6128c91ba220bf70fcc2a632eba0b81d.svgtex"] [params] -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 -svg/scale=1.0 -editor/scale_with_editor_scale=false -editor/convert_colors_with_editor_theme=false +base_scale=1.0 +saturation=1.0 +color_map={} +compress=true diff --git a/godot_only/android_icons/monochrome_white.png.import b/godot_only/android_icons/monochrome_white.png.import index 59112ad..399be42 100644 --- a/godot_only/android_icons/monochrome_white.png.import +++ b/godot_only/android_icons/monochrome_white.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/monochrome_white.png-336fe08161ffbbd756752ed6 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false diff --git a/godot_only/scripts/Stopwatch.gd b/godot_only/scripts/Stopwatch.gd new file mode 100644 index 0000000..8062b97 --- /dev/null +++ b/godot_only/scripts/Stopwatch.gd @@ -0,0 +1,21 @@ +class_name Stopwatch extends RefCounted + +var precise: bool +var name: String +var start_ticks: int + +static func start(precise_to_microseconds := true, new_name := "Elapsed time") -> Stopwatch: + var new_stopwatch := Stopwatch.new() + new_stopwatch.precise = precise_to_microseconds + new_stopwatch.name = new_name + new_stopwatch.start_ticks = new_stopwatch.get_ticks() + return new_stopwatch + +func measure(reset := false) -> void: + var elapsed := get_ticks() - start_ticks + print_rich("[b]%s:[/b] %d%s" % [name, elapsed, "us" if precise else "ms"]) + if reset: + start_ticks = get_ticks() + +func get_ticks() -> int: + return Time.get_ticks_usec() if precise else Time.get_ticks_msec() diff --git a/godot_only/scripts/Stopwatch.gd.uid b/godot_only/scripts/Stopwatch.gd.uid new file mode 100644 index 0000000..2300f09 --- /dev/null +++ b/godot_only/scripts/Stopwatch.gd.uid @@ -0,0 +1 @@ +uid://c6f4iki4abp4q diff --git a/godot_only/scripts/tests.gd b/godot_only/scripts/tests.gd index 38a96a2..35b7417 100644 --- a/godot_only/scripts/tests.gd +++ b/godot_only/scripts/tests.gd @@ -4,60 +4,105 @@ @tool extends EditorScript +var report := PackedStringArray() + func _run() -> void: pathdata_tests() transform_list_tests() + if report.is_empty(): + print_rich("[rainbow sat=0.4 val=1.0]Success[/rainbow]") + else: + for report_line in report: + print_rich(report_line) + +func add_to_report(test_category: String, test: String, result: String, +expected: String) -> void: + report.append('%s: [b]"%s"[/b] returned [b]"%s"[/b], expected [b]"%s"[/b]' %\ + [test_category, test, result, expected]) +# This test is dependent on specifics of the Formatter and AttributePathdata classes. +# But its logic would likely not change enough in the future to make the tests obsolete. +# https://www.w3.org/TR/SVG11/paths.html#PathDataBNF +# We have a difference in logic where we don't require starting with MoveTo +# in order to make pathdata easier to edit. +# ClosePath are also merged, so you don't end up with invalid syntax after commands are deleted. func pathdata_tests() -> void: - const tests: Dictionary[String, Array] = { - "Jerky": [], - "M 3s 6 h 6 v 3 z": [], - "M 3 s6 h 6 v 3 z": [], - "M 3 .s6 h 6 v 3 z": [], - " 0 2": [], - "M 0 0": [["M", 0.0, 0.0]], - "M2 1 L3 4": [["M", 2.0, 1.0], ["L", 3.0, 4.0]], - "m2 0 3 4": [["m", 2.0, 0.0], ["l", 3.0, 4.0]], - "m-2.3.7-4,4": [["m", -2.3, 0.7], ["l", -4.0, 4.0]], - "m2 3a7 3 0 101.2.3": [["m", 2.0, 3.0], ["a", 7.0, 3.0, 0.0, 1, 0, 1.2, 0.3]], - "M 2 0 c3 2-.6.8 11.0 3Jh3": [["M", 2.0, 0.0], ["c", 3.0, 2.0, -0.6, 0.8, 11.0, 3.0]], - "z": [["z"]], - "M 0 0 z 2 3": [["M", 0.0, 0.0], ["z"]], - "M3e1 4e-2": [["M", 3e1, 4e-2]], - "M5,1 A4,4,0,1,1,5,9": [["M", 5.0, 1.0], ["A", 4.0, 4.0, 0.0, 1, 1, 5.0, 9.0]], - "M4 1 2 - 4 4z": [["M", 4.0, 1.0]], - "M1 6.9e-1": [["M", 1.0, 0.69]], + var spacious_formatter := Formatter.new() + spacious_formatter.pathdata_compress_numbers = false + spacious_formatter.pathdata_minimize_spacing = false + spacious_formatter.pathdata_remove_consecutive_commands = false + spacious_formatter.pathdata_remove_spacing_after_flags = false + const tests: Dictionary[String, String] = { + "": "", + " \n\r\t": "", + "Jerky": "", + "M 3s 6 h 6 v 3 z": "", + "M 3 s6 h 6 v 3 z": "", + "M 3 .s6 h 6 v 3 z": "", + " 0 2": "", + "M , 1 2": "", + "M1 2": "M 1 2", + "M 1 2,": "M 1 2", + "M 1 2, h 3": "M 1 2 h 3", + "M2..5": "M 2 0.5", + "q 1, 2 ,3 , 4 l 5 ,, 6": "q 1 2 3 4", + "M2 1 L3 4": "M 2 1 L 3 4", + "m2 0 3 4": "m 2 0 l 3 4", + "m-2.3.7-4,4": "m -2.3 0.7 l -4 4", + "a7 3 0 101.2.3": "a 7 3 0 1 0 1.2 0.3", + "A10 10 0 2 0 100 100": "", + "a5,5,45,-10,50,50": "", + "A4 4 0 1 0. 9 7": "", + "A4 4 0 1 0.9 7": "A 4 4 0 1 0 0.9 7", + "A 10 0 2 0 100 7": "A 10 0 2 0 1 0 7", + "M 2 0 c3 2-.6.8 11.0 3Jh3": "M 2 0 c 3 2 -0.6 0.8 11 3", + "z": "z", + "M 0 0 z 2 3": "M 0 0 z", + "M3e1 4e-2 h2e+2": "M 30 0.04 h 200", + "M2. 3.": "M 2 3", + "M5,1 A4,4,0,1,1,5,9": "M 5 1 A 4 4 0 1 1 5 9", + "M4 1 2 - 4 4z": "M 4 1", + "M1 6.9E-1": "M 1 0.69", + " \tM\t1\t,\t2": "M 1 2", + "M 1 2 zZzz M 3 4": "M 1 2 z M 3 4", } for test in tests: - var result := AttributePathdata.pathdata_to_arrays(test) - var expected: Array = tests[test] - if result != expected: - print('"' + test + '" generated ' + str(result) + ', expected ' + str(expected)) + var pathdata := AttributePathdata.new("d") + var result := pathdata.path_commands_to_text(AttributePathdata.parse_pathdata(test), spacious_formatter) + if result != tests[test]: + add_to_report("Pathdata parser", test, result, tests[test]) +# This test is dependent on specifics of the Formatter and AttributeTransformList classes. +# But its logic would likely not change enough in the future to make the tests obsolete. +# https://www.w3.org/TR/SVG11/coords.html#TransformAttribute func transform_list_tests() -> void: - var tests: Dictionary[String, Array] = { - "Jerky": [], - "matrix(1, 0, 0, 5, 0, 3)": [Transform.TransformMatrix.new(1, 0, 0, 5, 0, 3)], - "matrix(1 0 0 5 0 3)": [Transform.TransformMatrix.new(1, 0, 0, 5, 0, 3)], + var spacious_formatter := Formatter.new() + spacious_formatter.transform_list_compress_numbers = false + spacious_formatter.transform_list_minimize_spacing = false + spacious_formatter.transform_list_remove_unnecessary_params = false + var tests: Dictionary[String, String] = { + "": "", + " \n\r\t": "", + "Jerky": "", + "matrix(1 0 0 5 0 3)": "matrix(1 0 0 5 0 3)", + "matrix(1, 0, 0 , 5, 0, 3)": "matrix(1 0 0 5 0 3)", + "\tmatrix (1. 0. 0. .5 0. 3. )": "matrix(1 0 0 0.5 0 3)", + "translate(10.) scale(.5) rotate(7)": "translate(10 0) scale(0.5 0.5) rotate(7 0 0)", + "skewX(3) , skewY(4)": "skewX(3) skewY(4)", + "skewX(3) , skewY(4 2)": "", + "skewX(3) ,, skewY(4)": "", + "skewX(3)skewY(4)": "", + "scale(2,)": "", + "translate(,10)": "", + "scale(2, 2": "", + "matrix(1e2,0,0,1e-2,1.2E+1.4e1)": "matrix(100 0 0 0.01 12 4)", + "matrix(1 0 0 1)": "", + "matrix(1.2 0 0 1 0 0 0)": "", } for test in tests: - var test_passed := true - var result := AttributeTransformList.text_to_transform_list(test) - var expected := tests[test] - if expected.size() != result.size(): - test_passed = false - else: - for i in expected.size(): - if expected[i] is Transform.TransformMatrix and\ - (not result[i] is Transform.TransformMatrix or\ - expected[i].x1 != result[i].x1 or expected[i].x2 != result[i].x2 or\ - expected[i].y1 != result[i].y1 or expected[i].y2 != result[i].y2 or\ - expected[i].o1 != result[i].o1 or expected[i].o2 != result[i].o2): - test_passed = false - break - - if not test_passed: - print('"' + test + '" generated ' + str(result)) + var result := AttributeTransformList.new("transform")._format(test, spacious_formatter) + if result != tests[test]: + add_to_report("Transform list parser", test, result, tests[test]) diff --git a/godot_only/scripts/update_translations.gd b/godot_only/scripts/update_translations.gd index 6221ac0..b4ac7cf 100644 --- a/godot_only/scripts/update_translations.gd +++ b/godot_only/scripts/update_translations.gd @@ -7,10 +7,15 @@ const COMMENTS_DICT = { "CDATA color": "CDATA shouldn't be translated. It's a type of XML section.", "Editor formatter": "Refers to the formatter used for GodSVG's code editor.", "Export formatter": "Refers to the formatter used when exporting.", - "Handle colors": "Refers to the colors of the draggable handles.", - "Handle size": "Refers to the size of the draggable handles.", + "Handles": "Refers to the draggable gizmos.", + "Dash length": "Refers to the selection rectangle's animated dashed stroke.", "Excluded": "Refers to the zero, one, or multiple UI parts to not be shown in the final layout. It's of plural cardinality.", "Update check failed": "When checking for updates.", + "Project Founder and Manager": "If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine.", + "V-Sync": "Stands for \"Vertical Synchronization\".", + "Dark": "Refers to a theme preset.", + "Light": "Refers to a theme preset.", + "Black (OLED)": "Refers to a theme preset.", } const TRANSLATIONS_DIR = "translations" @@ -92,28 +97,32 @@ func search_directory(dir: String) -> void: func update_translations() -> void: var used_comments := PackedStringArray() - var location := ProjectSettings.globalize_path(TRANSLATIONS_DIR + "/GodSVG.pot") - var fa := FileAccess.open(location, FileAccess.WRITE) - fa.store_string(HEADER) + var folder_location := ProjectSettings.globalize_path(TRANSLATIONS_DIR) + var pot_location := folder_location.path_join("GodSVG.pot") + var fa := FileAccess.open(pot_location, FileAccess.WRITE) + fa.store_string(HEADER) for msg in messages: if COMMENTS_DICT.has(msg.msgid): fa.store_string("#. %s\n" % COMMENTS_DICT[msg.msgid]) used_comments.append(msg.msgid) fa.store_string(msg.to_string()) fa = null - print("Created " + TRANSLATIONS_DIR + "/GodSVG.pot with %d strings" % (messages.size() + 1)) + print("Created %s with %d strings" % [TRANSLATIONS_DIR.path_join("/GodSVG.pot"), + (messages.size() + 1)]) - var files := DirAccess.get_files_at(ProjectSettings.globalize_path(TRANSLATIONS_DIR)) - for file in files: + for file in DirAccess.get_files_at(folder_location): if not (file.get_extension() == "po" or file == "GodSVG.pot"): continue var args := PackedStringArray(["--update", "--quiet", "--verbose", "--backup=off", - ProjectSettings.globalize_path(TRANSLATIONS_DIR).path_join(file), location]) + folder_location.path_join(file), pot_location]) var output: Array = [] var result := OS.execute("msgmerge", args, output, true) if not result == -1: + var po_location = folder_location.path_join(file) + args = PackedStringArray(["--no-wrap", po_location, "-o", po_location]) + OS.execute("msgcat", args) if file == "GodSVG.pot": continue elif not output.is_empty(): diff --git a/project.godot b/project.godot index a87a275..84248c4 100644 --- a/project.godot +++ b/project.godot @@ -46,6 +46,7 @@ enabled=PackedStringArray() [filesystem] +import/fbx2gltf/enabled=false import/blender/enabled=false import/fbx/enabled=false diff --git a/src/autoload/Configs.gd b/src/autoload/Configs.gd index 0e3481c..48f8d9b 100644 --- a/src/autoload/Configs.gd +++ b/src/autoload/Configs.gd @@ -1,42 +1,27 @@ # This singleton handles session data and settings. extends Node -@warning_ignore("unused_signal") +@warning_ignore_start("unused_signal") signal highlighting_colors_changed -@warning_ignore("unused_signal") signal snap_changed -@warning_ignore("unused_signal") signal language_changed -@warning_ignore("unused_signal") signal ui_scale_changed -@warning_ignore("unused_signal") signal theme_changed -@warning_ignore("unused_signal") signal shortcuts_changed -@warning_ignore("unused_signal") signal basic_colors_changed -@warning_ignore("unused_signal") signal handle_visuals_changed -@warning_ignore("unused_signal") +signal selection_rectangle_visuals_changed signal grid_color_changed -@warning_ignore("unused_signal") signal shortcut_panel_changed -@warning_ignore("unused_signal") signal active_tab_status_changed -@warning_ignore("unused_signal") signal active_tab_reference_changed -@warning_ignore("unused_signal") signal active_tab_changed -@warning_ignore("unused_signal") signal tabs_changed -@warning_ignore("unused_signal") signal tab_removed -@warning_ignore("unused_signal") signal tab_selected(index: int) -@warning_ignore("unused_signal") signal layout_changed -@warning_ignore("unused_signal") signal orientation_changed +@warning_ignore_restore("unused_signal") var current_sdk: int = -1 @@ -82,7 +67,6 @@ func _enter_tree() -> void: if InputMap.has_action(action): default_shortcuts[action] = InputMap.action_get_events(action) load_config() - ThemeUtils.generate_and_apply_theme() func load_config() -> void: @@ -109,8 +93,10 @@ func reset_settings() -> void: func post_load() -> void: savedata.get_active_tab().activate() - sync_background_color() + sync_canvas_color() sync_locale() + sync_max_fps() + sync_theme() func generate_highlighter() -> SVGHighlighter: @@ -128,11 +114,22 @@ func generate_highlighter() -> SVGHighlighter: # Global effects from settings. Some of them should also be used on launch. -func sync_background_color() -> void: - RenderingServer.set_default_clear_color(savedata.background_color) +func sync_canvas_color() -> void: + RenderingServer.set_default_clear_color(savedata.canvas_color) func sync_locale() -> void: if not savedata.language in TranslationServer.get_loaded_locales(): savedata.language = "en" else: TranslationServer.set_locale(savedata.language) + +func sync_vsync() -> void: + DisplayServer.window_set_vsync_mode( + DisplayServer.VSYNC_ENABLED if savedata.vsync else DisplayServer.VSYNC_DISABLED) + +func sync_max_fps() -> void: + Engine.max_fps = savedata.max_fps + +func sync_theme() -> void: + ThemeUtils.generate_and_apply_theme() + theme_changed.emit() diff --git a/src/autoload/HandlerGUI.gd b/src/autoload/HandlerGUI.gd index 9713808..86f12dc 100644 --- a/src/autoload/HandlerGUI.gd +++ b/src/autoload/HandlerGUI.gd @@ -138,22 +138,40 @@ func remove_all_menus() -> void: throw_mouse_motion_event() -func add_popup(new_popup: Control) -> void: +# The passed popup control may be added to a shadow panel. The shadow panel is +# returned by the method if that's the case. Otherwise, the original panel is returned. +func add_popup(new_popup: Control, add_shadow := true) -> Control: var overlay_ref := Control.new() overlay_ref.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) overlay_ref.gui_input.connect(_parse_popup_overlay_event) popup_stack.append(overlay_ref) get_tree().root.add_child(overlay_ref) - overlay_ref.add_child(new_popup) - if new_popup is PanelContainer: - var stylebox := new_popup.get_theme_stylebox("panel").duplicate() - stylebox.shadow_color = Color(0, 0, 0, 0.1) - stylebox.shadow_size = 8 - new_popup.add_theme_stylebox_override("panel", stylebox) - - new_popup.reset_size() - new_popup.tree_exiting.connect(remove_popup.bind(overlay_ref)) - throw_mouse_motion_event() + if add_shadow: + var shadow_container := PanelContainer.new() + var sb := StyleBoxFlat.new() + sb.bg_color = Color(0, 0, 0, 0.1) + sb.shadow_color = Color(0, 0, 0, 0.1) + sb.shadow_size = 8 + if new_popup is PanelContainer: + var stylebox_wrapped := new_popup.get_theme_stylebox("panel") + sb.corner_radius_top_left = stylebox_wrapped.corner_radius_top_left + sb.corner_radius_bottom_left = stylebox_wrapped.corner_radius_bottom_left + sb.corner_radius_top_right = stylebox_wrapped.corner_radius_top_right + sb.corner_radius_bottom_right = stylebox_wrapped.corner_radius_bottom_right + new_popup.resized.connect(shadow_container.reset_size) + shadow_container.add_theme_stylebox_override("panel", sb) + shadow_container.add_child(new_popup) + overlay_ref.add_child(shadow_container) + shadow_container.reset_size() + new_popup.tree_exiting.connect(remove_popup.bind(overlay_ref)) + throw_mouse_motion_event() + return shadow_container + else: + overlay_ref.add_child(new_popup) + new_popup.reset_size() + new_popup.tree_exiting.connect(remove_popup.bind(overlay_ref)) + throw_mouse_motion_event() + return new_popup func remove_popup(overlay_ref: Control = null) -> void: if popup_stack.is_empty(): @@ -178,41 +196,41 @@ func remove_all_popups() -> void: # Should usually be the global rect of a control. func popup_under_rect(popup: Control, rect: Rect2, vp: Viewport) -> void: - add_popup(popup) + var top_popup := add_popup(popup) var screen_transform := vp.get_screen_transform() var screen_h := vp.get_visible_rect().size.y var popup_pos := Vector2(rect.position.x, 0) # Popup below if there's enough space or we're in the bottom half of the screen. - if rect.position.y + rect.size.y + popup.size.y < screen_h or\ + if rect.position.y + rect.size.y + top_popup.size.y < screen_h or\ rect.position.y + rect.size.y / 2 <= screen_h / 2.0: popup_pos.y = rect.position.y + rect.size.y else: - popup_pos.y = rect.position.y - popup.size.y + popup_pos.y = rect.position.y - top_popup.size.y popup_pos += screen_transform.get_origin() / screen_transform.get_scale() - popup.position = popup_clamp_pos(popup, popup_pos, vp) + top_popup.position = popup_clamp_pos(top_popup, popup_pos, vp) # Should usually be the global rect of a control. func popup_under_rect_center(popup: Control, rect: Rect2, vp: Viewport) -> void: - add_popup(popup) + var top_popup := add_popup(popup) var screen_transform := vp.get_screen_transform() var screen_h := vp.get_visible_rect().size.y - var popup_pos := Vector2(rect.position.x - popup.size.x / 2.0 + rect.size.x / 2, 0) + var popup_pos := Vector2(rect.position.x - top_popup.size.x / 2.0 + rect.size.x / 2, 0) # Popup below if there's enough space or we're in the bottom half of the screen. - if rect.position.y + rect.size.y + popup.size.y < screen_h or\ + if rect.position.y + rect.size.y + top_popup.size.y < screen_h or\ rect.position.y + rect.size.y / 2 <= screen_h / 2.0: popup_pos.y = rect.position.y + rect.size.y else: - popup_pos.y = rect.position.y - popup.size.y + popup_pos.y = rect.position.y - top_popup.size.y # Align horizontally and other things. popup_pos += screen_transform.get_origin() / screen_transform.get_scale() - popup.position = popup_clamp_pos(popup, popup_pos, vp) + top_popup.position = popup_clamp_pos(top_popup, popup_pos, vp) # Should usually be the global position of the mouse. func popup_under_pos(popup: Control, pos: Vector2, vp: Viewport) -> void: - add_popup(popup) + var top_popup := add_popup(popup) var screen_transform := vp.get_screen_transform() pos += screen_transform.get_origin() / screen_transform.get_scale() - popup.position = popup_clamp_pos(popup, pos, vp) + top_popup.position = popup_clamp_pos(top_popup, pos, vp) # Helper. func popup_clamp_pos(popup: Control, attempt_pos: Vector2, vp: Viewport) -> Vector2: @@ -409,7 +427,6 @@ func get_min_ui_scale(usable_screen_size: Vector2i) -> float: func get_auto_ui_scale() -> float: var dpi := DisplayServer.screen_get_dpi(DisplayServer.window_get_current_screen()) - print(dpi) var base_dpi := 160.0 var scale := dpi / base_dpi var blend: float = clamp((dpi - 240.0) / 400.0, 0.0, 1.0) diff --git a/src/config_classes/ConfigResource.gd b/src/config_classes/ConfigResource.gd index f68b334..2e2d5e4 100644 --- a/src/config_classes/ConfigResource.gd +++ b/src/config_classes/ConfigResource.gd @@ -1,18 +1,25 @@ # Implements a very useful signal. -class_name ConfigResource extends Resource +@abstract class_name ConfigResource extends Resource signal changed_deferred +var _initial_load_finished := false var _changed_deferred_pending := false func _init() -> void: changed.connect(_queue_emit_changed_deferred) + set_deferred("_initial_load_finished", true) func _queue_emit_changed_deferred() -> void: - emit_changed_deferred.call_deferred() - _changed_deferred_pending = true + if _initial_load_finished: + emit_changed_deferred.call_deferred() + _changed_deferred_pending = true func emit_changed_deferred() -> void: if _changed_deferred_pending: _changed_deferred_pending = false changed_deferred.emit() + +func external_call(callback: Callable) -> void: + if _initial_load_finished: + callback.call_deferred() diff --git a/src/config_classes/SVGHighlighter.gd b/src/config_classes/SVGHighlighter.gd index c8abfed..1f2cfb6 100644 --- a/src/config_classes/SVGHighlighter.gd +++ b/src/config_classes/SVGHighlighter.gd @@ -13,11 +13,11 @@ var error_color := Color("ff866b") var element_color := Color("ff8ccc"): set(new_value): element_color = new_value - unrecognized_element_color = Color(new_value, new_value.a * 2 / 3.0) + unrecognized_element_color = Color(new_value, new_value.a * 0.7) var attribute_color := Color("bce0ff"): set(new_value): attribute_color = new_value - unrecognized_attribute_color = Color(new_value, new_value.a * 2 / 3.0) + unrecognized_attribute_color = Color(new_value, new_value.a * 0.7) func _get_line_syntax_highlighting(line: int) -> Dictionary: diff --git a/src/config_classes/SaveData.gd b/src/config_classes/SaveData.gd index 6b57916..f3d3e15 100644 --- a/src/config_classes/SaveData.gd +++ b/src/config_classes/SaveData.gd @@ -1,5 +1,8 @@ class_name SaveData extends ConfigResource +enum ThemePreset {DARK, LIGHT, BLACK} +enum HighlighterPreset {DEFAULT_DARK, DEFAULT_LIGHT} + const GoodColorPicker = preload("res://src/ui_widgets/good_color_picker.gd") const ShortcutPanel = preload("res://src/ui_parts/shortcut_panel.gd") @@ -9,39 +12,108 @@ var _shortcut_validities: Dictionary[Key, bool] = {} # Most settings don't need a default. func get_setting_default(setting: String) -> Variant: match setting: - "highlighting_symbol_color": return Color("abc9ff") - "highlighting_element_color": return Color("ff8ccc") - "highlighting_attribute_color": return Color("bce0ff") - "highlighting_string_color": return Color("a1ffe0") - "highlighting_comment_color": return Color("cdcfd280") - "highlighting_text_color": return Color("cdcfeaac") - "highlighting_cdata_color": return Color("ffeda1ac") - "highlighting_error_color": return Color("ff5555") + "base_color": + match theme_preset: + ThemePreset.DARK: return Color("10101d") + ThemePreset.LIGHT: return Color("e6e6ff") + ThemePreset.BLACK: return Color("000") + "accent_color": + match theme_preset: + ThemePreset.DARK: return Color("668cff") + ThemePreset.LIGHT: return Color("0830a6ff") + ThemePreset.BLACK: return Color("7c8dbf") + "highlighter_preset": + match theme_preset: + ThemePreset.DARK, ThemePreset.BLACK: return HighlighterPreset.DEFAULT_DARK + ThemePreset.LIGHT: return HighlighterPreset.DEFAULT_LIGHT + "highlighting_symbol_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("abc9ff") + HighlighterPreset.DEFAULT_LIGHT: return Color("23488c") + "highlighting_element_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("ff8ccc") + HighlighterPreset.DEFAULT_LIGHT: return Color("8c004b") + "highlighting_attribute_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("bce0ff") + HighlighterPreset.DEFAULT_LIGHT: return Color("003666") + "highlighting_string_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("a1ffe0") + HighlighterPreset.DEFAULT_LIGHT: return Color("006644") + "highlighting_comment_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("d4d6d980") + HighlighterPreset.DEFAULT_LIGHT: return Color("3e3e4080") + "highlighting_text_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("d5d7f2aa") + HighlighterPreset.DEFAULT_LIGHT: return Color("242433aa") + "highlighting_cdata_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("ffeda1ac") + HighlighterPreset.DEFAULT_LIGHT: return Color("40360dac") + "highlighting_error_color": + match highlighter_preset: + HighlighterPreset.DEFAULT_DARK: return Color("f55") + HighlighterPreset.DEFAULT_LIGHT: return Color("cc0000") + "basic_color_valid": + match theme_preset: + ThemePreset.DARK,ThemePreset.BLACK: return Color("9f9") + ThemePreset.LIGHT: return Color("2b2") + "basic_color_error": + match theme_preset: + ThemePreset.DARK,ThemePreset.BLACK: return Color("f99") + ThemePreset.LIGHT: return Color("b22") + "basic_color_warning": + match theme_preset: + ThemePreset.DARK,ThemePreset.BLACK: return Color("ee5") + ThemePreset.LIGHT: return Color("991") + "handle_size": return 1.0 if OS.get_name() != "Android" else 2.0 "handle_inner_color": return Color("fff") "handle_color": return Color("111") "handle_hovered_color": return Color("aaa") "handle_selected_color": return Color("46f") "handle_hovered_selected_color": return Color("f44") - "background_color": return Color(0.12, 0.132, 0.2, 1) - "grid_color": return Color(0.5, 0.5, 0.5) - "basic_color_valid": return Color("9f9") - "basic_color_error": return Color("f99") - "basic_color_warning": return Color("ee5") + "selection_rectangle_speed": return 30.0 + "selection_rectangle_width": return 2.0 + "selection_rectangle_dash_length": return 10.0 + "selection_rectangle_color1": return Color("fffc") + "selection_rectangle_color2": return Color("000c") + "canvas_color": + match theme_preset: + ThemePreset.DARK: return Color("1f2233") + ThemePreset.LIGHT: return Color("fff") + ThemePreset.BLACK: return Color("000") + "grid_color": + match theme_preset: + ThemePreset.DARK,ThemePreset.BLACK: return Color("808080") + ThemePreset.LIGHT: return Color("666") "invert_zoom": return false "wraparound_panning": return false "use_ctrl_for_zoom": return true "use_native_file_dialog": return true "use_filename_for_window_title": return true - "handle_size": return 1.0 if OS.get_name() != "Android" else 2.0 "ui_scale": return ScalingApproach.AUTO - "custom_ui_scale": return true + "vsync": return true + "max_fps": return 0 return null func reset_to_default() -> void: for setting in _get_setting_names(): set(setting, get_setting_default(setting)) +func reset_theme_items_to_default() -> void: + for setting in theme_items: + set(setting, get_setting_default(setting)) + reset_highlighting_items_to_default() + +func reset_highlighting_items_to_default() -> void: + for setting in highlighting_items: + set(setting, get_setting_default(setting)) + func _get_setting_names() -> PackedStringArray: var arr := PackedStringArray() for p in get_property_list(): @@ -50,6 +122,71 @@ func _get_setting_names() -> PackedStringArray: arr.append(p.name) return arr +const theme_items: PackedStringArray = [ + "base_color", + "accent_color", + "highlighter_preset", + "basic_color_valid", + "basic_color_error", + "basic_color_warning", + "handle_size", + "handle_inner_color", + "handle_color", + "handle_hovered_color", + "handle_selected_color", + "handle_hovered_selected_color", + "selection_rectangle_speed", + "selection_rectangle_width", + "selection_rectangle_dash_length", + "selection_rectangle_color1", + "selection_rectangle_color2", + "canvas_color", + "grid_color", +] + +func is_theming_default() -> bool: + for setting in theme_items: + if get(setting) != get_setting_default(setting): + return false + return true + +# TODO Typed Dictionary wonkiness Dictionary[ThemePreset, String]. This one was copied +# from an earlier similar implementation, but I didn't bother to test if it's still +# necessary because GodSVG was disheveled while I was implementing the feature. +static func get_theme_preset_value_text_map() -> Dictionary: + return { + ThemePreset.DARK: Translator.translate("Dark"), + ThemePreset.LIGHT: Translator.translate("Light"), + ThemePreset.BLACK: Translator.translate("Black (OLED)"), + } + +const highlighting_items: PackedStringArray = [ + "highlighting_symbol_color", + "highlighting_element_color", + "highlighting_attribute_color", + "highlighting_string_color", + "highlighting_comment_color", + "highlighting_text_color", + "highlighting_cdata_color", + "highlighting_error_color", +] + +func is_highlighting_default() -> bool: + for setting in highlighting_items: + if get(setting) != get_setting_default(setting): + return false + return true + +# TODO Typed Dictionary wonkiness Dictionary[ThemePreset, String]. This one was copied +# from an earlier similar implementation, but I didn't bother to test if it's still +# necessary because GodSVG was disheveled while I was implementing the feature. +static func get_highlighter_preset_value_text_map() -> Dictionary: + return { + HighlighterPreset.DEFAULT_DARK: Translator.translate("Default Dark"), + HighlighterPreset.DEFAULT_LIGHT: Translator.translate("Default Light"), + } + + func validate() -> void: if not is_instance_valid(editor_formatter): editor_formatter = Formatter.new(Formatter.Preset.PRETTY) @@ -79,10 +216,45 @@ const CURRENT_VERSION = 1 if language != new_value: language = new_value emit_changed() - Configs.sync_locale.call_deferred() - Configs.language_changed.emit.call_deferred() + external_call(Configs.sync_locale) + external_call(Configs.language_changed.emit) + # Theming + +@export var theme_preset := ThemePreset.DARK: + set(new_value): + if theme_preset != new_value: + # Validation + if not (new_value >= 0 and new_value < ThemePreset.size()): + new_value = ThemePreset.DARK + theme_preset = new_value + emit_changed() + +@export var base_color := Color("10101d"): + set(new_value): + if base_color != new_value: + base_color = new_value + emit_changed() + external_call(Configs.sync_theme) + +@export var accent_color := Color("668cff"): + set(new_value): + if accent_color != new_value: + accent_color = new_value + emit_changed() + external_call(Configs.sync_theme) + + +@export var highlighter_preset := HighlighterPreset.DEFAULT_DARK: + set(new_value): + if highlighter_preset != new_value: + # Validation + if not (new_value >= 0 and new_value < HighlighterPreset.size()): + new_value = HighlighterPreset.DEFAULT_DARK + highlighter_preset = new_value + emit_changed() + @export var highlighting_symbol_color := Color("abc9ff"): set(new_value): if highlighting_symbol_color != new_value: @@ -111,14 +283,14 @@ const CURRENT_VERSION = 1 emit_changed() Configs.highlighting_colors_changed.emit() -@export var highlighting_comment_color := Color("cdcfd280"): +@export var highlighting_comment_color := Color("d4d6d980"): set(new_value): if highlighting_comment_color != new_value: highlighting_comment_color = new_value emit_changed() Configs.highlighting_colors_changed.emit() -@export var highlighting_text_color := Color("cdcfeaac"): +@export var highlighting_text_color := Color("d5d7f2aa"): set(new_value): if highlighting_text_color != new_value: highlighting_text_color = new_value @@ -132,13 +304,51 @@ const CURRENT_VERSION = 1 emit_changed() Configs.highlighting_colors_changed.emit() -@export var highlighting_error_color := Color("ff866b"): +@export var highlighting_error_color := Color("f55"): set(new_value): if highlighting_error_color != new_value: highlighting_error_color = new_value emit_changed() Configs.highlighting_colors_changed.emit() + +@export var basic_color_valid := Color("9f9"): + set(new_value): + if basic_color_valid != new_value: + basic_color_valid = new_value + emit_changed() + Configs.basic_colors_changed.emit() + +@export var basic_color_error := Color("f99"): + set(new_value): + if basic_color_error != new_value: + basic_color_error = new_value + emit_changed() + Configs.basic_colors_changed.emit() + +@export var basic_color_warning := Color("ee5"): + set(new_value): + if basic_color_warning != new_value: + basic_color_warning = new_value + emit_changed() + Configs.basic_colors_changed.emit() + + +const HANDLE_SIZE_MIN = 0.5 +const HANDLE_SIZE_MAX = 4.0 +@export var handle_size := 1.0: + set(new_value): + # Validation + if is_nan(new_value): + new_value = get_setting_default("handle_size") + else: + new_value = clampf(new_value, HANDLE_SIZE_MIN, HANDLE_SIZE_MAX) + # Main part + if handle_size != new_value: + handle_size = new_value + emit_changed() + Configs.handle_visuals_changed.emit() + @export var handle_inner_color := Color("fff"): set(new_value): if handle_inner_color != new_value: @@ -174,43 +384,89 @@ const CURRENT_VERSION = 1 emit_changed() Configs.handle_visuals_changed.emit() -@export var background_color := Color(0.12, 0.132, 0.2, 1): +const MAX_SELECTION_RECTANGLE_SPEED = 600.0 +@export var selection_rectangle_speed := 30.0: set(new_value): - if background_color != new_value: - background_color = new_value + # Validation + if is_nan(new_value): + new_value = get_setting_default("selection_rectangle_speed") + else: + new_value = clampf(new_value, -MAX_SELECTION_RECTANGLE_SPEED, + MAX_SELECTION_RECTANGLE_SPEED) + # Main part + if selection_rectangle_speed != new_value: + selection_rectangle_speed = new_value emit_changed() - Configs.sync_background_color.call_deferred() + Configs.selection_rectangle_visuals_changed.emit() -@export var grid_color := Color(0.5, 0.5, 0.5): +const MAX_SELECTION_RECTANGLE_WIDTH = 8.0 +@export var selection_rectangle_width := 2.0: set(new_value): - if grid_color != new_value: - grid_color = new_value + # Validation + if is_nan(new_value): + new_value = get_setting_default("selection_rectangle_width") + else: + new_value = clampf(new_value, 1.0, MAX_SELECTION_RECTANGLE_WIDTH) + # Main part + if selection_rectangle_width != new_value: + selection_rectangle_width = new_value emit_changed() - Configs.grid_color_changed.emit() + Configs.selection_rectangle_visuals_changed.emit() -@export var basic_color_valid := Color("9f9"): +const MAX_SELECTION_RECTANGLE_DASH_LENGTH = 600.0 +@export var selection_rectangle_dash_length := 10.0: set(new_value): - if basic_color_valid != new_value: - basic_color_valid = new_value + # Validation + if is_nan(new_value): + new_value = get_setting_default("selection_rectangle_dash_length") + else: + new_value = clampf(new_value, 1.0, MAX_SELECTION_RECTANGLE_DASH_LENGTH) + # Main part + if selection_rectangle_dash_length != new_value: + selection_rectangle_dash_length = new_value emit_changed() - Configs.basic_colors_changed.emit() + Configs.selection_rectangle_visuals_changed.emit() -@export var basic_color_error := Color("f99"): +@export var selection_rectangle_color1 := Color("fffc"): set(new_value): - if basic_color_error != new_value: - basic_color_error = new_value + if selection_rectangle_color1 != new_value: + selection_rectangle_color1 = new_value emit_changed() - Configs.basic_colors_changed.emit() + Configs.selection_rectangle_visuals_changed.emit() -@export var basic_color_warning := Color("ee5"): +@export var selection_rectangle_color2 := Color("000c"): set(new_value): - if basic_color_warning != new_value: - basic_color_warning = new_value + if selection_rectangle_color2 != new_value: + selection_rectangle_color2 = new_value + emit_changed() + Configs.selection_rectangle_visuals_changed.emit() + +@export var canvas_color := Color("1f2233"): + set(new_value): + if canvas_color != new_value: + canvas_color = new_value + emit_changed() + external_call(Configs.sync_canvas_color) + +@export var grid_color := Color("808080"): + set(new_value): + if grid_color != new_value: + grid_color = new_value + emit_changed() + Configs.grid_color_changed.emit() + + +# Tab bar + +@export var tab_mmb_close := true: + set(new_value): + if tab_mmb_close != new_value: + tab_mmb_close = new_value emit_changed() - Configs.basic_colors_changed.emit() # Other + @export var invert_zoom := false: set(new_value): if invert_zoom != new_value: @@ -240,22 +496,7 @@ const CURRENT_VERSION = 1 if use_filename_for_window_title != new_value: use_filename_for_window_title = new_value emit_changed() - HandlerGUI.update_window_title.call_deferred() - -const HANDLE_SIZE_MIN = 0.5 -const HANDLE_SIZE_MAX = 4.0 -@export var handle_size := 1.0: - set(new_value): - # Validation - if is_nan(new_value): - new_value = get_setting_default("handle_size") - else: - new_value = clampf(new_value, HANDLE_SIZE_MIN, HANDLE_SIZE_MAX) - # Main part - if handle_size != new_value: - handle_size = new_value - emit_changed() - Configs.handle_visuals_changed.emit() + external_call(HandlerGUI.update_window_title) enum ScalingApproach {AUTO, CONSTANT_075, CONSTANT_100, CONSTANT_125, CONSTANT_150, CONSTANT_175, CONSTANT_200, CONSTANT_225, CONSTANT_250, CONSTANT_275, CONSTANT_300, CONSTANT_400, MAX} @@ -270,8 +511,31 @@ enum ScalingApproach {AUTO, CONSTANT_075, CONSTANT_100, CONSTANT_125, CONSTANT_1 emit_changed() Configs.ui_scale_changed.emit() +@export var vsync := true: + set(new_value): + if vsync != new_value: + vsync = new_value + emit_changed() + external_call(Configs.sync_vsync) + +const MAX_FPS_MIN = 12 +const MAX_FPS_MAX = 600 +@export var max_fps := 0: + set(new_value): + # Clamp unless it's 0 (unlimited). + if is_nan(new_value): + new_value = get_setting_default("max_fps") + elif new_value != 0: + new_value = clampi(new_value, MAX_FPS_MIN, MAX_FPS_MAX) + + if max_fps != new_value: + max_fps = new_value + emit_changed() + external_call(Configs.sync_max_fps) + # Session + const MAX_SNAP = 16384 @export var snap := -0.5: # Negative when disabled. set(new_value): diff --git a/src/data_classes/Attribute.gd b/src/data_classes/Attribute.gd index c0d9c80..b3d3ab6 100644 --- a/src/data_classes/Attribute.gd +++ b/src/data_classes/Attribute.gd @@ -1,6 +1,6 @@ # Represents an attribute inside an element, i.e. . # If the Attribute's data type is known, one of the inheriting classes should be used. -class_name Attribute extends RefCounted +class_name Attribute signal value_changed diff --git a/src/data_classes/AttributePathdata.gd b/src/data_classes/AttributePathdata.gd index b64fe0c..b65f6f6 100644 --- a/src/data_classes/AttributePathdata.gd +++ b/src/data_classes/AttributePathdata.gd @@ -242,169 +242,113 @@ func toggle_relative_command(idx: int) -> void: static func parse_pathdata(text: String) -> Array[PathCommand]: - return path_commands_from_parsed_data(pathdata_to_arrays(text)) - -# godot_only/tests.gd has a test for this. -static func pathdata_to_arrays(text: String) -> Array[Array]: - var new_commands: Array[Array] = [] - var curr_command := "" - var prev_command := "" - var nums: Array = [] # Not a float array because the arcs are ints. - var args_left := 0 - var comma_exhausted := false # Can ignore many whitespaces, but only one comma. + text = text.strip_edges() + var text_length := text.length() - var idx := -1 - while idx < text.length() - 1: - idx += 1 - @warning_ignore("shadowed_global_identifier") - var char := text[idx] - # Stop parsing if we've hit a character that's not allowed. - if not char in "MmLlHhVvAaQqTtCcSsZz0123456789-+Ee., \n\t\r": - return new_commands - # Logic for finding out what the next command is going to be. - if args_left == 0: - match char: - "M", "m", "L", "l", "H", "h", "V", "v", "A", "a", "Q", "q", "T", "t",\ - "C", "c", "S", "s", "Z", "z": - curr_command = char - args_left = PathCommand.arg_count_dict[curr_command.to_upper()] - " ", "\t", "\n", "\r": continue - "-", "+", ".", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9": - if prev_command.is_empty(): - continue - - match prev_command: - "Z", "z": - return new_commands - "M", "m": - curr_command = "L" if prev_command == "M" else "l" - args_left = PathCommand.arg_count_dict[curr_command.to_upper()] - "L", "l", "H", "h", "V", "v", "A", "a", "Q", "q", "T", "t", "C", "c",\ - "S", "s": - curr_command = prev_command - args_left = PathCommand.arg_count_dict[curr_command.to_upper()] - idx -= 1 - _: return new_commands - # Logic for parsing new numbers until args_left == 0. + var commands: Array[PathCommand] = [] + var idx := 0 + var prev_command := "" + while idx < text_length: + while idx < text_length and text[idx] in " \t\n\r": + idx += 1 + if idx >= text_length: + break + + var current_char := text[idx] + var current_command := "" + if current_char in "MmLlHhVvAaQqTtCcSs": + current_command = current_char + idx += 1 + elif current_char in "Zz": + idx += 1 + if prev_command in "Zz": + continue + current_command = current_char + elif not prev_command.is_empty(): + match prev_command: + "Z", "z": break + "M": current_command = "L" + "m": current_command = "l" + _: current_command = prev_command else: - if comma_exhausted and not char in " \n\t\r": - comma_exhausted = false - # Arc flags are represented by a single character. - if curr_command in "Aa" and (args_left == 4 or args_left == 3): - match char: - "0": nums.append(0) - "1": nums.append(1) - " ", "\n", "\t", "\r": continue - ",": - if comma_exhausted: - return new_commands - else: - comma_exhausted = true - continue - _: return new_commands - if args_left == 3 and nums.size() == 5: - # The number parsing part doesn't account for whitespace at the start, - # so jump over the whitespace here. - while idx < text.length() - 1: + break + + var key := current_command.to_upper() + var arg_count := PathCommand.arg_count_dict[key] + var nums := [] + + if key == "A": + var result := NumstringParser.text_to_number_arr(text, idx, 3) + if result.is_empty(): + return commands + var arr: PackedFloat64Array = result[0] + idx = result[1] + nums.append_array(arr) + + # Handle flags. + for _i in 2: + @warning_ignore("confusable_local_declaration") + var comma_passed := false + while idx < text_length: + if text[idx] in " \t\n\r": idx += 1 - match text[idx]: - " ", "\n", "\t", "\r": continue - ",": - if comma_exhausted: - return new_commands - else: - comma_exhausted = true - continue - _: - idx -= 1 - break - else: - # Parse the number. - var start_idx := idx - var end_idx := idx - var number_proceed := true - var passed_decimal_point := false - var exponent_just_passed := true - while number_proceed and idx < text.length(): - char = text[idx] - match char: - "0", "1", "2", "3", "4", "5", "6", "7", "8", "9": - idx += 1 - end_idx += 1 - if exponent_just_passed: - exponent_just_passed = false - "-", "+": - if end_idx == start_idx or exponent_just_passed: - end_idx += 1 - idx += 1 - if exponent_just_passed: - exponent_just_passed = false - else: - number_proceed = false - idx -= 1 - ".": - if not passed_decimal_point: - passed_decimal_point = true - end_idx += 1 - idx += 1 - else: - idx -= 1 - number_proceed = false - " ", "\n", "\t", "\r": - if end_idx == start_idx: - idx += 1 - start_idx += 1 - end_idx += 1 - continue - if not text.substr(start_idx, idx - start_idx).is_valid_float(): - return new_commands - number_proceed = false - ",": - if comma_exhausted: - return new_commands - else: - comma_exhausted = true - number_proceed = false - "e", "E": - end_idx += 1 - idx += 1 - exponent_just_passed = true - _: - if args_left >= 1 and\ - not text.substr(start_idx, end_idx - start_idx).is_valid_float(): - return new_commands - else: - idx -= 1 - break - nums.append(text.substr(start_idx, end_idx - start_idx).to_float()) - args_left -= 1 + elif text[idx] == ",": + if comma_passed: + return commands + comma_passed = true + idx += 1 + else: + break + if idx >= text_length or not text[idx] in "01": + return commands + else: + nums.append(text[idx].to_int()) + idx += 1 + + result = NumstringParser.text_to_number_arr(text, idx, 2, true) + if result.is_empty(): + return commands + arr = result[0] + idx = result[1] + nums.append_array(arr) + elif arg_count > 0: + var result := NumstringParser.text_to_number_arr(text, idx, arg_count) + if result.is_empty(): + return commands + + var arr: PackedFloat64Array = result[0] + idx = result[1] + nums.append_array(arr) - # Wrap up the array. - if args_left == 0: - prev_command = curr_command - var finalized_arr: Array = [curr_command] - curr_command = "" - finalized_arr.append_array(nums) - nums.clear() - new_commands.append(finalized_arr) - return new_commands - -static func path_commands_from_parsed_data(data: Array[Array]) -> Array[PathCommand]: - var cmds: Array[PathCommand] = [] - for a in data: + var cmd_type := PathCommand.translation_dict[key] + var relative := Utils.is_string_lower(current_command) var new_cmd: PathCommand - # The idx 0 element is the command char, the rest are the arguments. - var cmd_type: Script = PathCommand.translation_dict[a[0].to_upper()] - var relative := Utils.is_string_lower(a[0]) - match a.size(): - 1: new_cmd = cmd_type.new(relative) - 2: new_cmd = cmd_type.new(a[1], relative) - 3: new_cmd = cmd_type.new(a[1], a[2], relative) - 5: new_cmd = cmd_type.new(a[1], a[2], a[3], a[4], relative) - 7: new_cmd = cmd_type.new(a[1], a[2], a[3], a[4], a[5], a[6], relative) - 8: new_cmd = cmd_type.new(a[1], a[2], a[3], a[4], a[5], a[6], a[7], relative) - cmds.append(new_cmd) - return cmds + match arg_count: + 0: new_cmd = cmd_type.new(relative) + 1: new_cmd = cmd_type.new(nums[0], relative) + 2: new_cmd = cmd_type.new(nums[0], nums[1], relative) + 4: new_cmd = cmd_type.new(nums[0], nums[1], nums[2], nums[3], relative) + 6: new_cmd = cmd_type.new(nums[0], nums[1], nums[2], nums[3], nums[4], nums[5], relative) + 7: new_cmd = cmd_type.new(nums[0], nums[1], nums[2], nums[3], nums[4], nums[5], nums[6], relative) + 8: new_cmd = cmd_type.new(nums[0], nums[1], nums[2], nums[3], nums[4], nums[5], nums[6], nums[7], relative) + _: continue + + commands.append(new_cmd) + prev_command = current_command + + var comma_passed := false + while idx < text_length: + var c := text[idx] + if c in " \t\n\r": + idx += 1 + elif c == ",": + if comma_passed: + return commands + comma_passed = true + idx += 1 + else: + break + return commands func path_commands_to_text(commands_arr: Array[PathCommand], diff --git a/src/data_classes/AttributeTransformList.gd b/src/data_classes/AttributeTransformList.gd index 6bedb0c..77b65a1 100644 --- a/src/data_classes/AttributeTransformList.gd +++ b/src/data_classes/AttributeTransformList.gd @@ -101,129 +101,81 @@ formatter := Configs.savedata.editor_formatter) -> String: static func text_to_transform_list(text: String) -> Array[Transform]: text = text.strip_edges() - if text.is_empty(): + if text.is_empty() or not text.ends_with(")"): return [] var output: Array[Transform] = [] var transforms := text.split(")", false) - for transform in transforms: + for idx in transforms.size(): + var transform := transforms[idx] var transform_info := transform.split("(") if transform_info.size() != 2: return [] var transform_params := transform_info[1].strip_edges() - var nums: Array[float] = [] - - # Parse the numbers. - # TODO maybe this can be moved to NumstringParser. - var comma_exhausted := false # Can ignore many whitespaces, but only one comma. - var idx := -1 - while idx < transform_params.length() - 1: - idx += 1 - @warning_ignore("shadowed_global_identifier") - var char := transform_params[idx] - - var start_idx := idx - var end_idx := idx - var number_proceed := true - var passed_decimal_point := false - var exponent_just_passed := true - while number_proceed and idx < transform_params.length(): - if comma_exhausted and not char in " \n\t\r": - comma_exhausted = false - - char = transform_params[idx] - match char: - "0", "1", "2", "3", "4", "5", "6", "7", "8", "9": - idx += 1 - end_idx += 1 - if exponent_just_passed: - exponent_just_passed = false - "-", "+": - if end_idx == start_idx or exponent_just_passed: - end_idx += 1 - idx += 1 - if exponent_just_passed: - exponent_just_passed = false - else: - number_proceed = false - idx -= 1 - ".": - if not passed_decimal_point: - passed_decimal_point = true - end_idx += 1 - idx += 1 - else: - idx -= 1 - number_proceed = false - " ", "\n", "\t", "\r": - if end_idx == start_idx: - idx += 1 - start_idx += 1 - end_idx += 1 - continue - if not transform_params.substr( - start_idx, idx - start_idx).is_valid_float(): - return [] - number_proceed = false - ",": - if comma_exhausted: - return [] - else: - comma_exhausted = true - number_proceed = false - "e", "E": - end_idx += 1 - idx += 1 - exponent_just_passed = true - _: - if not transform_params.substr( - start_idx, end_idx - start_idx).is_valid_float(): - return [] - else: - idx -= 1 - break - nums.append(transform_params.substr(start_idx, end_idx - start_idx).to_float()) + var transform_name := transform_info[0].strip_edges(false, true) + if transform_name.is_empty() or (idx > 0 and not transform_name[0] in ", \t\n\r"): + return [] - match transform_info[0].strip_edges(): + match transform_name.strip_edges(true, false).trim_prefix(",").strip_edges(true, false): "matrix": - if nums.size() == 6: - output.append(Transform.TransformMatrix.new(nums[0], nums[1], - nums[2], nums[3], nums[4], nums[5])) - else: + var result := NumstringParser.text_to_number_arr(transform_params, 0, 6) + if result.is_empty() or result[1] < transform_params.length(): return [] + output.append(Transform.TransformMatrix.new(result[0][0], result[0][1], + result[0][2], result[0][3], result[0][4], result[0][5])) "translate": - if nums.size() == 1: - output.append(Transform.TransformTranslate.new(nums[0], 0.0)) - elif nums.size() == 2: - output.append(Transform.TransformTranslate.new(nums[0], nums[1])) + var result1 := NumstringParser.text_to_number_arr(transform_params, 0, 1) + if result1.is_empty(): + return [] + var result2 := NumstringParser.text_to_number_arr(transform_params, result1[1], 1, true) + if result2.is_empty(): + if result1[1] >= transform_params.length(): + output.append(Transform.TransformTranslate.new(result1[0][0], 0.0)) + else: + return [] + elif result2[1] >= transform_params.length(): + output.append(Transform.TransformTranslate.new(result1[0][0], result2[0][0])) else: return [] "rotate": - if nums.size() == 1: - output.append(Transform.TransformRotate.new(nums[0], 0.0, 0.0)) - elif nums.size() == 3: - output.append(Transform.TransformRotate.new( - nums[0], nums[1], nums[2])) + var result1 := NumstringParser.text_to_number_arr(transform_params, 0, 1) + if result1.is_empty(): + return [] + var result2 := NumstringParser.text_to_number_arr(transform_params, result1[1], 2, true) + if result2.is_empty(): + if result1[1] >= transform_params.length(): + output.append(Transform.TransformRotate.new(result1[0][0], 0.0, 0.0)) + else: + return [] + elif result2[1] >= transform_params.length(): + output.append(Transform.TransformRotate.new(result1[0][0], result2[0][0], result2[0][1])) else: return [] "scale": - if nums.size() == 1: - output.append(Transform.TransformScale.new(nums[0], nums[0])) - elif nums.size() == 2: - output.append(Transform.TransformScale.new(nums[0], nums[1])) + var result1 := NumstringParser.text_to_number_arr(transform_params, 0, 1) + if result1.is_empty(): + return [] + var result2 := NumstringParser.text_to_number_arr(transform_params, result1[1], 1, true) + if result2.is_empty(): + if result1[1] >= transform_params.length(): + output.append(Transform.TransformScale.new(result1[0][0], result1[0][0])) + else: + return [] + elif result2[1] >= transform_params.length(): + output.append(Transform.TransformScale.new(result1[0][0], result2[0][0])) else: return [] "skewX": - if nums.size() == 1: - output.append(Transform.TransformSkewX.new(nums[0])) - else: + var result := NumstringParser.text_to_number_arr(transform_params, 0, 1) + if result.is_empty() or result[1] < transform_params.length(): return [] + output.append(Transform.TransformSkewX.new(result[0][0])) "skewY": - if nums.size() == 1: - output.append(Transform.TransformSkewY.new(nums[0])) - else: + var result := NumstringParser.text_to_number_arr(transform_params, 0, 1) + if result.is_empty() or result[1] < transform_params.length(): return [] + output.append(Transform.TransformSkewY.new(result[0][0])) _: return [] diff --git a/src/data_classes/ColorParser.gd b/src/data_classes/ColorParser.gd index cc2cc5f..a9397d9 100644 --- a/src/data_classes/ColorParser.gd +++ b/src/data_classes/ColorParser.gd @@ -1,4 +1,4 @@ -class_name ColorParser extends RefCounted +@abstract class_name ColorParser static func add_hash_if_hex(color: String) -> String: diff --git a/src/data_classes/DB.gd b/src/data_classes/DB.gd index 08e1ca2..782a4ed 100644 --- a/src/data_classes/DB.gd +++ b/src/data_classes/DB.gd @@ -1,4 +1,4 @@ -class_name DB extends RefCounted +@abstract class_name DB enum AttributeType {NUMERIC, COLOR, LIST, PATHDATA, ENUM, TRANSFORM_LIST, ID, HREF, UNKNOWN} enum PercentageHandling {FRACTION, HORIZONTAL, VERTICAL, NORMALIZED} @@ -43,7 +43,7 @@ const recognized_attributes: Dictionary[String, Array] = { "linearGradient": ["id", "gradientTransform", "gradientUnits", "spreadMethod", "x1", "y1", "x2", "y2"], "radialGradient": ["id", "gradientTransform", "gradientUnits", "spreadMethod", - "cx", "cy", "r"], + "cx", "cy", "r", "fx", "fy"], "circle": ["transform", "opacity", "fill", "fill-opacity", "stroke", "stroke-opacity", "stroke-width", "cx", "cy", "r"], "ellipse": ["transform", "opacity", "fill", "fill-opacity", "stroke", "stroke-opacity", @@ -98,6 +98,8 @@ const _attribute_types: Dictionary[String, AttributeType] = { "r": AttributeType.NUMERIC, "rx": AttributeType.NUMERIC, "ry": AttributeType.NUMERIC, + "fx": AttributeType.NUMERIC, + "fy": AttributeType.NUMERIC, "opacity": AttributeType.NUMERIC, "fill": AttributeType.COLOR, "fill-opacity": AttributeType.NUMERIC, @@ -141,6 +143,8 @@ const attribute_number_range: Dictionary[String, NumberRange] = { "r": NumberRange.POSITIVE, "rx": NumberRange.POSITIVE, "ry": NumberRange.POSITIVE, + "fx": NumberRange.ARBITRARY, + "fy": NumberRange.ARBITRARY, "opacity": NumberRange.UNIT, "fill-opacity": NumberRange.UNIT, "stroke-opacity": NumberRange.UNIT, @@ -200,6 +204,8 @@ attribute_name: String) -> PercentageHandling: "y2": return PercentageHandling.VERTICAL "cx": return PercentageHandling.HORIZONTAL "cy": return PercentageHandling.VERTICAL + "fx": return PercentageHandling.HORIZONTAL + "fy": return PercentageHandling.VERTICAL "r": return PercentageHandling.NORMALIZED _: return PercentageHandling.FRACTION @@ -237,8 +243,3 @@ static func attribute(name: String, value: String) -> Attribute: DB.AttributeType.ID: return AttributeID.new(name, value) DB.AttributeType.HREF: return AttributeHref.new(name, value) _: return Attribute.new(name, value) - - -static func is_element_gradient(checked_element: Element) -> bool: - return checked_element != null and (checked_element is ElementLinearGradient or\ - checked_element is ElementRadialGradient) diff --git a/src/data_classes/Element.gd b/src/data_classes/Element.gd index 554fb7f..97a4c26 100644 --- a/src/data_classes/Element.gd +++ b/src/data_classes/Element.gd @@ -1,5 +1,5 @@ -# An SVG element, standalone () or container (...). -class_name Element extends XNode +# Represents an element, either standalone () or container (...). +@abstract class_name Element extends XNode signal attribute_changed(name: String) signal ancestor_attribute_changed(name: String) @@ -187,9 +187,9 @@ func get_attribute_num(attribute_name: String) -> float: DB.PercentageHandling.NORMALIZED: return 1024 * num else: match percentage_handling: - DB.PercentageHandling.HORIZONTAL: return svg.width * num - DB.PercentageHandling.VERTICAL: return svg.height * num - DB.PercentageHandling.NORMALIZED: return svg.normalized_diagonal * num + DB.PercentageHandling.HORIZONTAL: return svg.viewbox.size.x * num + DB.PercentageHandling.VERTICAL: return svg.viewbox.size.y * num + DB.PercentageHandling.NORMALIZED: return svg.viewbox_normalized_diagonal * num return num func is_attribute_percentage(attribute_name: String) -> bool: diff --git a/src/data_classes/GradientUtils.gd b/src/data_classes/ElementBaseGradient.gd similarity index 57% rename from src/data_classes/GradientUtils.gd rename to src/data_classes/ElementBaseGradient.gd index f340f1f..006579a 100644 --- a/src/data_classes/GradientUtils.gd +++ b/src/data_classes/ElementBaseGradient.gd @@ -1,41 +1,12 @@ -class_name GradientUtils extends RefCounted +@abstract class_name ElementBaseGradient extends Element -static func generate_gradient(element: Element) -> Gradient: - if not (element is ElementLinearGradient or element is ElementRadialGradient): - return null - - var gradient := Gradient.new() - gradient.remove_point(0) - - var current_offset := 0.0 - var is_gradient_empty := true - - for child in element.get_children(): - if not child is ElementStop: - continue - - current_offset = clamp(child.get_attribute_num("offset"), current_offset, 1.0) - gradient.add_point(current_offset, - Color(ColorParser.text_to_color(child.get_attribute_true_color("stop-color")), - child.get_attribute_num("stop-opacity"))) - - if is_gradient_empty: - is_gradient_empty = false - gradient.remove_point(0) - - if is_gradient_empty: - gradient.set_color(0, Color.TRANSPARENT) - - return gradient +const possible_conversions: PackedStringArray = [] -static func get_gradient_warnings(element: Element) -> PackedStringArray: - if not (element is ElementLinearGradient or element is ElementRadialGradient): - return PackedStringArray() +func get_config_warnings() -> PackedStringArray: + var warnings := super() - var warnings := PackedStringArray() - - if not element.has_attribute("id"): + if not has_attribute("id"): warnings.append(Translator.translate("No \"id\" attribute defined.")) var prev_offset := -1.0 @@ -43,7 +14,7 @@ static func get_gradient_warnings(element: Element) -> PackedStringArray: var initial_opacity := -1.0 var has_effective_transition := false - for child in element.get_children(): + for child in get_children(): if not child is ElementStop: continue @@ -77,3 +48,6 @@ static func get_gradient_warnings(element: Element) -> PackedStringArray: warnings.append(Translator.translate("This gradient is a solid color.")) return warnings + + +@abstract func generate_texture() -> SVGTexture diff --git a/src/data_classes/ElementBaseGradient.gd.uid b/src/data_classes/ElementBaseGradient.gd.uid new file mode 100644 index 0000000..9e4a8b8 --- /dev/null +++ b/src/data_classes/ElementBaseGradient.gd.uid @@ -0,0 +1 @@ +uid://cqpplak413bai diff --git a/src/data_classes/ElementCircle.gd b/src/data_classes/ElementCircle.gd index a068f2b..0a45fec 100644 --- a/src/data_classes/ElementCircle.gd +++ b/src/data_classes/ElementCircle.gd @@ -2,7 +2,7 @@ class_name ElementCircle extends Element const name = "circle" -const possible_conversions: Array[String] = ["ellipse", "rect", "path"] +const possible_conversions: PackedStringArray = ["ellipse", "rect", "path"] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: set_attribute("r", 1.0) diff --git a/src/data_classes/ElementEllipse.gd b/src/data_classes/ElementEllipse.gd index 28931ae..dbd47d2 100644 --- a/src/data_classes/ElementEllipse.gd +++ b/src/data_classes/ElementEllipse.gd @@ -2,7 +2,7 @@ class_name ElementEllipse extends Element const name = "ellipse" -const possible_conversions: Array[String] = ["circle", "rect", "path"] +const possible_conversions: PackedStringArray = ["circle", "rect", "path"] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: set_attribute("rx", 1.0) diff --git a/src/data_classes/ElementG.gd b/src/data_classes/ElementG.gd index 06e6ef8..4d2718a 100644 --- a/src/data_classes/ElementG.gd +++ b/src/data_classes/ElementG.gd @@ -2,28 +2,13 @@ class_name ElementG extends Element const name = "g" -const possible_conversions: Array[String] = [] +const possible_conversions: PackedStringArray = [] func _get_own_default(attribute_name: String) -> String: match attribute_name: "opacity": return "1" _: return "" -# TODO: It's not enough to merge up with the bounding boxes of the children. -# If they are transformed it would be wrong. -func get_bounding_box() -> Rect2: - var bounding_box := Rect2() - #var established_bb := false - #for child in get_children(): - #if DB.is_attribute_recognized(child.name, "transform"): - #var cbb: Rect2 = child.get_transformed_bounding_box() - #if not established_bb: - #bounding_box = cbb - #established_bb = true - #else: - #bounding_box = bounding_box.merge(cbb) - return bounding_box - func get_config_warnings() -> PackedStringArray: var warnings := super() if get_child_count() == 0: diff --git a/src/data_classes/ElementLine.gd b/src/data_classes/ElementLine.gd index b60dbe6..028d43e 100644 --- a/src/data_classes/ElementLine.gd +++ b/src/data_classes/ElementLine.gd @@ -2,7 +2,7 @@ class_name ElementLine extends Element const name = "line" -const possible_conversions: Array[String] = ["path", "polyline"] +const possible_conversions: PackedStringArray = ["path", "polyline"] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: if precise_pos != PackedFloat64Array([0.0, 0.0]): diff --git a/src/data_classes/ElementLinearGradient.gd b/src/data_classes/ElementLinearGradient.gd index a1f5b6a..561b7a1 100644 --- a/src/data_classes/ElementLinearGradient.gd +++ b/src/data_classes/ElementLinearGradient.gd @@ -1,8 +1,7 @@ # A element. -class_name ElementLinearGradient extends Element +class_name ElementLinearGradient extends ElementBaseGradient const name = "linearGradient" -const possible_conversions: Array[String] = [] func _get_own_default(attribute_name: String) -> String: match attribute_name: @@ -19,23 +18,53 @@ func get_percentage_handling(attribute_name: String) -> DB.PercentageHandling: else: return super(attribute_name) -func get_config_warnings() -> PackedStringArray: - var warnings := super() - warnings += GradientUtils.get_gradient_warnings(self) - return warnings - -func generate_texture() -> GradientTexture2D: - var texture := GradientTexture2D.new() - texture.gradient = GradientUtils.generate_gradient(self) - texture.fill_from = Vector2(get_attribute_num("x1"), get_attribute_num("y1")) - texture.fill_to = Vector2(get_attribute_num("x2"), get_attribute_num("y2")) +func generate_texture() -> SVGTexture: + var svg_texture_text := """""" + return SVGTexture.create_from_string(svg_texture_text) diff --git a/src/data_classes/ElementPath.gd b/src/data_classes/ElementPath.gd index 89766be..054a07a 100644 --- a/src/data_classes/ElementPath.gd +++ b/src/data_classes/ElementPath.gd @@ -2,7 +2,7 @@ class_name ElementPath extends Element const name = "path" -const possible_conversions: Array[String] = [] +const possible_conversions: PackedStringArray = [] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: if precise_pos != PackedFloat64Array([0.0, 0.0]): diff --git a/src/data_classes/ElementPolygon.gd b/src/data_classes/ElementPolygon.gd index 92193a8..fdc0e9c 100644 --- a/src/data_classes/ElementPolygon.gd +++ b/src/data_classes/ElementPolygon.gd @@ -2,7 +2,7 @@ class_name ElementPolygon extends Element const name = "polygon" -const possible_conversions: Array[String] = ["path", "rect"] +const possible_conversions: PackedStringArray = ["path", "rect"] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: if precise_pos != PackedFloat64Array([0.0, 0.0]): diff --git a/src/data_classes/ElementPolyline.gd b/src/data_classes/ElementPolyline.gd index a75f0f6..97f4d55 100644 --- a/src/data_classes/ElementPolyline.gd +++ b/src/data_classes/ElementPolyline.gd @@ -2,7 +2,7 @@ class_name ElementPolyline extends Element const name = "polyline" -const possible_conversions: Array[String] = ["path", "line"] +const possible_conversions: PackedStringArray = ["path", "line"] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: if precise_pos != PackedFloat64Array([0.0, 0.0]): diff --git a/src/data_classes/ElementRadialGradient.gd b/src/data_classes/ElementRadialGradient.gd index c90f199..b678557 100644 --- a/src/data_classes/ElementRadialGradient.gd +++ b/src/data_classes/ElementRadialGradient.gd @@ -1,42 +1,77 @@ # A element. -class_name ElementRadialGradient extends Element +class_name ElementRadialGradient extends ElementBaseGradient const name = "radialGradient" -const possible_conversions: Array[String] = [] func _get_own_default(attribute_name: String) -> String: match attribute_name: "cx", "cy", "r": return "50%" + "fx": return get_implied_attribute_value("cx") + "fy": return get_implied_attribute_value("cy") "gradientUnits": return "objectBoundingBox" "spreadMethod": return "pad" _: return "" func get_percentage_handling(attribute_name: String) -> DB.PercentageHandling: if get_attribute_value("gradientUnits") in ["objectBoundingBox", ""] and\ - attribute_name in ["cx", "cy", "r"]: + attribute_name in ["cx", "cy", "r", "fx", "fy"]: return DB.PercentageHandling.FRACTION else: return super(attribute_name) -func get_config_warnings() -> PackedStringArray: - var warnings := super() - warnings += GradientUtils.get_gradient_warnings(self) - return warnings - -func generate_texture() -> GradientTexture2D: - var texture := GradientTexture2D.new() - texture.gradient = GradientUtils.generate_gradient(self) - texture.fill = GradientTexture2D.FILL_RADIAL - texture.fill_from = Vector2(get_attribute_num("cx"), get_attribute_num("cy")) - texture.fill_to = Vector2(get_attribute_num("cx") + get_attribute_num("r"), - get_attribute_num("cy")) - - if get_attribute_value("gradientUnits") == "userSpaceOnUse": - texture.fill_from /= svg.get_size() - texture.fill_to /= svg.get_size() - - match get_attribute_value("spreadMethod"): - "repeat": texture.repeat = GradientTexture2D.REPEAT - "reflect": texture.repeat = GradientTexture2D.REPEAT_MIRROR - - return texture +func generate_texture() -> SVGTexture: + var svg_texture_text := """""" + return SVGTexture.create_from_string(svg_texture_text) diff --git a/src/data_classes/ElementRect.gd b/src/data_classes/ElementRect.gd index 95cd554..883825b 100644 --- a/src/data_classes/ElementRect.gd +++ b/src/data_classes/ElementRect.gd @@ -2,7 +2,7 @@ class_name ElementRect extends Element const name = "rect" -const possible_conversions: Array[String] = ["circle", "ellipse", "polygon", "path"] +const possible_conversions: PackedStringArray = ["circle", "ellipse", "polygon", "path"] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: set_attribute("width", 1.0) diff --git a/src/data_classes/ElementSVG.gd b/src/data_classes/ElementSVG.gd index 25dde34..2ee5fe4 100644 --- a/src/data_classes/ElementSVG.gd +++ b/src/data_classes/ElementSVG.gd @@ -3,8 +3,8 @@ class_name ElementSVG extends Element var width: float var height: float -var normalized_diagonal: float var viewbox: Rect2 +var viewbox_normalized_diagonal: float var canvas_transform: Transform2D # Automatically updated with the precise transform. var canvas_precise_transform: PackedFloat64Array: @@ -13,7 +13,7 @@ var canvas_precise_transform: PackedFloat64Array: canvas_transform = Utils64Bit.get_transform(canvas_precise_transform) const name = "svg" -const possible_conversions: Array[String] = [] +const possible_conversions: PackedStringArray = [] func _init() -> void: canvas_precise_transform = PackedFloat64Array([1.0, 0.0, 0.0, 1.0, 0.0, 0.0]) @@ -37,8 +37,8 @@ func update_cache() -> void: if not has_valid_viewbox and not (has_valid_width and has_valid_height): width = get_attribute_num("width") if has_valid_width else 0.0 height = get_attribute_num("height") if has_valid_height else 0.0 - normalized_diagonal = Vector2(width, height).length() / sqrt(2) viewbox = Rect2(0, 0, 0, 0) + viewbox_normalized_diagonal = 0.0 canvas_precise_transform = PackedFloat64Array([1.0, 0.0, 0.0, 1.0, 0.0, 0.0]) return @@ -78,7 +78,7 @@ func update_cache() -> void: (width - height_ratio * viewbox.size.x) / 2, -viewbox.position.y * height_ratio]) if not canvas_transform.is_finite(): canvas_precise_transform = PackedFloat64Array([1.0, 0.0, 0.0, 1.0, 0.0, 0.0]) - normalized_diagonal = Vector2(width, height).length() / sqrt(2) + viewbox_normalized_diagonal = Vector2(viewbox.size.x, viewbox.size.y).length() / sqrt(2) func canvas_to_world(pos: Vector2) -> Vector2: diff --git a/src/data_classes/ElementStop.gd b/src/data_classes/ElementStop.gd index 18c7eb2..8723fe6 100644 --- a/src/data_classes/ElementStop.gd +++ b/src/data_classes/ElementStop.gd @@ -2,7 +2,7 @@ class_name ElementStop extends Element const name = "stop" -const possible_conversions: Array[String] = [] +const possible_conversions: PackedStringArray = [] func _get_own_default(attribute_name: String) -> String: match attribute_name: diff --git a/src/data_classes/ElementUnrecognized.gd b/src/data_classes/ElementUnrecognized.gd index 5c3ad23..48010c6 100644 --- a/src/data_classes/ElementUnrecognized.gd +++ b/src/data_classes/ElementUnrecognized.gd @@ -2,7 +2,7 @@ class_name ElementUnrecognized extends Element var name: String -const possible_conversions: Array[String] = [] +const possible_conversions: PackedStringArray = [] func _init(new_name: String) -> void: name = new_name diff --git a/src/data_classes/ElementUse.gd b/src/data_classes/ElementUse.gd index f8127e4..661077b 100644 --- a/src/data_classes/ElementUse.gd +++ b/src/data_classes/ElementUse.gd @@ -2,16 +2,13 @@ class_name ElementUse extends Element const name = "use" -const possible_conversions: Array[String] = [] +const possible_conversions: PackedStringArray = [] func user_setup(precise_pos := PackedFloat64Array([0.0, 0.0])) -> void: if precise_pos != PackedFloat64Array([0.0, 0.0]): set_attribute("x", precise_pos[0]) set_attribute("y", precise_pos[1]) -func get_bounding_box() -> Rect2: - return Rect2() - func _get_own_default(attribute_name: String) -> String: match attribute_name: "x", "y": return "0" diff --git a/src/data_classes/GradientUtils.gd.uid b/src/data_classes/GradientUtils.gd.uid deleted file mode 100644 index a0160a4..0000000 --- a/src/data_classes/GradientUtils.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bcprbwp8itu4 diff --git a/src/data_classes/ListParser.gd b/src/data_classes/ListParser.gd index d59dd93..f791182 100644 --- a/src/data_classes/ListParser.gd +++ b/src/data_classes/ListParser.gd @@ -1,5 +1,5 @@ # A parser to turn AttributeList's list into other useful things. -class_name ListParser extends RefCounted +@abstract class_name ListParser static func rect_to_list(rect: Rect2) -> PackedFloat64Array: return PackedFloat64Array([rect.position.x, rect.position.y, rect.size.x, rect.size.y]) diff --git a/src/data_classes/NumberParser.gd b/src/data_classes/NumberParser.gd index 43cdbf3..c4f75c7 100644 --- a/src/data_classes/NumberParser.gd +++ b/src/data_classes/NumberParser.gd @@ -1,5 +1,5 @@ # Common parser for AttributeNumeric and AttributeList -class_name NumberParser extends RefCounted +@abstract class_name NumberParser static func num_to_text(number: float, formatter: Formatter) -> String: if not is_finite(number): diff --git a/src/data_classes/NumstringParser.gd b/src/data_classes/NumstringParser.gd index 90f6bab..2354b0e 100644 --- a/src/data_classes/NumstringParser.gd +++ b/src/data_classes/NumstringParser.gd @@ -1,5 +1,7 @@ -# A parser for compressed number arrays, used in TransformListParser and PathDataParser. -class_name NumstringParser extends RefCounted +# A parser for compressed number arrays, used in pathdata and transform lists. +# Also for general utility around parsing numeric text. +# This parser has situational configuration options, so it isn't abstract. +class_name NumstringParser var compress_numbers: bool var minimize_spacing: bool @@ -57,3 +59,215 @@ static func evaluate(text: String) -> float: if not expr.has_execute_failed() and typeof(result) in [TYPE_FLOAT, TYPE_INT]: return result return NAN + + +enum NumberJumbleParseState { + OUTSIDE_NUMBER_COMMA_FORBIDDEN, + OUTSIDE_NUMBER_COMMA_ALLOWED, + DIRECTLY_AFTER_SIGN, + INSIDE_NUMBER, + INSIDE_NUMBER_DIRECTLY_AFTER_NON_LEADING_FLOATING_POINT, + INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT, + INSIDE_NUMBER_INDIRECTLY_AFTER_FLOATING_POINT, + INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT, + INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT_SIGN, + INSIDE_NUMBER_INDIRECTLY_AFTER_EXPONENT +} + +# Returns an array with a PackedFloat64Array and an int for the final current index. +# Returns an empty array if there's a parsing error. +# TODO In 4.5, I had to avoid the match keyword in this parser for performance: #75682. +static func text_to_number_arr(text: String, current_index: int, expected_count: int, +allow_starting_comma := false) -> Array: + var text_length := text.length() + if current_index >= text_length: + return [] + + var state := NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_ALLOWED if \ + allow_starting_comma else NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_FORBIDDEN + var current_number_start_idx := -1 + var parsed_numbers := PackedFloat64Array() + while true: + var unrecognized_symbol := false + if current_index == text_length: + unrecognized_symbol = true + else: + var current_char := text[current_index] + if state == NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_FORBIDDEN: + if current_char in " \t\n\r": + pass + elif current_char in "1234567890": + state = NumberJumbleParseState.INSIDE_NUMBER + current_number_start_idx = current_index + elif current_char in "-+": + state = NumberJumbleParseState.DIRECTLY_AFTER_SIGN + current_number_start_idx = current_index + elif current_char == ".": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT + current_number_start_idx = current_index + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_ALLOWED: + if current_char in " \t\n\r": + pass + elif current_char == ",": + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_FORBIDDEN + elif current_char in "1234567890": + state = NumberJumbleParseState.INSIDE_NUMBER + current_number_start_idx = current_index + elif current_char in "-+": + state = NumberJumbleParseState.DIRECTLY_AFTER_SIGN + current_number_start_idx = current_index + elif current_char == ".": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT + current_number_start_idx = current_index + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.DIRECTLY_AFTER_SIGN: + if current_char in "1234567890": + state = NumberJumbleParseState.INSIDE_NUMBER + elif current_char == ".": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.INSIDE_NUMBER: + if current_char in "1234567890": + pass + elif current_char in " \t\n\r": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_ALLOWED + current_number_start_idx = -1 + elif current_char == ",": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_FORBIDDEN + current_number_start_idx = -1 + elif current_char in "-+": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.DIRECTLY_AFTER_SIGN + current_number_start_idx = current_index + elif current_char == ".": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_NON_LEADING_FLOATING_POINT + elif current_char in "eE": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_NON_LEADING_FLOATING_POINT: + if current_char == ".": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT + current_number_start_idx = current_index + elif current_char in "-+": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.DIRECTLY_AFTER_SIGN + current_number_start_idx = current_index + elif current_char in "1234567890": + state = NumberJumbleParseState.INSIDE_NUMBER_INDIRECTLY_AFTER_FLOATING_POINT + elif current_char in " \t\n\r": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_ALLOWED + current_number_start_idx = -1 + elif current_char == ",": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_FORBIDDEN + current_number_start_idx = -1 + elif current_char == "eE": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT: + if current_char in "1234567890": + state = NumberJumbleParseState.INSIDE_NUMBER_INDIRECTLY_AFTER_FLOATING_POINT + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.INSIDE_NUMBER_INDIRECTLY_AFTER_FLOATING_POINT: + if current_char in "1234567890": + pass + elif current_char == ".": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT + current_number_start_idx = current_index + elif current_char in " \t\n\r": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_ALLOWED + current_number_start_idx = -1 + elif current_char == ",": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_FORBIDDEN + current_number_start_idx = -1 + elif current_char in "-+": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.DIRECTLY_AFTER_SIGN + current_number_start_idx = current_index + elif current_char in "eE": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT: + if current_char in "1234567890": + state = NumberJumbleParseState.INSIDE_NUMBER_INDIRECTLY_AFTER_EXPONENT + elif current_char in "-+": + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT_SIGN + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT_SIGN: + if current_char in "1234567890": + state = NumberJumbleParseState.INSIDE_NUMBER_INDIRECTLY_AFTER_EXPONENT + else: + unrecognized_symbol = true + elif state == NumberJumbleParseState.INSIDE_NUMBER_INDIRECTLY_AFTER_EXPONENT: + if current_char in "01234567890": + pass + elif current_char == ".": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT + current_number_start_idx = current_index + elif current_char in " \t\n\r": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_ALLOWED + current_number_start_idx = -1 + elif current_char == ",": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.OUTSIDE_NUMBER_COMMA_FORBIDDEN + current_number_start_idx = -1 + elif current_char in "-+": + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + state = NumberJumbleParseState.DIRECTLY_AFTER_SIGN + current_number_start_idx = current_index + else: + unrecognized_symbol = true + + if unrecognized_symbol: + if current_number_start_idx >= 0 and parsed_numbers.size() == expected_count - 1 and\ + not state in [NumberJumbleParseState.DIRECTLY_AFTER_SIGN, + NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT, + NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_LEADING_FLOATING_POINT, + NumberJumbleParseState.INSIDE_NUMBER_DIRECTLY_AFTER_EXPONENT_SIGN]: + parsed_numbers.append(text.substr(current_number_start_idx, + current_index - current_number_start_idx).to_float()) + return [parsed_numbers, current_index] + elif (current_number_start_idx < 0 and parsed_numbers.size() == expected_count): + return [parsed_numbers, current_index] + else: + return [] + + if parsed_numbers.size() == expected_count: + return [parsed_numbers, current_index] + + current_index += 1 + + return [] diff --git a/src/data_classes/PathCommand.gd b/src/data_classes/PathCommand.gd index f15b0c6..08517d9 100644 --- a/src/data_classes/PathCommand.gd +++ b/src/data_classes/PathCommand.gd @@ -1,5 +1,5 @@ # A native class that represents a path command and its parameters. -class_name PathCommand extends RefCounted +@abstract class_name PathCommand const translation_dict: Dictionary[String, GDScript] = { "M": MoveCommand, "L": LineCommand, "H": HorizontalLineCommand, diff --git a/src/data_classes/SVGParser.gd b/src/data_classes/SVGParser.gd index 01dad10..d14c187 100644 --- a/src/data_classes/SVGParser.gd +++ b/src/data_classes/SVGParser.gd @@ -1,4 +1,4 @@ -class_name SVGParser extends RefCounted +@abstract class_name SVGParser # For checking if an SVG is empty. If the text errors out, it's as if the SVG is empty. static func text_check_is_root_empty(text: String) -> bool: diff --git a/src/data_classes/Transform.gd b/src/data_classes/Transform.gd index 9b49e4a..7fbf087 100644 --- a/src/data_classes/Transform.gd +++ b/src/data_classes/Transform.gd @@ -1,4 +1,4 @@ -class_name Transform extends RefCounted +@abstract class_name Transform class TransformMatrix extends Transform: var x1: float diff --git a/src/data_classes/XNode.gd b/src/data_classes/XNode.gd index aa70541..461114d 100644 --- a/src/data_classes/XNode.gd +++ b/src/data_classes/XNode.gd @@ -1,5 +1,5 @@ # Abstract base class for XML nodes. -class_name XNode extends RefCounted +@abstract class_name XNode var xid: PackedInt32Array diff --git a/src/shaders/animated_stroke_static.gdshader b/src/shaders/animated_stroke_static.gdshader new file mode 100644 index 0000000..8b98f30 --- /dev/null +++ b/src/shaders/animated_stroke_static.gdshader @@ -0,0 +1,21 @@ +// Same as animated_stroke.gdshader, but without speed. +// Seemed like a good way to avoid GPU strain. +shader_type canvas_item; + +uniform vec4 ant_color_1: source_color = vec4(1.0, 1.0, 1.0, 1.0); +uniform vec4 ant_color_2: source_color = vec4(0.0, 0.0, 0.0, 1.0); +uniform float ant_width = 2.0; +uniform float ant_length = 10.0; + +void fragment() { + vec2 uv = UV; + vec2 fw = fwidth(uv); + float adjusted_ant_width = min(ant_width, min(0.5 / fw.x, 0.5 / fw.y)); + vec2 aw = fw * adjusted_ant_width; + + vec2 cond = (sign(abs(uv - 0.5) - 0.5 + aw) + 1.0) * 0.5 * ceil(((sign(uv.yx - aw.yx) + 1.0) * 0.5 * (sign(uv - 0.5) * vec2(0.5, -0.5) + 0.5) * 0.5 + (sign(1.0 - aw.yx - uv.yx) + 1.0) * 0.5 * (sign(uv - 0.5) * vec2(-0.5, 0.5)+ 0.5) * 0.5)); + float dir = dot(vec2(cond.y, -cond.x), sign(uv.yx - 0.5) * uv / aw); + float ant_type = round(fract((dir * adjusted_ant_width) * 0.5 / ant_length)); + vec4 ant_color = mix(ant_color_1, ant_color_2, ant_type); + COLOR = (cond.x + cond.y) * ant_color; +} diff --git a/src/shaders/animated_stroke_static.gdshader.uid b/src/shaders/animated_stroke_static.gdshader.uid new file mode 100644 index 0000000..d804321 --- /dev/null +++ b/src/shaders/animated_stroke_static.gdshader.uid @@ -0,0 +1 @@ +uid://powapyoj7i5p diff --git a/src/ui_parts/about_menu.gd b/src/ui_parts/about_menu.gd index b4f5f95..1fd3d9c 100644 --- a/src/ui_parts/about_menu.gd +++ b/src/ui_parts/about_menu.gd @@ -131,7 +131,8 @@ func _on_tab_changed(idx: int) -> void: license_texts_label.text = "Licenses" for label: Label in [godsvg_parts_label, godot_parts_label, license_texts_label]: label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - label.add_theme_font_size_override("font_size", 16) + label.theme_type_variation = "TitleLabel" + label.add_theme_font_size_override("font_size", 17) %GodSVGParts.add_child(godsvg_parts_label) %GodotParts.add_child(godot_parts_label) %LicenseTexts.add_child(license_texts_label) diff --git a/src/ui_parts/about_menu.tscn b/src/ui_parts/about_menu.tscn index ff55ddc..7c77073 100644 --- a/src/ui_parts/about_menu.tscn +++ b/src/ui_parts/about_menu.tscn @@ -34,10 +34,12 @@ layout_mode = 2 [node name="VersionLabel" type="Label" parent="VBoxContainer/HBoxContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 [node name="CopyLabel" type="Label" parent="VBoxContainer/HBoxContainer/VBoxContainer"] layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_constants/line_spacing = 0 theme_override_font_sizes/font_size = 12 text = "© 2025 Anish Mishra @@ -70,6 +72,7 @@ theme_override_constants/separation = 8 unique_name_in_owner = true custom_minimum_size = Vector2(0, 50) layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 vertical_alignment = 1 @@ -77,6 +80,7 @@ vertical_alignment = 1 [node name="DevelopersLabel" type="Label" parent="VBoxContainer/TabContainer/Authors/MarginContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 @@ -89,6 +93,7 @@ columns = 2 [node name="TranslatorsLabel" type="Label" parent="VBoxContainer/TabContainer/Authors/MarginContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 @@ -122,6 +127,7 @@ theme_override_constants/separation = 6 [node name="Label" type="Label" parent="VBoxContainer/TabContainer/Donors/MarginContainer/VBoxContainer/DiamondDonors"] layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 @@ -139,6 +145,7 @@ theme_override_constants/separation = 6 [node name="Label" type="Label" parent="VBoxContainer/TabContainer/Donors/MarginContainer/VBoxContainer/GoldenDonors"] layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 @@ -155,6 +162,7 @@ theme_override_constants/separation = 6 [node name="Label" type="Label" parent="VBoxContainer/TabContainer/Donors/MarginContainer/VBoxContainer/Donors"] layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 @@ -172,6 +180,7 @@ theme_override_constants/separation = 6 [node name="Label" type="Label" parent="VBoxContainer/TabContainer/Donors/MarginContainer/VBoxContainer/PastDiamondDonors"] layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 @@ -189,6 +198,7 @@ theme_override_constants/separation = 6 [node name="Label" type="Label" parent="VBoxContainer/TabContainer/Donors/MarginContainer/VBoxContainer/PastGoldenDonors"] layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 @@ -206,6 +216,7 @@ theme_override_constants/separation = 6 [node name="Label" type="Label" parent="VBoxContainer/TabContainer/Donors/MarginContainer/VBoxContainer/PastDonors"] layout_mode = 2 +theme_type_variation = &"TitleLabel" theme_override_font_sizes/font_size = 16 horizontal_alignment = 1 diff --git a/src/ui_parts/code_editor.gd b/src/ui_parts/code_editor.gd index fb38b6c..de2634d 100644 --- a/src/ui_parts/code_editor.gd +++ b/src/ui_parts/code_editor.gd @@ -7,8 +7,8 @@ extends VBoxContainer @onready var options_button: Button = %MetaActions/OptionsButton func _ready() -> void: - Configs.theme_changed.connect(setup_theme) - setup_theme() + Configs.theme_changed.connect(update_theme) + update_theme() State.parsing_finished.connect(update_error) Configs.highlighting_colors_changed.connect(update_syntax_highlighter) update_syntax_highlighter() @@ -26,15 +26,15 @@ func update_error(err_id: SVGParser.ParseError) -> void: if err_id == SVGParser.ParseError.OK: if error_bar.visible: error_bar.hide() - setup_theme() + update_theme() else: # When the error is shown, the code editor's theme is changed to match up. if not error_bar.visible: error_bar.show() error_label.text = SVGParser.get_error_string(err_id) - setup_theme() + update_theme() -func setup_theme() -> void: +func update_theme() -> void: # Set up the code edit. code_edit.begin_bulk_theme_override() const CONST_ARR_1: PackedStringArray = ["normal", "focus", "hover"] @@ -43,6 +43,7 @@ func setup_theme() -> void: stylebox.corner_radius_top_right = 0 stylebox.corner_radius_top_left = 0 stylebox.border_width_top = 2 + stylebox.bg_color = ThemeUtils.line_edit_inner_color.lerp(ThemeUtils.extreme_theme_color, 0.1) if error_bar.visible: stylebox.corner_radius_bottom_right = 0 stylebox.corner_radius_bottom_left = 0 @@ -71,7 +72,7 @@ func setup_theme() -> void: var panel_stylebox := get_theme_stylebox("panel", "PanelContainer") # Set up the top panel. var top_stylebox := panel_stylebox.duplicate() - top_stylebox.border_color = code_edit.get_theme_stylebox("normal").border_color + top_stylebox.border_color = ThemeUtils.subtle_panel_border_color top_stylebox.border_width_bottom = 0 top_stylebox.corner_radius_bottom_right = 0 top_stylebox.corner_radius_bottom_left = 0 @@ -82,7 +83,7 @@ func setup_theme() -> void: panel_container.add_theme_stylebox_override("panel", top_stylebox) # Set up the bottom panel. var bottom_stylebox := panel_stylebox.duplicate() - bottom_stylebox.border_color = code_edit.get_theme_stylebox("normal").border_color + bottom_stylebox.border_color = ThemeUtils.subtle_panel_border_color bottom_stylebox.corner_radius_top_right = 0 bottom_stylebox.corner_radius_top_left = 0 bottom_stylebox.content_margin_left = 10.0 diff --git a/src/ui_parts/display.gd b/src/ui_parts/display.gd index 355f31d..be270e8 100644 --- a/src/ui_parts/display.gd +++ b/src/ui_parts/display.gd @@ -44,7 +44,7 @@ func update_translations() -> void: func update_theme() -> void: var toolbar_stylebox := StyleBoxFlat.new() - toolbar_stylebox.bg_color = ThemeUtils.overlay_panel_inner_color.lerp(Color.WHITE, 0.01) + toolbar_stylebox.bg_color = ThemeUtils.soft_base_color toolbar_stylebox.set_content_margin_all(4) toolbar.add_theme_stylebox_override("panel", toolbar_stylebox) @@ -54,7 +54,7 @@ func update_theme() -> void: frame.border_width_top = 2 else: frame.border_width_left = 2 - frame.border_color = ThemeUtils.connected_button_border_color_pressed + frame.border_color = ThemeUtils.selected_tab_color.lerp(ThemeUtils.max_contrast_color, 0.16) frame.set_content_margin_all(2.0) viewport_panel.add_theme_stylebox_override("panel", frame) @@ -152,6 +152,8 @@ func _update_input_debug(event: InputEvent) -> void: if debug_container.visible and event.is_pressed(): var new_text := input_debug_label.text var event_text := event.as_text() + if event is InputEventMouse: + event_text += " (" + String.num(event.position.x, 2) + ", " + String.num(event.position.y, 2) + ")" if event_text == last_event_text: last_event_repeat_count += 1 new_text = new_text.left(new_text.rfind("\n", new_text.length() - 2) + 1) diff --git a/src/ui_parts/display_texture.gd b/src/ui_parts/display_texture.gd index de1e769..2649c59 100644 --- a/src/ui_parts/display_texture.gd +++ b/src/ui_parts/display_texture.gd @@ -44,9 +44,6 @@ func _update() -> void: var svg_text := SVGParser.root_cutout_to_text(State.root_element, display_rect.size.x, display_rect.size.y, Rect2(State.root_element.world_to_canvas(display_rect.position), display_rect.size / State.root_element.canvas_transform.get_scale())) - var img := Image.new() - var err := img.load_svg_from_string(svg_text, image_zoom) - if err == OK: - Utils.set_control_position_fixed(self, display_rect.position) - set_deferred("size", display_rect.size) - texture = ImageTexture.create_from_image(img) + Utils.set_control_position_fixed(self, display_rect.position) + set_deferred("size", display_rect.size) + texture = SVGTexture.create_from_string(svg_text, image_zoom) diff --git a/src/ui_parts/donate_menu.gd b/src/ui_parts/donate_menu.gd index 37e41db..0298736 100644 --- a/src/ui_parts/donate_menu.gd +++ b/src/ui_parts/donate_menu.gd @@ -17,6 +17,13 @@ var current_link := Link.NONE @onready var title_label: Label = %TitleLabel func _ready() -> void: + for button: Button in [github_link, ko_fi_link, patreon_link]: + button.begin_bulk_theme_override() + button.add_theme_color_override("icon_normal_color", Color.WHITE) + button.add_theme_color_override("icon_hover_color", Color.WHITE) + button.add_theme_color_override("icon_pressed_color", Color.WHITE) + button.end_bulk_theme_override() + title_label.text = Translator.translate("Links to donation platforms") close_button.text = Translator.translate("Cancel") close_button.pressed.connect(queue_free) @@ -54,7 +61,7 @@ func set_link(new_link: Link) -> void: current_link = new_link if new_link == Link.NONE: clarifications.clear() - clarifications.push_color(ThemeUtils.common_subtle_text_color) + clarifications.push_color(ThemeUtils.subtle_text_color) clarifications.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER clarifications.add_text("\nHover a platform for details.") return @@ -64,7 +71,7 @@ func set_link(new_link: Link) -> void: var cons: PackedStringArray match new_link: Link.GITHUB: - title = "Guthub Sponsors" + title = "Github Sponsors" pros = PackedStringArray(["Low extra fees", "Can donate an arbitrary amount", "Includes all perks"]) cons = PackedStringArray() diff --git a/src/ui_parts/donate_menu.tscn b/src/ui_parts/donate_menu.tscn index 463c1aa..3166555 100644 --- a/src/ui_parts/donate_menu.tscn +++ b/src/ui_parts/donate_menu.tscn @@ -63,6 +63,9 @@ focus_mode = 0 mouse_filter = 1 mouse_default_cursor_shape = 2 theme_type_variation = &"TranslucentButton" +theme_override_colors/icon_normal_color = Color(1, 1, 1, 1) +theme_override_colors/icon_pressed_color = Color(1, 1, 1, 1) +theme_override_colors/icon_hover_color = Color(1, 1, 1, 1) icon = ExtResource("3_5q1ti") expand_icon = true @@ -73,6 +76,9 @@ focus_mode = 0 mouse_filter = 1 mouse_default_cursor_shape = 2 theme_type_variation = &"TranslucentButton" +theme_override_colors/icon_normal_color = Color(1, 1, 1, 1) +theme_override_colors/icon_pressed_color = Color(1, 1, 1, 1) +theme_override_colors/icon_hover_color = Color(1, 1, 1, 1) icon = ExtResource("4_0irlu") expand_icon = true diff --git a/src/ui_parts/export_menu.gd b/src/ui_parts/export_menu.gd index 51081df..4472b43 100644 --- a/src/ui_parts/export_menu.gd +++ b/src/ui_parts/export_menu.gd @@ -29,6 +29,7 @@ var dimensions := Vector2.ZERO func _ready() -> void: + final_size_label.add_theme_color_override("font_color", ThemeUtils.subtle_text_color) cancel_button.pressed.connect(queue_free) export_button.pressed.connect(_on_export_button_pressed) scale_edit.value_changed.connect(_on_scale_edit_value_changed) @@ -52,15 +53,16 @@ func _ready() -> void: export_data.changed.connect(update) # Setup the warning for when the image is too big to have a preview. - var scaling_factor: float = texture_preview.MAX_IMAGE_DIMENSION / bigger_dimension + var scaling_factor := texture_preview.MAX_IMAGE_DIMENSION / bigger_dimension info_tooltip.tooltip_text = Translator.translate( "Preview image size is limited to {dimensions}").format( {"dimensions": get_dimensions_text(Vector2( maxf(dimensions.x * scaling_factor, 1.0), maxf(dimensions.y * scaling_factor, 1.0)), true)}) + info_tooltip.modulate = ThemeUtils.info_icon_color if Configs.savedata.get_active_tab().svg_file_path.is_empty(): - file_title.add_theme_color_override("font_color", ThemeUtils.common_subtle_text_color) + file_title.add_theme_color_override("font_color", ThemeUtils.subtle_text_color) file_title.text = Configs.savedata.get_active_tab().presented_name final_size_label.text = Translator.translate("Size") + ": " +\ diff --git a/src/ui_parts/export_menu.tscn b/src/ui_parts/export_menu.tscn index 6b621dc..e59405e 100644 --- a/src/ui_parts/export_menu.tscn +++ b/src/ui_parts/export_menu.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=7 format=3 uid="uid://c13dadqbljqlu"] +[gd_scene load_steps=6 format=3 uid="uid://c13dadqbljqlu"] [ext_resource type="Script" uid="uid://bouo2y3v0gy4a" path="res://src/ui_parts/export_menu.gd" id="1_objnb"] [ext_resource type="PackedScene" uid="uid://xh26qa68xed4" path="res://src/ui_widgets/preview_rect.tscn" id="2_ewk0a"] [ext_resource type="Texture2D" uid="uid://v0lqyuvo50yq" path="res://assets/icons/Info.svg" id="2_rk3rd"] -[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="5_s3e6m"] [ext_resource type="PackedScene" uid="uid://dbu1lvajypafb" path="res://src/ui_widgets/dropdown.tscn" id="5_y6ex0"] [ext_resource type="PackedScene" uid="uid://dad7fkhmsooc6" path="res://src/ui_widgets/number_edit.tscn" id="6_w1sag"] @@ -34,7 +33,7 @@ theme_override_constants/separation = 8 [node name="TitleLabel" type="Label" parent="MarginContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 -theme_override_font_sizes/font_size = 15 +theme_type_variation = &"TitleLabel" horizontal_alignment = 1 [node name="TitledPanel" type="VBoxContainer" parent="MarginContainer/VBoxContainer"] @@ -61,7 +60,6 @@ unique_name_in_owner = true custom_minimum_size = Vector2(132, 20) layout_mode = 2 size_flags_horizontal = 3 -theme_override_colors/font_color = Color(0.866667, 0.866667, 0.866667, 1) horizontal_alignment = 1 vertical_alignment = 1 text_overrun_behavior = 3 @@ -92,7 +90,6 @@ theme_override_constants/separation = 12 [node name="DimensionsLabel" type="Label" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 -theme_override_colors/font_color = Color(0.866667, 0.866667, 0.866667, 1) horizontal_alignment = 1 [node name="CenterContainer" type="MarginContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer"] @@ -128,8 +125,6 @@ editing_enabled = true [node name="FinalSizeLabel" type="Label" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 -theme_override_colors/font_color = Color(0.666667, 0.666667, 0.666667, 1) -theme_override_fonts/font = ExtResource("5_s3e6m") theme_override_font_sizes/font_size = 12 [node name="QualityRelatedContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer"] @@ -174,7 +169,7 @@ theme_override_constants/separation = 6 [node name="LeftPanel" type="PanelContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer/SizeContainer/HBoxContainer"] layout_mode = 2 -theme_type_variation = &"LightPanel" +theme_type_variation = &"ContrastFlatPanel" [node name="ScaleContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer/SizeContainer/HBoxContainer/LeftPanel"] unique_name_in_owner = true @@ -198,7 +193,7 @@ allow_higher = false [node name="RightPanel" type="PanelContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer/SizeContainer/HBoxContainer"] layout_mode = 2 -theme_type_variation = &"LightPanel" +theme_type_variation = &"ContrastFlatPanel" [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer/SizeContainer/HBoxContainer/RightPanel"] layout_mode = 2 diff --git a/src/ui_parts/global_actions.gd b/src/ui_parts/global_actions.gd index 16d3042..f4d861c 100644 --- a/src/ui_parts/global_actions.gd +++ b/src/ui_parts/global_actions.gd @@ -14,24 +14,27 @@ func update_translation() -> void: func _ready() -> void: State.svg_changed.connect(update_size_button) update_size_button() + Configs.theme_changed.connect(update_theme) Configs.basic_colors_changed.connect(update_size_button_colors) + update_theme() Configs.language_changed.connect(update_translation) update_translation() - - # Fix the size button sizing. + more_options.pressed.connect(_on_more_options_pressed) + size_button.pressed.connect(_on_size_button_pressed) + layout_button.pressed.connect(_on_layout_button_pressed) + + +func update_theme() -> void: size_button.begin_bulk_theme_override() const CONST_ARR: PackedStringArray = ["normal", "focus", "hover", "disabled"] for theme_type in CONST_ARR: + size_button.remove_theme_stylebox_override(theme_type) var stylebox := size_button.get_theme_stylebox(theme_type).duplicate() stylebox.content_margin_bottom = 0.0 stylebox.content_margin_top = 0.0 size_button.add_theme_stylebox_override(theme_type, stylebox) size_button.end_bulk_theme_override() - - more_options.pressed.connect(_on_more_options_pressed) - size_button.pressed.connect(_on_size_button_pressed) - layout_button.pressed.connect(_on_layout_button_pressed) - + update_size_button_colors() func _on_size_button_pressed() -> void: var btn_array: Array[Button] = [ @@ -43,7 +46,7 @@ func _on_size_button_pressed() -> void: func _on_more_options_pressed() -> void: var can_show_savedata_folder := DisplayServer.has_feature( - DisplayServer.FEATURE_NATIVE_DIALOG_FILE) + DisplayServer.FEATURE_NATIVE_DIALOG_FILE_EXTRA) var buttons_arr: Array[Button] = [] buttons_arr.append(ContextPopup.create_shortcut_button("check_updates")) @@ -89,7 +92,7 @@ func update_size_button_colors() -> void: "font_pressed_color"] for theme_type in CONST_ARR: size_button.add_theme_color_override(theme_type, - Configs.savedata.basic_color_warning.lerp(Color.WHITE, 0.5)) + Configs.savedata.basic_color_warning.lerp(ThemeUtils.max_contrast_color, 0.4)) size_button.end_bulk_theme_override() func _on_layout_button_pressed() -> void: diff --git a/src/ui_parts/good_file_dialog.gd b/src/ui_parts/good_file_dialog.gd index 8272a7a..dedf846 100644 --- a/src/ui_parts/good_file_dialog.gd +++ b/src/ui_parts/good_file_dialog.gd @@ -21,7 +21,7 @@ var mode: FileMode var current_dir := "" var extensions := PackedStringArray() -var item_height := 16 +var item_height := 16.0 var search_text := "" var default_saved_file := "" # The file you opened this dialog with. @@ -110,9 +110,10 @@ func _ready() -> void: if mode == FileMode.MULTI_SELECT: file_list.select_mode = ItemList.SELECT_MULTI - var extension_panel_stylebox := extension_panel.get_theme_stylebox("panel") + var extension_panel_stylebox := extension_panel.get_theme_stylebox("panel").duplicate() extension_panel_stylebox.content_margin_top -= 4.0 extension_panel.add_theme_stylebox_override("panel", extension_panel_stylebox) + extension_label.add_theme_color_override("font_color", ThemeUtils.dim_text_color) if Configs.savedata.file_dialog_show_hidden: show_hidden_button.set_pressed_no_signal(true) folder_up_button.tooltip_text = Translator.translate("Go to parent folder") @@ -175,6 +176,7 @@ func open_dir(dir: String) -> void: continue var item_idx := drives_list.add_item(drive_name, get_drive_icon(drive_path)) + drives_list.set_item_icon_modulate(item_idx, ThemeUtils.tinted_contrast_color) drives_list.set_item_metadata(item_idx, Actions.new(Callable(), open_dir.bind(drive_path))) if current_dir == drive_path: @@ -251,16 +253,15 @@ func _setup_file_images() -> void: file_list.set_item_icon(item_idx, text_file_icon) "svg": # Setup a clean SVG graphic by using the scaling parameter. - var svg_buffer := FileAccess.get_file_as_bytes(current_dir.path_join(file)) + var svg_text := FileAccess.get_file_as_string(current_dir.path_join(file)) var img := Image.new() - img.load_svg_from_buffer(svg_buffer) + img.load_svg_from_string(svg_text) if !is_instance_valid(img) or img.is_empty(): file_list.set_item_icon(item_idx, broken_file_icon) else: - var factor := item_height / maxf(img.get_width(), img.get_height()) - if not is_equal_approx(factor, 1.0): - img.load_svg_from_buffer(svg_buffer, factor) - file_list.set_item_icon(item_idx, ImageTexture.create_from_image(img)) + var svg_texture := SVGTexture.create_from_string(svg_text, + minf(item_height / img.get_width(), item_height / img.get_height())) + file_list.set_item_icon(item_idx, svg_texture) _: var img := Image.load_from_file(current_dir.path_join(file)) if !is_instance_valid(img) or img.is_empty(): diff --git a/src/ui_parts/good_file_dialog.tscn b/src/ui_parts/good_file_dialog.tscn index be1c14b..77c4c33 100644 --- a/src/ui_parts/good_file_dialog.tscn +++ b/src/ui_parts/good_file_dialog.tscn @@ -112,11 +112,10 @@ script = ExtResource("2_52puw") [node name="ExtensionPanel" type="PanelContainer" parent="VBoxContainer/MainContainer/FilePicker/FileContainer"] layout_mode = 2 -theme_type_variation = &"DarkPanel" +theme_type_variation = &"ContrastFlatPanel" [node name="ExtensionLabel" type="Label" parent="VBoxContainer/MainContainer/FilePicker/FileContainer/ExtensionPanel"] layout_mode = 2 -theme_override_colors/font_color = Color(0.866667, 0.933333, 1, 0.533333) [node name="ButtonContainer" type="HBoxContainer" parent="VBoxContainer"] unique_name_in_owner = true diff --git a/src/ui_parts/handles_manager.gd b/src/ui_parts/handles_manager.gd index 10f369f..63fc6a0 100644 --- a/src/ui_parts/handles_manager.gd +++ b/src/ui_parts/handles_manager.gd @@ -7,6 +7,7 @@ var selected_handle_textures: Dictionary[Handle.Display, Texture2D] var hovered_selected_handle_textures: Dictionary[Handle.Display, Texture2D] const stroke_shader = preload("res://src/shaders/animated_stroke.gdshader") +const stroke_shader_static = preload("res://src/shaders/animated_stroke_static.gdshader") const DEFAULT_GRAB_DISTANCE_SQUARED := 81.0 const CONTOUR_WIDTH = 1.0 @@ -23,6 +24,9 @@ var hovered_color: Color var selected_color: Color var hovered_selected_color: Color +# FIXME this shouldn't be needed, but otherwise the shader doesn't want to work. +@onready var animated_stroke_hacky_fix_node := Control.new() + func _exit_tree() -> void: RenderingServer.free_rid(surface) @@ -69,24 +73,40 @@ func render_handle_textures() -> void: img.load_svg_from_string(handle_type_svg % [inside_str, hovered_selected_str]) img.fix_alpha_edges() hovered_selected_handle_textures[handle_type] = ImageTexture.create_from_image(img) + queue_redraw() + +func sync_selection_rectangle_shader() -> void: + var stroke_material := ShaderMaterial.new() + if is_zero_approx(Configs.savedata.selection_rectangle_speed): + stroke_material.shader = stroke_shader_static + else: + stroke_material.shader = stroke_shader + stroke_material.set_shader_parameter("ant_speed", + Configs.savedata.selection_rectangle_speed) + stroke_material.set_shader_parameter("ant_color_1", + Configs.savedata.selection_rectangle_color1) + stroke_material.set_shader_parameter("ant_color_2", + Configs.savedata.selection_rectangle_color2) + stroke_material.set_shader_parameter("ant_width", + Configs.savedata.selection_rectangle_width) + stroke_material.set_shader_parameter("ant_length", + Configs.savedata.selection_rectangle_dash_length) + RenderingServer.canvas_item_set_material(selections_surface, stroke_material.get_rid()) + animated_stroke_hacky_fix_node.material = stroke_material + # If the ant width was changed, the buffer must be updated. queue_redraw() func _ready() -> void: + add_child(animated_stroke_hacky_fix_node, false, InternalMode.INTERNAL_MODE_BACK) + Configs.handle_visuals_changed.connect(render_handle_textures) render_handle_textures() + Configs.selection_rectangle_visuals_changed.connect(sync_selection_rectangle_shader) + sync_selection_rectangle_shader() + RenderingServer.canvas_item_set_parent(surface, get_canvas_item()) RenderingServer.canvas_item_set_parent(selections_surface, get_canvas_item()) - var stroke_material := ShaderMaterial.new() - stroke_material.shader = stroke_shader - stroke_material.set_shader_parameter("ant_color_1", Color(1, 1, 1, 0.8)) - stroke_material.set_shader_parameter("ant_color_2", Color(0, 0, 0, 0.8)) - RenderingServer.canvas_item_set_material(selections_surface, stroke_material.get_rid()) - - # FIXME this shouldn't be needed, but otherwise the shader doesn't want to work. - var c := Control.new() - c.material = stroke_material - add_child(c, false, InternalMode.INTERNAL_MODE_BACK) State.any_attribute_changed.connect(sync_handles) State.xnode_layout_changed.connect(queue_update_handles) @@ -242,7 +262,8 @@ func _draw() -> void: var canvas_transform := State.root_element.canvas_transform var canvas_scale := canvas_transform.get_scale().x var element_scale := element_transform.get_scale() - var grow_amount_unscaled := 4.0 / State.zoom / canvas_scale + var grow_amount_unscaled := (2.0 + Configs.savedata.selection_rectangle_width) /\ + State.zoom / canvas_scale var grow_amount_x := grow_amount_unscaled / element_scale.x var grow_amount_y := grow_amount_unscaled / element_scale.y selection_transforms.append(canvas_transform * element_transform) @@ -285,7 +306,8 @@ func _draw() -> void: var canvas_transform := State.root_element.canvas_transform var canvas_scale := canvas_transform.get_scale().x var element_scale := element_transform.get_scale() - var grow_amount_unscaled := 4.0 / State.zoom / canvas_scale + var grow_amount_unscaled := (2.0 + Configs.savedata.selection_rectangle_width) /\ + State.zoom / canvas_scale var grow_amount_x := grow_amount_unscaled / element_scale.x var grow_amount_y := grow_amount_unscaled / element_scale.y selection_transforms.append(canvas_transform * element_transform) @@ -362,7 +384,8 @@ func _draw() -> void: var canvas_transform := State.root_element.canvas_transform var canvas_scale := canvas_transform.get_scale().x var element_scale := element_transform.get_scale() - var grow_amount_unscaled := 4.0 / State.zoom / canvas_scale + var grow_amount_unscaled := (2.0 + Configs.savedata.selection_rectangle_width) /\ + State.zoom / canvas_scale var grow_amount_x := grow_amount_unscaled / element_scale.x var grow_amount_y := grow_amount_unscaled / element_scale.y selection_transforms.append(canvas_transform * element_transform) @@ -394,7 +417,8 @@ func _draw() -> void: var canvas_transform := State.root_element.canvas_transform var canvas_scale := canvas_transform.get_scale().x var element_scale := element_transform.get_scale() - var grow_amount_unscaled := 4.0 / State.zoom / canvas_scale + var grow_amount_unscaled := (2.0 + Configs.savedata.selection_rectangle_width) /\ + State.zoom / canvas_scale var grow_amount_x := grow_amount_unscaled / element_scale.x var grow_amount_y := grow_amount_unscaled / element_scale.y selection_transforms.append(canvas_transform * element_transform) @@ -454,7 +478,8 @@ func _draw() -> void: var canvas_transform := State.root_element.canvas_transform var canvas_scale := canvas_transform.get_scale().x var element_scale := element_transform.get_scale() - var grow_amount_unscaled := 4.0 / State.zoom / canvas_scale + var grow_amount_unscaled := (2.0 + Configs.savedata.selection_rectangle_width) /\ + State.zoom / canvas_scale var grow_amount_x := grow_amount_unscaled / element_scale.x var grow_amount_y := grow_amount_unscaled / element_scale.y selection_transforms.append(canvas_transform * element_transform) @@ -674,7 +699,8 @@ func _draw() -> void: var canvas_transform := State.root_element.canvas_transform var canvas_scale := canvas_transform.get_scale().x var element_scale := element_transform.get_scale() - var grow_amount_unscaled := 4.0 / State.zoom / canvas_scale + var grow_amount_unscaled := (2.0 + Configs.savedata.selection_rectangle_width) /\ + State.zoom / canvas_scale var grow_amount_x := grow_amount_unscaled / element_scale.x var grow_amount_y := grow_amount_unscaled / element_scale.y selection_transforms.append(canvas_transform * element_transform) diff --git a/src/ui_parts/inspector.gd b/src/ui_parts/inspector.gd index 009372e..f856b7f 100644 --- a/src/ui_parts/inspector.gd +++ b/src/ui_parts/inspector.gd @@ -17,8 +17,8 @@ func _ready() -> void: func update_theme() -> void: color = Color.TRANSPARENT - border_color = ThemeUtils.common_panel_inner_color - title_color = Color(ThemeUtils.common_panel_inner_color, 0.4) + border_color = ThemeUtils.subtle_panel_border_color + title_color = ThemeUtils.basic_panel_inner_color func update_translation() -> void: add_button.text = Translator.translate("Add element") diff --git a/src/ui_parts/layout_popup.gd b/src/ui_parts/layout_popup.gd index 9296879..1268656 100644 --- a/src/ui_parts/layout_popup.gd +++ b/src/ui_parts/layout_popup.gd @@ -96,13 +96,14 @@ func _draw() -> void: # Fixed viewport location for now. var stylebox := StyleBoxFlat.new() stylebox.set_corner_radius_all(4) - stylebox.bg_color = ThemeUtils.translucent_button_color_normal + stylebox.bg_color = ThemeUtils.hover_overlay_color var disabled_stylebox := stylebox.duplicate() disabled_stylebox.bg_color = ThemeUtils.translucent_button_color_disabled disabled_stylebox.draw(ci, right_rect.grow(-BUFFER_SIZE)) var viewport_icon := Utils.get_layout_part_icon(Utils.LayoutPart.VIEWPORT) - viewport_icon.draw(ci, right_rect.get_center() - viewport_icon.get_size() / 2) + viewport_icon.draw(ci, right_rect.get_center() - viewport_icon.get_size() / 2, + ThemeUtils.tinted_contrast_color) for layout_location in section_areas: var area := section_areas[layout_location].grow(-BUFFER_SIZE) @@ -134,7 +135,7 @@ func _draw() -> void: disabled_stylebox.draw(ci, rect) elif hovered_part == layout_part: var hover_stylebox := stylebox.duplicate() - hover_stylebox.bg_color = ThemeUtils.translucent_button_color_hover + hover_stylebox.bg_color = ThemeUtils.strong_hover_overlay_color hover_stylebox.draw(ci, rect) else: stylebox.draw(ci, rect) @@ -157,11 +158,11 @@ func _draw() -> void: drop_sb.border_width_right = 2 drop_sb.draw(ci, rect) - icon.draw(ci, rect.get_center() - icon.get_size() / 2.0) + icon.draw(ci, rect.get_center() - icon.get_size() / 2.0, ThemeUtils.tinted_contrast_color) ThemeUtils.regular_font.draw_string(ci, Vector2(0, size.x * 0.75 - 5), Translator.translate("Excluded") + ":", HORIZONTAL_ALIGNMENT_CENTER, size.x, - get_theme_font_size("font_size", "Label")) + get_theme_font_size("font_size", "Label"), ThemeUtils.text_color) # Drag and drop @@ -333,7 +334,7 @@ func _make_custom_tooltip(for_text: String) -> Object: vbox.add_child(main_label) if for_text != TranslationUtils.get_layout_part_name(Utils.LayoutPart.VIEWPORT): var dim_label := Label.new() - dim_label.add_theme_color_override("font_color", ThemeUtils.common_dimmer_text_color) + dim_label.add_theme_color_override("font_color", ThemeUtils.dimmer_text_color) dim_label.text = Translator.translate("Drag and drop to change the layout") vbox.add_child(dim_label) return vbox diff --git a/src/ui_parts/settings_menu.gd b/src/ui_parts/settings_menu.gd index c82e3e7..36f8c85 100644 --- a/src/ui_parts/settings_menu.gd +++ b/src/ui_parts/settings_menu.gd @@ -20,7 +20,7 @@ const reset_icon = preload("res://assets/icons/Reload.svg") var focused_tab := "" var current_setup_setting := "" -var current_setup_resource: Resource +var current_setup_resource: ConfigResource var setting_container: VBoxContainer var advice: Dictionary[String, String] = {} @@ -38,10 +38,8 @@ func _ready() -> void: update_close_button() setup_tabs() tabs.get_child(0).button_pressed = true - Configs.theme_changed.connect(setup_theming) - setup_theming() - Configs.savedata.editor_formatter.changed_deferred.connect(show_formatter.bind("editor")) - Configs.savedata.export_formatter.changed_deferred.connect(show_formatter.bind("export")) + Configs.theme_changed.connect(update_theme) + update_theme() func change_orientation(): if Configs.current_orientation == Configs.orientation.PORTRAIT: @@ -51,8 +49,8 @@ func change_orientation(): $VBoxContainer/BoxContainer.vertical = false $VBoxContainer/BoxContainer/PanelContainer.size_flags_horizontal = SIZE_EXPAND_FILL -func setup_theming() -> void: - var stylebox := get_theme_stylebox("panel").duplicate() +func update_theme() -> void: + var stylebox := ThemeDB.get_default_theme().get_stylebox("panel", theme_type_variation).duplicate() stylebox.content_margin_top += 4.0 add_theme_stylebox_override("panel", stylebox) @@ -100,8 +98,10 @@ func _on_tab_toggled(toggled_on: bool, tab_name: String) -> void: focused_tab = tab_name setup_content() -func setup_content() -> void: - scroll_container.scroll_vertical = 0 +func setup_content(reset_scroll := true) -> void: + if reset_scroll: + scroll_container.scroll_vertical = 0 + for child in content_container.get_children(): child.queue_free() @@ -168,7 +168,26 @@ func setup_content() -> void: content_container.add_child(setting_container) current_setup_resource = Configs.savedata + + current_setup_setting = "theme_preset" + add_profile_picker(Translator.translate("Theme preset"), + current_setup_resource.reset_theme_items_to_default, + SaveData.ThemePreset.size(), SaveData.get_theme_preset_value_text_map(), + current_setup_resource.is_theming_default) + + add_section(Translator.translate("Primary theme colors")) + current_setup_setting = "base_color" + add_color_edit(Translator.translate("Base color"), false) + current_setup_setting = "accent_color" + add_color_edit(Translator.translate("Accent color"), false) + add_section(Translator.translate("SVG Text colors")) + current_setup_setting = "highlighter_preset" + add_profile_picker(Translator.translate("Highlighter preset"), + current_setup_resource.reset_highlighting_items_to_default, + SaveData.HighlighterPreset.size(), + SaveData.get_highlighter_preset_value_text_map(), + current_setup_resource.is_highlighting_default) current_setup_setting = "highlighting_symbol_color" add_color_edit(Translator.translate("Symbol color")) current_setup_setting = "highlighting_element_color" @@ -186,7 +205,11 @@ func setup_content() -> void: current_setup_setting = "highlighting_error_color" add_color_edit(Translator.translate("Error color")) - add_section(Translator.translate("Handle colors")) + add_section(Translator.translate("Handles")) + current_setup_setting = "handle_size" + add_number_dropdown(Translator.translate("Size"), + [0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0], false, false, + SaveData.HANDLE_SIZE_MIN, SaveData.HANDLE_SIZE_MAX) current_setup_setting = "handle_inner_color" add_color_edit(Translator.translate("Inside color"), false) current_setup_setting = "handle_color" @@ -198,9 +221,28 @@ func setup_content() -> void: current_setup_setting = "handle_hovered_selected_color" add_color_edit(Translator.translate("Hovered selected color"), false) + add_section(Translator.translate("Selection rectangle")) + current_setup_setting = "selection_rectangle_speed" + add_number_dropdown(Translator.translate("Speed"), + [0.0, 10.0, 20.0, 30.0, 50.0, 80.0, 130.0], false, false, + -SaveData.MAX_SELECTION_RECTANGLE_SPEED, + SaveData.MAX_SELECTION_RECTANGLE_SPEED) + current_setup_setting = "selection_rectangle_width" + add_number_dropdown(Translator.translate("Width"), + [1.0, 2.0, 3.0, 4.0], false, false, 1.0, + SaveData.MAX_SELECTION_RECTANGLE_WIDTH) + current_setup_setting = "selection_rectangle_dash_length" + add_number_dropdown(Translator.translate("Dash length"), + [5.0, 10.0, 15.0, 20.0], false, false, 1.0, + SaveData.MAX_SELECTION_RECTANGLE_DASH_LENGTH) + current_setup_setting = "selection_rectangle_color1" + add_color_edit(Translator.translate("Color {index}").format({"index": "1"})) + current_setup_setting = "selection_rectangle_color2" + add_color_edit(Translator.translate("Color {index}").format({"index": "2"})) + add_section(Translator.translate("Basic colors")) - current_setup_setting = "background_color" - add_color_edit(Translator.translate("Background color"), false) + current_setup_setting = "canvas_color" + add_color_edit(Translator.translate("Canvas color"), false) current_setup_setting = "grid_color" add_color_edit(Translator.translate("Grid color"), false) current_setup_setting = "basic_color_valid" @@ -218,45 +260,26 @@ func setup_content() -> void: add_section(Translator.translate("Input")) current_setup_setting = "tab_mmb_close" add_checkbox(Translator.translate("Close tabs with middle mouse button")) - add_advice(Translator.translate( - "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead.")) + add_advice(Translator.translate("If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead.")) "other": advice_panel.show() create_setting_container() content_container.add_child(setting_container) - current_setup_resource = Configs.savedata + add_section(Translator.translate("Input")) current_setup_setting = "invert_zoom" add_checkbox(Translator.translate("Invert zoom direction")) - add_advice(Translator.translate( - "Swaps the scroll directions for zooming in and zooming out.")) + add_advice(Translator.translate("Swaps the scroll directions for zooming in and zooming out.")) current_setup_setting = "wraparound_panning" var wraparound_panning := add_checkbox(Translator.translate("Wrap-around panning")) - add_advice(Translator.translate( - "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning.")) + add_advice(Translator.translate("Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning.")) current_setup_setting = "use_ctrl_for_zoom" add_checkbox(Translator.translate("Use CTRL for zooming")) - add_advice(Translator.translate( - "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling.")) - - add_section(Translator.translate("Miscellaneous")) - current_setup_setting = "use_native_file_dialog" - var use_native_file_dialog := add_checkbox( - Translator.translate("Use native file dialog")) - add_advice(Translator.translate( - "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog.")) - current_setup_setting = "use_filename_for_window_title" - add_checkbox(Translator.translate("Sync window title to file name")) - add_advice(Translator.translate( - "If turned off, the window title remains as \"GodSVG\" without including the current file.")) - current_setup_setting = "handle_size" - add_number_dropdown(Translator.translate("Handle size"), - [0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0], false, false, - SaveData.HANDLE_SIZE_MIN, SaveData.HANDLE_SIZE_MAX) - add_advice(Translator.translate( - "Changes the visual size and grabbing area of handles.")) + add_advice(Translator.translate("If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling.")) + add_section(Translator.translate("Display")) + # Prepare parameters for the UI scale setting. current_setup_setting = "ui_scale" var auto_scale: float = HandlerGUI.get_auto_ui_scale() @@ -280,6 +303,23 @@ func setup_content() -> void: add_dropdown(Translator.translate("UI scale"), dropdown_map.keys(), dropdown_map) add_advice(Translator.translate("Changes the scale factor for the interface.")) + + current_setup_setting = "vsync" + add_checkbox(Translator.translate("V-Sync")) + add_advice(Translator.translate("Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly.")) + + current_setup_setting = "max_fps" + add_fps_limit_dropdown(Translator.translate("Maximum FPS")) + add_advice(Translator.translate("Determines the maximum number of frames per second.")) + + add_section(Translator.translate("Miscellaneous")) + current_setup_setting = "use_native_file_dialog" + var use_native_file_dialog := add_checkbox(Translator.translate("Use native file dialog")) + add_advice(Translator.translate("If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog.")) + current_setup_setting = "use_filename_for_window_title" + add_checkbox(Translator.translate("Sync window title to file name")) + add_advice(Translator.translate("If turned off, the window title remains as \"GodSVG\" without including the current file.")) + # Disable mouse wrap if not available. if not DisplayServer.has_feature(DisplayServer.FEATURE_MOUSE_WARP): wraparound_panning.permanent_disable_checkbox(false) @@ -288,6 +328,9 @@ func setup_content() -> void: use_native_file_dialog.permanent_disable_checkbox(true) elif not DisplayServer.has_feature(DisplayServer.FEATURE_NATIVE_DIALOG_FILE): use_native_file_dialog.permanent_disable_checkbox(false) + + # Update hover. + HandlerGUI.throw_mouse_motion_event() func add_section(section_name: String) -> void: @@ -295,6 +338,7 @@ func add_section(section_name: String) -> void: vbox.add_theme_constant_override("separation", 0) var label := Label.new() label.add_theme_font_size_override("font_size", 15) + label.theme_type_variation = "TitleLabel" label.text = section_name vbox.add_child(label) var spacer := Control.new() @@ -302,6 +346,27 @@ func add_section(section_name: String) -> void: vbox.add_child(spacer) setting_container.add_child(vbox) +func add_profile_picker(text: String, application_callback: Callable, profile_count: int, +value_text_map: Dictionary, disabled_check_callback: Callable) -> void: + var bind := current_setup_setting + var frame := ProfileFrameScene.instantiate() + frame.setup_dropdown(range(profile_count), value_text_map) + frame.getter = current_setup_resource.get.bind(bind) + var resource_permanent_ref := current_setup_resource + frame.setter = func(p: Variant) -> void: + resource_permanent_ref.set(bind, p) + frame.text = text + frame.disabled_check_callback = disabled_check_callback + frame.value_changed.connect.call_deferred(setup_content.bind(false)) + frame.defaults_applied.connect(application_callback) + frame.defaults_applied.connect(setup_content.bind(false)) + add_frame(frame) + + resource_permanent_ref.changed_deferred.connect(frame.button_update_disabled) + frame.tree_exited.connect(resource_permanent_ref.changed_deferred.disconnect.bind( + frame.button_update_disabled), CONNECT_ONE_SHOT) + + func add_checkbox(text: String, dim_text := false) -> Control: var frame := SettingFrameScene.instantiate() frame.dim_text = dim_text @@ -309,6 +374,10 @@ func add_checkbox(text: String, dim_text := false) -> Control: setup_frame(frame) frame.setup_checkbox() add_frame(frame) + # Some checkboxes need to update the dimness of the text of other settings. + # There's nothing persistent in checkboxes, so it's safe to just rebuild the content + # for them, specifically. + frame.value_changed.connect(setup_content.bind(false)) return frame # TODO Typed Dictionary wonkiness @@ -330,6 +399,15 @@ restricted := true, min_value := -INF, max_value := INF, dim_text := false) -> C add_frame(frame) return frame +func add_fps_limit_dropdown(text: String, dim_text := false) -> Control: + var frame := SettingFrameScene.instantiate() + frame.dim_text = dim_text + frame.text = text + setup_frame(frame) + frame.setup_fps_limit_dropdown() + add_frame(frame) + return frame + func add_color_edit(text: String, enable_alpha := true) -> Control: var frame := SettingFrameScene.instantiate() frame.text = text @@ -347,7 +425,10 @@ func setup_frame(frame: Control) -> void: frame.mouse_exited.connect(hide_advice.bind(current_setup_setting)) func add_frame(frame: Control) -> void: - setting_container.get_child(-1).add_child(frame) + if setting_container.get_child_count() > 0: + setting_container.get_child(-1).add_child(frame) + else: + setting_container.add_child(frame) func add_advice(text: String) -> void: advice[current_setup_setting] = text @@ -502,25 +583,10 @@ func show_formatter(category: String) -> void: "editor": current_setup_resource = Configs.savedata.editor_formatter "export": current_setup_resource = Configs.savedata.export_formatter - var button := Button.new() - button.theme_type_variation = "TranslucentButton" - button.text = Translator.translate("Reset all to default") - button.icon = reset_icon - button.focus_mode = Control.FOCUS_NONE - button.disabled = current_setup_resource.is_everything_default() - button.mouse_default_cursor_shape = Control.CURSOR_ARROW if\ - button.disabled else Control.CURSOR_POINTING_HAND - setting_container.add_child(button) - button.pressed.connect(current_setup_resource.reset_to_default) - - # The preset field shouldn't have a reset button or a section, so set it up manually. - var frame := ProfileFrameScene.instantiate() - frame.setup_dropdown(range(Formatter.Preset.size()), - Formatter.get_preset_value_text_map()) - frame.getter = current_setup_resource.get.bind("preset") - frame.setter = func(p: Variant) -> void: current_setup_resource.set("preset", p) - frame.text = Translator.translate("Preset") - setting_container.add_child(frame) + current_setup_setting = "preset" + add_profile_picker(Translator.translate("Preset"), + current_setup_resource.reset_to_default, Formatter.Preset.size(), + Formatter.get_preset_value_text_map(), current_setup_resource.is_everything_default) add_section("XML") current_setup_setting = "xml_keep_comments" diff --git a/src/ui_parts/settings_menu.tscn b/src/ui_parts/settings_menu.tscn index b3cf8a0..05538c5 100644 --- a/src/ui_parts/settings_menu.tscn +++ b/src/ui_parts/settings_menu.tscn @@ -68,7 +68,6 @@ theme_type_variation = &"TextBox" [node name="AdviceLabel" type="Label" parent="VBoxContainer/AdvicePanel"] layout_mode = 2 size_flags_vertical = 1 -theme_override_colors/font_color = Color(0.878431, 0.878431, 0.878431, 1) theme_override_constants/line_spacing = 2 autowrap_mode = 3 diff --git a/src/ui_parts/shortcut_panel.gd b/src/ui_parts/shortcut_panel.gd index bafee80..fecd77c 100644 --- a/src/ui_parts/shortcut_panel.gd +++ b/src/ui_parts/shortcut_panel.gd @@ -16,15 +16,17 @@ const config_icon = preload("res://assets/icons/Config.svg") # Where on the dotted pattern the dragging started. var drag_offset := Vector2.ZERO +var drag_texture_rect: TextureRect # This property is used to ensure that the panel stays in roughly the same position # on the window when it resizes. var position_window_relative: Vector2 func update_theme() -> void: - var stylebox := get_theme_stylebox("panel", "DarkPanel").duplicate() + var stylebox := get_theme_stylebox("panel", "SubtleFlatPanel").duplicate() stylebox.set_content_margin_all(0) add_theme_stylebox_override("panel", stylebox) + drag_texture_rect.modulate = ThemeUtils.tinted_contrast_color func set_position_absolute(new_position: Vector2) -> void: var usable_area_size := get_usable_area_size() @@ -37,10 +39,10 @@ func set_position_relative(new_position: Vector2) -> void: position = usable_area_size * position_window_relative func _ready() -> void: - Configs.theme_changed.connect(update_theme) Configs.shortcut_panel_changed.connect(update_layout) - update_theme() update_layout() + Configs.theme_changed.connect(update_theme) + update_theme() # Positioning callbacks and logic. get_window().size_changed.connect(sync_relative_position) resized.connect(sync_relative_position) @@ -64,16 +66,16 @@ func update_layout() -> void: main_container.add_theme_constant_override("separation", 6) add_child(main_container) - var drag_texture := TextureRect.new() - drag_texture.stretch_mode = TextureRect.STRETCH_TILE - drag_texture.texture = dot_pattern + drag_texture_rect = TextureRect.new() + drag_texture_rect.stretch_mode = TextureRect.STRETCH_TILE + drag_texture_rect.texture = dot_pattern match Configs.savedata.shortcut_panel_layout: Layout.HORIZONTAL_STRIP: - drag_texture.custom_minimum_size = Vector2(16, 24) + drag_texture_rect.custom_minimum_size = Vector2(16, 24) Layout.HORIZONTAL_TWO_ROWS: - drag_texture.custom_minimum_size = Vector2(16, 56) + drag_texture_rect.custom_minimum_size = Vector2(16, 56) Layout.VERTICAL_STRIP: - drag_texture.custom_minimum_size = Vector2(24, 16) + drag_texture_rect.custom_minimum_size = Vector2(24, 16) var drag_handle := CenterContainer.new() drag_handle.mouse_default_cursor_shape = Control.CURSOR_DRAG @@ -83,7 +85,7 @@ func update_layout() -> void: Layout.VERTICAL_STRIP: drag_handle.custom_minimum_size.y = 30 drag_handle.gui_input.connect(_on_drag_handle_gui_input) - drag_handle.add_child(drag_texture) + drag_handle.add_child(drag_texture_rect) main_container.add_child(drag_handle) var config_button := Button.new() diff --git a/src/ui_parts/shortcut_panel_config.gd b/src/ui_parts/shortcut_panel_config.gd index e55d777..558a210 100644 --- a/src/ui_parts/shortcut_panel_config.gd +++ b/src/ui_parts/shortcut_panel_config.gd @@ -38,8 +38,13 @@ func update_shortcut_slots() -> void: var icon_presentation := PanelContainer.new() icon_presentation.custom_minimum_size = Vector2(28, 28) - if not current_shortcut.is_empty(): + if current_shortcut.is_empty(): + var sb := icon_presentation.get_theme_stylebox("panel").duplicate() + sb.border_color.a *= 0.5 + icon_presentation.add_theme_stylebox_override("panel", sb) + else: var icon := TextureRect.new() + icon.modulate = ThemeUtils.tinted_contrast_color icon.stretch_mode = TextureRect.STRETCH_KEEP_CENTERED icon.texture = ShortcutUtils.get_action_icon(current_shortcut) icon_presentation.add_child(icon) diff --git a/src/ui_parts/shortcut_panel_config.tscn b/src/ui_parts/shortcut_panel_config.tscn index bf793e3..28be390 100644 --- a/src/ui_parts/shortcut_panel_config.tscn +++ b/src/ui_parts/shortcut_panel_config.tscn @@ -26,6 +26,7 @@ theme_override_constants/separation = 8 [node name="Title" type="Label" parent="VBoxContainer"] unique_name_in_owner = true layout_mode = 2 +theme_type_variation = &"TitleLabel" horizontal_alignment = 1 [node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] diff --git a/src/ui_parts/tab_bar.gd b/src/ui_parts/tab_bar.gd index efc98e4..c36f438 100644 --- a/src/ui_parts/tab_bar.gd +++ b/src/ui_parts/tab_bar.gd @@ -38,12 +38,7 @@ func _ready() -> void: set_process(false) func _draw() -> void: - var background_stylebox: StyleBoxFlat =\ - get_theme_stylebox("tab_unselected", "TabContainer").duplicate() - background_stylebox.corner_radius_top_left += 1 - background_stylebox.corner_radius_top_right += 1 - background_stylebox.bg_color = Color(ThemeUtils.common_panel_inner_color, 0.4) - draw_style_box(background_stylebox, get_rect()) + get_theme_stylebox("tabbar_background", "TabContainer").draw(ci, get_rect()) var has_transient_tab := not State.transient_tab_path.is_empty() var mouse_pos := get_local_mouse_position() @@ -74,14 +69,16 @@ func _draw() -> void: var text_line := TextLine.new() text_line.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS text_line.add_string(current_tab_name, ThemeUtils.regular_font, 13) - text_line.width = text_line_width + text_line.width = text_line_width - 2 text_line.draw(ci, rect.position + Vector2(4, 3), get_theme_color("font_selected_color", "TabContainer")) - var close_rect := get_close_button_rect() - if close_rect.has_area(): - var close_icon_size := close_icon.get_size() - draw_texture_rect(close_icon, Rect2(close_rect.position +\ - (close_rect.size - close_icon_size) / 2.0, close_icon_size), false) + if not drawing_transient_tab: + var close_rect := get_close_button_rect() + if close_rect.has_area(): + var close_icon_size := close_icon.get_size() + draw_texture_rect(close_icon, Rect2(close_rect.position +\ + (close_rect.size - close_icon_size) / 2.0, close_icon_size), false, + ThemeUtils.tinted_contrast_color) else: var is_hovered := rect.has_point(mouse_pos) var tab_style := "tab_hovered" if is_hovered else "tab_unselected" @@ -101,7 +98,8 @@ func _draw() -> void: var add_button_rect := get_add_button_rect() var plus_icon_size := plus_icon.get_size() draw_texture_rect(plus_icon, Rect2(add_button_rect.position +\ - (add_button_rect.size - plus_icon_size) / 2.0, plus_icon_size), false) + (add_button_rect.size - plus_icon_size) / 2.0, plus_icon_size), false, + ThemeUtils.tinted_contrast_color) var scroll_backwards_rect := get_scroll_backwards_area_rect() if scroll_backwards_rect.has_area(): @@ -112,7 +110,7 @@ func _draw() -> void: else: var line_x := scroll_backwards_rect.end.x + 1 draw_line(Vector2(line_x, 0), Vector2(line_x, size.y), - ThemeUtils.common_panel_border_color) + ThemeUtils.basic_panel_border_color) if scroll_backwards_rect.has_point(mouse_pos): var stylebox_theme := "pressed" if\ Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) else "hover" @@ -131,7 +129,7 @@ func _draw() -> void: else: var line_x := scroll_forwards_rect.position.x draw_line(Vector2(line_x, 0), Vector2(line_x, size.y), - ThemeUtils.common_panel_border_color) + ThemeUtils.basic_panel_border_color) if scroll_forwards_rect.has_point(mouse_pos): var stylebox_theme := "pressed" if\ Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) else "hover" @@ -425,24 +423,20 @@ func _get_tooltip(at_position: Vector2) -> String: return Translator.translate("Scroll forwards") return "" - - var hovered_tab := Configs.savedata.get_tab(hovered_tab_idx) - # We have to pass some metadata to the tooltip. - # Since "*" isn't valid in filepaths, we use it as a delimiter. - if hovered_tab_idx == Configs.savedata.get_active_tab_index(): - return "%s*active" % hovered_tab.get_presented_svg_file_path() - - return "%s*%d" % [hovered_tab.get_presented_svg_file_path(), hovered_tab.id] + else: + # Return tab index as metadata so _make_custom_tooltip can determine the tab + # even if the mouse moves. + return String.num_int64(hovered_tab_idx) func _make_custom_tooltip(for_text: String) -> Object: - var asterisk_pos := for_text.find("*") - if asterisk_pos == -1: + if not for_text.is_valid_int(): return null - var hovered_tab := Configs.savedata.get_tab(get_hovered_index()) + var hovered_tab_idx := for_text.to_int() + var hovered_tab := Configs.savedata.get_tab(hovered_tab_idx) var is_saved := not hovered_tab.svg_file_path.is_empty() - var path := for_text.left(asterisk_pos) + var path := hovered_tab.get_presented_svg_file_path() var label := Label.new() label.add_theme_font_override("font", ThemeUtils.mono_font if is_saved\ else ThemeUtils.regular_font) @@ -453,11 +447,9 @@ func _make_custom_tooltip(for_text: String) -> Object: Utils.set_max_text_width(label, 192.0, 4.0) # If the tab is active or empty, no need for an SVG preview. - var metadata := for_text.right(-asterisk_pos - 1) - if metadata == "active" or hovered_tab.empty_unsaved: + if hovered_tab.empty_unsaved or hovered_tab_idx == Configs.savedata.get_active_tab_index(): return label - var id := metadata.to_int() var margin_container := MarginContainer.new() var tooltip_panel_stylebox := get_theme_stylebox("panel", "TooltipPanel") margin_container.begin_bulk_theme_override() @@ -475,7 +467,7 @@ func _make_custom_tooltip(for_text: String) -> Object: preview_rect.custom_minimum_size = Vector2(96, 96) preview_rect.size = Vector2.ZERO preview_rect.setup_svg_without_dimensions(FileAccess.get_file_as_string( - TabData.get_edited_file_path_for_id(id))) + hovered_tab.get_edited_file_path())) preview_rect.shrink_to_fit(16, 16) hbox.add_child(label) margin_container.add_child(hbox) @@ -491,7 +483,7 @@ func get_tab_index_at(pos: Vector2) -> int: return -1 -class TabDragData: +class DragData: var index := -1 func _init(new_index: int) -> void: index = new_index @@ -542,10 +534,10 @@ func _get_drag_data(at_position: Vector2) -> Variant: set_drag_preview(preview) set_process(true) - return TabDragData.new(tab_index_at_position) + return DragData.new(tab_index_at_position) func _can_drop_data(at_position: Vector2, data: Variant) -> bool: - if not data is TabDragData: + if not data is DragData: proposed_drop_idx = -1 return false var current_drop_idx := get_drop_index_at(at_position) @@ -557,7 +549,7 @@ func _can_drop_data(at_position: Vector2, data: Variant) -> bool: return true func _drop_data(at_position: Vector2, data: Variant) -> void: - if not data is TabDragData: + if not data is DragData: return set_process(false) Configs.savedata.move_tab(data.index, get_drop_index_at(at_position)) diff --git a/src/ui_widgets/BetterButton.gd b/src/ui_widgets/BetterButton.gd index e189e31..83dd696 100644 --- a/src/ui_widgets/BetterButton.gd +++ b/src/ui_widgets/BetterButton.gd @@ -7,13 +7,6 @@ const HIGHLIGHT_TIME = 0.2 var just_pressed := false var timer: SceneTreeTimer -var _hovered := false - -## Overlaid on top when the Button is hovered while pressed. -@export var hover_pressed_stylebox: StyleBox -## Overlaid on top when the Button is hovered while pressed. -@export var hover_pressed_font_color := Color.TRANSPARENT - ## A shortcut that corresponds to the same action that this button does. @export var action := "" @@ -21,28 +14,6 @@ var _hovered := false func _ready() -> void: if not action.is_empty() and not toggle_mode: pressed.connect(_on_pressed) - - mouse_entered.connect(_on_mouse_entered) - mouse_exited.connect(_on_mouse_exited) - add_theme_color_override("font_hover_color", get_theme_color( - "font_hover_color", "Button").blend(hover_pressed_font_color)) - -func _on_mouse_entered() -> void: - _hovered = true - if not disabled and hover_pressed_font_color != Color.BLACK: - add_theme_color_override("font_pressed_color", get_theme_color( - "font_pressed_color", "Button").blend(hover_pressed_font_color)) - queue_redraw() - -func _on_mouse_exited() -> void: - _hovered = false - remove_theme_color_override("font_pressed_color") - queue_redraw() - -func _draw() -> void: - if _hovered and not disabled and button_pressed and\ - is_instance_valid(hover_pressed_stylebox): - draw_style_box(hover_pressed_stylebox, Rect2(Vector2.ZERO, size)) func _make_custom_tooltip(_for_text: String) -> Object: @@ -65,7 +36,7 @@ func _make_custom_tooltip(_for_text: String) -> Object: shortcut_label.add_theme_font_size_override("font_size", get_theme_font_size("font_size", "TooltipLabel")) shortcut_label.add_theme_color_override("font_color", - ThemeUtils.common_subtle_text_color) + ThemeUtils.subtle_text_color) shortcut_label.text = "(%s)" % action_showcase_text var hbox := HBoxContainer.new() @@ -83,11 +54,12 @@ func _unhandled_input(event: InputEvent) -> void: if action.is_empty() or toggle_mode: return - if not just_pressed and ShortcutUtils.is_action_pressed(event, action) and\ - not is_instance_valid(timer): + if not just_pressed and ShortcutUtils.is_action_pressed(event, action): add_theme_color_override("icon_normal_color", get_theme_color("icon_pressed_color")) add_theme_color_override("icon_hover_color", get_theme_color("icon_pressed_color")) add_theme_stylebox_override("normal", get_theme_stylebox("pressed")) + if is_instance_valid(timer): + timer.timeout.disconnect(end_highlight) timer = get_tree().create_timer(HIGHLIGHT_TIME) timer.timeout.connect(end_highlight) diff --git a/src/ui_widgets/BetterLineEdit.gd b/src/ui_widgets/BetterLineEdit.gd index 3dffd25..feb2996 100644 --- a/src/ui_widgets/BetterLineEdit.gd +++ b/src/ui_widgets/BetterLineEdit.gd @@ -2,6 +2,8 @@ class_name BetterLineEdit extends LineEdit ## A LineEdit with a few tweaks to make it nicer to use. +var original_selection_color: Color + ## Emitted when Esc is pressed to cancel the current text change. signal text_change_canceled @@ -29,15 +31,15 @@ func _init() -> void: focus_exited.connect(_on_base_class_focus_exited) mouse_exited.connect(_on_base_class_mouse_exited) text_submitted.connect(release_focus.unbind(1)) + original_selection_color = get_theme_color("selection_color") Configs.theme_changed.connect(update_theme) update_theme() func update_theme() -> void: if editable: - remove_theme_color_override("selection_color") + add_theme_color_override("selection_color", original_selection_color) else: - add_theme_color_override("selection_color", - get_theme_color("disabled_selection_color")) + add_theme_color_override("selection_color", get_theme_color("disabled_selection_color")) var first_click := false var text_before_focus := "" diff --git a/src/ui_widgets/BetterTextEdit.gd b/src/ui_widgets/BetterTextEdit.gd index 65e6076..ad9a23f 100644 --- a/src/ui_widgets/BetterTextEdit.gd +++ b/src/ui_widgets/BetterTextEdit.gd @@ -2,8 +2,6 @@ class_name BetterTextEdit extends TextEdit ## A TextEdit with some improvements. -const caret_color = Color("defd") - var _surface := RenderingServer.canvas_item_create() var _timer := Timer.new() @@ -96,7 +94,8 @@ func _redraw_caret() -> void: caret_end.x += char_width else: caret_end.y -= char_size.y + 1 - RenderingServer.canvas_item_add_line(_surface, caret_pos, caret_end, caret_color, 1) + RenderingServer.canvas_item_add_line(_surface, caret_pos, caret_end, + ThemeUtils.caret_color, 1) var _blonk := true func blink() -> void: diff --git a/src/ui_widgets/ContextPopup.gd b/src/ui_widgets/ContextPopup.gd index 23500b8..57e1e01 100644 --- a/src/ui_widgets/ContextPopup.gd +++ b/src/ui_widgets/ContextPopup.gd @@ -88,7 +88,7 @@ icon: Texture2D = null, dim_text := "") -> Button: var label := Label.new() label.text = dim_text label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT - var shortcut_text_color := ThemeUtils.common_subtle_text_color + var shortcut_text_color := ThemeUtils.subtle_text_color if disabled: shortcut_text_color.a *= 0.75 label.add_theme_color_override("font_color", shortcut_text_color) @@ -165,7 +165,7 @@ start_pressed: bool, dim_text := "") -> CheckBox: var label := Label.new() label.text = dim_text label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT - var shortcut_text_color := ThemeUtils.common_subtle_text_color + var shortcut_text_color := ThemeUtils.subtle_text_color #if disabled: #shortcut_text_color.a *= 0.75 label.add_theme_color_override("font_color", shortcut_text_color) @@ -242,20 +242,18 @@ min_width := -1.0, max_height := -1.0, separator_indices := PackedInt32Array()) # Setup the title. var title_container := PanelContainer.new() var stylebox := StyleBoxFlat.new() - stylebox.bg_color = Color("0003") + stylebox.bg_color = Color(ThemeUtils.extreme_theme_color, 0.2) stylebox.content_margin_bottom = 3.0 stylebox.content_margin_left = 8.0 stylebox.content_margin_right = 8.0 stylebox.border_width_bottom = 2 - stylebox.border_color = ThemeUtils.common_panel_border_color + stylebox.border_color = ThemeUtils.basic_panel_border_color title_container.add_theme_stylebox_override("panel", stylebox) var title_label := Label.new() title_label.text = top_title title_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - title_label.begin_bulk_theme_override() - title_label.add_theme_color_override("font_color", Color("def")) + title_label.theme_type_variation = "TitleLabel" title_label.add_theme_font_size_override("font_size", 14) - title_label.end_bulk_theme_override() title_container.add_child(title_label) main_container.add_child(title_container) # Continue with regular setup logic. diff --git a/src/ui_widgets/Handle.gd b/src/ui_widgets/Handle.gd index 16e6038..8b57f81 100644 --- a/src/ui_widgets/Handle.gd +++ b/src/ui_widgets/Handle.gd @@ -1,5 +1,5 @@ # Base class for handles. -class_name Handle extends RefCounted +@abstract class_name Handle enum Display {BIG, SMALL} var display_mode := Display.BIG diff --git a/src/ui_widgets/LineEditButton.gd b/src/ui_widgets/LineEditButton.gd index 6c94fc9..3d537dc 100644 --- a/src/ui_widgets/LineEditButton.gd +++ b/src/ui_widgets/LineEditButton.gd @@ -174,7 +174,8 @@ func _draw() -> void: if is_instance_valid(icon): var icon_side := BUTTON_WIDTH - horizontal_margin_width + 2 icon.draw_rect(ci, Rect2(size.x - (BUTTON_WIDTH + 0.5 + icon_side) / 2, - (size.y - icon_side) / 2, icon_side, icon_side), false) + (size.y - icon_side) / 2, icon_side, icon_side), false, + get_theme_color("icon_normal_color", "LeftConnectedButton")) # Helpers diff --git a/src/ui_widgets/PanelGrid.gd b/src/ui_widgets/PanelGrid.gd index 03dc0c2..dbfe259 100644 --- a/src/ui_widgets/PanelGrid.gd +++ b/src/ui_widgets/PanelGrid.gd @@ -2,8 +2,6 @@ class_name PanelGrid extends Control # Can be made into vars if necessary. -const inner_color = Color("#32324d") -const border_color = Color("#4d4d66") const border_width = 1 const side_spacing = 6 const top_spacing = 2 @@ -13,11 +11,15 @@ const bottom_spacing = 2 @export var items: PackedStringArray @export var dim_last_item := false + func _draw() -> void: var item_count := items.size() if item_count == 0: return + var inner_color := ThemeUtils.desaturated_color.lerp(ThemeUtils.extreme_theme_color, 0.75) + var border_color := ThemeUtils.desaturated_color.lerp(ThemeUtils.extreme_theme_color, 0.55) + var effective_columns := clampi(columns, 1, item_count) var text_color := get_theme_color("font_color", "Label") var text_font := get_theme_font("font", "Label") @@ -43,7 +45,7 @@ func _draw() -> void: RenderingServer.canvas_item_add_rect(ci, Rect2(pos_x, pos_y, box_width, box_height), inner_color) if dim_last_item: - text_color = ThemeUtils.common_dim_text_color + text_color = ThemeUtils.dim_text_color # Sigh... if is_zero_approx(pos_x): diff --git a/src/ui_widgets/TitledPanel.gd b/src/ui_widgets/TitledPanel.gd index 4df86ad..ab8dd9e 100644 --- a/src/ui_widgets/TitledPanel.gd +++ b/src/ui_widgets/TitledPanel.gd @@ -1,6 +1,6 @@ # Titled panels have two children: The first is on top and it's the title, # the second one is on the bottom and it's the panel. -class_name TitledPanel extends Container +@abstract class_name TitledPanel extends Container @export var border_width: int @export var corner_radius_top_left: int diff --git a/src/ui_widgets/UndoRedoRef.gd b/src/ui_widgets/UndoRedoRef.gd index dcbbf59..52318ef 100644 --- a/src/ui_widgets/UndoRedoRef.gd +++ b/src/ui_widgets/UndoRedoRef.gd @@ -2,7 +2,7 @@ # I mean, every class you're expected to construct is a RefCounted. Objects are used # for sitting ducks like singletons and read-only stuff. Except UndoRedo, which is easy # memory leaks if you forget to free it. -class_name UndoRedoRef extends RefCounted +class_name UndoRedoRef signal version_changed diff --git a/src/ui_widgets/alert_dialog.tscn b/src/ui_widgets/alert_dialog.tscn index 77c05f4..192b644 100644 --- a/src/ui_widgets/alert_dialog.tscn +++ b/src/ui_widgets/alert_dialog.tscn @@ -1,6 +1,5 @@ -[gd_scene load_steps=3 format=3 uid="uid://c0x44loihhyyo"] +[gd_scene load_steps=2 format=3 uid="uid://c0x44loihhyyo"] -[ext_resource type="FontFile" uid="uid://dc0w4sx0h0fui" path="res://assets/fonts/FontBold.ttf" id="1_3yrpq"] [ext_resource type="Script" uid="uid://dlsd0uctldklk" path="res://src/ui_widgets/alert_dialog.gd" id="1_qntyo"] [node name="AlertDialog" type="PanelContainer"] @@ -28,8 +27,7 @@ theme_override_constants/separation = 8 [node name="Title" type="Label" parent="MainContainer/TextContainer"] layout_mode = 2 -theme_override_fonts/font = ExtResource("1_3yrpq") -theme_override_font_sizes/font_size = 16 +theme_type_variation = &"BoldTitleLabel" horizontal_alignment = 1 [node name="Label" type="RichTextLabel" parent="MainContainer/TextContainer"] diff --git a/src/ui_widgets/basic_xnode_frame.gd b/src/ui_widgets/basic_xnode_frame.gd index aa88224..141f04e 100644 --- a/src/ui_widgets/basic_xnode_frame.gd +++ b/src/ui_widgets/basic_xnode_frame.gd @@ -17,7 +17,10 @@ func _ready() -> void: State.xnode_dragging_state_changed.connect(_on_xnodes_dragging_state_changed) title_bar.draw.connect(_on_title_bar_draw) mouse_exited.connect(_on_mouse_exited) + Configs.theme_changed.connect(determine_selection_highlight) determine_selection_highlight() + Configs.theme_changed.connect(set_default_font_color) + set_default_font_color() title_bar.queue_redraw() text_edit.text_set.connect(_on_text_modified) text_edit.text_changed.connect(_on_text_modified) @@ -86,6 +89,9 @@ func _on_mouse_exited() -> void: determine_selection_highlight() +func set_default_font_color() -> void: + text_edit.add_theme_color_override("font_color", ThemeUtils.editable_text_color) + func determine_selection_highlight() -> void: var is_selected := xnode.xid in State.selected_xids var is_hovered := State.hovered_xid == xnode.xid @@ -107,6 +113,21 @@ func determine_selection_highlight() -> void: title_color = Color.from_hsv(0.625, 0.45, 0.17) border_color = Color.from_hsv(0.6, 0.5, 0.35) + if not ThemeUtils.is_theme_dark: + color.s *= 0.2 + color.v = lerpf(color.v, 1.0, 0.875) + title_color.s *= 0.2 + title_color.v = lerpf(title_color.v, 1.0, 0.875) + border_color.v = lerpf(border_color.v, 1.0, 0.8) + if is_hovered: + color.s = lerpf(color.s, 1.0, 0.05) + title_color.s = lerpf(title_color.s, 1.0, 0.05) + border_color.v *= 0.9 + if is_selected: + color.s = lerpf(color.s, 1.0, 0.15) + title_color.s = lerpf(title_color.s, 1.0, 0.15) + border_color.v *= 0.65 + var depth := xnode.xid.size() - 1 var depth_tint := depth * 0.12 if depth > 0: @@ -160,7 +181,7 @@ func _on_title_bar_draw() -> void: var xnode_icon := DB.get_xnode_icon(xnode.get_type()) var xnode_icon_size := xnode_icon.get_size() xnode_icon.draw_rect(title_bar_ci, Rect2(title_bar.size / 2 - xnode_icon_size / 2, - xnode_icon_size), false) + xnode_icon_size), false, ThemeUtils.tinted_contrast_color) func _on_text_modified() -> void: # TODO figure out a way to make this work. @@ -176,6 +197,6 @@ func _on_text_modified() -> void: if xnode.check_text_validity(text_edit.text): xnode.set_text(text_edit.text) - text_edit.remove_theme_color_override("font_color") + set_default_font_color() else: text_edit.add_theme_color_override("font_color", Configs.savedata.basic_color_error) diff --git a/src/ui_widgets/choose_name_dialog.gd b/src/ui_widgets/choose_name_dialog.gd index 0e6965c..536821b 100644 --- a/src/ui_widgets/choose_name_dialog.gd +++ b/src/ui_widgets/choose_name_dialog.gd @@ -19,9 +19,11 @@ func _ready() -> void: name_edit.text_submitted.connect(_on_name_edit_text_submitted) name_edit.add_theme_font_override("font", ThemeUtils.regular_font) -func _on_name_edit_text_submitted() -> void: +func _on_name_edit_text_submitted(_text: String) -> void: if not action_button.disabled: action_button.grab_focus() + else: + cancel_button.grab_focus() # The error/warning callables should take the stripped text and return a string. func setup(title: String, action: Callable, error_callable := Callable(), diff --git a/src/ui_widgets/choose_name_dialog.tscn b/src/ui_widgets/choose_name_dialog.tscn index 6b6dce2..10c4ffb 100644 --- a/src/ui_widgets/choose_name_dialog.tscn +++ b/src/ui_widgets/choose_name_dialog.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://2vlktxj118su"] +[gd_scene load_steps=3 format=3 uid="uid://2vlktxj118su"] [ext_resource type="Script" uid="uid://qiuaih0hajks" path="res://src/ui_widgets/choose_name_dialog.gd" id="1_qr08l"] -[ext_resource type="FontFile" uid="uid://dc0w4sx0h0fui" path="res://assets/fonts/FontBold.ttf" id="2_h3hxy"] [ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="3_q0a2q"] [node name="ChooseNameDialog" type="PanelContainer"] @@ -29,8 +28,7 @@ theme_override_constants/separation = 8 [node name="Title" type="Label" parent="MainContainer/TextContainer"] layout_mode = 2 -theme_override_fonts/font = ExtResource("2_h3hxy") -theme_override_font_sizes/font_size = 16 +theme_type_variation = &"BoldTitleLabel" horizontal_alignment = 1 [node name="NameEdit" type="LineEdit" parent="MainContainer/TextContainer"] diff --git a/src/ui_widgets/color_field.gd b/src/ui_widgets/color_field.gd index dd60379..366fa0a 100644 --- a/src/ui_widgets/color_field.gd +++ b/src/ui_widgets/color_field.gd @@ -19,7 +19,7 @@ const ColorFieldPopupScene = preload("res://src/ui_widgets/color_field_popup.tsc const checkerboard = preload("res://assets/icons/backgrounds/ColorButtonBG.svg") var color_popup: ColorFieldPopup -var gradient_texture: GradientTexture2D +var gradient_texture: SVGTexture func set_value(new_value: String, save := false) -> void: if not new_value.is_empty(): @@ -113,7 +113,7 @@ func _draw() -> void: if cached_allow_url and ColorParser.is_valid_url(color_value): var id := color_value.substr(5, color_value.length() - 6) var gradient_element := State.root_element.get_element_by_id(id) - if DB.is_element_gradient(gradient_element): + if is_instance_valid(gradient_element) and gradient_element is ElementBaseGradient: # Complex drawing logic, because StyleBoxTexture isn't advanced enough. var points := PackedVector2Array() var colors := PackedColorArray() @@ -179,7 +179,7 @@ func update_gradient_texture() -> void: if ColorParser.is_valid_url(color_value): var id := color_value.substr(5, color_value.length() - 6) var gradient_element := State.root_element.get_element_by_id(id) - if DB.is_element_gradient(gradient_element): + if is_instance_valid(gradient_element) and gradient_element is ElementBaseGradient: gradient_texture = gradient_element.generate_texture() else: gradient_texture = null diff --git a/src/ui_widgets/color_field_popup.gd b/src/ui_widgets/color_field_popup.gd index 3008bae..d354b4d 100644 --- a/src/ui_widgets/color_field_popup.gd +++ b/src/ui_widgets/color_field_popup.gd @@ -113,7 +113,7 @@ func update_palettes(search_text := "") -> void: if not palette.title.is_empty(): var palette_label := Label.new() palette_label.text = palette.title - palette_label.add_theme_font_size_override("font_size", 15) + palette_label.theme_type_variation = "TitleLabel" palette_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER palette_container.add_child(palette_label) diff --git a/src/ui_widgets/color_swatch.gd b/src/ui_widgets/color_swatch.gd index 9eb7283..738cda8 100644 --- a/src/ui_widgets/color_swatch.gd +++ b/src/ui_widgets/color_swatch.gd @@ -8,7 +8,7 @@ var color: String var color_name: String var ci := get_canvas_item() -var gradient_texture: GradientTexture2D +var gradient_texture: SVGTexture var current_color := Color.BLACK @@ -18,7 +18,7 @@ func _ready() -> void: if ColorParser.is_valid_url(color): var id := color.substr(5, color.length() - 6) var gradient_element := State.root_element.get_element_by_id(id) - if DB.is_element_gradient(gradient_element): + if is_instance_valid(gradient_element) and gradient_element is ElementBaseGradient: gradient_texture = gradient_element.generate_texture() func _draw() -> void: diff --git a/src/ui_widgets/configure_color_popup.gd b/src/ui_widgets/configure_color_popup.gd index 5f00582..45c3b82 100644 --- a/src/ui_widgets/configure_color_popup.gd +++ b/src/ui_widgets/configure_color_popup.gd @@ -48,7 +48,7 @@ func set_label_text(new_text: String) -> void: if new_text.is_empty(): color_label.text = Translator.translate("Unnamed") color_label.add_theme_color_override("font_color", - ThemeUtils.common_subtle_text_color) + ThemeUtils.subtle_text_color) else: color_label.text = new_text color_label.remove_theme_color_override("font_color") diff --git a/src/ui_widgets/confirm_dialog.tscn b/src/ui_widgets/confirm_dialog.tscn index 3197974..43baa15 100644 --- a/src/ui_widgets/confirm_dialog.tscn +++ b/src/ui_widgets/confirm_dialog.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=3 format=3 uid="uid://ywarfvqdho0"] +[gd_scene load_steps=2 format=3 uid="uid://ywarfvqdho0"] [ext_resource type="Script" uid="uid://3gwwpcy3jctv" path="res://src/ui_widgets/confirm_dialog.gd" id="1_g3djf"] -[ext_resource type="FontFile" uid="uid://dc0w4sx0h0fui" path="res://assets/fonts/FontBold.ttf" id="2_drhgn"] [node name="ConfirmDialog" type="PanelContainer"] anchors_preset = 8 @@ -28,8 +27,7 @@ theme_override_constants/separation = 8 [node name="Title" type="Label" parent="MainContainer/TextContainer"] layout_mode = 2 -theme_override_fonts/font = ExtResource("2_drhgn") -theme_override_font_sizes/font_size = 16 +theme_type_variation = &"BoldTitleLabel" horizontal_alignment = 1 [node name="Label" type="RichTextLabel" parent="MainContainer/TextContainer"] diff --git a/src/ui_widgets/element_frame.gd b/src/ui_widgets/element_frame.gd index c430aa5..1de21b6 100644 --- a/src/ui_widgets/element_frame.gd +++ b/src/ui_widgets/element_frame.gd @@ -44,6 +44,7 @@ func _ready() -> void: element.ancestor_attribute_changed.connect(title_bar.queue_redraw.unbind(1)) element.descendant_attribute_changed.connect(title_bar.queue_redraw.unbind(1)) element.attribute_changed.connect(title_bar.queue_redraw.unbind(1)) + Configs.theme_changed.connect(determine_selection_highlight) determine_selection_highlight() title_bar.queue_redraw() @@ -222,6 +223,21 @@ func determine_selection_highlight() -> void: title_color = Color.from_hsv(0.625, 0.45, 0.17) border_color = Color.from_hsv(0.6, 0.5, 0.35) + if not ThemeUtils.is_theme_dark: + color.s *= 0.2 + color.v = lerpf(color.v, 1.0, 0.875) + title_color.s *= 0.2 + title_color.v = lerpf(title_color.v, 1.0, 0.875) + border_color.v = lerpf(border_color.v, 1.0, 0.8) + if is_hovered: + color.s = lerpf(color.s, 1.0, 0.05) + title_color.s = lerpf(title_color.s, 1.0, 0.05) + border_color.v *= 0.9 + if is_selected: + color.s = lerpf(color.s, 1.0, 0.15) + title_color.s = lerpf(title_color.s, 1.0, 0.15) + border_color.v *= 0.65 + var depth := element.xid.size() - 1 var depth_tint := depth * 0.12 if depth > 0: @@ -282,14 +298,14 @@ func _on_title_bar_draw() -> void: HORIZONTAL_ALIGNMENT_LEFT, 180, 12).x / 2 ThemeUtils.mono_font.draw_string(title_bar_ci, Vector2(half_bar_width -\ half_title_width + element_icon_size.x / 2, 15), element.name, - HORIZONTAL_ALIGNMENT_LEFT, 180, 12) + HORIZONTAL_ALIGNMENT_LEFT, 180, 12, ThemeUtils.editable_text_color) element_icon.draw_rect(title_bar_ci, Rect2(Vector2(half_bar_width - half_title_width -\ - element_icon_size.x + 6, 1).round(), element_icon_size), false) + element_icon_size.x + 6, 1).round(), element_icon_size), false, ThemeUtils.tinted_contrast_color) var element_warnings := element.get_config_warnings() if not element_warnings.is_empty(): warning_icon.draw_rect(title_bar_ci, Rect2(Vector2(title_bar.size.x - 23, 2), - warning_icon.get_size()), false) + warning_icon.get_size()), false, ThemeUtils.warning_icon_color) # Block dragging from starting when pressing the title button. func _on_title_button_gui_input(event: InputEvent) -> void: diff --git a/src/ui_widgets/flag_field.tscn b/src/ui_widgets/flag_field.tscn index abbaa08..6870de6 100644 --- a/src/ui_widgets/flag_field.tscn +++ b/src/ui_widgets/flag_field.tscn @@ -8,16 +8,14 @@ base_font = ExtResource("1_p8s8y") spacing_top = -1 spacing_bottom = -1 -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_kfgda"] - [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_oo47u"] content_margin_left = 5.0 content_margin_top = 0.0 content_margin_right = 5.0 content_margin_bottom = 0.0 -bg_color = Color(0.4, 0.121569, 0.121569, 1) +bg_color = Color(0.65835345, 0.1463947, 0.15940602, 0.6) border_width_bottom = 2 -border_color = Color(0.85098, 0.168627, 0.168627, 1) +border_color = Color(0.9900269, 0.5077327, 0.4781272, 1) corner_radius_top_left = 3 corner_radius_top_right = 3 @@ -26,12 +24,14 @@ content_margin_left = 5.0 content_margin_top = 0.0 content_margin_right = 5.0 content_margin_bottom = 0.0 -bg_color = Color(0.12, 0.4, 0.12, 1) +bg_color = Color(0.24323256, 0.42435676, 0.115875855, 0.4) border_width_bottom = 2 -border_color = Color(0.466667, 0.85098, 0.0862745, 1) +border_color = Color(0.7655958, 0.9776526, 0.25387198, 1) corner_radius_top_left = 3 corner_radius_top_right = 3 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_kfgda"] + [node name="FlagField" type="Button"] custom_minimum_size = Vector2(0, 18) offset_right = 19.0 @@ -39,14 +39,14 @@ offset_bottom = 18.0 focus_mode = 0 mouse_filter = 1 mouse_default_cursor_shape = 2 -theme_override_colors/font_pressed_color = Color(0.74902, 1, 0.74902, 1) -theme_override_colors/font_color = Color(1, 0.75, 0.75, 1) +theme_override_colors/font_color = Color(1, 0.8456523, 0.8433526, 1) +theme_override_colors/font_pressed_color = Color(0.6350836, 1, 0.5034966, 1) theme_override_fonts/font = SubResource("FontVariation_46ud6") theme_override_font_sizes/font_size = 14 -theme_override_styles/disabled = SubResource("StyleBoxEmpty_kfgda") -theme_override_styles/hover = SubResource("StyleBoxFlat_oo47u") -theme_override_styles/pressed = SubResource("StyleBoxFlat_uepoa") theme_override_styles/normal = SubResource("StyleBoxFlat_oo47u") +theme_override_styles/pressed = SubResource("StyleBoxFlat_uepoa") +theme_override_styles/hover = SubResource("StyleBoxFlat_oo47u") +theme_override_styles/disabled = SubResource("StyleBoxEmpty_kfgda") toggle_mode = true text = "0" script = ExtResource("2_0bhg4") diff --git a/src/ui_widgets/fps_limit_dropdown.gd b/src/ui_widgets/fps_limit_dropdown.gd new file mode 100644 index 0000000..1ba6683 --- /dev/null +++ b/src/ui_widgets/fps_limit_dropdown.gd @@ -0,0 +1,47 @@ +# The need for a unique 0 value made the regular numeric dropdown unusable. +extends HBoxContainer + +signal value_changed(new_value: String) + +@onready var line_edit: BetterLineEdit = $LineEdit +@onready var button: Button = $Button + +const values: PackedInt32Array = [0, 30, 60, 90, 120, 144, 240, 360] +const min_value := SaveData.MAX_FPS_MIN +const max_value := SaveData.MAX_FPS_MAX + +var _value := "" + +func set_value(new_value: String) -> void: + var current_num := roundi(_value.to_float()) + var proposed_num := roundi(new_value.to_float()) + if is_nan(proposed_num) or proposed_num == INF: + proposed_num = 0 + elif proposed_num != 0: + proposed_num = clampi(proposed_num, min_value, max_value) + + if not is_equal_approx(current_num, proposed_num): + _value = to_str(proposed_num) + value_changed.emit(_value) + elif _value.is_empty(): + _value = to_str(proposed_num) + if is_instance_valid(line_edit): + line_edit.text = _value + +func _ready() -> void: + line_edit.text_submitted.connect(set_value) + button.pressed.connect(_on_button_pressed) + +func _on_button_pressed() -> void: + var btn_arr: Array[Button] = [] + for val in values: + var new_value := to_str(val) + btn_arr.append(ContextPopup.create_button(new_value, + set_value.bind(new_value), new_value == _value)) + var value_picker := ContextPopup.new() + value_picker.setup(btn_arr, false, size.x) + HandlerGUI.popup_under_rect(value_picker, line_edit.get_global_rect(), get_viewport()) + + +func to_str(num: int) -> String: + return Translator.translate("Unlimited") if num == 0 else String.num_int64(num) diff --git a/src/ui_widgets/fps_limit_dropdown.gd.uid b/src/ui_widgets/fps_limit_dropdown.gd.uid new file mode 100644 index 0000000..070a17a --- /dev/null +++ b/src/ui_widgets/fps_limit_dropdown.gd.uid @@ -0,0 +1 @@ +uid://bfpf8mrhc3135 diff --git a/src/ui_widgets/fps_limit_dropdown.tscn b/src/ui_widgets/fps_limit_dropdown.tscn new file mode 100644 index 0000000..36361c1 --- /dev/null +++ b/src/ui_widgets/fps_limit_dropdown.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=5 format=3 uid="uid://ihq4xu3ehh6u"] + +[ext_resource type="Script" uid="uid://bfpf8mrhc3135" path="res://src/ui_widgets/fps_limit_dropdown.gd" id="1_y7tut"] +[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="2_ew4ut"] +[ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="3_rmrur"] +[ext_resource type="Texture2D" uid="uid://coda6chhcatal" path="res://assets/icons/Arrow.svg" id="4_cvdg3"] + +[node name="FPSLimitDropdown" type="HBoxContainer"] +custom_minimum_size = Vector2(0, 22) +offset_right = 49.0 +offset_bottom = 22.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +theme_override_constants/separation = 0 +script = ExtResource("1_y7tut") + +[node name="LineEdit" type="LineEdit" parent="."] +layout_mode = 2 +theme_type_variation = &"RightConnectedLineEdit" +theme_override_fonts/font = ExtResource("2_ew4ut") +script = ExtResource("3_rmrur") + +[node name="Button" type="Button" parent="."] +custom_minimum_size = Vector2(15, 0) +layout_mode = 2 +focus_mode = 0 +mouse_filter = 1 +mouse_default_cursor_shape = 2 +theme_type_variation = &"LeftConnectedButton" +icon = ExtResource("4_cvdg3") +expand_icon = true diff --git a/src/ui_widgets/good_color_picker.gd b/src/ui_widgets/good_color_picker.gd index 3f04c8c..51498b8 100644 --- a/src/ui_widgets/good_color_picker.gd +++ b/src/ui_widgets/good_color_picker.gd @@ -89,18 +89,21 @@ func setup_color(new_color: String, default_color: Color) -> void: update() -func add_color_space_buttons() -> void: +func update_color_space_buttons() -> void: + for child in color_space_container.get_children(): + child.queue_free() + var normal_stylebox := StyleBoxFlat.new() - normal_stylebox.bg_color = ThemeUtils.translucent_button_color_normal + normal_stylebox.bg_color = ThemeUtils.hover_overlay_color var hover_stylebox := normal_stylebox.duplicate() - hover_stylebox.bg_color = ThemeUtils.translucent_button_color_hover + hover_stylebox.bg_color = ThemeUtils.strong_hover_overlay_color var pressed_stylebox := StyleBoxFlat.new() - pressed_stylebox.bg_color = ThemeUtils.translucent_button_color_pressed + pressed_stylebox.bg_color = ThemeUtils.hover_pressed_overlay_color pressed_stylebox.border_width_top = 2 pressed_stylebox.content_margin_bottom = 2.0 - pressed_stylebox.border_color = Color(ThemeUtils.common_editable_text_color, 0.7) + pressed_stylebox.border_color = Color(ThemeUtils.editable_text_color, 0.7) for color_space: SliderMode in [SliderMode.RGB, SliderMode.HSV]: var btn := Button.new() @@ -109,6 +112,7 @@ func add_color_space_buttons() -> void: btn.add_theme_stylebox_override("normal", normal_stylebox) btn.add_theme_stylebox_override("hover", hover_stylebox) btn.add_theme_stylebox_override("pressed", pressed_stylebox) + btn.add_theme_stylebox_override("hover_pressed", pressed_stylebox) btn.end_bulk_theme_override() btn.size_flags_horizontal = Control.SIZE_EXPAND_FILL btn.focus_mode = Control.FOCUS_NONE @@ -136,7 +140,8 @@ func update_keyword_button() -> void: keyword_button.show() func _ready() -> void: - add_color_space_buttons() + Configs.theme_changed.connect(update_color_space_buttons) + update_color_space_buttons() # Set up signals. widgets_arr[0].gui_input.connect(parse_slider_input.bind(0, true)) widgets_arr[1].gui_input.connect(parse_slider_input.bind(1)) @@ -431,7 +436,9 @@ func _on_color_rect_draw() -> void: # Draw inside the side slider to give it a little arrow to the side. func _on_side_slider_draw() -> void: - var arrow_modulate := Color(1, 1, 1) if sliders_dragged[0] else Color(1, 1, 1, 0.7) + var arrow_modulate := ThemeUtils.tinted_contrast_color + if not sliders_dragged[0]: + arrow_modulate.a = 0.7 widgets_arr[0].draw_texture(side_slider_arrow, Vector2(0, tracks_arr[0].position.y +\ tracks_arr[0].size.y * (1 - display_color.v) -\ side_slider_arrow.get_height() / 2.0), arrow_modulate) @@ -446,12 +453,14 @@ func _draw() -> void: # Helper for drawing the horizontal sliders. func draw_hslider(idx: int, offset: float, chr: String) -> void: - var arrow_modulate := Color(1, 1, 1) if sliders_dragged[idx] else Color(1, 1, 1, 0.7) + var arrow_modulate := ThemeUtils.tinted_contrast_color + if not sliders_dragged[idx]: + arrow_modulate.a = 0.7 widgets_arr[idx].draw_texture(slider_arrow, Vector2(tracks_arr[idx].position.x +\ tracks_arr[idx].size.x * offset - slider_arrow.get_width() / 2.0, tracks_arr[idx].size.y), arrow_modulate) - widgets_arr[idx].draw_string(get_theme_default_font(), - Vector2(-12, 11), chr, HORIZONTAL_ALIGNMENT_CENTER, 12, 14) + widgets_arr[idx].draw_string(get_theme_default_font(), Vector2(-12, 11), chr, + HORIZONTAL_ALIGNMENT_CENTER, 12, 14, ThemeUtils.text_color) # Make sure the arrows are redrawn when the tracks finish resizing. func _on_track_resized() -> void: @@ -534,4 +543,4 @@ func _unhandled_input(event: InputEvent) -> void: func _on_eyedropper_pressed() -> void: var eyedropper_popup := EyedropperPopupScene.instantiate() eyedropper_popup.color_picked.connect(register_visual_change.bind(false)) - HandlerGUI.add_popup(eyedropper_popup) + HandlerGUI.add_popup(eyedropper_popup, false) diff --git a/src/ui_widgets/good_color_picker.tscn b/src/ui_widgets/good_color_picker.tscn index 60e83cc..37690e7 100644 --- a/src/ui_widgets/good_color_picker.tscn +++ b/src/ui_widgets/good_color_picker.tscn @@ -126,8 +126,8 @@ grow_horizontal = 2 grow_vertical = 2 focus_mode = 0 theme_type_variation = &"TextButton" -theme_override_colors/icon_disabled_color = Color(0, 0, 0, 0) theme_override_colors/icon_normal_color = Color(0, 0, 0, 0) +theme_override_colors/icon_disabled_color = Color(0, 0, 0, 0) icon = ExtResource("5_rh0xc") icon_alignment = 1 diff --git a/src/ui_widgets/number_dropdown.gd b/src/ui_widgets/number_dropdown.gd index b35ae7d..62e6309 100644 --- a/src/ui_widgets/number_dropdown.gd +++ b/src/ui_widgets/number_dropdown.gd @@ -4,6 +4,7 @@ extends HBoxContainer signal value_changed(new_value: String) @onready var line_edit: BetterLineEdit = $LineEdit +@onready var button: Button = $Button @export var values: PackedFloat64Array @export var is_integer := false @@ -23,9 +24,16 @@ func set_value(new_value: String) -> void: if not is_equal_approx(current_num, proposed_num): _value = to_str(proposed_num) value_changed.emit(_value) + elif _value.is_empty(): + _value = to_str(proposed_num) if is_instance_valid(line_edit): line_edit.text = _value +func _ready() -> void: + line_edit.text_changed.connect(_on_text_changed) + line_edit.text_submitted.connect(_on_text_submitted) + button.pressed.connect(_on_button_pressed) + func _on_button_pressed() -> void: var btn_arr: Array[Button] = [] for val in values: diff --git a/src/ui_widgets/number_dropdown.tscn b/src/ui_widgets/number_dropdown.tscn index ecd0939..c589176 100644 --- a/src/ui_widgets/number_dropdown.tscn +++ b/src/ui_widgets/number_dropdown.tscn @@ -29,7 +29,3 @@ mouse_default_cursor_shape = 2 theme_type_variation = &"LeftConnectedButton" icon = ExtResource("4_vet1k") expand_icon = true - -[connection signal="text_changed" from="LineEdit" to="." method="_on_text_changed"] -[connection signal="text_submitted" from="LineEdit" to="." method="_on_text_submitted"] -[connection signal="pressed" from="Button" to="." method="_on_button_pressed"] diff --git a/src/ui_widgets/number_field.gd b/src/ui_widgets/number_field.gd index 68251e0..d146c95 100644 --- a/src/ui_widgets/number_field.gd +++ b/src/ui_widgets/number_field.gd @@ -41,6 +41,9 @@ func _ready() -> void: element.attribute_changed.connect(_on_element_attribute_changed) if attribute_name in DB.propagated_attributes: element.ancestor_attribute_changed.connect(_on_element_ancestor_attribute_changed) + # These default attributes can change when cx and cy change. + if element is ElementRadialGradient and attribute_name in ["fx", "fy"]: + element.attribute_changed.connect(_on_element_other_attribute_changed) tooltip_text = attribute_name text_submitted.connect(set_value.bind(true)) text_change_canceled.connect(sync) @@ -52,6 +55,12 @@ func _on_element_attribute_changed(attribute_changed: String) -> void: if attribute_name == attribute_changed: set_value(element.get_attribute_value(attribute_name)) +func _on_element_other_attribute_changed(attribute_changed: String) -> void: + if (attribute_name == "fx" and attribute_changed == "cx") or\ + (attribute_name == "fy" and attribute_changed == "cy"): + setup_placeholder() + sync() + func _on_element_ancestor_attribute_changed(attribute_changed: String) -> void: if attribute_name == attribute_changed: setup_placeholder() diff --git a/src/ui_widgets/number_field_with_slider.gd b/src/ui_widgets/number_field_with_slider.gd index 6e1d256..7900988 100644 --- a/src/ui_widgets/number_field_with_slider.gd +++ b/src/ui_widgets/number_field_with_slider.gd @@ -103,11 +103,11 @@ func _draw() -> void: MIN_VALUE) / MAX_VALUE # Create a stylebox that'll occupy the exact amount of space. var fill_stylebox := StyleBoxFlat.new() - fill_stylebox.bg_color = Color("def") + fill_stylebox.bg_color = ThemeUtils.tinted_contrast_color if not slider_dragged and slider_hovered: - fill_stylebox.bg_color.a = 0.75 + fill_stylebox.bg_color.a = 0.8 elif not slider_hovered: - fill_stylebox.bg_color.a = 0.5 + fill_stylebox.bg_color.a = 0.6 fill_stylebox.draw(ci, Rect2(get_size().x - BUTTON_WIDTH, get_size().y - 2 - fill_height, BUTTON_WIDTH - 2, fill_height)) if slider_dragged: diff --git a/src/ui_widgets/options_dialog.gd b/src/ui_widgets/options_dialog.gd index 6ef1d36..0d603a8 100644 --- a/src/ui_widgets/options_dialog.gd +++ b/src/ui_widgets/options_dialog.gd @@ -11,7 +11,7 @@ extends PanelContainer @onready var checkbox: CheckBox = $MainContainer/TextContainer/CheckBox func setup(title: String, message: String, list := PackedStringArray(), -checkbox_text := "", ) -> void: +checkbox_text := "") -> void: label.text = message title_label.text = title if not list.is_empty(): diff --git a/src/ui_widgets/options_dialog.tscn b/src/ui_widgets/options_dialog.tscn index a815513..cc1f2fb 100644 --- a/src/ui_widgets/options_dialog.tscn +++ b/src/ui_widgets/options_dialog.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=3 format=3 uid="uid://rsf6f7pytv7u"] +[gd_scene load_steps=2 format=3 uid="uid://rsf6f7pytv7u"] [ext_resource type="Script" uid="uid://vjqyfycqgf8h" path="res://src/ui_widgets/options_dialog.gd" id="1_shf74"] -[ext_resource type="FontFile" uid="uid://dc0w4sx0h0fui" path="res://assets/fonts/FontBold.ttf" id="2_it3qh"] [node name="OptionsDialog" type="PanelContainer"] anchors_preset = 8 @@ -28,8 +27,7 @@ theme_override_constants/separation = 8 [node name="Title" type="Label" parent="MainContainer/TextContainer"] layout_mode = 2 -theme_override_fonts/font = ExtResource("2_it3qh") -theme_override_font_sizes/font_size = 16 +theme_type_variation = &"BoldTitleLabel" horizontal_alignment = 1 [node name="Label" type="RichTextLabel" parent="MainContainer/TextContainer"] diff --git a/src/ui_widgets/palette_config.gd b/src/ui_widgets/palette_config.gd index 2e3998f..2b12c8e 100644 --- a/src/ui_widgets/palette_config.gd +++ b/src/ui_widgets/palette_config.gd @@ -16,7 +16,8 @@ var currently_edited_idx := -1 @onready var colors_container: HFlowContainer = $MainContainer/ColorsContainer @onready var warning_sign: TextureRect = $WarningSign/TextureRect -func setup_theme() -> void: +func update_theme() -> void: + warning_sign.modulate = ThemeUtils.warning_icon_color palette_button.begin_bulk_theme_override() const CONST_ARR: PackedStringArray = ["normal", "hover", "pressed"] for theme_type in CONST_ARR: @@ -45,8 +46,8 @@ func _ready() -> void: name_edit.text_changed.connect(_on_name_edit_text_changed) name_edit.text_submitted.connect(_on_name_edit_text_submitted) mouse_exited.connect(clear_proposed_drop) - Configs.theme_changed.connect(setup_theme) - setup_theme() + Configs.theme_changed.connect(update_theme) + update_theme() # Rebuilds the content of the colors container. func rebuild_colors() -> void: @@ -162,7 +163,7 @@ func set_label_text(new_text: String) -> void: if palette.title.is_empty(): for theme_type in CONST_ARR: palette_button.add_theme_color_override(theme_type, - ThemeUtils.common_subtle_text_color) + ThemeUtils.subtle_text_color) else: if not Configs.savedata.is_palette_valid(palette): for theme_type in CONST_ARR: diff --git a/src/ui_widgets/path_command_button.gd b/src/ui_widgets/path_command_button.gd index 8787b5f..0655097 100644 --- a/src/ui_widgets/path_command_button.gd +++ b/src/ui_widgets/path_command_button.gd @@ -25,9 +25,9 @@ func set_warning(new_state := true) -> void: # Couldn't think of any way to get RichTextLabel to autoresize its font on one line. func _draw() -> void: var text_obj := TextLine.new() - var text_color := Color(1, 1, 1) + var text_color := ThemeUtils.highlighted_text_color if disabled: - text_color = Color(0.5, 0.5, 0.5) + text_color = ThemeUtils.dimmer_text_color elif warned: text_color = Configs.savedata.basic_color_warning diff --git a/src/ui_widgets/path_command_button.tscn b/src/ui_widgets/path_command_button.tscn index b5042f7..9e47849 100644 --- a/src/ui_widgets/path_command_button.tscn +++ b/src/ui_widgets/path_command_button.tscn @@ -10,5 +10,5 @@ grow_horizontal = 2 size_flags_horizontal = 3 size_flags_vertical = 3 mouse_default_cursor_shape = 2 -theme_type_variation = &"FlatButton" +theme_type_variation = &"ContextButton" script = ExtResource("1_q6blt") diff --git a/src/ui_widgets/path_popup.gd b/src/ui_widgets/path_popup.gd index b5fc466..0b5847e 100644 --- a/src/ui_widgets/path_popup.gd +++ b/src/ui_widgets/path_popup.gd @@ -43,4 +43,5 @@ func force_relativity(relative: bool) -> void: else: command_button.command_char = command_button.command_char.to_upper() command_button.queue_redraw() + await get_tree().process_frame reset_size() diff --git a/src/ui_widgets/path_popup.tscn b/src/ui_widgets/path_popup.tscn index 2feb9fa..41d161c 100644 --- a/src/ui_widgets/path_popup.tscn +++ b/src/ui_widgets/path_popup.tscn @@ -18,11 +18,7 @@ layout_mode = 2 theme_override_constants/margin_top = 2 theme_override_constants/margin_right = 4 -[node name="MainContainer" type="VBoxContainer" parent="VBoxContainer/MarginContainer"] -layout_mode = 2 -theme_override_constants/separation = 2 - -[node name="RelativeToggle" type="CheckButton" parent="VBoxContainer/MarginContainer/MainContainer"] +[node name="RelativeToggle" type="CheckButton" parent="VBoxContainer/MarginContainer"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 8 diff --git a/src/ui_widgets/pathdata_field.gd b/src/ui_widgets/pathdata_field.gd index 8d00885..fdce2b5 100644 --- a/src/ui_widgets/pathdata_field.gd +++ b/src/ui_widgets/pathdata_field.gd @@ -11,13 +11,6 @@ const attribute_name = "d" # Never propagates. const STRIP_HEIGHT = 22.0 -@export var absolute_button_normal: StyleBoxFlat -@export var absolute_button_hovered: StyleBoxFlat -@export var absolute_button_pressed: StyleBoxFlat -@export var relative_button_normal: StyleBoxFlat -@export var relative_button_hovered: StyleBoxFlat -@export var relative_button_pressed: StyleBoxFlat - signal focused const MiniNumberFieldScene = preload("mini_number_field.tscn") @@ -59,6 +52,9 @@ func set_value(new_value: String, save := false) -> void: func setup() -> void: Configs.language_changed.connect(update_translation) + update_translation() + Configs.theme_changed.connect(update_theme) + update_theme() sync() element.attribute_changed.connect(_on_element_attribute_changed) line_edit.tooltip_text = attribute_name @@ -77,7 +73,6 @@ func setup() -> void: # This is because the widget can sometimes be created before they are cleared # from a past state of the SVG. So we trigger this method to update those. _on_selections_or_hover_changed() - update_translation() func get_inner_rect(index: int) -> Rect2: @@ -92,6 +87,12 @@ func _on_element_attribute_changed(attribute_changed: String) -> void: func update_translation() -> void: line_edit.placeholder_text = Translator.translate("No path data") +func update_theme() -> void: + mini_line_edit_stylebox = get_theme_stylebox("normal", "MiniLineEdit") + mini_line_edit_font_size = get_theme_font_size("font_size", "MiniLineEdit") + mini_line_edit_font_color = get_theme_color("font_color", "MiniLineEdit") + queue_redraw() + func _on_line_edit_focus_entered() -> void: focused.emit() @@ -237,11 +238,10 @@ func _commands_draw() -> void: if selected or hovered: var stylebox := StyleBoxFlat.new() stylebox.set_corner_radius_all(3) - if selected: - stylebox.bg_color = Color(0.7, 0.7, 1.0, 0.18) if hovered else\ - Color(0.6, 0.6, 1.0, 0.16) - else: - stylebox.bg_color = Color(0.8, 0.8, 1.0, 0.05) + stylebox.bg_color = ThemeUtils.soft_pressed_overlay_color if selected else\ + Color.TRANSPARENT + if hovered: + stylebox.bg_color = stylebox.bg_color.blend(Color(ThemeUtils.soft_hover_overlay_color)) stylebox.draw(ci, Rect2(Vector2(0, v_offset), Vector2(commands_container.size.x, STRIP_HEIGHT))) # Draw the child controls. They are going to be drawn, not added as a node unless @@ -253,14 +253,14 @@ func _commands_draw() -> void: var cmd_char := cmd.command_char # Draw the action button. more_icon.draw_rect(ci, Rect2(Vector2(commands_container.size.x - 19, 4 + v_offset), - Vector2(14, 14)), false, ThemeUtils.icon_normal_color) + Vector2(14, 14)), false, ThemeUtils.context_icon_normal_color) # Draw the relative/absolute button. - var relative_stylebox := absolute_button_normal if\ - Utils.is_string_upper(cmd_char) else relative_button_normal + var relative_stylebox := get_theme_stylebox("normal", "PathCommandAbsoluteButton") if\ + Utils.is_string_upper(cmd_char) else get_theme_stylebox("normal", "PathCommandRelativeButton") relative_stylebox.draw(ci, Rect2(Vector2(3, 2 + v_offset), Vector2(18, STRIP_HEIGHT - 4))) ThemeUtils.mono_font.draw_string(ci, Vector2(6, v_offset + STRIP_HEIGHT - 6), - cmd_char, HORIZONTAL_ALIGNMENT_CENTER, 12, 13) + cmd_char, HORIZONTAL_ALIGNMENT_CENTER, 12, 13, ThemeUtils.text_color) # Draw the fields. var rect := Rect2(Vector2(25, 2 + v_offset), Vector2(44, 18)) match cmd_char.to_upper(): @@ -379,24 +379,11 @@ func setup_path_command_controls(idx: int) -> Control: relative_button.focus_mode = Control.FOCUS_NONE relative_button.mouse_filter = Control.MOUSE_FILTER_PASS relative_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND - relative_button.begin_bulk_theme_override() relative_button.add_theme_font_override("font", ThemeUtils.mono_font) - relative_button.add_theme_color_override("font_color", Color(1, 1, 1)) - # Disabled styleboxes are unused, but must be set for the correct content margins. - if is_absolute: - relative_button.add_theme_stylebox_override("disabled", absolute_button_normal) - relative_button.add_theme_stylebox_override("normal", absolute_button_normal) - relative_button.add_theme_stylebox_override("hover", absolute_button_hovered) - relative_button.add_theme_stylebox_override("pressed", absolute_button_pressed) - else: - relative_button.add_theme_stylebox_override("disabled", relative_button_normal) - relative_button.add_theme_stylebox_override("normal", relative_button_normal) - relative_button.add_theme_stylebox_override("hover", relative_button_hovered) - relative_button.add_theme_stylebox_override("pressed", relative_button_pressed) - relative_button.end_bulk_theme_override() + relative_button.theme_type_variation = "PathCommandAbsoluteButton" if is_absolute else\ + "PathCommandRelativeButton" relative_button.text = cmd_char - relative_button.tooltip_text =\ - TranslationUtils.get_path_command_description(cmd_char) + relative_button.tooltip_text = TranslationUtils.get_path_command_description(cmd_char) container.add_child(relative_button) relative_button.pressed.connect(_on_relative_button_pressed) relative_button.gui_input.connect(_eat_double_clicks.bind(relative_button)) diff --git a/src/ui_widgets/pathdata_field.tscn b/src/ui_widgets/pathdata_field.tscn index 47116f6..0482b7f 100644 --- a/src/ui_widgets/pathdata_field.tscn +++ b/src/ui_widgets/pathdata_field.tscn @@ -1,115 +1,13 @@ -[gd_scene load_steps=9 format=3 uid="uid://dqy5lv33sy5r7"] +[gd_scene load_steps=3 format=3 uid="uid://dqy5lv33sy5r7"] [ext_resource type="Script" uid="uid://p4nyhlbpwxe2" path="res://src/ui_widgets/pathdata_field.gd" id="1_22rk2"] [ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="2_48xgh"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2f3ln"] -content_margin_left = 5.0 -content_margin_top = 0.0 -content_margin_right = 5.0 -content_margin_bottom = 0.0 -bg_color = Color(0.8, 0.48, 0.16, 1) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(0.9, 0.684, 0.36, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2rd4c"] -content_margin_left = 5.0 -content_margin_top = 0.0 -content_margin_right = 5.0 -content_margin_bottom = 0.0 -bg_color = Color(0.85, 0.51, 0.17, 1) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(0.95, 0.798, 0.57, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_thafs"] -content_margin_left = 5.0 -content_margin_top = 0.0 -content_margin_right = 5.0 -content_margin_bottom = 0.0 -bg_color = Color(1, 0.75, 0.25, 1) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(1, 0.925, 0.7, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_g3fx0"] -content_margin_left = 5.0 -content_margin_top = 0.0 -content_margin_right = 5.0 -content_margin_bottom = 0.0 -bg_color = Color(0.64, 0.16, 0.8, 1) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(0.7425, 0.45, 0.9, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7fw87"] -content_margin_left = 5.0 -content_margin_top = 0.0 -content_margin_right = 5.0 -content_margin_bottom = 0.0 -bg_color = Color(0.678431, 0.168627, 0.85098, 1) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(0.823333, 0.57, 0.95, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_l7drx"] -content_margin_left = 5.0 -content_margin_top = 0.0 -content_margin_right = 5.0 -content_margin_bottom = 0.0 -bg_color = Color(0.75, 0.25, 1, 1) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(0.875, 0.7, 1, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - [node name="PathdataField" type="VBoxContainer"] offset_right = 250.0 offset_bottom = 45.0 theme_override_constants/separation = 2 script = ExtResource("1_22rk2") -absolute_button_normal = SubResource("StyleBoxFlat_2f3ln") -absolute_button_hovered = SubResource("StyleBoxFlat_2rd4c") -absolute_button_pressed = SubResource("StyleBoxFlat_thafs") -relative_button_normal = SubResource("StyleBoxFlat_g3fx0") -relative_button_hovered = SubResource("StyleBoxFlat_7fw87") -relative_button_pressed = SubResource("StyleBoxFlat_l7drx") [node name="LineEdit" type="LineEdit" parent="."] custom_minimum_size = Vector2(250, 0) diff --git a/src/ui_widgets/points_field.gd b/src/ui_widgets/points_field.gd index 9fb7081..a0f7519 100644 --- a/src/ui_widgets/points_field.gd +++ b/src/ui_widgets/points_field.gd @@ -51,6 +51,9 @@ func set_value(new_value: String, save := false) -> void: func setup() -> void: Configs.language_changed.connect(update_translation) + update_translation() + Configs.theme_changed.connect(update_theme) + update_theme() sync() element.attribute_changed.connect(_on_element_attribute_changed) line_edit.tooltip_text = attribute_name @@ -68,7 +71,6 @@ func setup() -> void: # This is because the widget can sometimes be created before they are cleared # from a past state of the SVG. So we trigger this method to update those. _on_selections_or_hover_changed() - update_translation() func get_inner_rect(index: int) -> Rect2: @@ -83,6 +85,12 @@ func _on_element_attribute_changed(attribute_changed: String) -> void: func update_translation() -> void: line_edit.placeholder_text = Translator.translate("No points") +func update_theme() -> void: + mini_line_edit_stylebox = get_theme_stylebox("normal", "MiniLineEdit") + mini_line_edit_font_size = get_theme_font_size("font_size", "MiniLineEdit") + mini_line_edit_font_color = get_theme_color("font_color", "MiniLineEdit") + queue_redraw() + func _on_line_edit_focus_entered() -> void: focused.emit() @@ -231,11 +239,10 @@ func points_draw() -> void: if selected or hovered: var stylebox := StyleBoxFlat.new() stylebox.set_corner_radius_all(3) - if selected: - stylebox.bg_color = Color(0.7, 0.7, 1.0, 0.18) if hovered else\ - Color(0.6, 0.6, 1.0, 0.16) - else: - stylebox.bg_color = Color(0.8, 0.8, 1.0, 0.05) + stylebox.bg_color = ThemeUtils.soft_pressed_overlay_color if selected else\ + Color.TRANSPARENT + if hovered: + stylebox.bg_color = stylebox.bg_color.blend(Color(ThemeUtils.soft_hover_overlay_color)) stylebox.draw(ci, Rect2(Vector2(0, v_offset), Vector2(points_container.size.x, STRIP_HEIGHT))) # Draw the child controls. They are going to be drawn, not added as a node unless @@ -247,7 +254,7 @@ func points_draw() -> void: var point_y := element.get_attribute_list(attribute_name)[i * 2 + 1] # Draw the action button. more_icon.draw_rect(ci, Rect2(Vector2(points_container.size.x - 19, 4 + v_offset), - Vector2(14, 14)), false, ThemeUtils.icon_normal_color) + Vector2(14, 14)), false, ThemeUtils.tinted_contrast_color) # Draw the fields. draw_numfield(Rect2(Vector2(4, 2 + v_offset), Vector2(44, 18)), point_x) draw_numfield(Rect2(Vector2(52, 2 + v_offset), Vector2(44, 18)), point_y) diff --git a/src/ui_widgets/profile_frame.gd b/src/ui_widgets/profile_frame.gd index 16c82ce..259966b 100644 --- a/src/ui_widgets/profile_frame.gd +++ b/src/ui_widgets/profile_frame.gd @@ -1,14 +1,16 @@ # This is similar to SettingFrame, but specifically for dropdowns without a default value. -extends Control +extends MarginContainer const Dropdown = preload("res://src/ui_widgets/dropdown.gd") signal value_changed +signal defaults_applied const DropdownScene = preload("res://src/ui_widgets/dropdown.tscn") var getter: Callable var setter: Callable +var disabled_check_callback: Callable var text: String var ci := get_canvas_item() @@ -16,22 +18,36 @@ var dropdown: Dropdown var is_hovered := false +@onready var button: Button = $HBoxContainer/Button +@onready var control: Control = $HBoxContainer/Control + func setup_dropdown(values: Array, value_text_map: Dictionary) -> void: dropdown = DropdownScene.instantiate() dropdown.values = values dropdown.value_text_map = value_text_map func _ready() -> void: - add_child(dropdown) + button.text = Translator.translate("Apply") + button.tooltip_text = Translator.translate("Apply all of this preset's defaults") + control.add_child(dropdown) dropdown.value_changed.connect(_dropdown_modification) mouse_entered.connect(_on_mouse_entered) mouse_exited.connect(_on_mouse_exited) resized.connect(setup_size) dropdown.set_value(getter.call()) - setup_size() + button_update_disabled() + button.pressed.connect(defaults_applied.emit) + control.resized.connect(setup_size.call_deferred) + setup_size.call_deferred() + +func button_update_disabled() -> void: + var should_disable: bool = disabled_check_callback.call() + button.disabled = should_disable + button.mouse_default_cursor_shape = Control.CURSOR_ARROW if should_disable else\ + Control.CURSOR_POINTING_HAND func setup_size() -> void: - dropdown.position = Vector2(size.x - 102, 3) + dropdown.position = Vector2(control.size.x - 102, 2) dropdown.size = Vector2(98, 22) queue_redraw() @@ -53,5 +69,5 @@ func _on_mouse_exited() -> void: func _draw() -> void: if is_hovered: get_theme_stylebox("hover", "FlatButton").draw(ci, Rect2(Vector2.ZERO, size)) - ThemeUtils.regular_font.draw_string(ci, Vector2(4, 18), text, - HORIZONTAL_ALIGNMENT_LEFT, -1, 13, Color(1, 1, 1, 0.9)) + ThemeUtils.regular_font.draw_string(ci, Vector2(4, 20), text, + HORIZONTAL_ALIGNMENT_LEFT, -1, 13, ThemeUtils.text_color) diff --git a/src/ui_widgets/profile_frame.tscn b/src/ui_widgets/profile_frame.tscn index 0c2e84c..48fc25a 100644 --- a/src/ui_widgets/profile_frame.tscn +++ b/src/ui_widgets/profile_frame.tscn @@ -2,11 +2,29 @@ [ext_resource type="Script" uid="uid://dfp0yap8evr57" path="res://src/ui_widgets/profile_frame.gd" id="1_urnhl"] -[node name="ProfileFrame" type="Control"] +[node name="ProfileFrame" type="MarginContainer"] custom_minimum_size = Vector2(0, 28) -layout_mode = 3 anchors_preset = 10 anchor_right = 1.0 +offset_bottom = 28.0 grow_horizontal = 2 -mouse_filter = 1 +theme_override_constants/margin_top = 2 +theme_override_constants/margin_right = 2 +theme_override_constants/margin_bottom = 2 script = ExtResource("1_urnhl") + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Control" type="Control" parent="HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 3.0 +mouse_filter = 2 + +[node name="Button" type="Button" parent="HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +focus_mode = 0 +mouse_filter = 1 +theme_type_variation = &"TranslucentButton" diff --git a/src/ui_widgets/setting_frame.gd b/src/ui_widgets/setting_frame.gd index e65146e..1e52e8d 100644 --- a/src/ui_widgets/setting_frame.gd +++ b/src/ui_widgets/setting_frame.gd @@ -8,6 +8,7 @@ signal value_changed const ColorEditScene = preload("res://src/ui_widgets/color_edit.tscn") const DropdownScene = preload("res://src/ui_widgets/dropdown.tscn") const NumberDropdownScene = preload("res://src/ui_widgets/number_dropdown.tscn") +const FpsLimitDropdownScene = preload("res://src/ui_widgets/fps_limit_dropdown.tscn") var getter: Callable var setter: Callable @@ -80,6 +81,13 @@ min_value: float, max_value: float) -> void: type = Type.NUMBER_DROPDOWN panel_width = 100 +func setup_fps_limit_dropdown() -> void: + widget = FpsLimitDropdownScene.instantiate() + add_child(widget) + widget.value_changed.connect(_fps_limit_dropdown_modification) + type = Type.NUMBER_DROPDOWN + panel_width = 100 + func _ready() -> void: widget.size = Vector2(panel_width - 32, 22) mouse_entered.connect(_on_mouse_entered) @@ -125,6 +133,22 @@ func _number_dropdown_modification(value: String) -> void: setter.call(actual_number) post_modification() +# TODO This was written very hastily, probably has a lot of redundancy. +func _fps_limit_dropdown_modification(value: String) -> void: + var actual_number: int + if value == Translator.translate("Unlimited"): + actual_number = 0 + else: + actual_number = roundi(NumstringParser.evaluate(value)) + + if is_nan(actual_number) or actual_number == INF: + actual_number = 0 + elif actual_number != 0: + actual_number = clampi(actual_number, widget.min_value, widget.max_value) + setter.call(actual_number) + post_modification() + + func post_modification() -> void: update_widgets() value_changed.emit() @@ -163,13 +187,17 @@ func _on_mouse_exited() -> void: func _draw() -> void: if is_hovered: - get_theme_stylebox("hover", "FlatButton").draw(ci, Rect2(Vector2.ZERO, size)) + var sb := StyleBoxFlat.new() + sb.set_corner_radius_all(3) + sb.set_content_margin_all(2) + sb.bg_color = ThemeUtils.soft_hover_overlay_color + sb.draw(ci, Rect2(Vector2.ZERO, size)) - var color := ThemeUtils.common_text_color + var color := ThemeUtils.text_color if disabled: - color = ThemeUtils.common_subtle_text_color + color = ThemeUtils.subtle_text_color elif dim_text: - color = ThemeUtils.common_dimmer_text_color + color = ThemeUtils.dimmer_text_color var non_panel_width := size.x - panel_width var text_obj := TextLine.new() @@ -177,5 +205,5 @@ func _draw() -> void: text_obj.width = non_panel_width - 16 text_obj.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS text_obj.draw(ci, Vector2(4, 5), color) - get_theme_stylebox("panel", "DarkPanel").draw(ci, Rect2(non_panel_width - 2, 2, + get_theme_stylebox("panel", "SubtleFlatPanel").draw(ci, Rect2(non_panel_width - 2, 2, panel_width, size.y - 4)) diff --git a/src/ui_widgets/setting_shortcut.gd b/src/ui_widgets/setting_shortcut.gd index fc9d89f..8ed4b20 100644 --- a/src/ui_widgets/setting_shortcut.gd +++ b/src/ui_widgets/setting_shortcut.gd @@ -72,9 +72,9 @@ func sync() -> void: new_btn.pressed.connect(enter_listening_mode.bind(i, true)) else: new_btn.begin_bulk_theme_override() - new_btn.add_theme_color_override("font_color", Color("def6")) - new_btn.add_theme_color_override("font_hover_color", Color("def6")) - new_btn.add_theme_color_override("font_pressed_color", Color("def8")) + new_btn.add_theme_color_override("font_color", Color(ThemeUtils.editable_text_color, 0.4)) + new_btn.add_theme_color_override("font_hover_color", Color(ThemeUtils.editable_text_color, 0.4)) + new_btn.add_theme_color_override("font_pressed_color", Color(ThemeUtils.editable_text_color, 0.6)) new_btn.end_bulk_theme_override() set_shortcut_button_text(new_btn, Translator.translate("Unused")) if i == events.size(): @@ -89,7 +89,7 @@ func sync() -> void: func enter_listening_mode(idx: int, show_delete_button := false) -> void: listening_idx = idx var btn := shortcut_buttons[idx] - setup_shortcut_button_font_colors(btn, Color("def")) + setup_shortcut_button_font_colors(btn, ThemeUtils.editable_text_color) btn.focus_mode = Control.FOCUS_CLICK btn.grab_focus() if btn.pressed.is_connected(enter_listening_mode): @@ -163,7 +163,7 @@ func _input(event: InputEvent) -> void: if event.is_action("ui_cancel"): cancel_listening() pending_event = null - setup_shortcut_button_font_colors(shortcut_button, Color("def")) + setup_shortcut_button_font_colors(shortcut_button, ThemeUtils.editable_text_color) accept_event() elif event.is_pressed(): set_shortcut_button_text(shortcut_button, event.as_text_keycode()) @@ -172,7 +172,7 @@ func _input(event: InputEvent) -> void: setup_shortcut_button_font_colors(shortcut_button, Configs.savedata.basic_color_warning) else: - setup_shortcut_button_font_colors(shortcut_button, Color("def")) + setup_shortcut_button_font_colors(shortcut_button, ThemeUtils.editable_text_color) accept_event() elif event.is_released(): if pending_event.keycode & KEY_MODIFIER_MASK == 0: @@ -193,7 +193,7 @@ func _input(event: InputEvent) -> void: update_shortcut() sync() pending_event = null - setup_shortcut_button_font_colors(shortcut_button, Color("def")) + setup_shortcut_button_font_colors(shortcut_button, ThemeUtils.editable_text_color) listening_idx = -1 func _on_reset_button_pressed() -> void: diff --git a/src/utils/AttributeFieldBuilder.gd b/src/utils/AttributeFieldBuilder.gd index dbed640..6c0d78c 100644 --- a/src/utils/AttributeFieldBuilder.gd +++ b/src/utils/AttributeFieldBuilder.gd @@ -1,4 +1,4 @@ -class_name AttributeFieldBuilder +@abstract class_name AttributeFieldBuilder const TransformFieldScene = preload("res://src/ui_widgets/transform_field.tscn") const NumberFieldScene = preload("res://src/ui_widgets/number_field.tscn") diff --git a/src/utils/ClipboardUtils.gd b/src/utils/ClipboardUtils.gd new file mode 100644 index 0000000..99fa8ac --- /dev/null +++ b/src/utils/ClipboardUtils.gd @@ -0,0 +1,151 @@ +# This class adds support for copying images. Currently not supported by Godot. +@abstract class_name ClipboardUtils + +## Returns true if this clipboard util is supported on the current platform. +static func is_supported(format: String) -> bool: + if OS.get_name() == "Web" and format not in ["png", "svg"]: + return false # Copying most image formats is not currently supported on web. + return OS.get_name() in ["Windows", "Linux", "Web"] or "BSD" in OS.get_name() + +## Returns an object containing the error information, as well as an "OK" type. +static func copy_image(export_data: ImageExportData) -> ClipboardError: + if not is_supported(export_data.format): + return ClipboardError.new(ErrorType.UnsupportedPlatform, []) + if export_data.format == "svg": + DisplayServer.clipboard_set(State.get_export_text()) + return ClipboardError.new(ErrorType.Ok, []) + var mime_type := ImageExportData.image_types_dict[export_data.format] + var cmd_output := [] + match OS.get_name(): + "Windows": + var temp_path := _save_temp_to_disk(export_data) + var ps_script := "" + if export_data.format == "webp": + ps_script = """ + Add-Type -AssemblyName PresentationCore + $uri = [Uri]'file:///%s' + $img = [System.Windows.Media.Imaging.BitmapFrame]::Create($uri) + [System.Windows.Clipboard]::SetImage($img) + """ % temp_path.replace('\\', '/') + else: # PresentationCore does not appear to support transparency. + ps_script = """ + Add-Type -AssemblyName System.Windows.Forms; + $bmp = New-Object Drawing.Bitmap('%s'); + [Windows.Forms.Clipboard]::SetImage($bmp) + """ % temp_path.replace('\\', '/') + var e := OS.execute("powershell.exe", ["-Command", ps_script], cmd_output, true) + _clean_temp(temp_path) + return ClipboardError.new(ErrorType.FailedExecuting if e < 0 else ErrorType.Ok, cmd_output) + "Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD": + # Finding out the display manager type. + var display_manager_arr := [] + OS.execute("echo", ["$XDG_SESSION_TYPE"], display_manager_arr) + var using_x11 := "x11" in "".join(display_manager_arr) + + # System clipboard utils. + const x11_utils := ["xclip"] + const wayland_utils := ["xclip", "wl-copy"] + var usable_utils := (x11_utils if using_x11 else wayland_utils) + + # Trying every available clipboard util + var cmd := [] + var exit_code := -99 + var temp_path := _save_temp_to_disk(export_data) + for util in usable_utils: + if OS.execute("which", [util]) == 0: + match util: + "xclip": + cmd = ["xclip", "-selection", "clipboard", "-l", "1", "-quiet", "-t", mime_type, "-i", temp_path] + exit_code = OS.execute(cmd[0], cmd.slice(1, len(cmd)-1), cmd_output, true) + "wl-copy": + cmd = ["wl-copy -f -t %s < '%s'" % [mime_type, temp_path]] + var dict := OS.execute_with_pipe("bash", ["-c", "".join(cmd)], false) + if dict.is_empty(): + return ClipboardError.new(ErrorType.FailedExecuting, cmd_output, " ".join(cmd)) + var stdio: FileAccess = dict.stdio + cmd_output.append(stdio.get_pascal_string()) + stdio.close() + var secs_waited := 0 + while OS.is_process_running(dict.pid): + OS.delay_msec(1000) + secs_waited += 1 + if secs_waited > 2: + OS.kill(dict.pid) + push_error("Timed out waiting for wl-copy") + exit_code = OS.get_process_exit_code(dict.pid) + if exit_code == 0: + _clean_temp(temp_path) + return ClipboardError.new(ErrorType.Ok, cmd_output) + _clean_temp(temp_path) + if exit_code == -99: + return ClipboardError.new(ErrorType.NoClipboardUtil, cmd_output, ", ".join(usable_utils)) + else: + return ClipboardError.new(ErrorType.FailedExecuting, cmd_output, " ".join(cmd)) + "macOS": + #_save_temp_to_disk(export_data) + #var picture_type := export_data.format.to_upper() + #var e := OS.execute("osascript", ["-e", "set the clipboard to (read (POSIX file \"%s\") as %s picture)" % [_get_temp_path(export_data), picture_type]], cmd_output, true) + #_clean_temp(export_data) + #return ClipboardError.new(ErrorType.FailedExecuting if e == -1 else ErrorType.Ok, cmd_output, "osascript") + return ClipboardError.new(ErrorType.UnsupportedPlatform, cmd_output) + "Android": + # TODO: Implement "copy to clipboard" util for Android. + return ClipboardError.new(ErrorType.UnsupportedPlatform, cmd_output) + "Web": + JavaScriptBridge.eval(""" + window.copyImageToClipboard = (data, mimeType) => { + const blob = new Blob([data], { "type": mimeType }); + console.log(mimeType); + navigator.clipboard.write([new ClipboardItem({ [mimeType]: blob })]); + } + """) + + var image_buf := export_data.image_to_buffer(export_data.generate_image()) + var buf = JavaScriptBridge.create_object("ArrayBuffer", image_buf.size()) + var data = JavaScriptBridge.create_object("Uint8Array", buf) + for i in len(image_buf): + data[i] = image_buf[i] + JavaScriptBridge.get_interface("window").window.copyImageToClipboard(data, mime_type) + return ClipboardError.new(ErrorType.Ok, cmd_output) + _: + return ClipboardError.new(ErrorType.UnsupportedPlatform, cmd_output) + +static func _save_temp_to_disk(export_data: ImageExportData) -> String: + var image_buf := export_data.image_to_buffer(export_data.generate_image()) + var file := FileAccess.create_temp(FileAccess.ModeFlags.WRITE, "export", export_data.format, true) + file.store_buffer(image_buf) + file.close() + return file.get_path_absolute() + +static func _clean_temp(temp_path: String) -> void: + DirAccess.remove_absolute(temp_path) + +enum ErrorType { + Ok, + Unknown, + UnsupportedPlatform, + FailedExecuting, + NoClipboardUtil +} + +class ClipboardError: + var type: ErrorType + var extra: String + var command_output: PackedStringArray + var message: String + func _init(_type: ErrorType, _cmd_out: PackedStringArray, _extra: String = "") -> void: + type = _type + extra = _extra + command_output = _cmd_out + match type: + ErrorType.FailedExecuting: + var cmd_out := '\n'.join(_cmd_out).strip_edges().replace("\n\n", '\n') + message = "Failed executing \"%s\"\n\n%s" % [extra, cmd_out] + if "xclip" in extra and "no authorization protocol" in cmd_out: + message += "\n\nConsider installing 'wl-clipboard' if you're using Wayland." + ErrorType.NoClipboardUtil: + message = "Failed to find a clipboard util.\nMake sure you've installed one of the following:\n%s" % extra + ErrorType.UnsupportedPlatform: + message = "Unsupported platform" + _: + message = "Unknown error" diff --git a/src/utils/ClipboardUtils.gd.uid b/src/utils/ClipboardUtils.gd.uid new file mode 100644 index 0000000..8c87000 --- /dev/null +++ b/src/utils/ClipboardUtils.gd.uid @@ -0,0 +1 @@ +uid://de0iyf4t86si6 diff --git a/src/utils/FileUtils.gd b/src/utils/FileUtils.gd index 9047ab8..27f4017 100644 --- a/src/utils/FileUtils.gd +++ b/src/utils/FileUtils.gd @@ -1,5 +1,5 @@ # This class has functionality for importing, exporting, and saving files. -class_name FileUtils extends RefCounted +@abstract class_name FileUtils enum FileState {SAME, DIFFERENT, DOES_NOT_EXIST} enum TabCloseMode {SINGLE, ALL_OTHERS, TO_LEFT, TO_RIGHT, EMPTY, SAVED} diff --git a/src/utils/ImageExportData.gd b/src/utils/ImageExportData.gd index dc24b64..1a8cf33 100644 --- a/src/utils/ImageExportData.gd +++ b/src/utils/ImageExportData.gd @@ -1,4 +1,4 @@ -class_name ImageExportData extends RefCounted +class_name ImageExportData const image_types_dict: Dictionary[String, String] = { "svg": "image/svg+xml", diff --git a/src/utils/ShortcutUtils.gd b/src/utils/ShortcutUtils.gd index 4c3b654..490ae28 100644 --- a/src/utils/ShortcutUtils.gd +++ b/src/utils/ShortcutUtils.gd @@ -1,4 +1,4 @@ -class_name ShortcutUtils extends RefCounted +@abstract class_name ShortcutUtils # Can be activated in all contexts. const UNIVERSAL_ACTIONS: PackedStringArray = ["quit", "toggle_fullscreen", "about_info", diff --git a/src/utils/ThemeUtils.gd b/src/utils/ThemeUtils.gd index 8b8406f..683b8ea 100644 --- a/src/utils/ThemeUtils.gd +++ b/src/utils/ThemeUtils.gd @@ -1,80 +1,206 @@ -class_name ThemeUtils extends RefCounted +@abstract class_name ThemeUtils const regular_font = preload("res://assets/fonts/Font.ttf") const bold_font = preload("res://assets/fonts/FontBold.ttf") const mono_font = preload("res://assets/fonts/FontMono.ttf") -const focus_color = Color("66ccffcc") -const common_panel_inner_color = Color("191926") -const common_panel_border_color = Color("414159") -const common_caret_color = Color("ddeeffdd") -const common_selection_color = Color("668cff66") -const common_disabled_selection_color = Color("aaaaaa66") -const common_inner_color_disabled = Color("0e0e12") -const common_border_color_disabled = Color("1e1f24") - -const common_text_color = Color("ffffffdd") -const common_highlighted_text_color = Color("ffffff") -const common_dim_text_color = Color("ffffffbb") -const common_dimmer_text_color = Color("ffffff77") -const common_subtle_text_color = Color("ffffff55") -const common_editable_text_color = Color("ddeeff") - -const common_button_inner_color_normal = Color("1c1e38") -const common_button_border_color_normal = Color("313859") -const common_button_inner_color_hover = Color("232840") -const common_button_border_color_hover = Color("43567a") -const common_button_inner_color_pressed = Color("3d5499") -const common_button_border_color_pressed = Color("608fbf") - -const connected_button_inner_color_normal = Color("10101a") -const connected_button_border_color_normal = Color("272733") -const connected_button_inner_color_hover = Color("181826") -const connected_button_border_color_hover = Color("3a3a4d") -const connected_button_inner_color_pressed = Color("313559") -const connected_button_border_color_pressed = Color("54678c") - -const icon_normal_color = Color("bfbfbf") -const context_icon_normal_color = Color("d9d9d9") -const icon_hover_color = Color("ffffff") -const icon_pressed_color = Color("bfdfff") -const icon_toggled_off_color = Color("808080") -const icon_toggled_on_color = Color("ddeeffdd") - -const translucent_button_color_normal = Color("ddeeff11") -const translucent_button_color_hover = Color("ddeeff22") -const translucent_button_color_pressed = Color("ddeeff44") -const translucent_button_color_disabled = Color("05060755") -const flat_button_color_hover = Color("ddeeff11") -const flat_button_color_pressed = Color("ddeeff33") -const flat_button_color_hovered_pressed = Color("ddeeff41") # hover.blend(pressed) -const flat_button_color_disabled = Color("05060744") - -const dark_panel_color = Color("11111a") -const light_panel_color = Color("ddeeff0c") -const overlay_panel_inner_color = Color("060614") -const overlay_panel_border_color = Color("344166") - -const scrollbar_normal_color = Color("344166") -const scrollbar_hover_color = Color("465580") -const scrollbar_pressed_color = Color("608fbf") -const scrollbar_background_color = Color("0f0f1a99") - -const line_edit_focus_color = Color("3d6b99") -const line_edit_background_color = Color("10101a") -const line_edit_normal_border_color = Color("272733") -const line_edit_hover_border_overlay_color = Color("ddeeff1b") -const mini_line_edit_normal_border_color = Color("4d4e66") - -const tab_container_panel_inner_color = Color("171726") -const tab_container_panel_border_color = Color("2a2e4d") -const tabbar_background_color = Color("13131f80") -const hovered_tab_color = Color("1f2138") -const normal_tab_color = Color("17192e") -const selected_tab_color = Color("293052") -const selected_tab_border_color = Color("608fbf") +static var base_color: Color +static var accent_color: Color +static var is_theme_dark: bool + +static var max_contrast_color: Color # White on dark theme, black on light theme. +static var extreme_theme_color: Color # Black on dark theme, white on light theme. +static var tinted_contrast_color: Color # Base color used to derive icon colors and other UI elements. +static var gray_color: Color # Light gray on dark theme, darker gray on light theme. +static var black_or_white_counter_accent_color: Color + +static var warning_icon_color: Color +static var info_icon_color: Color + +static var intermediate_color: Color # Color of button borders, derived from the accent color. +static var soft_intermediate_color: Color # Color of button insides. +static var softer_intermediate_color: Color # Color of tabs. +static var intermediate_hover_color: Color +static var soft_intermediate_hover_color: Color +static var softer_intermediate_hover_color: Color + +static var desaturated_color: Color # Color of line edits and others. +static var disabled_color: Color + +static var soft_base_color: Color +static var softer_base_color: Color +static var soft_accent_color: Color + +static var hover_overlay_color: Color +static var pressed_overlay_color: Color +static var hover_pressed_overlay_color: Color + +static var soft_hover_overlay_color: Color +static var soft_pressed_overlay_color: Color +static var soft_hover_pressed_overlay_color: Color + +static var strong_hover_overlay_color: Color +static var stronger_hover_overlay_color: Color + +static var basic_panel_inner_color: Color +static var basic_panel_border_color: Color +static var subtle_panel_border_color: Color + +static var caret_color: Color +static var selection_color: Color +static var disabled_selection_color: Color + +static var text_color: Color +static var highlighted_text_color: Color +static var dim_text_color: Color +static var dimmer_text_color: Color +static var subtle_text_color: Color +static var editable_text_color: Color + +static var common_button_inner_color_pressed: Color +static var common_button_border_color_pressed: Color +static var common_button_inner_color_disabled: Color +static var common_button_border_color_disabled: Color + +static var connected_button_inner_color_hover: Color +static var connected_button_border_color_hover: Color +static var connected_button_inner_color_pressed: Color +static var connected_button_border_color_pressed: Color + +static var context_icon_normal_color: Color +static var context_icon_hover_color: Color +static var context_icon_pressed_color: Color + +static var translucent_button_color_disabled: Color +static var flat_button_color_disabled: Color + +static var subtle_flat_panel_color: Color +static var contrast_flat_panel_color: Color +static var overlay_panel_inner_color: Color +static var overlay_panel_subtler_inner_color: Color + +static var scrollbar_pressed_color: Color + +static var line_edit_focus_color: Color +static var line_edit_inner_color: Color +static var line_edit_normal_border_color: Color +static var mini_line_edit_normal_border_color: Color +static var line_edit_inner_color_disabled: Color +static var line_edit_border_color_disabled: Color + +static var tab_container_panel_inner_color: Color +static var tab_container_panel_border_color: Color +static var selected_tab_color: Color +static var selected_tab_border_color: Color + +static func color_difference(color1: Color, color2: Color) -> float: + return (absf(color1.r - color2.r) + absf(color1.g - color2.g) + absf(color1.b - color2.b)) / 3.0 + +static func recalculate_colors() -> void: + base_color = Configs.savedata.base_color + accent_color = Configs.savedata.accent_color + is_theme_dark = (base_color.get_luminance() < 0.455) + + max_contrast_color = Color("#fff") if is_theme_dark else Color("000") + extreme_theme_color = Color("#000") if is_theme_dark else Color("fff") + tinted_contrast_color = Color("#def") if is_theme_dark else Color("061728") + gray_color = Color("808080") if is_theme_dark else Color("666") + black_or_white_counter_accent_color = Color("#000") if\ + accent_color.get_luminance() > 0.69 else Color("fff") + + warning_icon_color = Color("fca") if is_theme_dark else Color("96592c") + info_icon_color = Color("acf") if is_theme_dark else Color("3a6ab0") + + intermediate_color = accent_color.lerp(extreme_theme_color, 0.6) + if is_theme_dark: + intermediate_color.s *= 0.8 + else: + intermediate_color.s = lerpf(intermediate_color.s, 1.0, minf(0.2, intermediate_color.s)) + intermediate_color.v **= 0.75 + + desaturated_color = intermediate_color.lerp(gray_color, 0.3).lerp(extreme_theme_color, 0.08) + if not is_theme_dark: + desaturated_color.v *= 0.9 + disabled_color = intermediate_color.lerp(gray_color, 0.8) + + soft_base_color = base_color.lerp(max_contrast_color, 0.015 if is_theme_dark else 0.03) + softer_base_color = base_color.lerp(max_contrast_color, 0.04 if is_theme_dark else 0.08) + soft_accent_color = accent_color.lerp(extreme_theme_color, 0.1) + var intense_accent_color = accent_color.lerp(max_contrast_color, 0.1) + hover_overlay_color = Color(tinted_contrast_color, 0.08) + pressed_overlay_color = Color(tinted_contrast_color.lerp(soft_accent_color, 0.6), 0.24) + hover_pressed_overlay_color = hover_overlay_color.blend(pressed_overlay_color) + + soft_hover_overlay_color = Color(tinted_contrast_color, 0.06) + soft_pressed_overlay_color = Color(tinted_contrast_color.lerp(soft_accent_color, 0.4), 0.18) + soft_hover_pressed_overlay_color = soft_hover_overlay_color.blend(soft_pressed_overlay_color) + + strong_hover_overlay_color = Color(tinted_contrast_color, 0.12) + stronger_hover_overlay_color = Color(tinted_contrast_color, 0.16) + + intermediate_hover_color = intermediate_color.blend( + hover_overlay_color if is_theme_dark else stronger_hover_overlay_color) + soft_intermediate_color = intermediate_color.lerp(extreme_theme_color, 0.36) + soft_intermediate_hover_color = soft_intermediate_color.blend( + soft_hover_overlay_color if is_theme_dark else hover_overlay_color) + softer_intermediate_color = intermediate_color.lerp(extreme_theme_color, 0.44) + if not is_theme_dark: + softer_intermediate_color.s *= 0.8 + softer_intermediate_hover_color = softer_intermediate_color.blend( + soft_hover_overlay_color if is_theme_dark else hover_overlay_color) + + text_color = Color(max_contrast_color, 0.875) + highlighted_text_color = Color(max_contrast_color) + dim_text_color = Color(max_contrast_color, 0.75) + dimmer_text_color = Color(max_contrast_color, 0.5) + subtle_text_color = Color(max_contrast_color, 0.375) + editable_text_color = tinted_contrast_color + + basic_panel_inner_color = base_color.lerp(max_contrast_color, 0.05) + basic_panel_border_color = desaturated_color + subtle_panel_border_color = basic_panel_border_color.lerp(basic_panel_inner_color, 0.64) + caret_color = Color(tinted_contrast_color, 0.875) + selection_color = Color(accent_color, 0.375) + disabled_selection_color = Color(gray_color, 0.4) + + common_button_inner_color_pressed = intermediate_color.lerp(accent_color, 0.64).lerp(extreme_theme_color, 0.4) + common_button_border_color_pressed = intermediate_color.lerp(accent_color, 0.8) + common_button_inner_color_disabled = desaturated_color.lerp(gray_color, 0.4).lerp(extreme_theme_color, 0.72) + common_button_border_color_disabled = desaturated_color.lerp(gray_color, 0.4).lerp(extreme_theme_color, 0.56) + + context_icon_normal_color = tinted_contrast_color.lerp(extreme_theme_color, 0.2) + context_icon_hover_color = tinted_contrast_color + context_icon_pressed_color = max_contrast_color + + translucent_button_color_disabled = Color(disabled_color, 0.2) + flat_button_color_disabled = Color(disabled_color, 0.15) + + subtle_flat_panel_color = base_color + contrast_flat_panel_color = Color(tinted_contrast_color, 0.1) + overlay_panel_inner_color = base_color.lerp(extreme_theme_color, 0.1) + overlay_panel_subtler_inner_color = base_color.lerp(extreme_theme_color, 0.075) + + scrollbar_pressed_color = intermediate_color.blend(Color(tinted_contrast_color.lerp(intense_accent_color, 0.2), 0.4)) + + line_edit_focus_color = Color(accent_color, 0.4) + line_edit_inner_color = desaturated_color.lerp(extreme_theme_color, 0.74) + line_edit_normal_border_color = desaturated_color.lerp(extreme_theme_color, 0.42) + mini_line_edit_normal_border_color = desaturated_color.lerp(extreme_theme_color, 0.225) + line_edit_inner_color_disabled = desaturated_color.lerp(gray_color, 0.4).lerp(extreme_theme_color, 0.88) + line_edit_border_color_disabled = desaturated_color.lerp(gray_color, 0.4).lerp(extreme_theme_color, 0.68) + + connected_button_inner_color_hover = line_edit_inner_color.blend(hover_overlay_color) + connected_button_border_color_hover = line_edit_normal_border_color.blend(strong_hover_overlay_color) + connected_button_inner_color_pressed = line_edit_inner_color.lerp(common_button_inner_color_pressed, 0.8) + connected_button_border_color_pressed = line_edit_normal_border_color.lerp(common_button_border_color_pressed, 0.6) + + tab_container_panel_inner_color = base_color.lerp(intermediate_color, 0.15).lerp(extreme_theme_color, 0.02) + tab_container_panel_border_color = desaturated_color.lerp(extreme_theme_color, 0.4) + selected_tab_color = softer_intermediate_hover_color.lerp(accent_color, 0.2) + selected_tab_border_color = accent_color static func generate_theme() -> Theme: + recalculate_colors() var theme := Theme.new() theme.default_font = regular_font theme.default_font_size = 13 @@ -90,6 +216,7 @@ static func generate_theme() -> Theme: _setup_tabcontainer(theme) _setup_textedit(theme) _setup_tooltip(theme) + _setup_splitcontainer(theme) return theme static func generate_and_apply_theme() -> void: @@ -107,8 +234,8 @@ static func _setup_panelcontainer(theme: Theme) -> void: stylebox.set_border_width_all(2) stylebox.content_margin_left = 2.0 stylebox.content_margin_right = 2.0 - stylebox.bg_color = common_panel_inner_color - stylebox.border_color = common_panel_border_color + stylebox.bg_color = basic_panel_inner_color + stylebox.border_color = basic_panel_border_color theme.set_stylebox("panel", "PanelContainer", stylebox) theme.add_type("SpaciousPanel") @@ -126,27 +253,27 @@ static func _setup_panelcontainer(theme: Theme) -> void: theme.add_type("AcceptDialog") theme.set_stylebox("panel", "AcceptDialog", spacious_stylebox) - theme.add_type("DarkPanel") - theme.set_type_variation("DarkPanel", "PanelContainer") - var dark_stylebox := StyleBoxFlat.new() - dark_stylebox.set_corner_radius_all(3) - dark_stylebox.content_margin_left = 4.0 - dark_stylebox.content_margin_right = 4.0 - dark_stylebox.content_margin_top = 2.0 - dark_stylebox.content_margin_bottom = 2.0 - dark_stylebox.bg_color = dark_panel_color - theme.set_stylebox("panel", "DarkPanel", dark_stylebox) - - theme.add_type("LightPanel") - theme.set_type_variation("LightPanel", "PanelContainer") - var light_stylebox := StyleBoxFlat.new() - light_stylebox.set_corner_radius_all(5) - light_stylebox.content_margin_left = 4.0 - light_stylebox.content_margin_right = 4.0 - light_stylebox.content_margin_top = 2.0 - light_stylebox.content_margin_bottom = 2.0 - light_stylebox.bg_color = light_panel_color - theme.set_stylebox("panel", "LightPanel", light_stylebox) + theme.add_type("SubtleFlatPanel") + theme.set_type_variation("SubtleFlatPanel", "PanelContainer") + var subtle_panel_stylebox := StyleBoxFlat.new() + subtle_panel_stylebox.set_corner_radius_all(3) + subtle_panel_stylebox.content_margin_left = 4.0 + subtle_panel_stylebox.content_margin_right = 4.0 + subtle_panel_stylebox.content_margin_top = 2.0 + subtle_panel_stylebox.content_margin_bottom = 2.0 + subtle_panel_stylebox.bg_color = subtle_flat_panel_color + theme.set_stylebox("panel", "SubtleFlatPanel", subtle_panel_stylebox) + + theme.add_type("ContrastFlatPanel") + theme.set_type_variation("ContrastFlatPanel", "PanelContainer") + var contrast_panel_stylebox := StyleBoxFlat.new() + contrast_panel_stylebox.set_corner_radius_all(5) + contrast_panel_stylebox.content_margin_left = 4.0 + contrast_panel_stylebox.content_margin_right = 4.0 + contrast_panel_stylebox.content_margin_top = 2.0 + contrast_panel_stylebox.content_margin_bottom = 2.0 + contrast_panel_stylebox.bg_color = contrast_flat_panel_color + theme.set_stylebox("panel", "ContrastFlatPanel", contrast_panel_stylebox) theme.add_type("OverlayPanel") theme.set_type_variation("OverlayPanel", "PanelContainer") @@ -158,7 +285,7 @@ static func _setup_panelcontainer(theme: Theme) -> void: overlay_stylebox.content_margin_top = 6.0 overlay_stylebox.content_margin_bottom = 10.0 overlay_stylebox.bg_color = overlay_panel_inner_color - overlay_stylebox.border_color = overlay_panel_border_color + overlay_stylebox.border_color = intermediate_color theme.set_stylebox("panel", "OverlayPanel", overlay_stylebox) theme.add_type("TabItem") @@ -189,14 +316,14 @@ static func _setup_panelcontainer(theme: Theme) -> void: textbox_stylebox.content_margin_right = 6.0 textbox_stylebox.content_margin_top = 2.0 textbox_stylebox.content_margin_bottom = 4.0 - textbox_stylebox.bg_color = overlay_panel_inner_color * 0.8 + Color.BLACK * 0.2 - textbox_stylebox.border_color = Color(overlay_panel_border_color, 0.6) + textbox_stylebox.bg_color = overlay_panel_inner_color.lerp(extreme_theme_color, 0.2) + textbox_stylebox.border_color = subtle_panel_border_color theme.set_stylebox("panel", "TextBox", textbox_stylebox) theme.add_type("SideTabBar") theme.set_type_variation("SideTabBar", "PanelContainer") var side_tabbar_stylebox := StyleBoxFlat.new() - side_tabbar_stylebox.bg_color = tabbar_background_color + side_tabbar_stylebox.bg_color = soft_base_color side_tabbar_stylebox.set_content_margin_all(0) side_tabbar_stylebox.corner_radius_top_left = 5 side_tabbar_stylebox.corner_radius_bottom_left = 5 @@ -219,12 +346,18 @@ static func _setup_panelcontainer(theme: Theme) -> void: static func _setup_button(theme: Theme) -> void: theme.add_type("Button") theme.set_constant("h_separation", "Button", 5) - theme.set_color("font_color", "Button", common_text_color) - theme.set_color("font_disabled_color", "Button", common_subtle_text_color) - theme.set_color("font_focus_color", "Button", common_highlighted_text_color) - theme.set_color("font_hover_color", "Button", common_highlighted_text_color) - theme.set_color("font_pressed_color", "Button", common_highlighted_text_color) - theme.set_color("font_hover_pressed_color", "Button", common_highlighted_text_color) + theme.set_color("font_color", "Button", text_color) + theme.set_color("font_disabled_color", "Button", subtle_text_color) + theme.set_color("font_focus_color", "Button", highlighted_text_color) + theme.set_color("font_hover_color", "Button", highlighted_text_color) + theme.set_color("font_pressed_color", "Button", highlighted_text_color) + theme.set_color("font_hover_pressed_color", "Button", highlighted_text_color) + theme.set_color("icon_normal_color", "Button", tinted_contrast_color) + theme.set_color("icon_hover_color", "Button", tinted_contrast_color) + theme.set_color("icon_pressed_color", "Button", max_contrast_color) + theme.set_color("icon_hover_pressed_color", "Button", max_contrast_color) + theme.set_color("icon_focus_color", "Button", max_contrast_color) + theme.set_color("icon_disabled_color", "Button", gray_color) var button_stylebox := StyleBoxFlat.new() button_stylebox.set_corner_radius_all(5) button_stylebox.set_border_width_all(2) @@ -234,13 +367,13 @@ static func _setup_button(theme: Theme) -> void: button_stylebox.content_margin_right = 6.0 var normal_button_stylebox := button_stylebox.duplicate() - normal_button_stylebox.bg_color = common_button_inner_color_normal - normal_button_stylebox.border_color = common_button_border_color_normal + normal_button_stylebox.bg_color = soft_intermediate_color + normal_button_stylebox.border_color = intermediate_color theme.set_stylebox("normal", "Button", normal_button_stylebox) var hover_button_stylebox := button_stylebox.duplicate() - hover_button_stylebox.bg_color = common_button_inner_color_hover - hover_button_stylebox.border_color = common_button_border_color_hover + hover_button_stylebox.bg_color = soft_intermediate_hover_color + hover_button_stylebox.border_color = intermediate_hover_color theme.set_stylebox("hover", "Button", hover_button_stylebox) var pressed_button_stylebox := button_stylebox.duplicate() @@ -248,48 +381,48 @@ static func _setup_button(theme: Theme) -> void: pressed_button_stylebox.border_color = common_button_border_color_pressed theme.set_stylebox("pressed", "Button", pressed_button_stylebox) + var hover_pressed_button_stylebox := button_stylebox.duplicate() + hover_pressed_button_stylebox.bg_color = common_button_inner_color_pressed.blend(hover_overlay_color) + hover_pressed_button_stylebox.border_color = common_button_border_color_pressed.blend(hover_overlay_color) + theme.set_stylebox("hover_pressed", "Button", hover_pressed_button_stylebox) + var disabled_button_stylebox := button_stylebox.duplicate() - disabled_button_stylebox.bg_color = common_inner_color_disabled - disabled_button_stylebox.border_color = common_border_color_disabled + disabled_button_stylebox.bg_color = common_button_inner_color_disabled + disabled_button_stylebox.border_color = common_button_border_color_disabled theme.set_stylebox("disabled", "Button", disabled_button_stylebox) var focus_button_stylebox := button_stylebox.duplicate() focus_button_stylebox.draw_center = false - focus_button_stylebox.border_color = focus_color + focus_button_stylebox.border_color = Configs.savedata.accent_color theme.set_stylebox("focus", "Button", focus_button_stylebox) theme.add_type("IconButton") theme.set_type_variation("IconButton", "Button") - var icon_button_stylebox := StyleBoxFlat.new() - icon_button_stylebox.set_corner_radius_all(5) - icon_button_stylebox.set_border_width_all(2) - icon_button_stylebox.set_content_margin_all(4) - - var normal_icon_button_stylebox := icon_button_stylebox.duplicate() - normal_icon_button_stylebox.bg_color = common_button_inner_color_normal - normal_icon_button_stylebox.border_color = common_button_border_color_normal + + var normal_icon_button_stylebox := normal_button_stylebox.duplicate() + normal_icon_button_stylebox.set_content_margin_all(4) theme.set_stylebox("normal", "IconButton", normal_icon_button_stylebox) - var hover_icon_button_stylebox := icon_button_stylebox.duplicate() - hover_icon_button_stylebox.bg_color = common_button_inner_color_hover - hover_icon_button_stylebox.border_color = common_button_border_color_hover + var hover_icon_button_stylebox := hover_button_stylebox.duplicate() + hover_icon_button_stylebox.set_content_margin_all(4) theme.set_stylebox("hover", "IconButton", hover_icon_button_stylebox) - var pressed_icon_button_stylebox := icon_button_stylebox.duplicate() - pressed_icon_button_stylebox.bg_color = common_button_inner_color_pressed - pressed_icon_button_stylebox.border_color = common_button_border_color_pressed + var pressed_icon_button_stylebox := pressed_button_stylebox.duplicate() + pressed_icon_button_stylebox.set_content_margin_all(4) theme.set_stylebox("pressed", "IconButton", pressed_icon_button_stylebox) - var disabled_icon_button_stylebox := icon_button_stylebox.duplicate() - disabled_icon_button_stylebox.bg_color = common_inner_color_disabled - disabled_icon_button_stylebox.border_color = common_border_color_disabled + var hover_pressed_icon_button_stylebox := hover_pressed_button_stylebox.duplicate() + hover_pressed_icon_button_stylebox.set_content_margin_all(4) + theme.set_stylebox("hover_pressed", "IconButton", hover_pressed_icon_button_stylebox) + + var disabled_icon_button_stylebox := disabled_button_stylebox.duplicate() + disabled_icon_button_stylebox.set_content_margin_all(4) theme.set_stylebox("disabled", "IconButton", disabled_icon_button_stylebox) theme.add_type("LeftConnectedButton") theme.set_type_variation("LeftConnectedButton", "Button") - theme.set_color("icon_normal_color", "LeftConnectedButton", icon_normal_color) - theme.set_color("icon_hover_color", "LeftConnectedButton", icon_hover_color) - theme.set_color("icon_pressed_color", "LeftConnectedButton", icon_pressed_color) + theme.set_color("icon_normal_color", "LeftConnectedButton", context_icon_normal_color) + theme.set_color("icon_hover_color", "LeftConnectedButton", context_icon_hover_color) var left_connected_button_stylebox := StyleBoxFlat.new() left_connected_button_stylebox.corner_radius_bottom_left = 0 left_connected_button_stylebox.corner_radius_top_left = 0 @@ -305,8 +438,8 @@ static func _setup_button(theme: Theme) -> void: left_connected_button_stylebox.content_margin_right = 5.0 var normal_left_connected_button_stylebox := left_connected_button_stylebox.duplicate() - normal_left_connected_button_stylebox.bg_color = connected_button_inner_color_normal - normal_left_connected_button_stylebox.border_color = connected_button_border_color_normal + normal_left_connected_button_stylebox.bg_color = line_edit_inner_color + normal_left_connected_button_stylebox.border_color = line_edit_normal_border_color theme.set_stylebox("normal", "LeftConnectedButton", normal_left_connected_button_stylebox) # Disabled theme is not currently used, but is needed for correct spacing. theme.set_stylebox("disabled", "LeftConnectedButton", normal_left_connected_button_stylebox) @@ -321,11 +454,13 @@ static func _setup_button(theme: Theme) -> void: pressed_left_connected_button_stylebox.border_color = connected_button_border_color_pressed theme.set_stylebox("pressed", "LeftConnectedButton", pressed_left_connected_button_stylebox) + var hover_pressed_left_connected_button_stylebox := left_connected_button_stylebox.duplicate() + hover_pressed_left_connected_button_stylebox.bg_color = connected_button_inner_color_pressed.blend(hover_overlay_color) + hover_pressed_left_connected_button_stylebox.border_color = connected_button_border_color_pressed.blend(hover_overlay_color) + theme.set_stylebox("hover_pressed", "LeftConnectedButton", hover_pressed_left_connected_button_stylebox) + theme.add_type("LeftConnectedButtonTransparent") theme.set_type_variation("LeftConnectedButtonTransparent", "Button") - theme.set_color("icon_normal_color", "LeftConnectedButtonTransparent", icon_normal_color) - theme.set_color("icon_hover_color", "LeftConnectedButtonTransparent", icon_hover_color) - theme.set_color("icon_pressed_color", "LeftConnectedButtonTransparent", icon_pressed_color) var left_connected_button_transparent_stylebox := StyleBoxFlat.new() left_connected_button_transparent_stylebox.corner_radius_bottom_left = 0 left_connected_button_transparent_stylebox.corner_radius_top_left = 0 @@ -338,7 +473,7 @@ static func _setup_button(theme: Theme) -> void: var normal_left_connected_button_transparent_stylebox := left_connected_button_transparent_stylebox.duplicate() normal_left_connected_button_transparent_stylebox.draw_center = false - normal_left_connected_button_transparent_stylebox.border_color = connected_button_border_color_normal + normal_left_connected_button_transparent_stylebox.border_color = line_edit_normal_border_color theme.set_stylebox("normal", "LeftConnectedButtonTransparent", normal_left_connected_button_transparent_stylebox) var hover_left_connected_button_transparent_stylebox := left_connected_button_transparent_stylebox.duplicate() @@ -351,11 +486,15 @@ static func _setup_button(theme: Theme) -> void: pressed_left_connected_button_transparent_stylebox.border_color = connected_button_border_color_pressed theme.set_stylebox("pressed", "LeftConnectedButtonTransparent", pressed_left_connected_button_transparent_stylebox) + var hover_pressed_left_connected_button_transparent_stylebox := left_connected_button_transparent_stylebox.duplicate() + hover_pressed_left_connected_button_transparent_stylebox.draw_center = false + hover_pressed_left_connected_button_transparent_stylebox.border_color = connected_button_border_color_pressed.blend(hover_overlay_color) + theme.set_stylebox("hover_pressed", "LeftConnectedButtonTransparent", hover_pressed_left_connected_button_transparent_stylebox) + theme.add_type("RightConnectedButton") theme.set_type_variation("RightConnectedButton", "Button") - theme.set_color("icon_normal_color", "RightConnectedButton", icon_normal_color) - theme.set_color("icon_hover_color", "RightConnectedButton", icon_hover_color) - theme.set_color("icon_pressed_color", "RightConnectedButton", icon_pressed_color) + theme.set_color("icon_normal_color", "RightConnectedButton", context_icon_normal_color) + theme.set_color("icon_hover_color", "RightConnectedButton", context_icon_hover_color) var right_connected_button_stylebox := StyleBoxFlat.new() right_connected_button_stylebox.corner_radius_bottom_left = 5 right_connected_button_stylebox.corner_radius_top_left = 5 @@ -371,8 +510,8 @@ static func _setup_button(theme: Theme) -> void: right_connected_button_stylebox.content_margin_right = 4.0 var normal_right_connected_button_stylebox := right_connected_button_stylebox.duplicate() - normal_right_connected_button_stylebox.bg_color = connected_button_inner_color_normal - normal_right_connected_button_stylebox.border_color = connected_button_border_color_normal + normal_right_connected_button_stylebox.bg_color = line_edit_inner_color + normal_right_connected_button_stylebox.border_color = line_edit_normal_border_color theme.set_stylebox("normal", "RightConnectedButton", normal_right_connected_button_stylebox) # Disabled theme is not currently used, but is needed for correct spacing. theme.set_stylebox("disabled", "RightConnectedButton", normal_right_connected_button_stylebox) @@ -387,11 +526,13 @@ static func _setup_button(theme: Theme) -> void: pressed_right_connected_button_stylebox.border_color = connected_button_border_color_pressed theme.set_stylebox("pressed", "RightConnectedButton", pressed_right_connected_button_stylebox) + var hover_pressed_right_connected_button_stylebox := right_connected_button_stylebox.duplicate() + hover_pressed_right_connected_button_stylebox.bg_color = connected_button_inner_color_pressed.blend(hover_overlay_color) + hover_pressed_right_connected_button_stylebox.border_color = connected_button_border_color_pressed.blend(hover_overlay_color) + theme.set_stylebox("hover_pressed", "RightConnectedButton", hover_pressed_right_connected_button_stylebox) + theme.add_type("RightConnectedButtonTransparent") theme.set_type_variation("RightConnectedButtonTransparent", "Button") - theme.set_color("icon_normal_color", "RightConnectedButtonTransparent", icon_normal_color) - theme.set_color("icon_hover_color", "RightConnectedButtonTransparent", icon_hover_color) - theme.set_color("icon_pressed_color", "RightConnectedButtonTransparent", icon_pressed_color) var right_connected_button_transparent_stylebox := StyleBoxFlat.new() right_connected_button_transparent_stylebox.corner_radius_bottom_left = 5 right_connected_button_transparent_stylebox.corner_radius_top_left = 5 @@ -404,7 +545,7 @@ static func _setup_button(theme: Theme) -> void: var normal_right_connected_button_transparent_stylebox := right_connected_button_transparent_stylebox.duplicate() normal_right_connected_button_transparent_stylebox.draw_center = false - normal_right_connected_button_transparent_stylebox.border_color = connected_button_border_color_normal + normal_right_connected_button_transparent_stylebox.border_color = line_edit_normal_border_color theme.set_stylebox("normal", "RightConnectedButtonTransparent", normal_right_connected_button_transparent_stylebox) var hover_right_connected_button_transparent_stylebox := right_connected_button_transparent_stylebox.duplicate() @@ -417,34 +558,41 @@ static func _setup_button(theme: Theme) -> void: pressed_right_connected_button_transparent_stylebox.border_color = connected_button_border_color_pressed theme.set_stylebox("pressed", "RightConnectedButtonTransparent", pressed_right_connected_button_transparent_stylebox) + var hover_pressed_right_connected_button_transparent_stylebox := right_connected_button_transparent_stylebox.duplicate() + hover_pressed_right_connected_button_transparent_stylebox.draw_center = false + hover_pressed_right_connected_button_transparent_stylebox.border_color = connected_button_border_color_pressed.blend(hover_overlay_color) + theme.set_stylebox("hover_pressed", "RightConnectedButtonTransparent", hover_pressed_right_connected_button_transparent_stylebox) + theme.add_type("TranslucentButton") theme.set_type_variation("TranslucentButton", "Button") - var translucent_button_stylebox := StyleBoxFlat.new() - translucent_button_stylebox.set_corner_radius_all(5) - translucent_button_stylebox.set_content_margin_all(4) - - var normal_translucent_button_stylebox := translucent_button_stylebox.duplicate() - normal_translucent_button_stylebox.bg_color = translucent_button_color_normal + theme.set_color("icon_normal_color", "TranslucentButton", context_icon_normal_color) + theme.set_color("icon_hover_color", "TranslucentButton", context_icon_normal_color) + theme.set_color("icon_pressed_color", "TranslucentButton", context_icon_normal_color) + + var normal_translucent_button_stylebox := StyleBoxFlat.new() + normal_translucent_button_stylebox.set_corner_radius_all(5) + normal_translucent_button_stylebox.set_content_margin_all(4) + normal_translucent_button_stylebox.bg_color = hover_overlay_color theme.set_stylebox("normal", "TranslucentButton", normal_translucent_button_stylebox) - var hover_translucent_button_stylebox := translucent_button_stylebox.duplicate() - hover_translucent_button_stylebox.bg_color = translucent_button_color_hover + var hover_translucent_button_stylebox := normal_translucent_button_stylebox.duplicate() + hover_translucent_button_stylebox.bg_color = strong_hover_overlay_color theme.set_stylebox("hover", "TranslucentButton", hover_translucent_button_stylebox) - var pressed_translucent_button_stylebox := translucent_button_stylebox.duplicate() - pressed_translucent_button_stylebox.bg_color = translucent_button_color_pressed + var pressed_translucent_button_stylebox := normal_translucent_button_stylebox.duplicate() + pressed_translucent_button_stylebox.bg_color = hover_pressed_overlay_color theme.set_stylebox("pressed", "TranslucentButton", pressed_translucent_button_stylebox) - var disabled_translucent_button_stylebox := translucent_button_stylebox.duplicate() + var disabled_translucent_button_stylebox := normal_translucent_button_stylebox.duplicate() disabled_translucent_button_stylebox.bg_color = translucent_button_color_disabled theme.set_stylebox("disabled", "TranslucentButton", disabled_translucent_button_stylebox) theme.add_type("FlatButton") theme.set_type_variation("FlatButton", "Button") - theme.set_color("icon_normal_color", "FlatButton", icon_normal_color) - theme.set_color("icon_hover_color", "FlatButton", icon_hover_color) - theme.set_color("icon_pressed_color", "FlatButton", icon_pressed_color) - theme.set_color("icon_hover_pressed_color", "FlatButton", icon_pressed_color) + theme.set_color("icon_normal_color", "FlatButton", context_icon_normal_color) + theme.set_color("icon_hover_color", "FlatButton", context_icon_hover_color) + theme.set_color("icon_pressed_color", "FlatButton", context_icon_pressed_color) + theme.set_color("icon_hover_pressed_color", "FlatButton", context_icon_pressed_color) var flat_button_stylebox := StyleBoxFlat.new() flat_button_stylebox.set_corner_radius_all(3) flat_button_stylebox.set_content_margin_all(2) @@ -454,11 +602,11 @@ static func _setup_button(theme: Theme) -> void: theme.set_stylebox("normal", "FlatButton", normal_flat_button_stylebox) var hover_flat_button_stylebox := flat_button_stylebox.duplicate() - hover_flat_button_stylebox.bg_color = flat_button_color_hover + hover_flat_button_stylebox.bg_color = hover_overlay_color theme.set_stylebox("hover", "FlatButton", hover_flat_button_stylebox) var pressed_flat_button_stylebox := flat_button_stylebox.duplicate() - pressed_flat_button_stylebox.bg_color = flat_button_color_pressed + pressed_flat_button_stylebox.bg_color = pressed_overlay_color theme.set_stylebox("pressed", "FlatButton", pressed_flat_button_stylebox) var disabled_flat_button_stylebox := flat_button_stylebox.duplicate() @@ -468,8 +616,9 @@ static func _setup_button(theme: Theme) -> void: theme.add_type("ContextButton") theme.set_type_variation("ContextButton", "Button") theme.set_color("icon_normal_color", "ContextButton", context_icon_normal_color) - theme.set_color("icon_hover_color", "ContextButton", icon_hover_color) - theme.set_color("icon_pressed_color", "ContextButton", icon_hover_color) + theme.set_color("icon_hover_color", "ContextButton", context_icon_hover_color) + theme.set_color("icon_pressed_color", "ContextButton", context_icon_pressed_color) + theme.set_color("icon_disabled_color", "ContextButton", gray_color) var context_button_stylebox := StyleBoxFlat.new() context_button_stylebox.set_corner_radius_all(3) context_button_stylebox.content_margin_bottom = 2.0 @@ -485,39 +634,106 @@ static func _setup_button(theme: Theme) -> void: theme.set_stylebox("normal", "ContextButton", normal_context_button_stylebox) var hover_context_button_stylebox := context_button_stylebox.duplicate() - hover_context_button_stylebox.bg_color = flat_button_color_hover + hover_context_button_stylebox.bg_color = hover_overlay_color theme.set_stylebox("hover", "ContextButton", hover_context_button_stylebox) var pressed_context_button_stylebox := context_button_stylebox.duplicate() - pressed_context_button_stylebox.bg_color = flat_button_color_pressed + pressed_context_button_stylebox.bg_color = pressed_overlay_color theme.set_stylebox("pressed", "ContextButton", pressed_context_button_stylebox) var disabled_context_button_stylebox := context_button_stylebox.duplicate() - disabled_context_button_stylebox.bg_color = flat_button_color_disabled + # Ensure enough contrast. + disabled_context_button_stylebox.bg_color = Color(Color.BLACK, maxf(0.16, + 0.48 - color_difference(Color.BLACK, basic_panel_inner_color) * 2)) theme.set_stylebox("disabled", "ContextButton", disabled_context_button_stylebox) + theme.add_type("PathCommandAbsoluteButton") + theme.set_type_variation("PathCommandAbsoluteButton", "Button") + var path_command_absolute_button_stylebox_normal := StyleBoxFlat.new() + path_command_absolute_button_stylebox_normal.set_border_width_all(2) + path_command_absolute_button_stylebox_normal.set_corner_radius_all(4) + path_command_absolute_button_stylebox_normal.content_margin_left = 5.0 + path_command_absolute_button_stylebox_normal.content_margin_right = 5.0 + path_command_absolute_button_stylebox_normal.content_margin_top = 0.0 + path_command_absolute_button_stylebox_normal.content_margin_bottom = 0.0 + path_command_absolute_button_stylebox_normal.bg_color = Color("cc7a29") if\ + ThemeUtils.is_theme_dark else Color("f2cb91") + path_command_absolute_button_stylebox_normal.border_color = Color("e6ae5c") if\ + ThemeUtils.is_theme_dark else Color("ffaa33") + theme.set_stylebox("normal", "PathCommandAbsoluteButton", + path_command_absolute_button_stylebox_normal) + theme.set_stylebox("disabled", "PathCommandAbsoluteButton", + path_command_absolute_button_stylebox_normal) + + var path_command_absolute_button_stylebox_hover :=\ + path_command_absolute_button_stylebox_normal.duplicate() + path_command_absolute_button_stylebox_hover.bg_color = Color("d9822b") if\ + ThemeUtils.is_theme_dark else Color("f2c279") + path_command_absolute_button_stylebox_hover.border_color = Color("f2cb91") if\ + ThemeUtils.is_theme_dark else Color("f29718") + theme.set_stylebox("hover", "PathCommandAbsoluteButton", + path_command_absolute_button_stylebox_hover) + + var path_command_absolute_button_stylebox_pressed :=\ + path_command_absolute_button_stylebox_normal.duplicate() + path_command_absolute_button_stylebox_pressed.bg_color = Color("ffbf40") if\ + ThemeUtils.is_theme_dark else Color("f2ae49") + path_command_absolute_button_stylebox_pressed.border_color = Color("ffecb3") if\ + ThemeUtils.is_theme_dark else Color("e68600") + theme.set_stylebox("pressed", "PathCommandAbsoluteButton", + path_command_absolute_button_stylebox_pressed) + + theme.add_type("PathCommandRelativeButton") + theme.set_type_variation("PathCommandRelativeButton", "Button") + var path_command_relative_button_stylebox_normal :=\ + path_command_absolute_button_stylebox_normal.duplicate() + path_command_relative_button_stylebox_normal.bg_color = Color("a329cc") if\ + ThemeUtils.is_theme_dark else Color("d291f2") + path_command_relative_button_stylebox_normal.border_color = Color("bd73e6") if\ + ThemeUtils.is_theme_dark else Color("bb33ff") + theme.set_stylebox("normal", "PathCommandRelativeButton", + path_command_relative_button_stylebox_normal) + theme.set_stylebox("disabled", "PathCommandRelativeButton", + path_command_relative_button_stylebox_normal) + + var path_command_relative_button_stylebox_hover :=\ + path_command_absolute_button_stylebox_normal.duplicate() + path_command_relative_button_stylebox_hover.bg_color = Color("ad2bd9") if\ + ThemeUtils.is_theme_dark else Color("ca79f2") + path_command_relative_button_stylebox_hover.border_color = Color("d291f2") if\ + ThemeUtils.is_theme_dark else Color("aa18f2") + theme.set_stylebox("hover", "PathCommandRelativeButton", + path_command_relative_button_stylebox_hover) + + var path_command_relative_button_stylebox_pressed :=\ + path_command_absolute_button_stylebox_normal.duplicate() + path_command_relative_button_stylebox_pressed.bg_color = Color("bf40ff") if\ + ThemeUtils.is_theme_dark else Color("ba49f2") + path_command_relative_button_stylebox_pressed.border_color = Color("dfb3ff") if\ + ThemeUtils.is_theme_dark else Color("9900e6") + theme.set_stylebox("pressed", "PathCommandRelativeButton", + path_command_relative_button_stylebox_pressed) + theme.add_type("TextButton") theme.set_type_variation("TextButton", "Button") - theme.set_color("font_color", "TextButton", icon_toggled_off_color) - theme.set_color("font_hover_color", "TextButton", icon_toggled_off_color) - theme.set_color("font_pressed_color", "TextButton", icon_toggled_on_color) + theme.set_color("font_color", "TextButton", dimmer_text_color) + theme.set_color("font_hover_color", "TextButton", dim_text_color) + theme.set_color("font_pressed_color", "TextButton", text_color) + theme.set_color("font_hover_pressed_color", "TextButton", highlighted_text_color) var text_button_empty_stylebox := StyleBoxEmpty.new() text_button_empty_stylebox.content_margin_left = 2.0 text_button_empty_stylebox.content_margin_right = 2.0 theme.set_stylebox("normal", "TextButton", text_button_empty_stylebox) theme.set_stylebox("hover", "TextButton", text_button_empty_stylebox) theme.set_stylebox("pressed", "TextButton", text_button_empty_stylebox) + theme.set_stylebox("hover_pressed", "TextButton", text_button_empty_stylebox) theme.set_stylebox("disabled", "TextButton", text_button_empty_stylebox) theme.add_type("SideTab") theme.set_type_variation("SideTab", "Button") - theme.set_color("font_color", "SideTab", common_dim_text_color) - theme.set_color("font_hover_color", "SideTab", common_highlighted_text_color) - theme.set_color("font_pressed_color", "SideTab", common_highlighted_text_color) - theme.set_color("font_hover_pressed_color", "SideTab", common_highlighted_text_color) var normal_sidetab_stylebox := StyleBoxFlat.new() - normal_sidetab_stylebox.bg_color = normal_tab_color + normal_sidetab_stylebox.bg_color = softer_intermediate_color normal_sidetab_stylebox.corner_radius_top_left = 4 normal_sidetab_stylebox.corner_radius_bottom_left = 4 normal_sidetab_stylebox.content_margin_left = 6.0 @@ -527,7 +743,7 @@ static func _setup_button(theme: Theme) -> void: theme.set_stylebox("normal", "SideTab", normal_sidetab_stylebox) var hovered_sidetab_stylebox := normal_sidetab_stylebox.duplicate() - hovered_sidetab_stylebox.bg_color = hovered_tab_color + hovered_sidetab_stylebox.bg_color = softer_intermediate_hover_color theme.set_stylebox("hover", "SideTab", hovered_sidetab_stylebox) var pressed_sidetab_stylebox := StyleBoxFlat.new() @@ -539,6 +755,7 @@ static func _setup_button(theme: Theme) -> void: pressed_sidetab_stylebox.content_margin_bottom = 3.0 pressed_sidetab_stylebox.content_margin_top = 3.0 theme.set_stylebox("pressed", "SideTab", pressed_sidetab_stylebox) + theme.set_stylebox("hover_pressed", "SideTab", pressed_sidetab_stylebox) theme.add_type("Swatch") theme.set_type_variation("Swatch", "Button") @@ -546,11 +763,11 @@ static func _setup_button(theme: Theme) -> void: swatch_stylebox.set_corner_radius_all(3) var normal_swatch_stylebox := swatch_stylebox.duplicate() - normal_swatch_stylebox.bg_color = common_button_border_color_normal + normal_swatch_stylebox.bg_color = intermediate_color theme.set_stylebox("normal", "Swatch", normal_swatch_stylebox) var hover_swatch_stylebox := swatch_stylebox.duplicate() - hover_swatch_stylebox.bg_color = common_button_border_color_hover + hover_swatch_stylebox.bg_color = intermediate_color.blend(stronger_hover_overlay_color) theme.set_stylebox("hover", "Swatch", hover_swatch_stylebox) var pressed_swatch_stylebox := swatch_stylebox.duplicate() @@ -561,17 +778,41 @@ static func _setup_button(theme: Theme) -> void: static func _setup_checkbox(theme: Theme) -> void: theme.add_type("CheckBox") theme.set_constant("h_separation", "CheckBox", 5) - theme.set_color("font_color", "CheckBox", common_text_color) - theme.set_color("font_color", "CheckBox", common_text_color) - theme.set_color("font_disabled_color", "CheckBox", common_subtle_text_color) - theme.set_color("font_focus_color", "CheckBox", common_highlighted_text_color) - theme.set_color("font_hover_color", "CheckBox", common_highlighted_text_color) - theme.set_color("font_pressed_color", "CheckBox", common_highlighted_text_color) - theme.set_color("font_hover_pressed_color", "CheckBox", common_highlighted_text_color) - theme.set_icon("checked", "CheckBox", _icon("GuiBoxChecked")) - theme.set_icon("checked_disabled", "CheckBox", _icon("GuiBoxCheckedDisabled")) - theme.set_icon("unchecked", "CheckBox", _icon("GuiBoxUnchecked")) - theme.set_icon("unchecked_disabled", "CheckBox", _icon("GuiBoxUncheckedDisabled")) + theme.set_color("font_color", "CheckBox", text_color) + theme.set_color("font_color", "CheckBox", text_color) + theme.set_color("font_disabled_color", "CheckBox", subtle_text_color) + theme.set_color("font_focus_color", "CheckBox", highlighted_text_color) + theme.set_color("font_hover_color", "CheckBox", highlighted_text_color) + theme.set_color("font_pressed_color", "CheckBox", highlighted_text_color) + theme.set_color("font_hover_pressed_color", "CheckBox", highlighted_text_color) + theme.set_icon("checked", "CheckBox", + SVGTexture.create_from_string(""" + + + + """ %\ + [soft_accent_color.to_html(false), black_or_white_counter_accent_color.to_html(false)]) + ) + theme.set_icon("checked_disabled", "CheckBox", + SVGTexture.create_from_string(""" + + + + """ %\ + [soft_accent_color.lerp(gray_color, 0.2).to_html(false), black_or_white_counter_accent_color.to_html(false)]) + ) + theme.set_icon("unchecked", "CheckBox", + SVGTexture.create_from_string(""" + + + """ % gray_color.to_html(false)) + ) + theme.set_icon("unchecked_disabled", "CheckBox", + SVGTexture.create_from_string(""" + + + """ % gray_color.to_html(false)) + ) var checkbox_stylebox := StyleBoxFlat.new() checkbox_stylebox.set_corner_radius_all(4) @@ -589,7 +830,7 @@ static func _setup_checkbox(theme: Theme) -> void: theme.set_stylebox("pressed", "CheckBox", empty_checkbox_stylebox) var hover_checkbox_stylebox := checkbox_stylebox.duplicate() - hover_checkbox_stylebox.bg_color = flat_button_color_hover + hover_checkbox_stylebox.bg_color = hover_overlay_color theme.set_stylebox("hover", "CheckBox", hover_checkbox_stylebox) theme.set_stylebox("hover_pressed", "CheckBox", hover_checkbox_stylebox) @@ -599,20 +840,35 @@ static func _setup_checkbox(theme: Theme) -> void: static func _setup_checkbutton(theme: Theme) -> void: theme.add_type("CheckButton") - theme.set_color("font_color", "CheckButton", common_text_color) - theme.set_color("font_disabled_color", "CheckButton", common_subtle_text_color) - theme.set_color("font_focus_color", "CheckButton", common_highlighted_text_color) - theme.set_color("font_hover_color", "CheckButton", common_highlighted_text_color) - theme.set_color("font_pressed_color", "CheckButton", common_highlighted_text_color) - theme.set_color("font_hover_pressed_color", "CheckButton", common_highlighted_text_color) - theme.set_icon("checked", "CheckButton", _icon("GuiToggleChecked")) - theme.set_icon("unchecked", "CheckButton", _icon("GuiToggleUnchecked")) + theme.set_color("font_color", "CheckButton", text_color) + theme.set_color("font_disabled_color", "CheckButton", subtle_text_color) + theme.set_color("font_focus_color", "CheckButton", highlighted_text_color) + theme.set_color("font_hover_color", "CheckButton", highlighted_text_color) + theme.set_color("font_pressed_color", "CheckButton", highlighted_text_color) + theme.set_color("font_hover_pressed_color", "CheckButton", highlighted_text_color) + theme.set_icon("checked", "CheckButton", + SVGTexture.create_from_string(""" + + + + """ %\ + [soft_accent_color.to_html(false), black_or_white_counter_accent_color.to_html(false)]) + ) + theme.set_icon("unchecked", "CheckButton", + SVGTexture.create_from_string(""" + + + + """ %\ + [gray_color.to_html(false), black_or_white_counter_accent_color.to_html(false)]) + ) static func _setup_itemlist(theme: Theme) -> void: theme.add_type("ItemList") - theme.set_color("font_color", "ItemList", Color(0.9, 0.9, 0.9)) - theme.set_color("font_hovered", "ItemList", Color.WHITE) - theme.set_color("font_selected", "ItemList", Color.WHITE) + theme.set_color("font_color", "ItemList", text_color) + theme.set_color("font_hovered_color", "ItemList", highlighted_text_color) + theme.set_color("font_selected_color", "ItemList", highlighted_text_color) + theme.set_color("font_hovered_selected_color", "ItemList", highlighted_text_color) theme.set_color("guide_color", "ItemList", Color.TRANSPARENT) theme.set_constant("icon_margin", "ItemList", 4) @@ -628,26 +884,27 @@ static func _setup_itemlist(theme: Theme) -> void: item_stylebox.set_content_margin_all(2) var hover_item_stylebox := item_stylebox.duplicate() - hover_item_stylebox.bg_color = flat_button_color_hover + hover_item_stylebox.bg_color = hover_overlay_color theme.set_stylebox("hovered", "ItemList", hover_item_stylebox) var selected_item_stylebox := item_stylebox.duplicate() - selected_item_stylebox.bg_color = flat_button_color_pressed + selected_item_stylebox.bg_color = pressed_overlay_color theme.set_stylebox("selected", "ItemList", selected_item_stylebox) theme.set_stylebox("selected_focus", "ItemList", selected_item_stylebox) var hovered_selected_item_stylebox := item_stylebox.duplicate() - hovered_selected_item_stylebox.bg_color = flat_button_color_hovered_pressed + hovered_selected_item_stylebox.bg_color = hover_pressed_overlay_color theme.set_stylebox("hovered_selected", "ItemList", hovered_selected_item_stylebox) theme.set_stylebox("hovered_selected_focus", "ItemList", hovered_selected_item_stylebox) static func _setup_lineedit(theme: Theme) -> void: theme.add_type("LineEdit") - theme.set_color("caret_color", "LineEdit", common_caret_color) - theme.set_color("font_color", "LineEdit", common_editable_text_color) - theme.set_color("font_placeholder_color", "LineEdit", common_subtle_text_color) - theme.set_color("selection_color", "LineEdit", common_selection_color) - theme.set_color("disabled_selection_color", "LineEdit", common_disabled_selection_color) + theme.set_color("caret_color", "LineEdit", caret_color) + theme.set_color("font_color", "LineEdit", editable_text_color) + theme.set_color("font_uneditable_color", "LineEdit", dimmer_text_color) + theme.set_color("font_placeholder_color", "LineEdit", subtle_text_color) + theme.set_color("selection_color", "LineEdit", selection_color) + theme.set_color("disabled_selection_color", "LineEdit", disabled_selection_color) theme.set_font_size("font_size", "LineEdit", 12) theme.set_font("font", "LineEdit", mono_font) @@ -658,18 +915,19 @@ static func _setup_lineedit(theme: Theme) -> void: stylebox.content_margin_right = 5.0 var disabled_stylebox := stylebox.duplicate() - disabled_stylebox.bg_color = common_inner_color_disabled - disabled_stylebox.border_color = common_border_color_disabled + disabled_stylebox.bg_color = line_edit_inner_color_disabled + disabled_stylebox.border_color = line_edit_border_color_disabled theme.set_stylebox("read_only", "LineEdit", disabled_stylebox) var normal_stylebox := stylebox.duplicate() - normal_stylebox.bg_color = line_edit_background_color + normal_stylebox.bg_color = line_edit_inner_color normal_stylebox.border_color = line_edit_normal_border_color theme.set_stylebox("normal", "LineEdit", normal_stylebox) var hover_stylebox := stylebox.duplicate() hover_stylebox.draw_center = false - hover_stylebox.border_color = line_edit_hover_border_overlay_color + hover_stylebox.border_color = strong_hover_overlay_color if is_theme_dark else\ + stronger_hover_overlay_color theme.set_stylebox("hover", "LineEdit", hover_stylebox) var focus_stylebox := stylebox.duplicate() @@ -696,18 +954,19 @@ static func _setup_lineedit(theme: Theme) -> void: left_connected_stylebox.content_margin_bottom = 0.0 var left_connected_disabled_stylebox := left_connected_stylebox.duplicate() - left_connected_disabled_stylebox.bg_color = common_inner_color_disabled - left_connected_disabled_stylebox.border_color = common_border_color_disabled + left_connected_disabled_stylebox.bg_color = line_edit_inner_color_disabled + left_connected_disabled_stylebox.border_color = line_edit_border_color_disabled theme.set_stylebox("read_only", "LeftConnectedLineEdit", left_connected_disabled_stylebox) var left_connected_normal_stylebox := left_connected_stylebox.duplicate() - left_connected_normal_stylebox.bg_color = line_edit_background_color + left_connected_normal_stylebox.bg_color = line_edit_inner_color left_connected_normal_stylebox.border_color = line_edit_normal_border_color theme.set_stylebox("normal", "LeftConnectedLineEdit", left_connected_normal_stylebox) var left_connected_hover_stylebox := left_connected_stylebox.duplicate() left_connected_hover_stylebox.draw_center = false - left_connected_hover_stylebox.border_color = line_edit_hover_border_overlay_color + left_connected_hover_stylebox.border_color = strong_hover_overlay_color if is_theme_dark else\ + stronger_hover_overlay_color theme.set_stylebox("hover", "LeftConnectedLineEdit", left_connected_hover_stylebox) var left_connected_focus_stylebox := left_connected_stylebox.duplicate() @@ -734,18 +993,19 @@ static func _setup_lineedit(theme: Theme) -> void: right_connected_stylebox.content_margin_bottom = 0.0 var right_connected_disabled_stylebox := right_connected_stylebox.duplicate() - right_connected_disabled_stylebox.bg_color = common_inner_color_disabled - right_connected_disabled_stylebox.border_color = common_border_color_disabled + right_connected_disabled_stylebox.bg_color = line_edit_inner_color_disabled + right_connected_disabled_stylebox.border_color = line_edit_border_color_disabled theme.set_stylebox("read_only", "RightConnectedLineEdit", right_connected_disabled_stylebox) var right_connected_normal_stylebox := right_connected_stylebox.duplicate() - right_connected_normal_stylebox.bg_color = line_edit_background_color + right_connected_normal_stylebox.bg_color = line_edit_inner_color right_connected_normal_stylebox.border_color = line_edit_normal_border_color theme.set_stylebox("normal", "RightConnectedLineEdit", right_connected_normal_stylebox) var right_connected_hover_stylebox := right_connected_stylebox.duplicate() right_connected_hover_stylebox.draw_center = false - right_connected_hover_stylebox.border_color = line_edit_hover_border_overlay_color + right_connected_hover_stylebox.border_color = strong_hover_overlay_color if is_theme_dark else\ + stronger_hover_overlay_color theme.set_stylebox("hover", "RightConnectedLineEdit", right_connected_hover_stylebox) var right_connected_focus_stylebox := right_connected_stylebox.duplicate() @@ -754,7 +1014,7 @@ static func _setup_lineedit(theme: Theme) -> void: theme.set_stylebox("focus", "RightConnectedLineEdit", right_connected_focus_stylebox) theme.add_type("MiniLineEdit") - theme.set_color("font_color", "MiniLineEdit", common_editable_text_color) + theme.set_color("font_color", "MiniLineEdit", editable_text_color) theme.set_type_variation("MiniLineEdit", "LineEdit") theme.set_font_size("font_size", "MiniLineEdit", 10) theme.set_font("font", "MiniLineEdit", mono_font) @@ -772,20 +1032,19 @@ static func _setup_lineedit(theme: Theme) -> void: mini_stylebox.content_margin_bottom = 0.0 var mini_stylebox_normal := mini_stylebox.duplicate() - mini_stylebox_normal.bg_color = line_edit_background_color + mini_stylebox_normal.bg_color = line_edit_inner_color mini_stylebox_normal.border_color = mini_line_edit_normal_border_color theme.set_stylebox("normal", "MiniLineEdit", mini_stylebox_normal) var mini_stylebox_hover := mini_stylebox.duplicate() mini_stylebox_hover.draw_center = false - var mini_line_edit_hover_border_overlay_color := line_edit_hover_border_overlay_color - mini_line_edit_hover_border_overlay_color.a *= 1.5 - mini_stylebox_hover.border_color = mini_line_edit_hover_border_overlay_color + mini_stylebox_hover.border_color = strong_hover_overlay_color if is_theme_dark else\ + stronger_hover_overlay_color theme.set_stylebox("hover", "MiniLineEdit", mini_stylebox_hover) var mini_stylebox_pressed := mini_stylebox.duplicate() mini_stylebox_pressed.draw_center = false - mini_stylebox_pressed.border_color = line_edit_focus_color + mini_stylebox_pressed.border_color = mini_line_edit_normal_border_color.blend(line_edit_focus_color) theme.set_stylebox("focus", "MiniLineEdit", mini_stylebox_pressed) theme.add_type("GoodColorPickerLineEdit") @@ -794,7 +1053,7 @@ static func _setup_lineedit(theme: Theme) -> void: theme.set_font("font", "GoodColorPickerLineEdit", mono_font) var color_picker_line_edit_stylebox := StyleBoxFlat.new() color_picker_line_edit_stylebox.set_corner_radius_all(2) - color_picker_line_edit_stylebox.bg_color = line_edit_background_color + color_picker_line_edit_stylebox.bg_color = line_edit_inner_color theme.set_stylebox("normal", "GoodColorPickerLineEdit", color_picker_line_edit_stylebox) var empty_stylebox := StyleBoxEmpty.new() theme.set_stylebox("hover", "GoodColorPickerLineEdit", empty_stylebox) @@ -809,11 +1068,11 @@ static func _setup_scrollbar(theme: Theme) -> void: h_stylebox.content_margin_right = 2.0 var h_grabber_stylebox := h_stylebox.duplicate() - h_grabber_stylebox.bg_color = scrollbar_normal_color + h_grabber_stylebox.bg_color = intermediate_color theme.set_stylebox("grabber", "HScrollBar", h_grabber_stylebox) var h_grabber_stylebox_hover := h_stylebox.duplicate() - h_grabber_stylebox_hover.bg_color = scrollbar_hover_color + h_grabber_stylebox_hover.bg_color = intermediate_hover_color theme.set_stylebox("grabber_highlight", "HScrollBar", h_grabber_stylebox_hover) var h_grabber_stylebox_pressed := h_stylebox.duplicate() @@ -822,9 +1081,9 @@ static func _setup_scrollbar(theme: Theme) -> void: var h_scroll_stylebox := StyleBoxFlat.new() h_scroll_stylebox.set_corner_radius_all(3) - h_scroll_stylebox.content_margin_top = 8 - h_scroll_stylebox.content_margin_bottom = 8 - h_scroll_stylebox.bg_color = scrollbar_background_color + h_scroll_stylebox.content_margin_top = 8.0 + h_scroll_stylebox.content_margin_bottom = 8.0 + h_scroll_stylebox.bg_color = softer_base_color theme.set_stylebox("scroll", "HScrollBar", h_scroll_stylebox) theme.add_type("VScrollBar") @@ -834,11 +1093,11 @@ static func _setup_scrollbar(theme: Theme) -> void: v_stylebox.content_margin_bottom = 2.0 var v_grabber_stylebox := v_stylebox.duplicate() - v_grabber_stylebox.bg_color = scrollbar_normal_color + v_grabber_stylebox.bg_color = intermediate_color theme.set_stylebox("grabber", "VScrollBar", v_grabber_stylebox) var v_grabber_stylebox_hover := v_stylebox.duplicate() - v_grabber_stylebox_hover.bg_color = scrollbar_hover_color + v_grabber_stylebox_hover.bg_color = intermediate_hover_color theme.set_stylebox("grabber_highlight", "VScrollBar", v_grabber_stylebox_hover) var v_grabber_stylebox_pressed := v_stylebox.duplicate() @@ -846,39 +1105,53 @@ static func _setup_scrollbar(theme: Theme) -> void: theme.set_stylebox("grabber_pressed", "VScrollBar", v_grabber_stylebox_pressed) var v_scroll_stylebox := StyleBoxFlat.new() + # TODO Make the background more coherent, without corners. v_scroll_stylebox.set_corner_radius_all(3) - v_scroll_stylebox.content_margin_left = 8 - v_scroll_stylebox.content_margin_right = 8 - v_scroll_stylebox.bg_color = scrollbar_background_color + v_scroll_stylebox.content_margin_left = 8.0 + v_scroll_stylebox.content_margin_right = 8.0 + v_scroll_stylebox.bg_color = softer_base_color theme.set_stylebox("scroll", "VScrollBar", v_scroll_stylebox) static func _setup_separator(theme: Theme) -> void: theme.add_type("HSeparator") var stylebox := StyleBoxLine.new() - stylebox.color = common_panel_border_color + stylebox.color = basic_panel_border_color stylebox.thickness = 2 theme.set_stylebox("separator", "HSeparator", stylebox) theme.add_type("SmallHSeparator") theme.set_type_variation("SmallHSeparator", "HSeparator") var small_stylebox := stylebox.duplicate() - small_stylebox.color = Color(common_panel_border_color, 0.5) + small_stylebox.color = Color(basic_panel_border_color, 0.5) small_stylebox.grow_begin = -3 small_stylebox.grow_end = -3 theme.set_stylebox("separator", "SmallHSeparator", small_stylebox) static func _setup_label(theme: Theme) -> void: theme.add_type("Label") + theme.set_color("font_color", "Label", text_color) + + theme.add_type("TitleLabel") + theme.set_type_variation("TitleLabel", "Label") + theme.set_font_size("font_size", "TitleLabel", 15) + theme.set_color("font_color", "TitleLabel", highlighted_text_color) + + theme.add_type("BoldTitleLabel") + theme.set_type_variation("BoldTitleLabel", "Label") + theme.set_font_size("font_size", "BoldTitleLabel", 16) + theme.set_font("font", "BoldTitleLabel", bold_font) + theme.set_color("font_color", "BoldTitleLabel", highlighted_text_color) theme.add_type("RichTextLabel") - theme.set_color("selection_color", "RichTextLabel", common_selection_color) + theme.set_color("default_color", "RichTextLabel", text_color) + theme.set_color("selection_color", "RichTextLabel", selection_color) theme.set_font("bold_font", "RichTextLabel", bold_font) static func _setup_tabcontainer(theme: Theme) -> void: theme.add_type("TabContainer") - theme.set_color("font_unselected_color", "TabContainer", common_dim_text_color) - theme.set_color("font_hovered_color", "TabContainer", common_text_color) - theme.set_color("font_selected_color", "TabContainer", common_highlighted_text_color) + theme.set_color("font_unselected_color", "TabContainer", dim_text_color) + theme.set_color("font_hovered_color", "TabContainer", text_color) + theme.set_color("font_selected_color", "TabContainer", highlighted_text_color) theme.set_constant("side_margin", "TabContainer", 0) theme.set_font_size("font_size", "TabContainer", 14) @@ -905,7 +1178,7 @@ static func _setup_tabcontainer(theme: Theme) -> void: theme.set_stylebox("tab_focus", "TabContainer", StyleBoxEmpty.new()) var tab_hover_stylebox := StyleBoxFlat.new() - tab_hover_stylebox.bg_color = hovered_tab_color + tab_hover_stylebox.bg_color = softer_intermediate_hover_color tab_hover_stylebox.corner_radius_top_left = 4 tab_hover_stylebox.corner_radius_top_right = 4 tab_hover_stylebox.content_margin_left = 12.0 @@ -925,7 +1198,7 @@ static func _setup_tabcontainer(theme: Theme) -> void: theme.set_stylebox("tab_selected", "TabContainer", tab_selected_stylebox) var tab_unselected_stylebox := StyleBoxFlat.new() - tab_unselected_stylebox.bg_color = normal_tab_color + tab_unselected_stylebox.bg_color = softer_intermediate_color tab_unselected_stylebox.corner_radius_top_left = 4 tab_unselected_stylebox.corner_radius_top_right = 4 tab_unselected_stylebox.content_margin_left = 12.0 @@ -935,7 +1208,7 @@ static func _setup_tabcontainer(theme: Theme) -> void: theme.set_stylebox("tab_unselected", "TabContainer", tab_unselected_stylebox) var tabbar_background_stylebox := StyleBoxFlat.new() - tabbar_background_stylebox.bg_color = tabbar_background_color + tabbar_background_stylebox.bg_color = soft_base_color tabbar_background_stylebox.set_content_margin_all(0) tabbar_background_stylebox.corner_radius_top_left = 5 tabbar_background_stylebox.corner_radius_top_right = 5 @@ -944,12 +1217,12 @@ static func _setup_tabcontainer(theme: Theme) -> void: static func _setup_textedit(theme: Theme) -> void: theme.add_type("TextEdit") theme.set_color("caret_color", "TextEdit", Color.TRANSPARENT) - theme.set_color("selection_color", "TextEdit", common_selection_color) + theme.set_color("selection_color", "TextEdit", selection_color) theme.set_font_size("font_size", "TextEdit", 12) theme.set_font("font", "TextEdit", mono_font) var normal_stylebox := StyleBoxFlat.new() - normal_stylebox.bg_color = line_edit_background_color + normal_stylebox.bg_color = line_edit_inner_color normal_stylebox.border_color = line_edit_normal_border_color normal_stylebox.set_border_width_all(2) normal_stylebox.set_corner_radius_all(5) @@ -965,7 +1238,8 @@ static func _setup_textedit(theme: Theme) -> void: var hover_stylebox := StyleBoxFlat.new() hover_stylebox.draw_center = false - hover_stylebox.border_color = line_edit_hover_border_overlay_color + hover_stylebox.border_color = strong_hover_overlay_color if is_theme_dark else\ + stronger_hover_overlay_color hover_stylebox.set_border_width_all(2) hover_stylebox.set_corner_radius_all(5) theme.set_stylebox("hover", "TextEdit", hover_stylebox) @@ -973,8 +1247,8 @@ static func _setup_textedit(theme: Theme) -> void: static func _setup_tooltip(theme: Theme) -> void: theme.add_type("TooltipPanel") var stylebox := StyleBoxFlat.new() - stylebox.bg_color = common_panel_inner_color - stylebox.border_color = common_panel_border_color + stylebox.bg_color = basic_panel_inner_color + stylebox.border_color = basic_panel_border_color stylebox.set_border_width_all(2) stylebox.set_corner_radius_all(2) stylebox.content_margin_left = 6.0 @@ -984,10 +1258,21 @@ static func _setup_tooltip(theme: Theme) -> void: theme.set_stylebox("panel", "TooltipPanel", stylebox) theme.add_type("TooltipLabel") - theme.set_color("font_color", "TooltipLabel", common_text_color) + theme.set_color("font_color", "TooltipLabel", text_color) theme.set_font_size("font_size", "TooltipLabel", 14) theme.set_font("font", "TooltipLabel", regular_font) - -static func _icon(name: String) -> Texture2D: - return load("res://assets/icons/theme/" + name + ".svg") +static func _setup_splitcontainer(theme: Theme) -> void: + theme.add_type("SplitContainer") + theme.set_icon("grabber", "VSplitContainer", + SVGTexture.create_from_string(""" + + + """ % desaturated_color.to_html(false)) + ) + theme.set_icon("grabber", "HSplitContainer", + SVGTexture.create_from_string(""" + + + """ % desaturated_color.to_html(false)) + ) diff --git a/src/utils/TranslationUtils.gd b/src/utils/TranslationUtils.gd index 34ee248..6580287 100644 --- a/src/utils/TranslationUtils.gd +++ b/src/utils/TranslationUtils.gd @@ -1,4 +1,4 @@ -class_name TranslationUtils extends RefCounted +@abstract class_name TranslationUtils static func _get_locale_name(locale: String) -> String: match locale: diff --git a/src/utils/Translator.gd b/src/utils/Translator.gd index d24dcc1..743e5f7 100644 --- a/src/utils/Translator.gd +++ b/src/utils/Translator.gd @@ -1,6 +1,6 @@ # A wrapper around basic TranslationServer methods. There is an update_translations script # which checks all Translator methods used across the codebase to collect their strings. -class_name Translator extends RefCounted +@abstract class_name Translator static func translate(string: String) -> String: return TranslationServer.translate(string) diff --git a/src/utils/Utils.gd b/src/utils/Utils.gd index 98761d6..0c82c50 100644 --- a/src/utils/Utils.gd +++ b/src/utils/Utils.gd @@ -1,4 +1,4 @@ -class_name Utils extends RefCounted +@abstract class_name Utils const MAX_NUMERIC_PRECISION = 6 const MAX_ANGLE_PRECISION = 4 diff --git a/src/utils/Utils64Bit.gd b/src/utils/Utils64Bit.gd index d327f8c..00900f6 100644 --- a/src/utils/Utils64Bit.gd +++ b/src/utils/Utils64Bit.gd @@ -1,7 +1,7 @@ # Vector2 and Transform2D aren't precise enough to have their numbers used directly # in the SVG, as they are 32-bit. GodSVG uses PackedFloat64Array to mock them # and this class implements the necessary functionality to make them work. -class_name Utils64Bit extends RefCounted +@abstract class_name Utils64Bit static func get_vector(vector: PackedFloat64Array) -> Vector2: return Vector2(vector[0], vector[1]) diff --git a/src/utils/XIDUtils.gd b/src/utils/XIDUtils.gd index fde5294..8db32bd 100644 --- a/src/utils/XIDUtils.gd +++ b/src/utils/XIDUtils.gd @@ -1,4 +1,4 @@ -class_name XIDUtils extends RefCounted +@abstract class_name XIDUtils # [1] > [1, 2] > [1, 0] > [0] static func compare(xid1: PackedInt32Array, xid2: PackedInt32Array) -> bool: diff --git a/src/utils/XNodeChildrenBuilder.gd b/src/utils/XNodeChildrenBuilder.gd index d33cdcb..b6d6d93 100644 --- a/src/utils/XNodeChildrenBuilder.gd +++ b/src/utils/XNodeChildrenBuilder.gd @@ -1,4 +1,4 @@ -class_name XNodeChildrenBuilder +@abstract class_name XNodeChildrenBuilder const ElementFrameScene = preload("res://src/ui_widgets/element_frame.tscn") const BasicXNodeFrameScene = preload("res://src/ui_widgets/basic_xnode_frame.tscn") diff --git a/translations/GodSVG.pot b/translations/GodSVG.pot index 1d73b22..dbedc76 100644 --- a/translations/GodSVG.pot +++ b/translations/GodSVG.pot @@ -31,9 +31,7 @@ msgid "Check for updates?" msgstr "" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." msgstr "" #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: @@ -54,14 +52,11 @@ msgid "Export" msgstr "" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." msgstr "" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." +msgid "The graphic can be exported only as SVG because its size is not defined." msgstr "" #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: @@ -94,9 +89,7 @@ msgid "The last edited state of this tab could not be found." msgstr "" #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" msgstr "" #: src/config_classes/Formatter.gd: @@ -135,6 +128,29 @@ msgstr "" msgid "6-digit hex" msgstr "" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Light" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "" @@ -155,24 +171,24 @@ msgstr "" msgid "{element} must be inside {allowed} to have any effect." msgstr "" -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." +#: src/data_classes/ElementBaseGradient.gd: +msgid "No \"id\" attribute defined." msgstr "" -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." +#: src/data_classes/ElementBaseGradient.gd: +msgid "No elements under this gradient." msgstr "" -#: src/data_classes/GradientUtils.gd: -msgid "No \"id\" attribute defined." +#: src/data_classes/ElementBaseGradient.gd: +msgid "This gradient is a solid color." msgstr "" -#: src/data_classes/GradientUtils.gd: -msgid "No elements under this gradient." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." msgstr "" -#: src/data_classes/GradientUtils.gd: -msgid "This gradient is a solid color." +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." msgstr "" #: src/data_classes/SVGParser.gd: @@ -205,6 +221,7 @@ msgstr "" msgid "Third-party licenses" msgstr "" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "" @@ -259,7 +276,7 @@ msgstr "" msgid "Dimensions" msgstr "" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "" @@ -283,7 +300,7 @@ msgstr "" msgid "Scale" msgstr "" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "" @@ -364,9 +381,7 @@ msgid "Copy path" msgstr "" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" msgstr "" #: src/ui_parts/handles_manager.gd: @@ -450,10 +465,30 @@ msgstr "" msgid "Other" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Theme preset" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Base color" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Accent color" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "" @@ -487,9 +522,9 @@ msgstr "" msgid "Error color" msgstr "" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" +msgid "Handles" msgstr "" #: src/ui_parts/settings_menu.gd: @@ -512,12 +547,29 @@ msgstr "" msgid "Hovered selected color" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Selection rectangle" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Color {index}" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Background color" +msgid "Canvas color" msgstr "" #: src/ui_parts/settings_menu.gd: @@ -540,41 +592,81 @@ msgstr "" msgid "Close tabs with middle mouse button" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Miscellaneous" +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Use native file dialog" +msgid "Display" msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" +msgid "UI scale" msgstr "" -#. Refers to the size of the draggable handles. #: src/ui_parts/settings_menu.gd: -msgid "Handle size" +msgid "Determines the scale factor for the interface." msgstr "" +#. Stands for "Vertical Synchronization". #: src/ui_parts/settings_menu.gd: -msgid "UI scale" +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Miscellaneous" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Use native file dialog" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Sync window title to file name" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." msgstr "" #: src/ui_parts/settings_menu.gd: @@ -611,10 +703,6 @@ msgstr "" msgid "Help" msgstr "" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "" @@ -707,43 +795,6 @@ msgstr "" msgid "Remove unnecessary parameters" msgstr "" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "" - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "" @@ -833,6 +884,10 @@ msgstr "" msgid "Unnamed" msgstr "" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "" @@ -898,6 +953,14 @@ msgstr "" msgid "Also used by" msgstr "" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "" diff --git a/translations/bg.po b/translations/bg.po index bd04d9f..5cc9353 100644 --- a/translations/bg.po +++ b/translations/bg.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "Провери за ъпдейти?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Това ще се свърже с github.com за да сравни числата на версиите. Не се " -"събират или изпращат никакви други данни." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Това ще се свърже с github.com за да сравни числата на версиите. Не се събират или изпращат никакви други данни." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -57,19 +53,12 @@ msgid "Export" msgstr "Експортирай" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"Графиката може да бъде експортирана само като SVG защото височината и " -"широчината са твърде различни." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "Графиката може да бъде експортирана само като SVG защото височината и широчината са твърде различни." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"Графиката може да бъде експортирана само като SVG защото размерът не е " -"определен." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "Графиката може да бъде експортирана само като SVG защото размерът не е определен." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -101,12 +90,8 @@ msgid "The last edited state of this tab could not be found." msgstr "Последното състояние на този раздел не беше намерено." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"Този раздел е свързан с пътеката {file_path}. Искаш ли да го възстановиш SVG-" -"то от тази пътека?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "Този раздел е свързан с пътеката {file_path}. Искаш ли да го възстановиш SVG-то от тази пътека?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -144,6 +129,29 @@ msgstr "Хекс с 3 или 6 цифри" msgid "6-digit hex" msgstr "Хекс с 6 цифри" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "Тъмна" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Light" +msgstr "Светла" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "Черна (OLED)" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "Тъмна по подразбиране" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "Светла по подразбиране" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Празен" @@ -164,26 +172,26 @@ msgstr "Текст" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} трябва да е във {allowed} за да има ефект." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Тази група няма елементи." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Тази група има само един елемент." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "Не е дефиниран \"id\" атрибут." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Няма елемент под този градиент." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Този градиент е едноцветен." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Тази група няма елементи." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Тази група има само един елемент." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Текстът не описва SVG." @@ -214,6 +222,7 @@ msgstr "Лиценз" msgid "Third-party licenses" msgstr "Лицензи от трети партии" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Основател и мениджър на проекта" @@ -268,7 +277,7 @@ msgstr "Добави елемент" msgid "Dimensions" msgstr "Измерения" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Размер" @@ -292,7 +301,7 @@ msgstr "Качество" msgid "Scale" msgstr "Мащаб" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Широчина" @@ -373,12 +382,8 @@ msgid "Copy path" msgstr "Копирай пътеката" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Файл с името \"{file_name}\" вече съществува. Заместването ще пренапише " -"неговото съдържание!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Файл с името \"{file_name}\" вече съществува. Заместването ще пренапише неговото съдържание!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -461,10 +466,30 @@ msgstr "Лента с раздели" msgid "Other" msgstr "Други" +#: src/ui_parts/settings_menu.gd: +msgid "Theme preset" +msgstr "Шаблон на тема" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "Основни цветове на темата" + +#: src/ui_parts/settings_menu.gd: +msgid "Base color" +msgstr "Базов цвят" + +#: src/ui_parts/settings_menu.gd: +msgid "Accent color" +msgstr "Акцентен цвят" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "Цветове на SVG текста" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "Шаблон на синтаксово маркиране" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Цвят на символите" @@ -498,10 +523,10 @@ msgstr "Цвят на CDATA" msgid "Error color" msgstr "Цвят на грешките" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Цвят на дръжките" +msgid "Handles" +msgstr "Дръжки" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -523,13 +548,30 @@ msgstr "Избран цвят" msgid "Hovered selected color" msgstr "Избран цвят под курсора" +#: src/ui_parts/settings_menu.gd: +msgid "Selection rectangle" +msgstr "Правоъгълник за селекцията" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "Скорост" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "Дължина на чертичките" + +#: src/ui_parts/settings_menu.gd: +msgid "Color {index}" +msgstr "Цвят {index}" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Основни цветове" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Цвят на задния фон" +msgid "Canvas color" +msgstr "Цвят на платното" #: src/ui_parts/settings_menu.gd: msgid "Grid color" @@ -551,18 +593,63 @@ msgstr "Входни сигнали" msgid "Close tabs with middle mouse button" msgstr "Затваряне на раздели със средното копче на мишката" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Когато е включено, натискането на раздел със средното копче на мишката затваря раздела. Ако е изключено, средното копче фокусира раздела." + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Обърни посоката на увеличение" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Разменя посоките на влачене за намаляване и увеличаване" + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Превъртане на курсора" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Превърта курсора когато той достигне краищата на екрана докато влачи гледката." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Използвай CTRL за увеличение" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Когато е включено, влаченето премества гледката. За увеличение, натисни CTRL докато влачиш." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "Дисплей" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Мащаб на интерфейса" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the scale factor for the interface." +msgstr "Определя мащаба на интерфейса." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "Вертикална синхронизация" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "Синхронизира рендирането с честотата на опресняване на дисплея, за да предотврати артефакти от разкъсване на екранното изображение. Може леко да забави входните сигнали." + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "Максимални кадри в секунда" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "Определя максималния брой кадри в секунда." + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Разни" @@ -572,21 +659,16 @@ msgid "Use native file dialog" msgstr "Използвай местния файлов мениджър" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Синхронизирай името на прозореца с файла" - -#. Refers to the size of the draggable handles. -#: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Размер на дръжките" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Когато е включено, ще бъде използван файловият мениджър на твоята операционна система. Ако е изключено, използва вградения файлов мениджър на GodSVG." #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Мащаб на интерфейса" +msgid "Sync window title to file name" +msgstr "Синхронизирай името на прозореца с файла" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Увеличава мащаба на интерфейса." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Когато е изключено, името на прозореца остава \"GodSVG\" без да включва настоящия файл." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -622,10 +704,6 @@ msgstr "Форматировач за експортиране" msgid "Help" msgstr "Помощ" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Възстанови всички до началната стойност" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Шаблон" @@ -718,54 +796,6 @@ msgstr "Поредици от трансформации" msgid "Remove unnecessary parameters" msgstr "Премахни ненужните параметри" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" -"Когато е включено, натискането на раздел със средното копче на мишката " -"затваря раздела. Ако е изключено, средното копче фокусира раздела." - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Разменя посоките на влачене за намаляване и увеличаване" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Превърта курсора когато той достигне краищата на екрана докато влачи " -"гледката." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Когато е включено, влаченето премества гледката. За увеличение, натисни CTRL " -"докато влачиш." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Когато е включено, ще бъде използван файловият мениджър на твоята " -"операционна система. Ако е изключено, използва вградения файлов мениджър на " -"GodSVG." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Когато е изключено, името на прозореца остава \"GodSVG\" без да включва " -"настоящия файл." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Увеличава размера и площта в която дръжките могат да бъдат хванати." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Хоризонтална лента" @@ -855,6 +885,10 @@ msgstr "Изтрий цвета" msgid "Unnamed" msgstr "Неименуван" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "Неограничено" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Ключови цветове" @@ -920,6 +954,14 @@ msgstr "Няма точки" msgid "Also used by" msgstr "Използва се също от..." +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "Приложи" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "Приложи всички настройки по подразбиране на този шаблон" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Възстанови началната стойност" @@ -1014,9 +1056,7 @@ msgstr "{file_path} вече се редактира в GodSVG." #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Ако искаш да премахнеш промените след последното записване, използвай " -"{reset_svg}." +msgstr "Ако искаш да премахнеш промените след последното записване, използвай {reset_svg}." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" diff --git a/translations/de.po b/translations/de.po index 66d64e0..31b5f41 100644 --- a/translations/de.po +++ b/translations/de.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "Nach Aktualisierungen suchen?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Dadurch wird eine Verbindung zu github.com hergestellt, um Versionsnummern " -"zu vergleichen. Es werden keine weiteren Daten gesammelt oder übertragen." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Dadurch wird eine Verbindung zu github.com hergestellt, um Versionsnummern zu vergleichen. Es werden keine weiteren Daten gesammelt oder übertragen." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -57,19 +53,12 @@ msgid "Export" msgstr "Exportieren" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"Die Grafik kann nur als SVG exportiert werden, da ihre Proportionen zu " -"extrem sind." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "Die Grafik kann nur als SVG exportiert werden, da ihre Proportionen zu extrem sind." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"Die Grafik kann nur als SVG exportiert werden, da ihre Größe nicht definiert " -"ist." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "Die Grafik kann nur als SVG exportiert werden, da ihre Größe nicht definiert ist." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -98,17 +87,11 @@ msgstr "Danach einsetzen" #: src/autoload/State.gd: msgid "The last edited state of this tab could not be found." -msgstr "" -"Der letzte Bearbeitungsstand dieser Registerkarte konnte nicht gefunden " -"werden." +msgstr "Der letzte Bearbeitungsstand dieser Registerkarte konnte nicht gefunden werden." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"Die Registerkarte ist an den Dateipfad {file_path} gebunden. Möchten Sie die " -"SVG-Datei aus diesem Pfad wiederherstellen?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "Die Registerkarte ist an den Dateipfad {file_path} gebunden. Möchten Sie die SVG-Datei aus diesem Pfad wiederherstellen?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -146,6 +129,30 @@ msgstr "3-stelligen oder 6-stelligen Hex" msgid "6-digit hex" msgstr "6-stelligen Hex" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Höhe" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Leer" @@ -164,29 +171,28 @@ msgstr "Text" #: src/data_classes/Element.gd: msgid "{element} must be inside {allowed} to have any effect." -msgstr "" -"{element} muss sich innerhalb {allowed} befinden, um einen Effekt zu haben." +msgstr "{element} muss sich innerhalb {allowed} befinden, um einen Effekt zu haben." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Diese Gruppe hat keine Elemente." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Diese Gruppe hat nur ein Element." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "Kein \"id\" Attribut definiert." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Keine Elemente unter diesem Farbverlauf." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Dieser Farbverlauf ist einfarbig." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Diese Gruppe hat keine Elemente." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Diese Gruppe hat nur ein Element." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Beschreibt kein SVG." @@ -217,6 +223,7 @@ msgstr "Lizenz" msgid "Third-party licenses" msgstr "Drittanbieter-Lizenzen" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Projektgründer und Manager" @@ -271,7 +278,7 @@ msgstr "Neues Element" msgid "Dimensions" msgstr "Dimensionen" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Größe" @@ -295,7 +302,7 @@ msgstr "Qualität" msgid "Scale" msgstr "Skalieren" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Breite" @@ -376,12 +383,8 @@ msgid "Copy path" msgstr "Pfad kopieren" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Eine Datei mit dem Namen \"{file_name}\" existiert bereits. Ersetzen wird " -"den Inhalt überschreiben!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Eine Datei mit dem Namen \"{file_name}\" existiert bereits. Ersetzen wird den Inhalt überschreiben!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -464,10 +467,34 @@ msgstr "Tableiste" msgid "Other" msgstr "Anderes" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Zoom zurücksetzen" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Primary theme colors" +msgstr "Farbe deaktivieren" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Allgemeine Farben" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Textfarbe" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "SVG Textfarben" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Symbolfarbe" @@ -501,10 +528,11 @@ msgstr "CDATA-Farbe" msgid "Error color" msgstr "Fehlerfarbe" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Grifffarbe" +#, fuzzy +msgid "Handles" +msgstr "Griffgröße" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -526,13 +554,33 @@ msgstr "Auswahlfarbe" msgid "Hovered selected color" msgstr "Ausgewählte Farbe unter der Maus" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Bild auswählen" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Farbauswahl" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Allgemeine Farben" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Hintergrundfarben" +#, fuzzy +msgid "Canvas color" +msgstr "Innenfarbe" #: src/ui_parts/settings_menu.gd: msgid "Grid color" @@ -554,18 +602,64 @@ msgstr "Eingabe" msgid "Close tabs with middle mouse button" msgstr "Registerkarten mit mittlerer Maustaste schließen" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Wenn diese Option aktiviert ist, wird die Registerkarte durch Anklicken mit der mittleren Maustaste geschlossen. Wenn diese Option ausgeschaltet ist, wird die Registerkarte stattdessen fokussiert." + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Zoomrichtung umkehren" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Tauscht die Scrollrichtung für das Rein- und Rauszoomen." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Herumwickelndes Verschieben" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Teleportiert den Mauszeiger zur gegenüberliegenden Seite, soblald eine Bildschirmgrenze während des Verschiebens erreicht wird." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Strg-Taste zum Zoomen benutzen" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Wenn diese Option aktiviert ist, wird die Ansicht durch Scrollen verschoben. Um zu zoomen muss beim Scrollen die STRG-Taste gedrückt werden." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Benutzeroberflächenskalierung" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the scale factor for the interface." +msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Verschiedenes" @@ -575,21 +669,16 @@ msgid "Use native file dialog" msgstr "Nativen Dateidialog verwenden" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Fenstertitel mit Dateinamen synchronisieren" - -#. Refers to the size of the draggable handles. -#: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Griffgröße" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Wenn diese Option aktiviert ist, wird der Dateidialog des Betriebssystems verwendet. Wenn diese Option deaktiviert ist, wird GodSVG's eingebauter Dateidialog verwendet." #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Benutzeroberflächenskalierung" +msgid "Sync window title to file name" +msgstr "Fenstertitel mit Dateinamen synchronisieren" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Wenn diese Option deaktiviert ist, bleibt der Fenstertitel \"GodSVG\", ohne die aktuelle Datei anzuzeigen." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -625,10 +714,6 @@ msgstr "Export-Formatierer" msgid "Help" msgstr "Hilfe" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Alle auf Standardeinstellung zurücksetzen" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Voreinstellung" @@ -721,55 +806,6 @@ msgstr "Transformationlisten" msgid "Remove unnecessary parameters" msgstr "Unnötige Parameter entfernen" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" -"Wenn diese Option aktiviert ist, wird die Registerkarte durch Anklicken mit " -"der mittleren Maustaste geschlossen. Wenn diese Option ausgeschaltet ist, " -"wird die Registerkarte stattdessen fokussiert." - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Tauscht die Scrollrichtung für das Rein- und Rauszoomen." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Teleportiert den Mauszeiger zur gegenüberliegenden Seite, soblald eine " -"Bildschirmgrenze während des Verschiebens erreicht wird." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Wenn diese Option aktiviert ist, wird die Ansicht durch Scrollen verschoben. " -"Um zu zoomen muss beim Scrollen die STRG-Taste gedrückt werden." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Wenn diese Option aktiviert ist, wird der Dateidialog des Betriebssystems " -"verwendet. Wenn diese Option deaktiviert ist, wird GodSVG's eingebauter " -"Dateidialog verwendet." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Wenn diese Option deaktiviert ist, bleibt der Fenstertitel \"GodSVG\", ohne " -"die aktuelle Datei anzuzeigen." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Erhöht die visuelle Größe und den Interaktionsbereich von Griffen." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Horizontaler Streifen" @@ -859,6 +895,10 @@ msgstr "Farbe löschen" msgid "Unnamed" msgstr "Unbenannt" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Farbschlüsselwörter" @@ -924,6 +964,14 @@ msgstr "Keine Punkte" msgid "Also used by" msgstr "Auch genutzt von" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Zurücksetzen" @@ -1018,9 +1066,7 @@ msgstr "{file_path} wird bereits in GodSVG bearbeitet." #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Wenn Sie Ihre Änderungen seit dem letzten Speichern rückgängig machen " -"wollen, verwenden Sie {reset_svg}." +msgstr "Wenn Sie Ihre Änderungen seit dem letzten Speichern rückgängig machen wollen, verwenden Sie {reset_svg}." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1327,12 +1373,21 @@ msgstr "Die {format}-Datei speichern" msgid "Only {extension_list} files are supported for this operation." msgstr "Nur {extension_list}-Dateien werden für diese Operation unterstützt." -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "Die Dateierweiterung \"{extension}\" ist für diese Operation nicht " -#~ "unterstützt. Nur {extension_list} Dateien werden unterstützt." +#~ msgid "Handle colors" +#~ msgstr "Grifffarbe" + +#~ msgid "Background color" +#~ msgstr "Hintergrundfarben" + +#~ msgid "Reset all to default" +#~ msgstr "Alle auf Standardeinstellung zurücksetzen" + +#, fuzzy +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "Erhöht die visuelle Größe und den Interaktionsbereich von Griffen." + +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "Die Dateierweiterung \"{extension}\" ist für diese Operation nicht unterstützt. Nur {extension_list} Dateien werden unterstützt." #~ msgid "Save the .\"{format}\" file" #~ msgstr "Die .\"{format}\" Datei speichern" @@ -1358,19 +1413,14 @@ msgstr "Nur {extension_list}-Dateien werden für diese Operation unterstützt." #~ msgid "Save as" #~ msgstr "Speichern als" -#~ msgid "" -#~ "If you want to apply the unsaved file state, use \"Reset SVG\" instead." -#~ msgstr "" -#~ "Wenn Sie den ungespeicherten Dateizustand anwenden möchten, benutzen sie " -#~ "stattdessen \"SVG zurücksetzen\"." +#~ msgid "If you want to apply the unsaved file state, use \"Reset SVG\" instead." +#~ msgstr "Wenn Sie den ungespeicherten Dateizustand anwenden möchten, benutzen sie stattdessen \"SVG zurücksetzen\"." #~ msgid "Auto UI scale" #~ msgstr "Automatische Benutzeroberflächenskalierung" #~ msgid "Scales the interface automatically based on the screen size." -#~ msgstr "" -#~ "Skaliert die Benutzeroberfläche automatisch basierend auf der " -#~ "Bildschirmgröße." +#~ msgstr "Skaliert die Benutzeroberfläche automatisch basierend auf der Bildschirmgröße." #~ msgid "Wrap mouse" #~ msgstr "Maus einschließen" @@ -1407,9 +1457,6 @@ msgstr "Nur {extension_list}-Dateien werden für diese Operation unterstützt." #~ msgid "Enable the color" #~ msgstr "Farbe aktivieren" -#~ msgid "Disable the color" -#~ msgstr "Farbe deaktivieren" - #~ msgid "Invalid" #~ msgstr "Ungültig" @@ -1418,12 +1465,10 @@ msgstr "Nur {extension_list}-Dateien werden für diese Operation unterstützt." #~ msgid "" #~ "The file couldn't be opened.\n" -#~ "Try checking the file path, ensure that the file is not deleted, or " -#~ "choose a different file." +#~ "Try checking the file path, ensure that the file is not deleted, or choose a different file." #~ msgstr "" #~ "Die Datei konnte nicht geöffnet werden.\n" -#~ "Überprüfe den Dateipfad, ob die Datei existiert, oder wähle eine andere " -#~ "Datei." +#~ "Überprüfe den Dateipfad, ob die Datei existiert, oder wähle eine andere Datei." #~ msgid "Enable snap" #~ msgstr "Einrasten aktivieren" diff --git a/translations/en.po b/translations/en.po index 0c69444..6fc2741 100644 --- a/translations/en.po +++ b/translations/en.po @@ -32,9 +32,7 @@ msgid "Check for updates?" msgstr "" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." msgstr "" #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: @@ -55,14 +53,11 @@ msgid "Export" msgstr "" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." msgstr "" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." +msgid "The graphic can be exported only as SVG because its size is not defined." msgstr "" #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: @@ -95,9 +90,7 @@ msgid "The last edited state of this tab could not be found." msgstr "" #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" msgstr "" #: src/config_classes/Formatter.gd: @@ -136,6 +129,29 @@ msgstr "" msgid "6-digit hex" msgstr "" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Light" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "" @@ -156,24 +172,24 @@ msgstr "" msgid "{element} must be inside {allowed} to have any effect." msgstr "" -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." +#: src/data_classes/ElementBaseGradient.gd: +msgid "No \"id\" attribute defined." msgstr "" -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." +#: src/data_classes/ElementBaseGradient.gd: +msgid "No elements under this gradient." msgstr "" -#: src/data_classes/GradientUtils.gd: -msgid "No \"id\" attribute defined." +#: src/data_classes/ElementBaseGradient.gd: +msgid "This gradient is a solid color." msgstr "" -#: src/data_classes/GradientUtils.gd: -msgid "No elements under this gradient." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." msgstr "" -#: src/data_classes/GradientUtils.gd: -msgid "This gradient is a solid color." +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." msgstr "" #: src/data_classes/SVGParser.gd: @@ -206,6 +222,7 @@ msgstr "" msgid "Third-party licenses" msgstr "" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "" @@ -260,7 +277,7 @@ msgstr "" msgid "Dimensions" msgstr "" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "" @@ -284,7 +301,7 @@ msgstr "" msgid "Scale" msgstr "" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "" @@ -365,9 +382,7 @@ msgid "Copy path" msgstr "" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" msgstr "" #: src/ui_parts/handles_manager.gd: @@ -451,10 +466,30 @@ msgstr "" msgid "Other" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Theme preset" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Base color" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Accent color" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "" @@ -488,9 +523,9 @@ msgstr "" msgid "Error color" msgstr "" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" +msgid "Handles" msgstr "" #: src/ui_parts/settings_menu.gd: @@ -513,12 +548,29 @@ msgstr "" msgid "Hovered selected color" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Selection rectangle" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Color {index}" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Background color" +msgid "Canvas color" msgstr "" #: src/ui_parts/settings_menu.gd: @@ -541,41 +593,81 @@ msgstr "" msgid "Close tabs with middle mouse button" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Miscellaneous" +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Use native file dialog" +msgid "Display" msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" +msgid "UI scale" msgstr "" -#. Refers to the size of the draggable handles. #: src/ui_parts/settings_menu.gd: -msgid "Handle size" +msgid "Determines the scale factor for the interface." msgstr "" +#. Stands for "Vertical Synchronization". #: src/ui_parts/settings_menu.gd: -msgid "UI scale" +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." msgstr "" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Miscellaneous" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Use native file dialog" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Sync window title to file name" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." msgstr "" #: src/ui_parts/settings_menu.gd: @@ -612,10 +704,6 @@ msgstr "" msgid "Help" msgstr "" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "" @@ -708,43 +796,6 @@ msgstr "" msgid "Remove unnecessary parameters" msgstr "" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "" - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "" @@ -834,6 +885,10 @@ msgstr "" msgid "Unnamed" msgstr "" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "" @@ -899,6 +954,14 @@ msgstr "" msgid "Also used by" msgstr "" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "" diff --git a/translations/es.po b/translations/es.po index a745039..553b1e6 100644 --- a/translations/es.po +++ b/translations/es.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "¿Buscar actualizaciones?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Esto se conectará a github.com para comparar los números de versión. No se " -"recopilan ni transmiten otros datos." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Esto se conectará a github.com para comparar los números de versión. No se recopilan ni transmiten otros datos." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -57,18 +53,12 @@ msgid "Export" msgstr "Exportar" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"El gráfico solo se puede exportar como SVG porque sus proporciones son " -"demasiado extremas." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "El gráfico solo se puede exportar como SVG porque sus proporciones son demasiado extremas." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"El gráfico solo se puede exportar como SVG porque su tamaño no está definido." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "El gráfico solo se puede exportar como SVG porque su tamaño no está definido." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -100,12 +90,8 @@ msgid "The last edited state of this tab could not be found." msgstr "No se pudo encontrar el último estado editado de esta pestaña." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"La pestaña está vinculada a la ruta del archivo {file_path}. ¿Quieres " -"restaurar el SVG desde esta ruta?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "La pestaña está vinculada a la ruta del archivo {file_path}. ¿Quieres restaurar el SVG desde esta ruta?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -143,6 +129,30 @@ msgstr "Hexadecimal de 3 o 6 dígitos" msgid "6-digit hex" msgstr "Hexadecimal de 6 dígitos" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Alto" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Vacío" @@ -163,26 +173,26 @@ msgstr "Texto" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} debe estar dentro de {allowed} para tener algún efecto." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Este grupo no tiene elementos." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Este grupo solo tiene un elemento." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "No hay ningún atributo \"id\" definido." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "No hay elementos en este gradiente." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Este gradiente es un color sólido." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Este grupo no tiene elementos." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Este grupo solo tiene un elemento." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "No describe un SVG." @@ -213,6 +223,7 @@ msgstr "Licencia" msgid "Third-party licenses" msgstr "Licencias de terceros" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Fundador y administrador del proyecto" @@ -267,7 +278,7 @@ msgstr "Nuevo elemento" msgid "Dimensions" msgstr "Dimensiones" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Tamaño" @@ -291,7 +302,7 @@ msgstr "Calidad" msgid "Scale" msgstr "Escala" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Ancho" @@ -372,12 +383,8 @@ msgid "Copy path" msgstr "Copiar ruta" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Ya existe un archivo llamado \"{file_name}\". ¡Reemplazarlo sobrescribirá su " -"contenido!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Ya existe un archivo llamado \"{file_name}\". ¡Reemplazarlo sobrescribirá su contenido!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -460,10 +467,33 @@ msgstr "Barra de pestañas" msgid "Other" msgstr "Otro" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Reestablecer el zoom" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Colores básicos" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Color del texto" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "Colores del texto de los SVG" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Color de los símbolos" @@ -497,10 +527,11 @@ msgstr "Color de CDATA" msgid "Error color" msgstr "Color de los errores" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Colores de los controladores" +#, fuzzy +msgid "Handles" +msgstr "Tamaño de los controladores" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -522,13 +553,33 @@ msgstr "Color seleccionado" msgid "Hovered selected color" msgstr "Color flotante seleccionado" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Selecciona una imagen" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Cuentagotas" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Colores básicos" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Color del fondo" +#, fuzzy +msgid "Canvas color" +msgstr "Color interno" #: src/ui_parts/settings_menu.gd: msgid "Grid color" @@ -550,18 +601,65 @@ msgstr "Entrada" msgid "Close tabs with middle mouse button" msgstr "Cerrar pestañas con el botón central del ratón" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Si está activado, al hacer clic en una pestaña con el botón central del ratón, esta se cierra. Si está desactivado, se centra en la pestaña." + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Invertir dirección de zoom" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Intercambia las direcciones de desplazamiento para acercar y alejar." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Desplazamiento envolvente" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Mueve el cursor hacia el lado opuesto cada vez que alcanza el límite de la ventana gráfica mientras se desplaza." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Usar Ctrl para hacer zoom" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Si está activado, el desplazamiento panorámico permite ver la vista panorámica. Para hacer zoom, mantén presionada la tecla Ctrl mientras te desplazas." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "Visualización" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Escala de la interfaz de usuario" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the scale factor for the interface." +msgstr "Determina el factor de escala de la interfaz." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Maximum FPS" +msgstr "FPS máximos personalizados" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the maximum number of frames per second." +msgstr "Si la velocidad de fotogramas está limitada, este valor determina la cantidad máxima de fotogramas por segundo." + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Misceláneos" @@ -571,21 +669,16 @@ msgid "Use native file dialog" msgstr "Usar diálogo de archivos nativo" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Sincronizar título de la ventana con el nombre del archivo" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Si está activado, usa el cuadro de diálogo de archivos nativo de tu sistema operativo. Si está desactivado, usa el cuadro de diálogo de archivos integrado de GodSVG." -#. Refers to the size of the draggable handles. #: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Tamaño de los controladores" - -#: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Escala de la interfaz de usuario" +msgid "Sync window title to file name" +msgstr "Sincronizar título de la ventana con el nombre del archivo" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Cambia el factor de escala de la interfaz." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Si está desactivado, el título de la ventana permanece como \"GodSVG\" sin incluir el archivo actual." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -621,10 +714,6 @@ msgstr "Formato de exportación" msgid "Help" msgstr "Ayuda" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Restablecer todo a los valores predeterminados" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Preajuste" @@ -717,55 +806,6 @@ msgstr "Transformar listas" msgid "Remove unnecessary parameters" msgstr "Eliminar parámetros innecesarios" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" -"Si está activado, al hacer clic en una pestaña con el botón central del " -"ratón, esta se cierra. Si está desactivado, se centra en la pestaña." - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Intercambia las direcciones de desplazamiento para acercar y alejar." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Mueve el cursor hacia el lado opuesto cada vez que alcanza el límite de la " -"ventana gráfica mientras se desplaza." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Si está activado, el desplazamiento panorámico permite ver la vista " -"panorámica. Para hacer zoom, mantén presionada la tecla Ctrl mientras te " -"desplazas." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Si está activado, usa el cuadro de diálogo de archivos nativo de tu sistema " -"operativo. Si está desactivado, usa el cuadro de diálogo de archivos " -"integrado de GodSVG." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Si está desactivado, el título de la ventana permanece como \"GodSVG\" sin " -"incluir el archivo actual." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Cambia el tamaño visual y el área de agarre de los controladores." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Franja horizontal" @@ -855,6 +895,10 @@ msgstr "Eliminar color" msgid "Unnamed" msgstr "Sin nombre" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Palabras clave de colores" @@ -920,6 +964,14 @@ msgstr "Sin puntos" msgid "Also used by" msgstr "También usado por" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Reestablecer a los valores predeterminados" @@ -958,37 +1010,35 @@ msgstr "GodSVG no reconoce este atributo" #: src/utils/FileUtils.gd: msgid "The following files were discarded:" -msgstr "" +msgstr "Se descartaron los siguientes archivos:" #: src/utils/FileUtils.gd: msgid "{file_name} was discarded." -msgstr "" +msgstr "{file_name} fue descartado." #: src/utils/FileUtils.gd: msgid "Discarded files" -msgstr "" +msgstr "Archivos descartados" #: src/utils/FileUtils.gd: msgid "Proceed" -msgstr "" +msgstr "Continuar" #: src/utils/FileUtils.gd: -#, fuzzy msgid "{file_name} couldn't be opened." -msgstr "No se pudo abrir el archivo." +msgstr "{file_name} no pudo ser abierto." #: src/utils/FileUtils.gd: msgid "Check if the file still exists in the selected file path." -msgstr "" -"Compruebe si el archivo todavía existe en la ruta de archivo seleccionada." +msgstr "Compruebe si el archivo todavía existe en la ruta de archivo seleccionada." #: src/utils/FileUtils.gd: msgid "Proceed with importing the rest of the files?" -msgstr "" +msgstr "¿Continuar con la importación del resto de los archivos?" #: src/utils/FileUtils.gd: msgid "Proceed for all files that can't be opened" -msgstr "" +msgstr "Continuar para todos los archivos que no se pueden abrir" #: src/utils/FileUtils.gd: msgid "Save the file?" @@ -1011,15 +1061,12 @@ msgid "Don't save" msgstr "No guardar" #: src/utils/FileUtils.gd: -#, fuzzy msgid "{file_path} is already being edited inside GodSVG." -msgstr "El archivo importado ya se está editando dentro de GodSVG." +msgstr "{file_path} ya se está editando dentro de GodSVG." #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Si deseas revertir las ediciones realizadas desde la última vez que se " -"guardó, utiliza {reset_svg}." +msgstr "Si deseas revertir las ediciones realizadas desde la última vez que se guardó, utiliza {reset_svg}." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1046,14 +1093,12 @@ msgid "Close all other tabs" msgstr "Cerrar todas las demás pestañas" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Close empty tabs" -msgstr "Cerrar pestaña" +msgstr "Cerrar pestañas vacías" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Close saved tabs" -msgstr "Cerrar todas las demás pestañas" +msgstr "Cerrar pestañas guardadas" #: src/utils/TranslationUtils.gd: msgid "Create tab" @@ -1309,9 +1354,8 @@ msgid "Viewport" msgstr "Ventana gráfica" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Select {format} files" -msgstr "Selecciona un archivo {format}" +msgstr "Selecciona archivos {format}" #: src/utils/TranslationUtils.gd: msgid "Select an image" @@ -1326,15 +1370,26 @@ msgid "Save the {format} file" msgstr "Guardar el archivo {format}" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Only {extension_list} files are supported for this operation." -msgstr "" -"La extensión del archivo está vacía. Solo se admiten los archivos " -"{extension_list}." - -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "La extensión de archivo {extension} no es compatible con esta operación. " -#~ "Solo se admiten los archivos {extension_list}." +msgstr "Solo se admiten archivos {extension_list} para esta operación." + +#~ msgid "Handle colors" +#~ msgstr "Colores de los controladores" + +#~ msgid "Background color" +#~ msgstr "Color del fondo" + +#~ msgid "Uncapped framerate" +#~ msgstr "Velocidad ilimitada de fotogramas" + +#~ msgid "Determines if frames are rendered as fast as possible (may increase power consumption and heat)." +#~ msgstr "Determina si los fotogramas se procesan lo más rápido posible (puede aumentar el consumo de energía y el calor)." + +#~ msgid "Reset all to default" +#~ msgstr "Restablecer todo a los valores predeterminados" + +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "Determina el tamaño visual y el área de agarre de los controladores." + +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "La extensión de archivo {extension} no es compatible con esta operación. Solo se admiten los archivos {extension_list}." diff --git a/translations/et.po b/translations/et.po index f430bad..b1b9478 100644 --- a/translations/et.po +++ b/translations/et.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "Otsi uuendusi?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"See ühendab github.com-i, et saada versioonide teabe. Muid andmeid ei koguta " -"ega edastata." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "See ühendab github.com-i, et saada versioonide teabe. Muid andmeid ei koguta ega edastata." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -57,18 +53,12 @@ msgid "Export" msgstr "Ekspordi" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"Graafika saab eksportida ainult SVG-na, sest selle proportsioonid on liiga " -"ekstreemsed." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "Graafika saab eksportida ainult SVG-na, sest selle proportsioonid on liiga ekstreemsed." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"Graafika saab eksportida ainult SVG-na, sest selle suurus pole defineeritud." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "Graafika saab eksportida ainult SVG-na, sest selle suurus pole defineeritud." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -100,12 +90,8 @@ msgid "The last edited state of this tab could not be found." msgstr "Selle kaardi viimast seisu polnud võimalik leida." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"See vahekaart on seotud failiga asukohas {file_path}. Kas te soovite " -"taastada SVG sellest failist?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "See vahekaart on seotud failiga asukohas {file_path}. Kas te soovite taastada SVG sellest failist?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -143,6 +129,30 @@ msgstr "3- või 6-kohaline hex" msgid "6-digit hex" msgstr "6-kohaline hex" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Kõrgus" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Tühi" @@ -163,26 +173,26 @@ msgstr "Tekst" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} peab olema {allowed} sees, et sellel oleks mõju." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Grupis pole ühtegi elementi." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Grupis on ainult üks element." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "\"id\" atribuut pole defineeritud." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Gradiendis puuduvad elemendid." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Gradient on ühevärviline." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Grupis pole ühtegi elementi." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Grupis on ainult üks element." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Ei kirjelda SVGd." @@ -213,6 +223,7 @@ msgstr "Litsents" msgid "Third-party licenses" msgstr "Kolmandad litsentsid" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Projekti asutaja ja juht" @@ -267,7 +278,7 @@ msgstr "Uus element" msgid "Dimensions" msgstr "Dimensioonid" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Suurus" @@ -291,7 +302,7 @@ msgstr "Kvaliteet" msgid "Scale" msgstr "Skaala" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Laius" @@ -372,12 +383,8 @@ msgid "Copy path" msgstr "Kopeeri asukoht" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Fail nimega \"{file_name}\" on juba olemas, asendamine kirjutab selle sisu " -"üle!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Fail nimega \"{file_name}\" on juba olemas, asendamine kirjutab selle sisu üle!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -460,10 +467,33 @@ msgstr "Kaardiriba" msgid "Other" msgstr "Muu" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Taasta suurendus" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Alusvärvid" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Teksti värv" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "SVG teksti värvid" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Sümboli värv" @@ -497,10 +527,11 @@ msgstr "CDATA värv" msgid "Error color" msgstr "Errori värv" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Pideme värv" +#, fuzzy +msgid "Handles" +msgstr "Pidemete suurus" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -522,13 +553,33 @@ msgstr "Valiku värv" msgid "Hovered selected color" msgstr "Esiletõstetud valiku värv" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Vali pilt" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Värvivalija" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Alusvärvid" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Tausta värv" +#, fuzzy +msgid "Canvas color" +msgstr "Seesmine värv" #: src/ui_parts/settings_menu.gd: msgid "Grid color" @@ -550,18 +601,64 @@ msgstr "Sisend" msgid "Close tabs with middle mouse button" msgstr "Sulge vahekaarte keskmise hiireklahviga" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Sisselülitamisel sulgeb keskmise hiireklahviga kaardile vajutamine selle. Väljalülitamisel fokuseeriks see selle." + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Inverteeri suurendussuund" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Vahetab kerimissuunad suurendamiseks ja vähendamiseks ümber." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Takistusteta vaate liigutamine" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Viib kursori akna vastaspoolele, kui see jõuab vaate liigutamise ajal selle servani, et see liikumist ei takistaks." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Kasuta CTRL klahvi suurendamiseks" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Sisselülitamisel kerimine liigutab vaadet. Suurendamiseks hoia CTRL klahvi kerimise ajal." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Kasutajaliidese suurus" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the scale factor for the interface." +msgstr "Muudab kasutajaliidese suurust." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Mitmesugust" @@ -571,21 +668,16 @@ msgid "Use native file dialog" msgstr "Kasuta süsteemi failidialoogi" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Sünkrooni akna tiitel avatud faili nimega" - -#. Refers to the size of the draggable handles. -#: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Pidemete suurus" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Sisselülitamisel kasutab süsteemi vaikefailidialoogi. Väljalülitamisel GodSVG sisseehitatud failidialoogi." #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Kasutajaliidese suurus" +msgid "Sync window title to file name" +msgstr "Sünkrooni akna tiitel avatud faili nimega" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Muudab kasutajaliidese suurust." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Väljalülitamisel jääb akna nimieks \"GodSVG\" sõltumata avatud failist." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -621,10 +713,6 @@ msgstr "Ekspordi vormindus" msgid "Help" msgstr "Abi" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Lähtesta kõik vaikeväärtustele" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Eelseadistus" @@ -717,52 +805,6 @@ msgstr "Teisendused" msgid "Remove unnecessary parameters" msgstr "Eemalda ebavajalikud parameetrid" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" -"Sisselülitamisel sulgeb keskmise hiireklahviga kaardile vajutamine selle. " -"Väljalülitamisel fokuseeriks see selle." - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Vahetab kerimissuunad suurendamiseks ja vähendamiseks ümber." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Viib kursori akna vastaspoolele, kui see jõuab vaate liigutamise ajal selle " -"servani, et see liikumist ei takistaks." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Sisselülitamisel kerimine liigutab vaadet. Suurendamiseks hoia CTRL klahvi " -"kerimise ajal." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Sisselülitamisel kasutab süsteemi vaikefailidialoogi. Väljalülitamisel " -"GodSVG sisseehitatud failidialoogi." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Väljalülitamisel jääb akna nimieks \"GodSVG\" sõltumata avatud failist." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Muudab pidemete nähtavat ja interaktiivse ala suurust." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Horisontaalne riba" @@ -852,6 +894,10 @@ msgstr "Kustuta värv" msgid "Unnamed" msgstr "Nimetu" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Värvi võtmesõnad" @@ -917,6 +963,14 @@ msgstr "Puuduvad punktid" msgid "Also used by" msgstr "Seda kasutab ka" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Lähtesta vaikeväärtusele" @@ -1011,9 +1065,7 @@ msgstr "{file_path} on juba avatud GodSVGs." #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Kui te soovite taastada muudatused alates eelmise salvestamise hetkest, " -"kasutage {reset_svg}-d." +msgstr "Kui te soovite taastada muudatused alates eelmise salvestamise hetkest, kasutage {reset_svg}-d." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1320,12 +1372,21 @@ msgstr "Salvesta {format} fail" msgid "Only {extension_list} files are supported for this operation." msgstr "Ainult {extension_list} failid on toetatud selle tehingu jaoks." -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "Faililaiend {extension} ei ole selle operatsiooni jaoks toetatud. " -#~ "Toetatud on {extension_list} failid." +#~ msgid "Handle colors" +#~ msgstr "Pideme värv" + +#~ msgid "Background color" +#~ msgstr "Tausta värv" + +#~ msgid "Reset all to default" +#~ msgstr "Lähtesta kõik vaikeväärtustele" + +#, fuzzy +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "Muudab pidemete nähtavat ja interaktiivse ala suurust." + +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "Faililaiend {extension} ei ole selle operatsiooni jaoks toetatud. Toetatud on {extension_list} failid." #~ msgid "Save the .\"{format}\" file" #~ msgstr "Salvesta .\"{format}\" fail" diff --git a/translations/fr.po b/translations/fr.po index 8b54156..1d906aa 100644 --- a/translations/fr.po +++ b/translations/fr.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "Vérifier les mises à jour ?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Cette action effectuera une connexion à github.com pour comparer les numéros " -"de version. Aucune autre information ne sera transmise ou collectée." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Une connexion à github.com sera effectuée pour comparer les numéros de version. Aucune autre information ne sera transmise ou collectée." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -45,7 +41,7 @@ msgstr "OK" #: src/autoload/HandlerGUI.gd: msgid "Do you want to proceed?" -msgstr "Voulez-vous procéder ?" +msgstr "Voulez-vous poursuivre ?" #: src/autoload/HandlerGUI.gd: msgid "Export SVG" @@ -57,18 +53,12 @@ msgid "Export" msgstr "Exporter" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"Le graphique ne peut être exporté qu'en SVG car ses proportions sont trop " -"extrêmes." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "Le graphique ne peut être exporté qu'en SVG car ses proportions sont trop extrêmes." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"Le graphique ne peut être exporté qu'en SVG car sa taille n'est pas définie." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "Le graphique ne peut être exporté qu'en SVG car sa taille n'a pas été pas définie." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -84,9 +74,8 @@ msgid "Restore" msgstr "Restaurer" #: src/autoload/State.gd: -#, fuzzy msgid "View in Inspector" -msgstr "Voir en liste" +msgstr "Voir dans l'inspecteur" #: src/autoload/State.gd: msgid "Convert To" @@ -101,12 +90,8 @@ msgid "The last edited state of this tab could not be found." msgstr "Le dernier état modifié de cet onglet n'a pas pu être trouvé." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"L'onglet est lié au chemin d'accès {file_path}. Voulez-vous restaurer le SVG " -"à partir de ce chemin ?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "L'onglet est lié au chemin d'accès {file_path}. Voulez-vous restaurer le SVG à partir de ce chemin ?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -122,7 +107,7 @@ msgstr "Toujours" #: src/config_classes/Formatter.gd: msgid "All except containers" -msgstr "Pour tout sauf les conteneurs" +msgstr "Sauf pour les conteneurs" #: src/config_classes/Formatter.gd: msgid "Never" @@ -144,6 +129,30 @@ msgstr "Héxadécimal de 3 ou 6 chiffres" msgid "6-digit hex" msgstr "Héxadécimal de 6 chiffres" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Hauteur" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Vide" @@ -164,26 +173,26 @@ msgstr "Texte" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} doit être à l'intérieur de {allowed} pour avoir un effet." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Ce groupe n'a aucun élément." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Ce groupe n'a qu'un seul élément." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "Aucun attribut « id » défini." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Aucun élément en dessous de ce dégradé." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Ce dégradé est une couleur solide." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Ce groupe n'a aucun élément." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Ce groupe n'a qu'un seul élément." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Ne décrit pas un SVG." @@ -200,11 +209,11 @@ msgstr "Fermer" #: src/ui_parts/about_menu.gd: msgid "Authors" -msgstr "Auteurs" +msgstr "Auteur·rices" #: src/ui_parts/about_menu.gd: msgid "Donors" -msgstr "Donateurs" +msgstr "Donateur·rices" #: src/ui_parts/about_menu.gd: msgid "License" @@ -214,25 +223,26 @@ msgstr "Licence" msgid "Third-party licenses" msgstr "Licences tierces" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" -msgstr "Fondateur et gestionnaire du projet" +msgstr "Fondatrice et gestionnaire du projet" #: src/ui_parts/about_menu.gd: msgid "Developers" -msgstr "Développeurs" +msgstr "Développeur·ses" #: src/ui_parts/about_menu.gd: msgid "Translators" -msgstr "Traducteurs" +msgstr "Traducteur·rices" #: src/ui_parts/about_menu.gd: msgid "Golden donors" -msgstr "Donateurs Or" +msgstr "Donateur·rices Or" #: src/ui_parts/about_menu.gd: msgid "Diamond donors" -msgstr "Donateurs Diamant" +msgstr "Donateur·rices Diamant" #: src/ui_parts/current_file_button.gd: msgid "Save SVG as…" @@ -247,13 +257,12 @@ msgid "Snap size" msgstr "Taille d'aimantation" #: src/ui_parts/display.gd: -#, fuzzy msgid "Paste reference image" -msgstr "Charger une image de référence" +msgstr "Coller une image de référence" #: src/ui_parts/donate_menu.gd: msgid "Links to donation platforms" -msgstr "" +msgstr "Liens vers les plateformes de dons" #: src/ui_parts/donate_menu.gd: src/ui_parts/export_menu.gd: #: src/ui_parts/import_warning_menu.gd: src/ui_widgets/choose_name_dialog.gd: @@ -269,7 +278,7 @@ msgstr "Nouvel élément" msgid "Dimensions" msgstr "Dimensions" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Taille" @@ -293,7 +302,7 @@ msgstr "Qualité" msgid "Scale" msgstr "Échelle" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Largeur" @@ -374,12 +383,8 @@ msgid "Copy path" msgstr "Copier le chemin" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Un fichier nommé « {file_name} » existe déjà. Le remplacer écrasera son " -"contenu !" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Un fichier nommé « {file_name} » existe déjà. Le remplacer écrasera son contenu !" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -412,11 +417,11 @@ msgstr "Ajouter un élément" #. Refers to the zero, one, or multiple UI parts to not be shown in the final layout. It's of plural cardinality. #: src/ui_parts/layout_popup.gd: msgid "Excluded" -msgstr "" +msgstr "Exclu(s)" #: src/ui_parts/layout_popup.gd: msgid "Drag and drop to change the layout" -msgstr "" +msgstr "Glissez-déposez pour modifier la disposition" #: src/ui_parts/mac_menu.gd: src/ui_parts/settings_menu.gd: msgid "File" @@ -456,16 +461,40 @@ msgstr "Thèmes" #: src/ui_parts/settings_menu.gd: msgid "Tab bar" -msgstr "" +msgstr "Barre d'onglets" #: src/ui_parts/settings_menu.gd: msgid "Other" msgstr "Autre" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Réinitialiser le zoom" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Primary theme colors" +msgstr "Désactiver la couleur" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Couleurs basiques" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Couleur de texte" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "Couleurs de texte SVG" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Couleur de symbole" @@ -499,10 +528,11 @@ msgstr "Couleur de CDATA" msgid "Error color" msgstr "Couleur d'erreur" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Couleurs des poignées" +#, fuzzy +msgid "Handles" +msgstr "Taille des poignées" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -524,18 +554,37 @@ msgstr "Couleur d'élément selectionné" msgid "Hovered selected color" msgstr "Couleur d'élément selectionné survolé" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Sélectionnez une image" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Pipette" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Couleurs basiques" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Couleur d'arrière-plan" +#, fuzzy +msgid "Canvas color" +msgstr "Couleur d'intérieur" #: src/ui_parts/settings_menu.gd: -#, fuzzy msgid "Grid color" -msgstr "Couleur valide" +msgstr "Couleur de la grille" #: src/ui_parts/settings_menu.gd: msgid "Valid color" @@ -551,44 +600,86 @@ msgstr "Entrée" #: src/ui_parts/settings_menu.gd: msgid "Close tabs with middle mouse button" -msgstr "" +msgstr "Fermer les onglets avec la molette de la souris" + +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Si activé, cliquer sur un onglet avec la molette de la souris fermera l'onglet. Si désactivé, cette action le rendra actif." #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Inverser la direction du zoom" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Inverser les sens de défilement pour le zoom avant et le zoom arrière." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Défilement bouclé" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Téléporte le curseur de l'autre côté de la vue à chaque fois qu'il en atteind la limite." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Utiliser CTRL pour zoomer" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Si activé, défiler fera balayer la vue. Pour zoomer, maintenez CTRL en défilant." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Échelle de l'interface" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the scale factor for the interface." +msgstr "Détermine le facteur d'échelle de l'interface." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Maximum FPS" +msgstr "Valeur d'IPS maximale personnalisée" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the maximum number of frames per second." +msgstr "Si le taux de rafraîchissement est limité, cette valeur déterminera le nombre maximum d'images par seconde." + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Divers" #: src/ui_parts/settings_menu.gd: msgid "Use native file dialog" -msgstr "Utiliser la boîte de dialogue de fichiers native" - -#: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Synchroniser le titre de la fenêtre au nom du fichier" +msgstr "Utiliser le sélecteur de fichiers natif" -#. Refers to the size of the draggable handles. #: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Taille des poignées" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Si activé, utilise le sélecteur de fichiers système. Si désactivé, utilise la boîte de dialogue intégrée de GodSVG." #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Échelle de l'interface" +msgid "Sync window title to file name" +msgstr "Synchroniser le titre de la fenêtre avec le nom du fichier" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Change le facteur d'échelle de l'interface." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Si désactivé, le titre de la fenêtre restera simplement « GodSVG » quel que soit le fichier actuel." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -613,21 +704,17 @@ msgstr "Nouvelle palette depuis du XML" #. Refers to the formatter used for GodSVG's code editor. #: src/ui_parts/settings_menu.gd: msgid "Editor formatter" -msgstr "Formateur de l'éditeur" +msgstr "Formatage de l'éditeur" #. Refers to the formatter used when exporting. #: src/ui_parts/settings_menu.gd: msgid "Export formatter" -msgstr "Formateur d'exportation" +msgstr "Formatage des fichiers exportés" #: src/ui_parts/settings_menu.gd: msgid "Help" msgstr "Aide" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Tout rénitialiser par défaut" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Préréglage" @@ -674,7 +761,7 @@ msgstr "Retirer le zéro initial" #: src/ui_parts/settings_menu.gd: msgid "Use exponential when shorter" -msgstr "Noter en exponentiel si c'est plus court" +msgstr "Noter en écriture scientifique si c'est plus court" #: src/ui_parts/settings_menu.gd: msgid "Colors" @@ -686,7 +773,7 @@ msgstr "Utiliser des couleurs nommées" #: src/ui_parts/settings_menu.gd: msgid "Primary syntax" -msgstr "Syntaxe primaire" +msgstr "Syntaxe principale" #: src/ui_parts/settings_menu.gd: msgid "Capitalize hexadecimal letters" @@ -694,7 +781,7 @@ msgstr "Mettre en majuscule les nombres héxadécimaux" #: src/ui_parts/settings_menu.gd: msgid "Pathdata" -msgstr "Données de chemin d'accès" +msgstr "Données des chemins" #: src/ui_parts/settings_menu.gd: msgid "Compress numbers" @@ -720,55 +807,6 @@ msgstr "Transformer les listes" msgid "Remove unnecessary parameters" msgstr "Retirer les paramètres inutiles" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "" -"Inverser les directions de défilement pour le zoom avant et le zoom arrière." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Téléporte le curseur de l'autre côté de la vue à chaque fois qu'il en " -"atteind la limite." - -#: src/ui_parts/settings_menu.gd: -#, fuzzy -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Si activé, défiler fera balayer la vue. Pour zoomer, maintenez CTRL en " -"défilant." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Si activé, utilise la boîte de dialogue de fichiers native de votre système " -"d'exploitation. Si désactivé, utilise la boîte de dialogue intégrée de " -"GodSVG." - -#: src/ui_parts/settings_menu.gd: -#, fuzzy -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Si désactivé, le titre de la fenêtre restera simplement « GodSVG » quel que " -"soit le fichier actuel." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Change la taille visuelle et la zone de saisie des poignées" - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Rayure horizontale" @@ -807,7 +845,7 @@ msgstr "Réessayer" #: src/ui_parts/update_menu.gd: msgid "Show prereleases" -msgstr "Inclure les versions préliminaires" +msgstr "Afficher les versions préliminaires" #: src/ui_parts/update_menu.gd: msgid "Current Version" @@ -815,7 +853,7 @@ msgstr "Version actuelle" #: src/ui_parts/update_menu.gd: msgid "Retrieving information..." -msgstr "Récupération d'information en cours…" +msgstr "Récupération d'informations en cours…" #. When checking for updates. #: src/ui_parts/update_menu.gd: @@ -823,18 +861,16 @@ msgid "Update check failed" msgstr "Échec de la vérification de mise à jour" #: src/ui_parts/update_menu.gd: -#, fuzzy msgid "View all releases" -msgstr "Sélectionner tous les éléments" +msgstr "Voir toutes les versions" #: src/ui_parts/update_menu.gd: msgid "GodSVG is up-to-date." msgstr "GodSVG est à jour." #: src/ui_parts/update_menu.gd: -#, fuzzy msgid "New versions available!" -msgstr "Nouvelles versions" +msgstr "De nouvelles versions sont disponibles !" #: src/ui_widgets/choose_name_dialog.gd: msgid "Create" @@ -850,7 +886,7 @@ msgstr "Pipette" #: src/ui_widgets/configure_color_popup.gd: msgid "Edit color name" -msgstr "Éditer le nom de la couleur" +msgstr "Modifier le nom de la couleur" #: src/ui_widgets/configure_color_popup.gd: msgid "Delete color" @@ -860,6 +896,10 @@ msgstr "Supprimer la couleur" msgid "Unnamed" msgstr "Sans nom" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Colorier les mots-clés" @@ -870,7 +910,7 @@ msgstr "Pipette" #: src/ui_widgets/palette_config.gd: msgid "Unnamed palettes won't be shown." -msgstr "Les palettes sans nom ne seront pas affichées." +msgstr "Les palettes sans nom ne seront pas montrées." #: src/ui_widgets/palette_config.gd: msgid "Multiple palettes can't have the same name." @@ -925,9 +965,17 @@ msgstr "Aucun point" msgid "Also used by" msgstr "Aussi utilisé par" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" -msgstr "Rénitialiser par défaut" +msgstr "Réinitialiser par défaut" #: src/ui_widgets/setting_shortcut.gd: msgid "Unused" @@ -939,7 +987,7 @@ msgstr "Ajouter un raccourci" #: src/ui_widgets/setting_shortcut.gd: msgid "Press keys…" -msgstr "Appuyez sur les touches…" +msgstr "Appuyez sur des touches…" #: src/ui_widgets/transform_field.gd: msgid "No transforms" @@ -963,24 +1011,23 @@ msgstr "GodSVG ne reconnaît pas cet attribut" #: src/utils/FileUtils.gd: msgid "The following files were discarded:" -msgstr "" +msgstr "Les fichiers suivants ont été abandonnés :" #: src/utils/FileUtils.gd: msgid "{file_name} was discarded." -msgstr "" +msgstr "{file_name} a été abandonné." #: src/utils/FileUtils.gd: msgid "Discarded files" -msgstr "" +msgstr "Fichiers abandonnés" #: src/utils/FileUtils.gd: msgid "Proceed" -msgstr "" +msgstr "Poursuivre" #: src/utils/FileUtils.gd: -#, fuzzy msgid "{file_name} couldn't be opened." -msgstr "Le fichier n'a pas pu être ouvert." +msgstr "{file_name} n'a pas pu être ouvert." #: src/utils/FileUtils.gd: msgid "Check if the file still exists in the selected file path." @@ -988,11 +1035,11 @@ msgstr "Vérifiez si le fichier existe encore au chemin selectionné." #: src/utils/FileUtils.gd: msgid "Proceed with importing the rest of the files?" -msgstr "" +msgstr "Poursuivre en important le reste des fichiers ?" #: src/utils/FileUtils.gd: msgid "Proceed for all files that can't be opened" -msgstr "" +msgstr "Poursuivre pour chaque fichier ne pouvant être ouvert" #: src/utils/FileUtils.gd: msgid "Save the file?" @@ -1000,11 +1047,11 @@ msgstr "Enregistrer le fichier ?" #: src/utils/FileUtils.gd: msgid "Do you want to save this file?" -msgstr "Voulez-vous enregistrer ce fichier ?" +msgstr "Voulez-vous sauvegarder ce fichier ?" #: src/utils/FileUtils.gd: msgid "Save the changes?" -msgstr "Enregistrer les changements?" +msgstr "Sauvegarder les modifications ?" #: src/utils/FileUtils.gd: msgid "Your changes will be lost if you don't save them." @@ -1015,15 +1062,12 @@ msgid "Don't save" msgstr "Ne pas enregistrer" #: src/utils/FileUtils.gd: -#, fuzzy msgid "{file_path} is already being edited inside GodSVG." -msgstr "Le fichier importé est déjà en cours de modification dans GodSVG." +msgstr "{file_path} est déjà en cours de modification dans GodSVG." #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Si vous voulez rénitialiser vos changements au dernier enregistrement, " -"utilisez {reset_svg}." +msgstr "Si vous voulez réinitialiser vos modifications au dernier enregistrement, utilisez {reset_svg}." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1034,9 +1078,8 @@ msgid "Save SVG" msgstr "Sauvegarder le SVG" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Save SVG as" -msgstr "Sauvegarder le SVG sous…" +msgstr "Sauvegarder le SVG sous" #: src/utils/TranslationUtils.gd: msgid "Close tabs to the left" @@ -1051,14 +1094,12 @@ msgid "Close all other tabs" msgstr "Fermer les autres onglets" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Close empty tabs" -msgstr "Fermer l'onglet" +msgstr "Fermer les onglets vides" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Close saved tabs" -msgstr "Fermer les autres onglets" +msgstr "Fermer les onglets enregistrés" #: src/utils/TranslationUtils.gd: msgid "Create tab" @@ -1066,33 +1107,31 @@ msgstr "Créer un onglet" #: src/utils/TranslationUtils.gd: msgid "Select the next tab" -msgstr "Sélectionner l'onglet suivant" +msgstr "Basculer à l'onglet suivant" #: src/utils/TranslationUtils.gd: msgid "Select the previous tab" -msgstr "Sélectionner l'onglet précédent" +msgstr "Basculer à l'onglet précédent" #: src/utils/TranslationUtils.gd: msgid "Optimize" msgstr "Optimiser" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Optimize SVG" -msgstr "Optimiser" +msgstr "Optimiser le SVG" #: src/utils/TranslationUtils.gd: msgid "Copy all text" msgstr "Copier tout le texte" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Copy the SVG text" -msgstr "Copier tout le texte" +msgstr "Copier le texte SVG" #: src/utils/TranslationUtils.gd: msgid "Reset SVG" -msgstr "Rénitialiser le SVG" +msgstr "Réinitialiser le SVG" #: src/utils/TranslationUtils.gd: msgid "Open externally" @@ -1143,7 +1182,6 @@ msgid "Delete the selection" msgstr "Supprimer les éléments sélectionnés" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Move up" msgstr "Remonter" @@ -1152,7 +1190,6 @@ msgid "Move the selection up" msgstr "Remonter les éléments sélectionnés" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Move down" msgstr "Descendre" @@ -1174,7 +1211,7 @@ msgstr "Zoom arrière" #: src/utils/TranslationUtils.gd: msgid "Zoom reset" -msgstr "Rénitialiser le zoom" +msgstr "Réinitialiser le zoom" #: src/utils/TranslationUtils.gd: msgid "Show grid" @@ -1258,7 +1295,7 @@ msgstr "Quitter l'application" #: src/utils/TranslationUtils.gd: msgid "Toggle fullscreen" -msgstr "" +msgstr "Activer/Désactiver le mode plein écran" #: src/utils/TranslationUtils.gd: msgid "Move to" @@ -1306,50 +1343,57 @@ msgstr "Absolu" #: src/utils/TranslationUtils.gd: msgid "Code editor" -msgstr "" +msgstr "Éditeur de code" #: src/utils/TranslationUtils.gd: msgid "Inspector" -msgstr "" +msgstr "Inspecteur" #. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas. #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Viewport" -msgstr "Affichage" +msgstr "Zone d'affichage" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Select {format} files" -msgstr "Sélectionner un fichier XML" +msgstr "Sélectionner des fichiers {format}" #: src/utils/TranslationUtils.gd: msgid "Select an image" -msgstr "Sélectionner une image" +msgstr "Sélectionnez une image" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Select an {format} file" -msgstr "Sélectionner un fichier XML" +msgstr "Sélectionner un fichier {format}" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Save the {format} file" -msgstr "Enregistrer le fichier .\"{format}\"" +msgstr "Enregistrer le fichier {format}" #: src/utils/TranslationUtils.gd: -#, fuzzy msgid "Only {extension_list} files are supported for this operation." -msgstr "" -"L'extension de fichier est vide. Seuls les fichiers {extension_list} sont " -"supportés." +msgstr "Seuls les fichiers {extension_list} sont supportés par cette opération." + +#~ msgid "Handle colors" +#~ msgstr "Couleurs des poignées" -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "L'extension de fichier {extension} n'est pas supportée pour cette " -#~ "opération. Seuls les fichiers {extension_list} sont supportés." +#~ msgid "Background color" +#~ msgstr "Couleur d'arrière-plan" + +#~ msgid "Uncapped framerate" +#~ msgstr "Taux de rafraîchissement sans limite" + +#~ msgid "Determines if frames are rendered as fast as possible (may increase power consumption and heat)." +#~ msgstr "Détermine si les rafraîchissements sont rendus aussi vite que possible (peut augmenter la consommation d'énergie et la chaleur)." + +#~ msgid "Reset all to default" +#~ msgstr "Tout réinitialiser par défaut" + +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "Détermine la taille visuelle et la zone de saisie des poignées." + +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "L'extension de fichier {extension} n'est pas supportée pour cette opération. Seuls les fichiers {extension_list} sont supportés." #~ msgid "Save the .\"{format}\" file" #~ msgstr "Enregistrer le fichier .\"{format}\"" @@ -1383,17 +1427,13 @@ msgstr "" #~ msgstr "Redimensionne l'interface utilisateur selon la taille de l'écran." #~ msgid "Wrap mouse" -#~ msgstr "" -#~ "Déplacer la souris d'un bout à l'autre de l'écran lorsque le bord est " -#~ "atteint" +#~ msgstr "Déplacer la souris d'un bout à l'autre de l'écran lorsque le bord est atteint" #~ msgid "Swaps zoom in and zoom out with the mouse wheel." #~ msgstr "Échanger le zoom avant et le zoom arrière par molette de souris." #~ msgid "Wraps the mouse cursor around when panning the viewport." -#~ msgstr "" -#~ "Déplace le pointeur de souris d'un bout à l'autre de l'écran lorsque le " -#~ "bord est atteint lors d'un balayage." +#~ msgstr "Déplace le pointeur de souris d'un bout à l'autre de l'écran lorsque le bord est atteint lors d'un balayage." #~ msgid "This requires GodSVG to connect to the internet." #~ msgstr "Ceci nécessite que GodSVG se connecte à Internet." @@ -1416,6 +1456,3 @@ msgstr "" #~ msgid "Enable the color" #~ msgstr "Activer la couleur" - -#~ msgid "Disable the color" -#~ msgstr "Désactiver la couleur" diff --git a/translations/nl.po b/translations/nl.po index e3c99dc..c4feffa 100644 --- a/translations/nl.po +++ b/translations/nl.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "Voor updates controleren?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Dit zal een verbinding maken naar github.com om de versienummers te " -"vergelijken. Er wordt geen andere data verzameld of verzonden." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Dit zal een verbinding maken naar github.com om de versienummers te vergelijken. Er wordt geen andere data verzameld of verzonden." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -57,19 +53,12 @@ msgid "Export" msgstr "Exporteren" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"De afbeelding kan alleen maar als SVG geëxporteerd worden door zijn extreme " -"verhoudingen." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "De afbeelding kan alleen maar als SVG geëxporteerd worden door zijn extreme verhoudingen." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"De afbeelding kan alleen maar als SVG geëxporteerd worden want zijn maat is " -"niet gedefiniëerd." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "De afbeelding kan alleen maar als SVG geëxporteerd worden want zijn maat is niet gedefiniëerd." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -102,12 +91,8 @@ msgid "The last edited state of this tab could not be found." msgstr "De laatst aangepaste stand van dit tabblad kon niet gevonden worden." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"Het tablad is gebonden aan het bestandspad {file_path}. Wil je de SVG " -"herstellen vanuit dit pad?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "Het tablad is gebonden aan het bestandspad {file_path}. Wil je de SVG herstellen vanuit dit pad?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -145,6 +130,30 @@ msgstr "3-cijferig of 6-cijferige hex" msgid "6-digit hex" msgstr "6-cijferige hex" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Hoogte" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Leeg" @@ -165,26 +174,26 @@ msgstr "Tekst" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} moet aanwezig zijn in {allowed} om enig effect te hebben." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Deze groep bevat geen elementen." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Deze groep bevat maar één element." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "Geen \"id\" attribuut gedefineerd." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Geen elementen onder deze kleurovergang." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Deze kleurovergang is een vaste kleur." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Deze groep bevat geen elementen." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Deze groep bevat maar één element." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Beschrijft geen SVG." @@ -215,6 +224,7 @@ msgstr "Licentie" msgid "Third-party licenses" msgstr "Derde partij Licenties" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Projectoprichter en Manager" @@ -270,7 +280,7 @@ msgstr "Nieuw element" msgid "Dimensions" msgstr "Afmetingen" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Maat" @@ -294,7 +304,7 @@ msgstr "Kwaliteit" msgid "Scale" msgstr "Schaal" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Breedte" @@ -375,12 +385,8 @@ msgid "Copy path" msgstr "Pad kopiëren" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Er bestaat al een bestand genaamt \"{file_name}\". Deze vervangen zal zijn " -"inhoud aanpassen!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Er bestaat al een bestand genaamt \"{file_name}\". Deze vervangen zal zijn inhoud aanpassen!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -463,10 +469,34 @@ msgstr "Tabladbalk" msgid "Other" msgstr "Overige" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Zoom resetten" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Primary theme colors" +msgstr "De kleur uitzetten" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Basiskleuren" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Textkleur" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "SVG tekstkleuren" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Symboolkleur" @@ -500,10 +530,11 @@ msgstr "CDATA-kleur" msgid "Error color" msgstr "Fout-kleur" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Handvatkleuren" +#, fuzzy +msgid "Handles" +msgstr "Handvat maat" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -525,13 +556,33 @@ msgstr "Gekozen kleur" msgid "Hovered selected color" msgstr "Zweefde gekozen kleur" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Kies een afbeedling" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Kleurenplukker" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Basiskleuren" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Achtergrondskleur" +#, fuzzy +msgid "Canvas color" +msgstr "Binnenkantkleuren" #: src/ui_parts/settings_menu.gd: #, fuzzy @@ -554,18 +605,65 @@ msgstr "Invoer" msgid "Close tabs with middle mouse button" msgstr "Sluit tabbladen met de middelste muisknop" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "inzoomrichting tegenstellen" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Verwisselt de scroll richtingen voor inzoomen en uitzoomen." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Omwikkeld rondkijken" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Verplaatst de cursur naar de overkant wanneer het buiten de viewport gaat tijdens het rondkijken." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Gebruik CTRL om in te zoomen" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Als ingeschakeld, scrollen zal het weergave verschuiven. Om te zoomen,houd CTRL ingedrukt tijdens scrollen." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Gebruiksinterface maat" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the scale factor for the interface." +msgstr "Verandert het maat-factor van de gebruikersinterface." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Overige" @@ -575,21 +673,17 @@ msgid "Use native file dialog" msgstr "Gebruik inheemse bestandendialoog" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Synchroniseer venstertitel naar bestandsnaam" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Waneer ingeschakeld, gebruikt jouw besturingssysteem's inheemse bestandendialoog. Wanneer uitgeschakeld, gebruikt GodSVG's ingebouwde bestandendialoog." -#. Refers to the size of the draggable handles. #: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Handvat maat" - -#: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Gebruiksinterface maat" +msgid "Sync window title to file name" +msgstr "Synchroniseer venstertitel naar bestandsnaam" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Verandert het maat-factor van de gebruikersinterface." +#, fuzzy +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Als dit uitgeschakelt is, blijft de venstertitel simpelweg \"GodSVG\" achteloos van het huidige bestand." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -625,10 +719,6 @@ msgstr "Exportformatter" msgid "Help" msgstr "Help" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Reset allen naar standaard" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Voorinstelling" @@ -721,54 +811,6 @@ msgstr "Transformeer lijsten" msgid "Remove unnecessary parameters" msgstr "Verwijder onnodige parameters" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Verwisselt de scroll richtingen voor inzoomen en uitzoomen." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Verplaatst de cursur naar de overkant wanneer het buiten de viewport gaat " -"tijdens het rondkijken." - -#: src/ui_parts/settings_menu.gd: -#, fuzzy -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Als ingeschakeld, scrollen zal het weergave verschuiven. Om te zoomen,houd " -"CTRL ingedrukt tijdens scrollen." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Waneer ingeschakeld, gebruikt jouw besturingssysteem's inheemse " -"bestandendialoog. Wanneer uitgeschakeld, gebruikt GodSVG's ingebouwde " -"bestandendialoog." - -#: src/ui_parts/settings_menu.gd: -#, fuzzy -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Als dit uitgeschakelt is, blijft de venstertitel simpelweg \"GodSVG\" " -"achteloos van het huidige bestand." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "verandert de visuele grootte en grijpgebieden van handvaten." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Horizontale lijn" @@ -860,6 +902,10 @@ msgstr "Kleur verwijderen" msgid "Unnamed" msgstr "Onbenoemd" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "kleur trefwoorden" @@ -925,6 +971,14 @@ msgstr "Geen punten" msgid "Also used by" msgstr "Ook gebruikt door" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Reset naar standaard" @@ -1021,9 +1075,7 @@ msgstr "Het geïmporteerde bestand is al geöpend in GodSVG" #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Als u uw aanpassingen van de vorige opslag wilt ongedaanmaken, gebruik " -"{reset_svg}" +msgstr "Als u uw aanpassingen van de vorige opslag wilt ongedaanmaken, gebruik {reset_svg}" #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1340,16 +1392,23 @@ msgstr "Bewaar het .\"{format}\" bestand" #: src/utils/TranslationUtils.gd: #, fuzzy msgid "Only {extension_list} files are supported for this operation." -msgstr "" -"Deze bestandsextensie is leeg. Alleen {extension_list} bestanden zijn " -"ondersteund." +msgstr "Deze bestandsextensie is leeg. Alleen {extension_list} bestanden zijn ondersteund." -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "Deze operatie is niet ondersteund voor de bestandsextensie {extension}." -#~ "Alleen {extension_list} bestanden zijn ondersteund." +#~ msgid "Handle colors" +#~ msgstr "Handvatkleuren" + +#~ msgid "Background color" +#~ msgstr "Achtergrondskleur" + +#~ msgid "Reset all to default" +#~ msgstr "Reset allen naar standaard" + +#, fuzzy +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "verandert de visuele grootte en grijpgebieden van handvaten." + +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "Deze operatie is niet ondersteund voor de bestandsextensie {extension}.Alleen {extension_list} bestanden zijn ondersteund." #~ msgid "Save the .\"{format}\" file" #~ msgstr "Bewaar het .\"{format}\" bestand" @@ -1389,8 +1448,7 @@ msgstr "" #~ msgstr "Wisselt in- en uitzoemen met de muiswiel." #~ msgid "Wraps the mouse cursor around when panning the viewport." -#~ msgstr "" -#~ "Wikkelt de muiscursor rond tijdens het verschuiven van de kijkvenster." +#~ msgstr "Wikkelt de muiscursor rond tijdens het verschuiven van de kijkvenster." #~ msgid "This requires GodSVG to connect to the internet." #~ msgstr "Hiervoor moet GodSVG verbinding maken met het internet." @@ -1413,9 +1471,6 @@ msgstr "" #~ msgid "Enable the color" #~ msgstr "De kleur inschakelen" -#~ msgid "Disable the color" -#~ msgstr "De kleur uitzetten" - #~ msgid "Invalid" #~ msgstr "Ongeldig" @@ -1424,12 +1479,10 @@ msgstr "" #~ msgid "" #~ "The file couldn't be opened.\n" -#~ "Try checking the file path, ensure that the file is not deleted, or " -#~ "choose a different file." +#~ "Try checking the file path, ensure that the file is not deleted, or choose a different file." #~ msgstr "" #~ "Het bestand kon niet geopend worden.\n" -#~ "Probeer the bestandspad te controleren, zorg ervoor dat de bestand niet " -#~ "verwijdert is, of kies een ander bestand uit." +#~ "Probeer the bestandspad te controleren, zorg ervoor dat de bestand niet verwijdert is, of kies een ander bestand uit." #~ msgid "Enable snap" #~ msgstr "Knappen inschakelen" diff --git a/translations/pt_BR.po b/translations/pt_BR.po index dc0a4bd..162f711 100644 --- a/translations/pt_BR.po +++ b/translations/pt_BR.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "Verificar atualizações?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Isso irá conectar ao github.com para comparar o número de versionamento. " -"Nenhum outro dado será colecionado ou transmitido." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Isso irá conectar ao github.com para comparar o número de versionamento. Nenhum outro dado será colecionado ou transmitido." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -57,19 +53,12 @@ msgid "Export" msgstr "Exportar" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"Esse gráfico pode ser exportado apenas como um SVG pois as suas proporções " -"são extremas." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "Esse gráfico pode ser exportado apenas como um SVG pois as suas proporções são extremas." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"Esse gráfico pode ser exportado apenas como SVG pois o seu tamanho não foi " -"definido." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "Esse gráfico pode ser exportado apenas como SVG pois o seu tamanho não foi definido." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -101,12 +90,8 @@ msgid "The last edited state of this tab could not be found." msgstr "O último estado editado desta guia não foi encontrado." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"A guia está vinculada ao caminho do arquivo {file_path}. Você deseja " -"restaurar o SVG deste caminho?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "A guia está vinculada ao caminho do arquivo {file_path}. Você deseja restaurar o SVG deste caminho?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -144,6 +129,30 @@ msgstr "Hexadecimal de 3 dígitos ou 6 dígitos" msgid "6-digit hex" msgstr "Hexadecimal de 6 dígitos" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Altura" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Vazio" @@ -165,26 +174,26 @@ msgstr "Texto" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} deve estar dentro de {allowed} para ter qualquer efeito." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Este grupo não possui elementos." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Este grupo possui apenas um elemento." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "Nenhum atributo \"id\" definido." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Nenhum elemento sob / abaixo este gradiente." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Este gradiente é uma cor sólida." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Este grupo não possui elementos." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Este grupo possui apenas um elemento." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Não descreve um SVG." @@ -215,6 +224,7 @@ msgstr "Licença" msgid "Third-party licenses" msgstr "Licenças de terceiros" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Fundador e Gerente do Projeto" @@ -269,7 +279,7 @@ msgstr "Novo elemento" msgid "Dimensions" msgstr "Dimensões" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Tamanho" @@ -293,7 +303,7 @@ msgstr "Qualidade" msgid "Scale" msgstr "Escala" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Largura" @@ -307,8 +317,7 @@ msgstr "Copiar" #: src/ui_parts/export_menu.gd: msgid "Preview image size is limited to {dimensions}" -msgstr "" -"O tamanho da visualização da prévia de imagem é limitado à {dimensions}" +msgstr "O tamanho da visualização da prévia de imagem é limitado à {dimensions}" #: src/ui_parts/global_actions.gd: src/ui_parts/shortcut_panel_config.gd: msgid "Layout" @@ -375,12 +384,8 @@ msgid "Copy path" msgstr "Copiar caminho" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Um arquivo nomeado \"{file_name}\" já existe. Substituir este arquivo irá " -"sobrescrever os seus conteúdos!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Um arquivo nomeado \"{file_name}\" já existe. Substituir este arquivo irá sobrescrever os seus conteúdos!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -463,10 +468,33 @@ msgstr "Barra de guias" msgid "Other" msgstr "Outro" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Redefinir zoom" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Cores básicas" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Cor de texto" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "Cores de texto SVG" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Cor de símbolo" @@ -500,10 +528,11 @@ msgstr "Cor de CDATA" msgid "Error color" msgstr "Cor de erro" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Cor de alça" +#, fuzzy +msgid "Handles" +msgstr "Tamanho de alça" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -525,13 +554,33 @@ msgstr "Cor de selecionado" msgid "Hovered selected color" msgstr "Cor de pairado e selecionado" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Selecionar uma imagem" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Seletor de Cores" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Cores básicas" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Cor do plano de fundo" +#, fuzzy +msgid "Canvas color" +msgstr "Cor interna" #: src/ui_parts/settings_menu.gd: msgid "Grid color" @@ -553,18 +602,64 @@ msgstr "Entrada" msgid "Close tabs with middle mouse button" msgstr "Fechar guias com o botão do meio do mouse" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Se ligado, clicar em uma guia com o botão do meio do mouse fechará a guia. Se desligado, irá focar na guia." + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Inverter direção do zoom" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Troca as direções de rolagem para aumentar e diminuir o zoom." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Movimentação envolvente" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Passa o cursor para o lado oposto da tela quando ele atinge uma borda da viewport quando movimentando a visualização." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Utilizar CTRL para zoom" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Se habilitado, a rolagem do mouse irá movimentar a tela. Para realizar o zoom, pressione CTRL enquanto rola." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Escala da interface" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the scale factor for the interface." +msgstr "Muda o fator de escala da interfaçe." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Variados" @@ -574,21 +669,16 @@ msgid "Use native file dialog" msgstr "Utilizar diálogo de arquivos nativo" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Sincronizar título de janela com o nome do arquivo" - -#. Refers to the size of the draggable handles. -#: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Tamanho de alça" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Se habilitado, usa o diálogo de arquivo nativo do sistema operacional. Se desabilitado, usa o diálogo de arquivo embutido no GodSVG." #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Escala da interface" +msgid "Sync window title to file name" +msgstr "Sincronizar título de janela com o nome do arquivo" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Muda o fator de escala da interfaçe." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Se desabilitado, o título da janela permanecerá como \"GodSVG\" sem incluir o nome do arquivo aberto." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -624,10 +714,6 @@ msgstr "Formatador de exportação" msgid "Help" msgstr "Ajuda" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Redefinir tudo para o padrão" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Predefinição" @@ -720,53 +806,6 @@ msgstr "Transformar listas" msgid "Remove unnecessary parameters" msgstr "Remover parâmetros desnecessários" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" -"Se ligado, clicar em uma guia com o botão do meio do mouse fechará a guia. " -"Se desligado, irá focar na guia." - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Troca as direções de rolagem para aumentar e diminuir o zoom." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Passa o cursor para o lado oposto da tela quando ele atinge uma borda da " -"viewport quando movimentando a visualização." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Se habilitado, a rolagem do mouse irá movimentar a tela. Para realizar o " -"zoom, pressione CTRL enquanto rola." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Se habilitado, usa o diálogo de arquivo nativo do sistema operacional. Se " -"desabilitado, usa o diálogo de arquivo embutido no GodSVG." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Se desabilitado, o título da janela permanecerá como \"GodSVG\" sem incluir " -"o nome do arquivo aberto." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Muda o tamanho e a área de agarramento das alças." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Faixa horizontal" @@ -856,6 +895,10 @@ msgstr "Remover cor" msgid "Unnamed" msgstr "Sem nome" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Palavras-chave de cor" @@ -921,6 +964,14 @@ msgstr "Sem pontos" msgid "Also used by" msgstr "Também usado por" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Redefinir para o padrão" @@ -1015,9 +1066,7 @@ msgstr "{file_path} já está sendo editado dentro do GodSVG." #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Se você deseja reverter as suas edições desde o último salvamento, use " -"{reset_svg}." +msgstr "Se você deseja reverter as suas edições desde o último salvamento, use {reset_svg}." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1322,16 +1371,23 @@ msgstr "Salvar o arquivo do tipo {format}" #: src/utils/TranslationUtils.gd: msgid "Only {extension_list} files are supported for this operation." -msgstr "" -"A extensão de arquivo está vazia. Somente arquivos {extension_list} são " -"suportados." +msgstr "A extensão de arquivo está vazia. Somente arquivos {extension_list} são suportados." + +#~ msgid "Handle colors" +#~ msgstr "Cor de alça" + +#~ msgid "Background color" +#~ msgstr "Cor do plano de fundo" + +#~ msgid "Reset all to default" +#~ msgstr "Redefinir tudo para o padrão" + +#, fuzzy +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "Muda o tamanho e a área de agarramento das alças." -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "A extensão de arquivo {extension} não é compatível com esta operação. " -#~ "Somente arquivos {extension_list} são suportados." +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "A extensão de arquivo {extension} não é compatível com esta operação. Somente arquivos {extension_list} são suportados." #~ msgid "Save the .\"{format}\" file" #~ msgstr "Salvar o arquivo .\"{format}\"" @@ -1358,11 +1414,8 @@ msgstr "" #~ msgstr "Salvar como" # Wonky translation but source is alwo wonky -#~ msgid "" -#~ "If you want to apply the unsaved file state, use \"Reset SVG\" instead." -#~ msgstr "" -#~ "Se você deseja aplicar o estado de arquivo não salvo, utilize \"Redefinir " -#~ "SVG\"." +#~ msgid "If you want to apply the unsaved file state, use \"Reset SVG\" instead." +#~ msgstr "Se você deseja aplicar o estado de arquivo não salvo, utilize \"Redefinir SVG\"." #~ msgid "Auto UI scale" #~ msgstr "Escala de interface automárica" diff --git a/translations/ru.po b/translations/ru.po index 20d0259..66d74aa 100644 --- a/translations/ru.po +++ b/translations/ru.po @@ -33,12 +33,8 @@ msgid "Check for updates?" msgstr "Проверить обновления?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Требуется подключение к github.com, чтобы сравнить номер версии. Никакие " -"другие данные не собираются и не передаются." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Требуется подключение к github.com, чтобы сравнить номер версии. Никакие другие данные не собираются и не передаются." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -58,19 +54,12 @@ msgid "Export" msgstr "Экспортовать" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"Изображение можно экспортировать только как SVG, поскольку его пропорции " -"слишком экстремальные." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "Изображение можно экспортировать только как SVG, поскольку его пропорции слишком экстремальные." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"Изображение можно экспортировать только как SVG, поскольку его размеры не " -"заданы." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "Изображение можно экспортировать только как SVG, поскольку его размеры не заданы." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -102,12 +91,8 @@ msgid "The last edited state of this tab could not be found." msgstr "Последнее редактированное состояние этой вкладки невозможно найти." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"Вкладка связана с путем к файлу {file_path}. Вы желаете восстановить SVG из " -"этого пути?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "Вкладка связана с путем к файлу {file_path}. Вы желаете восстановить SVG из этого пути?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -145,6 +130,30 @@ msgstr "3 или 6 цифровое шестандацитиричное зна msgid "6-digit hex" msgstr "6 цифровое шестандцатяричное значение" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Высота" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Пусто" @@ -165,26 +174,26 @@ msgstr "Текст" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} должен быть внутри {allowed} чтобы это имело эффект." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "В этой групе нет элементов." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "В этой группе только один элемент." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "Атрибут \"id\" не задан." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Нет элемента в этом градиенте." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Этот градиент описывает сплошной цвет." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "В этой групе нет элементов." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "В этой группе только один элемент." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Не является описанием SVG." @@ -215,6 +224,7 @@ msgstr "Лицензия" msgid "Third-party licenses" msgstr "Лицензии третьих лиц" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Основатель и руководитель проекта" @@ -269,7 +279,7 @@ msgstr "Новый элемент" msgid "Dimensions" msgstr "Размеры" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Размер" @@ -293,7 +303,7 @@ msgstr "Качество" msgid "Scale" msgstr "Масштаб" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Ширина" @@ -307,8 +317,7 @@ msgstr "Скопировать" #: src/ui_parts/export_menu.gd: msgid "Preview image size is limited to {dimensions}" -msgstr "" -"Размер предварительного просмотра изображения ограничен до {dimensions}" +msgstr "Размер предварительного просмотра изображения ограничен до {dimensions}" #: src/ui_parts/global_actions.gd: src/ui_parts/shortcut_panel_config.gd: msgid "Layout" @@ -375,12 +384,8 @@ msgid "Copy path" msgstr "Скопировать путь" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Файл с названием \"{file_name}\" уже существует. Его замена перезапишет его " -"содержимое!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Файл с названием \"{file_name}\" уже существует. Его замена перезапишет его содержимое!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -463,10 +468,33 @@ msgstr "Вкладки" msgid "Other" msgstr "Другие" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Сбросить масштаб" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Базовый цвет" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Цвет текста" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "Цвет SVG текста" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Цвет символа" @@ -500,10 +528,11 @@ msgstr "Цвет CDATA" msgid "Error color" msgstr "Цвет ошибки" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Цвет ручки редактирования" +#, fuzzy +msgid "Handles" +msgstr "Размер ручек" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -525,13 +554,33 @@ msgstr "Цвет выбранного" msgid "Hovered selected color" msgstr "Цвет выделенного-наведенного" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Выбрать изображение" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Цветовая пипетка" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Базовый цвет" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Цвет фона" +#, fuzzy +msgid "Canvas color" +msgstr "Внутренний цвет" #: src/ui_parts/settings_menu.gd: msgid "Grid color" @@ -553,18 +602,64 @@ msgstr "Устройства ввода" msgid "Close tabs with middle mouse button" msgstr "Закрывать вкладки средней клавишей мыши" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Если включено - нажатие на вкладку средней кнопкой мыши закроет ее. Если выключено - вкладка получит фокус." + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Инвертировать направление масштабирования" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Поменяет местами направление прокрутки при масштабировании." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Захват курсора при прокрутке" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Курсор будет телепортироваться от одного до противоположного края на границе окна просмотра." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Использовать CTRL для масштабирования" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Если включено - прокрутка будет перемещать окно просмотра. Чтобы масштабировать зажмите CTRL при прокручивании." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Масштаб интерфейса" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the scale factor for the interface." +msgstr "Изменить масштаб пользовательского интерфейса." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Разное" @@ -574,21 +669,16 @@ msgid "Use native file dialog" msgstr "Использовать родной файловый диалог системы" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Синхронизировать заголовок окна с названием файла" - -#. Refers to the size of the draggable handles. -#: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Размер ручек" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Если включено, то будет использоваться родной файловый диалог вашей операционной системы для выбора файлов. Если выключено, то будет использоваться встроенный файловый диалог." #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Масштаб интерфейса" +msgid "Sync window title to file name" +msgstr "Синхронизировать заголовок окна с названием файла" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Изменить масштаб пользовательского интерфейса." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Если выключено - заголовок окна будет просто \"GodSVG\", не включая текущий файл." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -624,10 +714,6 @@ msgstr "Форматер экспорта" msgid "Help" msgstr "Помощь" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Восстановить значения по умолчанию" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "Пресет" @@ -720,54 +806,6 @@ msgstr "Список трансформаций" msgid "Remove unnecessary parameters" msgstr "Удалить ненужные параметры" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" -"Если включено - нажатие на вкладку средней кнопкой мыши закроет ее. Если " -"выключено - вкладка получит фокус." - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Поменяет местами направление прокрутки при масштабировании." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Курсор будет телепортироваться от одного до противоположного края на границе " -"окна просмотра." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Если включено - прокрутка будет перемещать окно просмотра. Чтобы " -"масштабировать зажмите CTRL при прокручивании." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Если включено, то будет использоваться родной файловый диалог вашей " -"операционной системы для выбора файлов. Если выключено, то будет " -"использоваться встроенный файловый диалог." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Если выключено - заголовок окна будет просто \"GodSVG\", не включая текущий " -"файл." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Изменит визуальный размер и область захвата ручек редактирования." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Горизонтальная полоса" @@ -857,6 +895,10 @@ msgstr "Удалить цвет" msgid "Unnamed" msgstr "Без названия" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Ключевые слова цвета" @@ -922,6 +964,14 @@ msgstr "Нет точек" msgid "Also used by" msgstr "Так же используется" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Восстановить значение по умолчанию" @@ -1016,9 +1066,7 @@ msgstr "Файл {file_path} уже редактируется внутри GodS #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Если вы хотите отменить внесенные после после сохранения изменения, " -"воспользуйтесь {reset_svg}." +msgstr "Если вы хотите отменить внесенные после после сохранения изменения, воспользуйтесь {reset_svg}." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1323,16 +1371,23 @@ msgstr "Сохранить {format} файл" #: src/utils/TranslationUtils.gd: msgid "Only {extension_list} files are supported for this operation." -msgstr "" -"Только файлы с расширениями {extension_list} поддерживаются для этой " -"операции." +msgstr "Только файлы с расширениями {extension_list} поддерживаются для этой операции." + +#~ msgid "Handle colors" +#~ msgstr "Цвет ручки редактирования" + +#~ msgid "Background color" +#~ msgstr "Цвет фона" + +#~ msgid "Reset all to default" +#~ msgstr "Восстановить значения по умолчанию" + +#, fuzzy +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "Изменит визуальный размер и область захвата ручек редактирования." -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "Расширение файла {extension} не поддерживается для этой операции. Только " -#~ "{extension_list} файлы поддерживаются." +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "Расширение файла {extension} не поддерживается для этой операции. Только {extension_list} файлы поддерживаются." #~ msgid "Save the .\"{format}\" file" #~ msgstr "Сохранить .\"{format}\" файл" @@ -1358,16 +1413,11 @@ msgstr "" #~ msgid "Save as" #~ msgstr "Сохранить как" -#~ msgid "" -#~ "If you want to apply the unsaved file state, use \"Reset SVG\" instead." -#~ msgstr "" -#~ "Если вы хотите применить не сохраненное состояние файла, используйте " -#~ "\"Скинуть SVG\"." +#~ msgid "If you want to apply the unsaved file state, use \"Reset SVG\" instead." +#~ msgstr "Если вы хотите применить не сохраненное состояние файла, используйте \"Скинуть SVG\"." #~ msgid "Auto UI scale" #~ msgstr "Автоматический маштаб интерфейса пользователя" #~ msgid "Scales the interface automatically based on the screen size." -#~ msgstr "" -#~ "Автоматически масштабировать интерфейс пользователя в зависимости от " -#~ "размера экрана." +#~ msgstr "Автоматически масштабировать интерфейс пользователя в зависимости от размера экрана." diff --git a/translations/uk.po b/translations/uk.po index 1d8f596..4fba247 100644 --- a/translations/uk.po +++ b/translations/uk.po @@ -32,12 +32,8 @@ msgid "Check for updates?" msgstr "Перевірити оновлення?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." -msgstr "" -"Це потребує з'єднання з github.com, щоб порівняти цифри версії. Жодна інша " -"інформація не збирається і не передається." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." +msgstr "Це потребує з'єднання з github.com, щоб порівняти цифри версії. Жодна інша інформація не збирається і не передається." #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: msgid "OK" @@ -57,19 +53,12 @@ msgid "Export" msgstr "Експортувати" #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." -msgstr "" -"Це зображення може бути експортоване тільки як SVG, оскільки його пропорції " -"занадто екстремальні." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." +msgstr "Це зображення може бути експортоване тільки як SVG, оскільки його пропорції занадто екстремальні." #: src/autoload/HandlerGUI.gd: -msgid "" -"The graphic can be exported only as SVG because its size is not defined." -msgstr "" -"Це зображення може бути експортоване тільки як SVG, оскільки його розмір не " -"завданий." +msgid "The graphic can be exported only as SVG because its size is not defined." +msgstr "Це зображення може бути експортоване тільки як SVG, оскільки його розмір не завданий." #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: #: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd: @@ -101,12 +90,8 @@ msgid "The last edited state of this tab could not be found." msgstr "Останній редагований стан цієї вкладки не може бути знайдено." #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" -msgstr "" -"Ця вкладка пов'язана з шляхом до файлу {file_path}. Бажаєте відновити SVG з " -"цього шляху?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" +msgstr "Ця вкладка пов'язана з шляхом до файлу {file_path}. Бажаєте відновити SVG з цього шляху?" #: src/config_classes/Formatter.gd: msgid "Compact" @@ -144,6 +129,30 @@ msgstr "3 або 6 значне шістнадцятирічне число" msgid "6-digit hex" msgstr "6 значне шістнадцятирічне число" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "Висота" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "Порожньо" @@ -164,26 +173,26 @@ msgstr "Текст" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} повинен бути всередині {allowed} щоб зміни вступили в силу." -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "Ця група не має елементів." - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "Ця група має тільки один елемент." - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "Не вказано \"id\" атрибуту." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "Немає елементів під цим градієнтом." -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "Цей градієнт це суцільний колір." +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "Ця група не має елементів." + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "Ця група має тільки один елемент." + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "Не є описом SVG." @@ -214,6 +223,7 @@ msgstr "Ліцензія" msgid "Third-party licenses" msgstr "Ліцензії третіх осіб" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "Засновник і керівник проекту" @@ -268,7 +278,7 @@ msgstr "Новий елемент" msgid "Dimensions" msgstr "Розміри" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "Розмір" @@ -292,7 +302,7 @@ msgstr "Якість" msgid "Scale" msgstr "Масштаб" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "Ширина" @@ -373,12 +383,8 @@ msgid "Copy path" msgstr "Скопіювати шлях" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" -msgstr "" -"Файл з назваою \"{file_name}\" вже існує. Його заміна призведе до перезапису " -"його вмісту!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" +msgstr "Файл з назваою \"{file_name}\" вже існує. Його заміна призведе до перезапису його вмісту!" #: src/ui_parts/handles_manager.gd: msgid "New shape" @@ -461,10 +467,33 @@ msgstr "Вкладка" msgid "Other" msgstr "Інше" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "Скинути масштаб" + +#: src/ui_parts/settings_menu.gd: +msgid "Primary theme colors" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "Базовий колір" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "Колір тексту" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "Колір SVG тексту" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "Колір символу" @@ -498,10 +527,11 @@ msgstr "Колір CDATA" msgid "Error color" msgstr "Колір помилки" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "Колір ручки редагування" +#, fuzzy +msgid "Handles" +msgstr "Розмір ручок редагування" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -523,13 +553,33 @@ msgstr "Колір обраного" msgid "Hovered selected color" msgstr "Колір наведено-виділеного" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "Обрати зображення" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "Кольорова піпетка" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "Базовий колір" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "Колір фону" +#, fuzzy +msgid "Canvas color" +msgstr "Внутрішній колір" #: src/ui_parts/settings_menu.gd: msgid "Grid color" @@ -551,18 +601,64 @@ msgstr "Пристрої вводу" msgid "Close tabs with middle mouse button" msgstr "Закривати вкладки при натисканні середньої кнопки миші" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "Якщо увімкнено - клацання на вкладку середньою кнопкою миші закриє її. Якщо вимкнено - фокус буде замінено на неї." + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "Інвертувати напрямок масштабування" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "Міняє напрям гортання при масштабуванні." + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "Захопити курсор при гортанні" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "Курсор буде телепортуватися від одного краю до протилежного при пересуванні вікна перегляду." + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "Використовувати CTRL для масштабування" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "Якщо увімкнено - гортання буде рухати вікно перегляду. Щоб масштабувати, затисніть CTRL доки гортаєте." + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "Масштаб інтерфейсу" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the scale factor for the interface." +msgstr "Змінити масштаб інтерфейсу користувача." + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "Різне" @@ -572,21 +668,16 @@ msgid "Use native file dialog" msgstr "Використовувати рідний файловий діалог" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "Синхронізувати заголовок вікна з назвою поточного файлу" - -#. Refers to the size of the draggable handles. -#: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "Розмір ручок редагування" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "Якщо увімкнено, то буде використовувати рідний файловий діалог вашої операційної системи для обирання файлів. Якщо вимкнено, то замість буде використовуватися вбудований файловий діалог." #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "Масштаб інтерфейсу" +msgid "Sync window title to file name" +msgstr "Синхронізувати заголовок вікна з назвою поточного файлу" #: src/ui_parts/settings_menu.gd: -msgid "Changes the scale factor for the interface." -msgstr "Змінити масштаб інтерфейсу користувача." +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "Якщо вимкнено - заголовок вікна залишиться як \"GodSVG\", не включаючи назву поточного файлу." #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -622,10 +713,6 @@ msgstr "Форматер експорту" msgid "Help" msgstr "Допомога" -#: src/ui_parts/settings_menu.gd: -msgid "Reset all to default" -msgstr "Скинути до замовчування" - # не знаю #: src/ui_parts/settings_menu.gd: msgid "Preset" @@ -722,54 +809,6 @@ msgstr "Список трансформацій" msgid "Remove unnecessary parameters" msgstr "Видалити необов'язкові параметри" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" -"Якщо увімкнено - клацання на вкладку середньою кнопкою миші закриє її. Якщо " -"вимкнено - фокус буде замінено на неї." - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "Міняє напрям гортання при масштабуванні." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" -"Курсор буде телепортуватися від одного краю до протилежного при пересуванні " -"вікна перегляду." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "" -"Якщо увімкнено - гортання буде рухати вікно перегляду. Щоб масштабувати, " -"затисніть CTRL доки гортаєте." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"Якщо увімкнено, то буде використовувати рідний файловий діалог вашої " -"операційної системи для обирання файлів. Якщо вимкнено, то замість буде " -"використовуватися вбудований файловий діалог." - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "" -"Якщо вимкнено - заголовок вікна залишиться як \"GodSVG\", не включаючи назву " -"поточного файлу." - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "Змінює візуальний розмір та область захоплення для ручок." - #: src/ui_parts/shortcut_panel.gd: msgid "Horizontal strip" msgstr "Горизонтальна смужка" @@ -859,6 +898,10 @@ msgstr "Видалити колір" msgid "Unnamed" msgstr "Без назви" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: msgid "Color keywords" msgstr "Ключові слова кольорів" @@ -924,6 +967,14 @@ msgstr "Немає точок" msgid "Also used by" msgstr "Також використовується" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "Скинути значення до замовчування" @@ -1018,9 +1069,7 @@ msgstr "Файл {file_path} вже редагується в GodSVG." #: src/utils/FileUtils.gd: msgid "If you want to revert your edits since the last save, use {reset_svg}." -msgstr "" -"Якщо ви бажаєте повернути свої зміни з останнього збереження, використовуйте " -"{reset_svg}." +msgstr "Якщо ви бажаєте повернути свої зміни з останнього збереження, використовуйте {reset_svg}." #: src/utils/FileUtils.gd: msgid "Do you want to save the changes made to {file_name}?" @@ -1326,15 +1375,23 @@ msgstr "Зберегти {format} файл" #: src/utils/TranslationUtils.gd: msgid "Only {extension_list} files are supported for this operation." -msgstr "" -"Тільки файли з розширеннями {extension_list} підтримуються для цієї операції." +msgstr "Тільки файли з розширеннями {extension_list} підтримуються для цієї операції." + +#~ msgid "Handle colors" +#~ msgstr "Колір ручки редагування" + +#~ msgid "Background color" +#~ msgstr "Колір фону" + +#~ msgid "Reset all to default" +#~ msgstr "Скинути до замовчування" + +#, fuzzy +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "Змінює візуальний розмір та область захоплення для ручок." -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "Розширення файлу {extension} не підтримується для цієї операції. Тільки " -#~ "{extension_list} файли підтримуються." +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "Розширення файлу {extension} не підтримується для цієї операції. Тільки {extension_list} файли підтримуються." #~ msgid "Save the .\"{format}\" file" #~ msgstr "Зберегти .\"{format}\" файл" @@ -1361,16 +1418,11 @@ msgstr "" #~ msgid "Save as" #~ msgstr "Зберегти як" -#~ msgid "" -#~ "If you want to apply the unsaved file state, use \"Reset SVG\" instead." -#~ msgstr "" -#~ "Якщо ви бажаєте застосувати не збережений стан файлу, використайте " -#~ "\"Скинути SVG\"." +#~ msgid "If you want to apply the unsaved file state, use \"Reset SVG\" instead." +#~ msgstr "Якщо ви бажаєте застосувати не збережений стан файлу, використайте \"Скинути SVG\"." #~ msgid "Auto UI scale" #~ msgstr "Автоматичний масштаб інтерфейсу" #~ msgid "Scales the interface automatically based on the screen size." -#~ msgstr "" -#~ "Автоматично масштабувати інтерфейс користувача в залежності від розміру " -#~ "екрану." +#~ msgstr "Автоматично масштабувати інтерфейс користувача в залежності від розміру екрану." diff --git a/translations/zh_CN.po b/translations/zh_CN.po index 1f1844c..e562e82 100644 --- a/translations/zh_CN.po +++ b/translations/zh_CN.po @@ -32,9 +32,7 @@ msgid "Check for updates?" msgstr "检查更新?" #: src/autoload/HandlerGUI.gd: -msgid "" -"This will connect to github.com to compare version numbers. No other data is " -"collected or transmitted." +msgid "This will connect to github.com to compare version numbers. No other data is collected or transmitted." msgstr "" #: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd: @@ -57,15 +55,12 @@ msgstr "导出" #: src/autoload/HandlerGUI.gd: #, fuzzy -msgid "" -"The graphic can be exported only as SVG because its proportions are too " -"extreme." +msgid "The graphic can be exported only as SVG because its proportions are too extreme." msgstr "此图像只能以 SVG 格式导出,因为其大小未定义。您确定要继续吗?" #: src/autoload/HandlerGUI.gd: #, fuzzy -msgid "" -"The graphic can be exported only as SVG because its size is not defined." +msgid "The graphic can be exported only as SVG because its size is not defined." msgstr "此图像只能以 SVG 格式导出,因为其大小未定义。您确定要继续吗?" #: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd: @@ -100,9 +95,7 @@ msgid "The last edited state of this tab could not be found." msgstr "" #: src/autoload/State.gd: -msgid "" -"The tab is bound to the file path {file_path}. Do you want to restore the " -"SVG from this path?" +msgid "The tab is bound to the file path {file_path}. Do you want to restore the SVG from this path?" msgstr "" #: src/config_classes/Formatter.gd: @@ -141,6 +134,30 @@ msgstr "3 位或 6 位十六进制" msgid "6-digit hex" msgstr "6 位十六进制" +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Dark" +msgstr "" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +#, fuzzy +msgid "Light" +msgstr "高度" + +#. Refers to a theme preset. +#: src/config_classes/SaveData.gd: +msgid "Black (OLED)" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Dark" +msgstr "" + +#: src/config_classes/SaveData.gd: +msgid "Default Light" +msgstr "" + #: src/config_classes/TabData.gd: msgid "Empty" msgstr "" @@ -161,26 +178,26 @@ msgstr "文本" msgid "{element} must be inside {allowed} to have any effect." msgstr "{element} 必须在 {allowed} 内才能产生作用。" -#: src/data_classes/ElementG.gd: -msgid "This group has no elements." -msgstr "此组内没有元素。" - -#: src/data_classes/ElementG.gd: -msgid "This group has only one element." -msgstr "此组内只有一个元素。" - -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No \"id\" attribute defined." msgstr "\"id\" 属性未定义。" -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "No elements under this gradient." msgstr "此渐变下没有 元素。" -#: src/data_classes/GradientUtils.gd: +#: src/data_classes/ElementBaseGradient.gd: msgid "This gradient is a solid color." msgstr "此渐变为单一颜色。" +#: src/data_classes/ElementG.gd: +msgid "This group has no elements." +msgstr "此组内没有元素。" + +#: src/data_classes/ElementG.gd: +msgid "This group has only one element." +msgstr "此组内只有一个元素。" + #: src/data_classes/SVGParser.gd: msgid "Doesn’t describe an SVG." msgstr "文本不是 SVG 格式。" @@ -211,6 +228,7 @@ msgstr "协议" msgid "Third-party licenses" msgstr "第三方协议" +#. If the language has different gendered versions, prefer the most neutral-sounding one, i.e., the one used when you don't know the person's gender. If that's not possible, use feminine. #: src/ui_parts/about_menu.gd: msgid "Project Founder and Manager" msgstr "项目创立者与管理者" @@ -267,7 +285,7 @@ msgstr "新元素" msgid "Dimensions" msgstr "大小" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Size" msgstr "大小" @@ -291,7 +309,7 @@ msgstr "质量" msgid "Scale" msgstr "缩放" -#: src/ui_parts/export_menu.gd: +#: src/ui_parts/export_menu.gd: src/ui_parts/settings_menu.gd: msgid "Width" msgstr "宽度" @@ -372,9 +390,7 @@ msgid "Copy path" msgstr "复制路径" #: src/ui_parts/good_file_dialog.gd: -msgid "" -"A file named \"{file_name}\" already exists. Replacing will overwrite its " -"contents!" +msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!" msgstr "文件 “{file_name}” 已经存在。替换操作将会覆写它的内容!" #: src/ui_parts/handles_manager.gd: @@ -458,10 +474,34 @@ msgstr "" msgid "Other" msgstr "其他" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Theme preset" +msgstr "重置缩放" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Primary theme colors" +msgstr "禁用该颜色" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Base color" +msgstr "基本颜色" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Accent color" +msgstr "文本颜色" + #: src/ui_parts/settings_menu.gd: msgid "SVG Text colors" msgstr "SVG 文本颜色" +#: src/ui_parts/settings_menu.gd: +msgid "Highlighter preset" +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Symbol color" msgstr "符号颜色" @@ -495,10 +535,11 @@ msgstr "CDATA 颜色" msgid "Error color" msgstr "错误颜色" -#. Refers to the colors of the draggable handles. +#. Refers to the draggable gizmos. #: src/ui_parts/settings_menu.gd: -msgid "Handle colors" -msgstr "拖拽框颜色" +#, fuzzy +msgid "Handles" +msgstr "拖拽框大小" #: src/ui_parts/settings_menu.gd: msgid "Inside color" @@ -520,13 +561,33 @@ msgstr "选中颜色" msgid "Hovered selected color" msgstr "悬停且选中颜色" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Selection rectangle" +msgstr "选择图像" + +#: src/ui_parts/settings_menu.gd: +msgid "Speed" +msgstr "" + +#. Refers to the selection rectangle's animated dashed stroke. +#: src/ui_parts/settings_menu.gd: +msgid "Dash length" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Color {index}" +msgstr "取色器" + #: src/ui_parts/settings_menu.gd: msgid "Basic colors" msgstr "基本颜色" #: src/ui_parts/settings_menu.gd: -msgid "Background color" -msgstr "背景颜色" +#, fuzzy +msgid "Canvas color" +msgstr "内部颜色" #: src/ui_parts/settings_menu.gd: #, fuzzy @@ -549,18 +610,65 @@ msgstr "输入" msgid "Close tabs with middle mouse button" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "If turned on, clicking on a tab with the middle mouse button closes the tab. If turned off, it focuses the tab instead." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Invert zoom direction" msgstr "反转缩放方向" +#: src/ui_parts/settings_menu.gd: +msgid "Swaps the scroll directions for zooming in and zooming out." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Wrap-around panning" msgstr "" +#: src/ui_parts/settings_menu.gd: +msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Use CTRL for zooming" msgstr "使用 CTRL 键缩放" +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." +msgstr "如果启用,滚动鼠标滚轮将移动视图。按住 CTRL 并滚动滚轮以缩放。" + +#: src/ui_parts/settings_menu.gd: +msgid "Display" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "UI scale" +msgstr "UI 缩放" + +#: src/ui_parts/settings_menu.gd: +#, fuzzy +msgid "Determines the scale factor for the interface." +msgstr "改变用户界面的缩放尺寸。" + +#. Stands for "Vertical Synchronization". +#: src/ui_parts/settings_menu.gd: +msgid "V-Sync" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly." +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Maximum FPS" +msgstr "" + +#: src/ui_parts/settings_menu.gd: +msgid "Determines the maximum number of frames per second." +msgstr "" + #: src/ui_parts/settings_menu.gd: msgid "Miscellaneous" msgstr "杂项" @@ -570,22 +678,17 @@ msgid "Use native file dialog" msgstr "使用系统自带文件选择窗口" #: src/ui_parts/settings_menu.gd: -msgid "Sync window title to file name" -msgstr "同步窗口标题为文件名" - -#. Refers to the size of the draggable handles. -#: src/ui_parts/settings_menu.gd: -msgid "Handle size" -msgstr "拖拽框大小" +msgid "If turned on, uses your operating system's native file dialog. If turned off, uses GodSVG's built-in file dialog." +msgstr "如果启用,将使用操作系统自带的文件选择窗口。反之,将使用 GodSVG 内置的文件选择窗口。" #: src/ui_parts/settings_menu.gd: -msgid "UI scale" -msgstr "UI 缩放" +msgid "Sync window title to file name" +msgstr "同步窗口标题为文件名" #: src/ui_parts/settings_menu.gd: #, fuzzy -msgid "Changes the scale factor for the interface." -msgstr "改变用户界面的缩放尺寸。" +msgid "If turned off, the window title remains as \"GodSVG\" without including the current file." +msgstr "如果禁用,不论当前打开的文件是什么,窗口标题都将固定为 “GodSVG”。" #: src/ui_parts/settings_menu.gd: msgid "Language" @@ -623,11 +726,6 @@ msgstr "导出格式" msgid "Help" msgstr "帮助" -#: src/ui_parts/settings_menu.gd: -#, fuzzy -msgid "Reset all to default" -msgstr "恢复默认" - #: src/ui_parts/settings_menu.gd: msgid "Preset" msgstr "预设" @@ -720,47 +818,6 @@ msgstr "变换列表" msgid "Remove unnecessary parameters" msgstr "移除不必要的参数" -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, clicking on a tab with the middle mouse button closes the tab. " -"If turned off, it focuses the tab instead." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "Swaps the scroll directions for zooming in and zooming out." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"Warps the cursor to the opposite side whenever it reaches a viewport " -"boundary while panning." -msgstr "" - -#: src/ui_parts/settings_menu.gd: -#, fuzzy -msgid "" -"If turned on, scrolling pans the view. To zoom, hold CTRL while scrolling." -msgstr "如果启用,滚动鼠标滚轮将移动视图。按住 CTRL 并滚动滚轮以缩放。" - -#: src/ui_parts/settings_menu.gd: -msgid "" -"If turned on, uses your operating system's native file dialog. If turned " -"off, uses GodSVG's built-in file dialog." -msgstr "" -"如果启用,将使用操作系统自带的文件选择窗口。反之,将使用 GodSVG 内置的文件选" -"择窗口。" - -#: src/ui_parts/settings_menu.gd: -#, fuzzy -msgid "" -"If turned off, the window title remains as \"GodSVG\" without including the " -"current file." -msgstr "如果禁用,不论当前打开的文件是什么,窗口标题都将固定为 “GodSVG”。" - -#: src/ui_parts/settings_menu.gd: -msgid "Changes the visual size and grabbing area of handles." -msgstr "改变拖拽框的视觉和操作区域大小。" - #: src/ui_parts/shortcut_panel.gd: #, fuzzy msgid "Horizontal strip" @@ -857,6 +914,10 @@ msgstr "删除颜色" msgid "Unnamed" msgstr "未命名" +#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd: +msgid "Unlimited" +msgstr "" + #: src/ui_widgets/good_color_picker.gd: #, fuzzy msgid "Color keywords" @@ -924,6 +985,14 @@ msgstr "没有点" msgid "Also used by" msgstr "还用于" +#: src/ui_widgets/profile_frame.gd: +msgid "Apply" +msgstr "" + +#: src/ui_widgets/profile_frame.gd: +msgid "Apply all of this preset's defaults" +msgstr "" + #: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd: msgid "Reset to default" msgstr "恢复默认" @@ -1347,11 +1416,22 @@ msgstr "保存 .\"{format}\" 文件" msgid "Only {extension_list} files are supported for this operation." msgstr "文件扩展名为空。只有 {extension_list} 内的文件受支持。" -#~ msgid "" -#~ "The file extension {extension} is unsupported for this operation. Only " -#~ "{extension_list} files are supported." -#~ msgstr "" -#~ "扩展名 {extension} 不支持此操作。只有 {extension_list} 内的文件受支持。" +#~ msgid "Handle colors" +#~ msgstr "拖拽框颜色" + +#~ msgid "Background color" +#~ msgstr "背景颜色" + +#, fuzzy +#~ msgid "Reset all to default" +#~ msgstr "恢复默认" + +#, fuzzy +#~ msgid "Determines the visual size and grabbing area of handles." +#~ msgstr "改变拖拽框的视觉和操作区域大小。" + +#~ msgid "The file extension {extension} is unsupported for this operation. Only {extension_list} files are supported." +#~ msgstr "扩展名 {extension} 不支持此操作。只有 {extension_list} 内的文件受支持。" #~ msgid "Save the .\"{format}\" file" #~ msgstr "保存 .\"{format}\" 文件" @@ -1420,9 +1500,6 @@ msgstr "文件扩展名为空。只有 {extension_list} 内的文件受支持。 #~ msgid "Enable the color" #~ msgstr "启用该颜色" -#~ msgid "Disable the color" -#~ msgstr "禁用该颜色" - #~ msgid "Invalid" #~ msgstr "无效" @@ -1431,8 +1508,7 @@ msgstr "文件扩展名为空。只有 {extension_list} 内的文件受支持。 #~ msgid "" #~ "The file couldn't be opened.\n" -#~ "Try checking the file path, ensure that the file is not deleted, or " -#~ "choose a different file." +#~ "Try checking the file path, ensure that the file is not deleted, or choose a different file." #~ msgstr "" #~ "文件无法打开。\n" #~ "尝试检查路径,确保文件没有被删除,或选择一个不同的文件。"