diff --git a/.github/disabled_classes.build b/.github/disabled_classes.build
deleted file mode 100644
index 1e03697..0000000
--- a/.github/disabled_classes.build
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "disabled_build_options": {
-
- },
- "disabled_classes": [
- "AcceptDialog",
- "AnimatedTexture",
- "Animation",
- "AnimationLibrary",
- "AnimationMixer",
- "AnimationNode",
- "AnimationNodeStateMachinePlayback",
- "AnimationNodeStateMachineTransition",
- "AspectRatioContainer",
- "AudioBusLayout",
- "AudioEffect",
- "AudioStream",
- "AudioStreamPlayer",
- "BaseMaterial3D",
- "BitMap",
- "BoneMap",
- "CameraAttributes",
- "CameraTexture",
- "CanvasItemMaterial",
- "CanvasLayer",
- "CanvasTexture",
- "CodeEdit",
- "CodeHighlighter",
- "ColorPalette",
- "ColorPicker",
- "ColorPickerButton",
- "Compositor",
- "CompositorEffect",
- "CryptoKey",
- "Curve3D",
- "CurveTexture",
- "CurveXYZTexture",
- "Environment",
- "ExternalTexture",
- "FogMaterial",
- "GDExtension",
- "GLTFAccessor",
- "GLTFAnimation",
- "GLTFBufferView",
- "GLTFCamera",
- "GLTFDocument",
- "GLTFDocumentExtension",
- "GLTFLight",
- "GLTFMesh",
- "GLTFNode",
- "GLTFPhysicsBody",
- "GLTFPhysicsShape",
- "GLTFSkeleton",
- "GLTFSkin",
- "GLTFSpecGloss",
- "GLTFState",
- "GLTFTexture",
- "GLTFTextureSampler",
- "GraphEdit",
- "GraphElement",
- "ImporterMesh",
- "InputEventMIDI",
- "LabelSettings",
- "LightmapGIData",
- "LinkButton",
- "MenuBar",
- "MenuButton",
- "Mesh",
- "MeshLibrary",
- "MeshTexture",
- "MissingNode",
- "MissingResource",
- "MultiMesh",
- "MultiplayerSpawner",
- "MultiplayerSynchronizer",
- "NavigationAgent2D",
- "NavigationAgent3D",
- "NavigationMesh",
- "NavigationMeshSourceGeometryData2D",
- "NavigationMeshSourceGeometryData3D",
- "NavigationPolygon",
- "NinePatchRect",
- "Node2D",
- "Node3D",
- "Noise",
- "NoiseTexture2D",
- "Occluder3D",
- "OccluderPolygon2D",
- "OggPacketSequence",
- "OpenXRAction",
- "OpenXRActionMap",
- "OpenXRActionSet",
- "OpenXRBindingModifier",
- "OpenXRBindingModifierEditor",
- "OpenXRHapticBase",
- "OpenXRIPBinding",
- "OpenXRInteractionProfile",
- "OpenXRInteractionProfileEditorBase",
- "OptionButton",
- "PackedDataContainer",
- "PanoramaSkyMaterial",
- "ParticleProcessMaterial",
- "PhysicalSkyMaterial",
- "PhysicsMaterial",
- "PlaceholderMaterial",
- "PlaceholderMesh",
- "PlaceholderTexture2D",
- "PolygonPathFinder",
- "PopupMenu",
- "PopupPanel",
- "PortableCompressedTexture2D",
- "PrimitiveMesh",
- "ProceduralSkyMaterial",
- "RDShaderFile",
- "RDShaderSPIRV",
- "ReferenceRect",
- "RichTextEffect",
- "SceneReplicationConfig",
- "ScriptExtension",
- "Shape2D",
- "Shape3D",
- "SkeletonModification2D",
- "SkeletonModificationStack2D",
- "SkeletonProfile",
- "Skin",
- "Sky",
- "Slider",
- "SpinBox",
- "SpriteFrames",
- "StyleBoxTexture",
- "TabBar",
- "Texture2DRD",
- "Texture3D",
- "TextureButton",
- "TextureLayered",
- "TextureProgressBar",
- "TileMapPattern",
- "TileSet",
- "TileSetSource",
- "Tree",
- "VideoStream",
- "VideoStreamPlayback",
- "VideoStreamPlayer",
- "VisualShader",
- "VisualShaderNode",
- "VoxelGIData",
- "World3D",
- "WorldEnvironment",
- "X509Certificate"
- ],
- "type": "build_profile"
-}
diff --git a/.github/disabled_classes.gdbuild b/.github/disabled_classes.gdbuild
new file mode 100644
index 0000000..d21110f
--- /dev/null
+++ b/.github/disabled_classes.gdbuild
@@ -0,0 +1,301 @@
+{
+ "disabled_build_options": {
+
+ },
+ "disabled_classes": [
+ "AESContext",
+ "AStar2D",
+ "AStar3D",
+ "AStarGrid2D",
+ "AcceptDialog",
+ "AnimatedTexture",
+ "Animation",
+ "AnimationLibrary",
+ "AnimationMixer",
+ "AnimationNode",
+ "AnimationNodeStateMachinePlayback",
+ "AnimationNodeStateMachineTransition",
+ "AspectRatioContainer",
+ "AudioBusLayout",
+ "AudioEffect",
+ "AudioEffectInstance",
+ "AudioSample",
+ "AudioSamplePlayback",
+ "AudioServer",
+ "AudioStream",
+ "AudioStreamPlayback",
+ "AudioStreamPlayer",
+ "BaseMaterial3D",
+ "BitMap",
+ "BoneMap",
+ "CallbackTweener",
+ "CameraAttributes",
+ "CameraFeed",
+ "CameraServer",
+ "CameraTexture",
+ "CanvasItemMaterial",
+ "CanvasLayer",
+ "CanvasTexture",
+ "CharFXTransform",
+ "ClassDB",
+ "CodeEdit",
+ "CodeHighlighter",
+ "ColorPalette",
+ "ColorPickerButton",
+ "Compositor",
+ "CompositorEffect",
+ "ConfigFile",
+ "Crypto",
+ "CryptoKey",
+ "Curve",
+ "Curve3D",
+ "CurveTexture",
+ "CurveXYZTexture",
+ "DTLSServer",
+ "ENetConnection",
+ "EncodedObjectAsID",
+ "EngineDebugger",
+ "EngineProfiler",
+ "Environment",
+ "ExternalTexture",
+ "FogMaterial",
+ "FoldableContainer",
+ "FoldableGroup",
+ "FramebufferCacheRD",
+ "GDExtension",
+ "GDExtensionManager",
+ "GDScriptNativeClass",
+ "GLTFAccessor",
+ "GLTFAnimation",
+ "GLTFBufferView",
+ "GLTFCamera",
+ "GLTFDocument",
+ "GLTFDocumentExtension",
+ "GLTFLight",
+ "GLTFMesh",
+ "GLTFNode",
+ "GLTFObjectModelProperty",
+ "GLTFPhysicsBody",
+ "GLTFPhysicsShape",
+ "GLTFSkeleton",
+ "GLTFSkin",
+ "GLTFSpecGloss",
+ "GLTFState",
+ "GLTFTexture",
+ "GLTFTextureSampler",
+ "Geometry2D",
+ "Geometry3D",
+ "Gradient",
+ "GradientTexture1D",
+ "GradientTexture2D",
+ "GraphEdit",
+ "GraphElement",
+ "HMACContext",
+ "HTTPClient",
+ "HashingContext",
+ "IP",
+ "ImageFormatLoader",
+ "ImporterMesh",
+ "InstancePlaceholder",
+ "JNISingleton",
+ "JSONRPC",
+ "JavaClass",
+ "JavaClassWrapper",
+ "JavaObject",
+ "KinematicCollision2D",
+ "KinematicCollision3D",
+ "LabelSettings",
+ "LightmapGIData",
+ "Lightmapper",
+ "LinkButton",
+ "Logger",
+ "Marshalls",
+ "MenuBar",
+ "Mesh",
+ "MeshConvexDecompositionSettings",
+ "MeshDataTool",
+ "MeshLibrary",
+ "MeshTexture",
+ "MethodTweener",
+ "MissingNode",
+ "MissingResource",
+ "MovieWriter",
+ "MultiMesh",
+ "MultiplayerAPI",
+ "MultiplayerSpawner",
+ "MultiplayerSynchronizer",
+ "Mutex",
+ "NavigationAgent2D",
+ "NavigationAgent3D",
+ "NavigationMesh",
+ "NavigationMeshGenerator",
+ "NavigationMeshSourceGeometryData2D",
+ "NavigationMeshSourceGeometryData3D",
+ "NavigationPathQueryParameters2D",
+ "NavigationPathQueryParameters3D",
+ "NavigationPathQueryResult2D",
+ "NavigationPathQueryResult3D",
+ "NavigationPolygon",
+ "NavigationServer2D",
+ "NavigationServer3D",
+ "NinePatchRect",
+ "Node2D",
+ "Node3D",
+ "Node3DGizmo",
+ "Noise",
+ "NoiseTexture2D",
+ "Occluder3D",
+ "OccluderPolygon2D",
+ "OggPacketSequence",
+ "OggPacketSequencePlayback",
+ "OpenXRAPIExtension",
+ "OpenXRAction",
+ "OpenXRActionMap",
+ "OpenXRActionSet",
+ "OpenXRBindingModifier",
+ "OpenXRExtensionWrapper",
+ "OpenXRFutureResult",
+ "OpenXRHapticBase",
+ "OpenXRIPBinding",
+ "OpenXRInteractionProfile",
+ "OpenXRInteractionProfileMetadata",
+ "OptimizedTranslation",
+ "OptionButton",
+ "PCKPacker",
+ "PackedDataContainer",
+ "PackedDataContainerRef",
+ "PacketPeer",
+ "PanoramaSkyMaterial",
+ "ParticleProcessMaterial",
+ "PhysicalSkyMaterial",
+ "PhysicsDirectBodyState2D",
+ "PhysicsDirectBodyState3D",
+ "PhysicsDirectSpaceState2D",
+ "PhysicsDirectSpaceState3D",
+ "PhysicsMaterial",
+ "PhysicsPointQueryParameters2D",
+ "PhysicsPointQueryParameters3D",
+ "PhysicsRayQueryParameters2D",
+ "PhysicsRayQueryParameters3D",
+ "PhysicsServer2D",
+ "PhysicsServer2DManager",
+ "PhysicsServer3D",
+ "PhysicsServer3DManager",
+ "PhysicsServer3DRenderingServerHandler",
+ "PhysicsShapeQueryParameters2D",
+ "PhysicsShapeQueryParameters3D",
+ "PhysicsTestMotionParameters2D",
+ "PhysicsTestMotionParameters3D",
+ "PhysicsTestMotionResult2D",
+ "PhysicsTestMotionResult3D",
+ "PlaceholderMaterial",
+ "PlaceholderTexture2D",
+ "PolygonPathFinder",
+ "Popup",
+ "PortableCompressedTexture2D",
+ "ProceduralSkyMaterial",
+ "ProgressBar",
+ "RDAttachmentFormat",
+ "RDFramebufferPass",
+ "RDPipelineColorBlendState",
+ "RDPipelineColorBlendStateAttachment",
+ "RDPipelineDepthStencilState",
+ "RDPipelineMultisampleState",
+ "RDPipelineRasterizationState",
+ "RDPipelineSpecializationConstant",
+ "RDSamplerState",
+ "RDShaderFile",
+ "RDShaderSPIRV",
+ "RDShaderSource",
+ "RDTextureFormat",
+ "RDTextureView",
+ "RDUniform",
+ "RDVertexAttribute",
+ "RandomNumberGenerator",
+ "ReferenceRect",
+ "RegEx",
+ "RegExMatch",
+ "RenderData",
+ "RenderSceneBuffers",
+ "RenderSceneBuffersConfiguration",
+ "RenderSceneData",
+ "RenderingDevice",
+ "ResourceFormatLoader",
+ "ResourceFormatSaver",
+ "ResourceImporter",
+ "ResourcePreloader",
+ "ResourceUID",
+ "RichTextEffect",
+ "SceneReplicationConfig",
+ "SceneState",
+ "ScriptBacktrace",
+ "ScriptExtension",
+ "ScriptLanguage",
+ "Semaphore",
+ "ShaderGlobalsOverride",
+ "Shape2D",
+ "Shape3D",
+ "Shortcut",
+ "SkeletonModification2D",
+ "SkeletonModificationStack2D",
+ "SkeletonProfile",
+ "Skin",
+ "SkinReference",
+ "Sky",
+ "Slider",
+ "SpinBox",
+ "SpriteFrames",
+ "StatusIndicator",
+ "StreamPeer",
+ "SubtweenTweener",
+ "SurfaceTool",
+ "SystemFont",
+ "TCPServer",
+ "TLSOptions",
+ "TextParagraph",
+ "TextServerExtension",
+ "TextServerManager",
+ "Texture2DRD",
+ "Texture3D",
+ "TextureButton",
+ "TextureLayered",
+ "TextureProgressBar",
+ "ThemeContext",
+ "Thread",
+ "TileData",
+ "TileMapPattern",
+ "TileSet",
+ "TileSetSource",
+ "TranslationDomain",
+ "TranslationPO",
+ "Tree",
+ "TreeItem",
+ "TriangleMesh",
+ "UDPServer",
+ "UPNP",
+ "UPNPDevice",
+ "UniformSetCacheRD",
+ "VFlowContainer",
+ "VSeparator",
+ "VideoStream",
+ "VideoStreamPlayback",
+ "VideoStreamPlayer",
+ "VisualShader",
+ "VisualShaderNode",
+ "VoxelGIData",
+ "WebRTCPeerConnection",
+ "WorkerThreadPool",
+ "World2D",
+ "World3D",
+ "WorldEnvironment",
+ "X509Certificate",
+ "XRInterface",
+ "XRPose",
+ "XRServer",
+ "XRTracker",
+ "XRVRS",
+ "ZIPPacker",
+ "ZIPReader"
+ ],
+ "type": "build_profile"
+}
diff --git a/assets/fonts/BoldFont.tres b/assets/fonts/BoldFont.tres
new file mode 100644
index 0000000..ff027b7
--- /dev/null
+++ b/assets/fonts/BoldFont.tres
@@ -0,0 +1,11 @@
+[gd_resource type="FontVariation" load_steps=4 format=3 uid="uid://o6egawwljhgy"]
+
+[ext_resource type="FontFile" uid="uid://cdke2b8vyur24" path="res://assets/fonts/original/NotoSans-ExtraBold.woff2" id="1_c6ro6"]
+[ext_resource type="FontFile" uid="uid://jkpbay57t50t" path="res://assets/fonts/original/DroidSansFallback.woff2" id="2_5dil2"]
+
+[sub_resource type="FontVariation" id="FontVariation_tuc71"]
+base_font = ExtResource("2_5dil2")
+variation_embolden = 0.6
+
+[resource]
+fallbacks = Array[Font]([ExtResource("1_c6ro6"), SubResource("FontVariation_tuc71")])
diff --git a/assets/fonts/Font.ttf b/assets/fonts/Font.ttf
deleted file mode 100644
index b460754..0000000
Binary files a/assets/fonts/Font.ttf and /dev/null differ
diff --git a/assets/fonts/FontBold.ttf b/assets/fonts/FontBold.ttf
deleted file mode 100644
index a74c69a..0000000
Binary files a/assets/fonts/FontBold.ttf and /dev/null differ
diff --git a/assets/fonts/FontMono.ttf b/assets/fonts/FontMono.ttf
deleted file mode 100644
index ad93dc5..0000000
Binary files a/assets/fonts/FontMono.ttf and /dev/null differ
diff --git a/assets/fonts/IconButtonFont.tres b/assets/fonts/IconButtonFont.tres
index 281a311..e801fd6 100644
--- a/assets/fonts/IconButtonFont.tres
+++ b/assets/fonts/IconButtonFont.tres
@@ -1,6 +1,6 @@
[gd_resource type="FontVariation" load_steps=2 format=3 uid="uid://dg5vsg45k8y7w"]
-[ext_resource type="FontFile" uid="uid://depydd16jq777" path="res://assets/fonts/FontMono.ttf" id="1_67ox0"]
+[ext_resource type="FontFile" uid="uid://c5kkpicj45r00" path="res://assets/fonts/JetBrainsMono-Medium.woff2" id="1_67ox0"]
[resource]
base_font = ExtResource("1_67ox0")
diff --git a/assets/fonts/MainFont.tres b/assets/fonts/MainFont.tres
new file mode 100644
index 0000000..1f2abc7
--- /dev/null
+++ b/assets/fonts/MainFont.tres
@@ -0,0 +1,7 @@
+[gd_resource type="FontVariation" load_steps=3 format=3 uid="uid://bo626nsycqtaj"]
+
+[ext_resource type="FontFile" uid="uid://cp6fwvpgvqucw" path="res://assets/fonts/original/NotoSans-SemiBold.woff2" id="1_8wwsk"]
+[ext_resource type="FontFile" uid="uid://jkpbay57t50t" path="res://assets/fonts/original/DroidSansFallback.woff2" id="2_6wxu7"]
+
+[resource]
+fallbacks = Array[Font]([ExtResource("1_8wwsk"), ExtResource("2_6wxu7")])
diff --git a/assets/fonts/MonoFont.tres b/assets/fonts/MonoFont.tres
new file mode 100644
index 0000000..51fba36
--- /dev/null
+++ b/assets/fonts/MonoFont.tres
@@ -0,0 +1,7 @@
+[gd_resource type="FontVariation" load_steps=3 format=3 uid="uid://pup5vmxl1t6m"]
+
+[ext_resource type="FontFile" uid="uid://c5kkpicj45r00" path="res://assets/fonts/original/JetBrainsMono-Medium.woff2" id="1_w5v41"]
+[ext_resource type="FontVariation" uid="uid://bo626nsycqtaj" path="res://assets/fonts/MainFont.tres" id="2_sfh1l"]
+
+[resource]
+fallbacks = Array[Font]([ExtResource("1_w5v41"), ExtResource("2_sfh1l")])
diff --git a/assets/fonts/original/DroidSansFallback.woff2 b/assets/fonts/original/DroidSansFallback.woff2
new file mode 100644
index 0000000..9dd49d6
Binary files /dev/null and b/assets/fonts/original/DroidSansFallback.woff2 differ
diff --git a/assets/fonts/FontBold.ttf.import b/assets/fonts/original/DroidSansFallback.woff2.import
similarity index 61%
rename from assets/fonts/FontBold.ttf.import
rename to assets/fonts/original/DroidSansFallback.woff2.import
index a4d7e65..cf2418f 100644
--- a/assets/fonts/FontBold.ttf.import
+++ b/assets/fonts/original/DroidSansFallback.woff2.import
@@ -2,13 +2,13 @@
importer="font_data_dynamic"
type="FontFile"
-uid="uid://dc0w4sx0h0fui"
-path="res://.godot/imported/FontBold.ttf-5d725167d8320de4282b923e311a7f32.fontdata"
+uid="uid://jkpbay57t50t"
+path="res://.godot/imported/DroidSansFallback.woff2-dc4d9bb62ed0af22bad408ae21580e72.fontdata"
[deps]
-source_file="res://assets/fonts/FontBold.ttf"
-dest_files=["res://.godot/imported/FontBold.ttf-5d725167d8320de4282b923e311a7f32.fontdata"]
+source_file="res://assets/fonts/original/DroidSansFallback.woff2"
+dest_files=["res://.godot/imported/DroidSansFallback.woff2-dc4d9bb62ed0af22bad408ae21580e72.fontdata"]
[params]
@@ -23,7 +23,7 @@ allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=1
-subpixel_positioning=1
+subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
diff --git a/assets/fonts/original/JetBrainsMono-Medium.woff2 b/assets/fonts/original/JetBrainsMono-Medium.woff2
new file mode 100644
index 0000000..2a854db
Binary files /dev/null and b/assets/fonts/original/JetBrainsMono-Medium.woff2 differ
diff --git a/assets/fonts/original/JetBrainsMono-Medium.woff2.import b/assets/fonts/original/JetBrainsMono-Medium.woff2.import
new file mode 100644
index 0000000..d1b1f8f
--- /dev/null
+++ b/assets/fonts/original/JetBrainsMono-Medium.woff2.import
@@ -0,0 +1,36 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://c5kkpicj45r00"
+path="res://.godot/imported/JetBrainsMono-Medium.woff2-231be972305c0b88aeb0f80573f39a8e.fontdata"
+
+[deps]
+
+source_file="res://assets/fonts/original/JetBrainsMono-Medium.woff2"
+dest_files=["res://.godot/imported/JetBrainsMono-Medium.woff2-231be972305c0b88aeb0f80573f39a8e.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+disable_embedded_bitmaps=true
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+modulate_color_glyphs=false
+hinting=1
+subpixel_positioning=4
+keep_rounding_remainders=true
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/assets/fonts/original/NotoSans-ExtraBold.woff2 b/assets/fonts/original/NotoSans-ExtraBold.woff2
new file mode 100644
index 0000000..0a88a24
Binary files /dev/null and b/assets/fonts/original/NotoSans-ExtraBold.woff2 differ
diff --git a/assets/fonts/Font.ttf.import b/assets/fonts/original/NotoSans-ExtraBold.woff2.import
similarity index 60%
rename from assets/fonts/Font.ttf.import
rename to assets/fonts/original/NotoSans-ExtraBold.woff2.import
index 19acc79..878b19c 100644
--- a/assets/fonts/Font.ttf.import
+++ b/assets/fonts/original/NotoSans-ExtraBold.woff2.import
@@ -2,13 +2,13 @@
importer="font_data_dynamic"
type="FontFile"
-uid="uid://clpf84p1lfwlp"
-path="res://.godot/imported/Font.ttf-cd7c0215f158f1afe430aeecbfb5d51b.fontdata"
+uid="uid://cdke2b8vyur24"
+path="res://.godot/imported/NotoSans-ExtraBold.woff2-afe5c7a9b5b0881b2a4600b03512ba6b.fontdata"
[deps]
-source_file="res://assets/fonts/Font.ttf"
-dest_files=["res://.godot/imported/Font.ttf-cd7c0215f158f1afe430aeecbfb5d51b.fontdata"]
+source_file="res://assets/fonts/original/NotoSans-ExtraBold.woff2"
+dest_files=["res://.godot/imported/NotoSans-ExtraBold.woff2-afe5c7a9b5b0881b2a4600b03512ba6b.fontdata"]
[params]
@@ -23,7 +23,7 @@ allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=1
-subpixel_positioning=1
+subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
diff --git a/assets/fonts/original/NotoSans-SemiBold.woff2 b/assets/fonts/original/NotoSans-SemiBold.woff2
new file mode 100644
index 0000000..5982670
Binary files /dev/null and b/assets/fonts/original/NotoSans-SemiBold.woff2 differ
diff --git a/assets/fonts/FontMono.ttf.import b/assets/fonts/original/NotoSans-SemiBold.woff2.import
similarity index 61%
rename from assets/fonts/FontMono.ttf.import
rename to assets/fonts/original/NotoSans-SemiBold.woff2.import
index f246421..0575a43 100644
--- a/assets/fonts/FontMono.ttf.import
+++ b/assets/fonts/original/NotoSans-SemiBold.woff2.import
@@ -2,13 +2,13 @@
importer="font_data_dynamic"
type="FontFile"
-uid="uid://depydd16jq777"
-path="res://.godot/imported/FontMono.ttf-c924fdc7809f760b3a747e0cce04fa12.fontdata"
+uid="uid://cp6fwvpgvqucw"
+path="res://.godot/imported/NotoSans-SemiBold.woff2-146a883351ad06e51ad735a7586f2309.fontdata"
[deps]
-source_file="res://assets/fonts/FontMono.ttf"
-dest_files=["res://.godot/imported/FontMono.ttf-c924fdc7809f760b3a747e0cce04fa12.fontdata"]
+source_file="res://assets/fonts/original/NotoSans-SemiBold.woff2"
+dest_files=["res://.godot/imported/NotoSans-SemiBold.woff2-146a883351ad06e51ad735a7586f2309.fontdata"]
[params]
@@ -23,7 +23,7 @@ allow_system_fallback=true
force_autohinter=false
modulate_color_glyphs=false
hinting=1
-subpixel_positioning=1
+subpixel_positioning=4
keep_rounding_remainders=true
oversampling=0.0
Fallbacks=null
diff --git a/assets/fonts/original/README.md b/assets/fonts/original/README.md
new file mode 100644
index 0000000..e1efa9f
--- /dev/null
+++ b/assets/fonts/original/README.md
@@ -0,0 +1,5 @@
+This folder contains:
+- Variations of the Noto Sans font for currently supported languages, specifically the unhinted versions from https://notofonts.github.io/.
+- The JetBrains Mono font was stripped (only keeping ASCII and SVG-specific ligatures).
+
+Every font was converted to woff2 to optimize its size.
diff --git a/assets/icons/CodeOptions.svg b/assets/icons/CodeOptions.svg
deleted file mode 100644
index c5a60c4..0000000
--- a/assets/icons/CodeOptions.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/icons/CodeOptions.svg.import b/assets/icons/CodeOptions.svg.import
deleted file mode 100644
index 5fa8bf0..0000000
--- a/assets/icons/CodeOptions.svg.import
+++ /dev/null
@@ -1,18 +0,0 @@
-[remap]
-
-importer="svg"
-type="DPITexture"
-uid="uid://dthdjf4v2vlvg"
-path="res://.godot/imported/CodeOptions.svg-494ca15fb7ae22eb042af52beb4677fd.dpitex"
-
-[deps]
-
-source_file="res://assets/icons/CodeOptions.svg"
-dest_files=["res://.godot/imported/CodeOptions.svg-494ca15fb7ae22eb042af52beb4677fd.dpitex"]
-
-[params]
-
-base_scale=1.0
-saturation=1.0
-color_map={}
-compress=true
diff --git a/assets/icons/Edit.svg b/assets/icons/Edit.svg
index 113aedd..c5a60c4 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 b102eb0..23a8d48 100644
--- a/assets/icons/Edit.svg.import
+++ b/assets/icons/Edit.svg.import
@@ -2,7 +2,7 @@
importer="svg"
type="DPITexture"
-uid="uid://dr2erka82g6j4"
+uid="uid://dthdjf4v2vlvg"
path="res://.godot/imported/Edit.svg-40006b452883af7dafa16974b9dda14a.dpitex"
[deps]
diff --git a/assets/icons/Evaluate.svg b/assets/icons/Evaluate.svg
new file mode 100644
index 0000000..feb69c4
--- /dev/null
+++ b/assets/icons/Evaluate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/Evaluate.svg.import b/assets/icons/Evaluate.svg.import
new file mode 100644
index 0000000..06495f3
--- /dev/null
+++ b/assets/icons/Evaluate.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://kiba2dm3l01l"
+path="res://.godot/imported/Evaluate.svg-5724e7f1f19eb077dab3c335eef7ff8b.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/Evaluate.svg"
+dest_files=["res://.godot/imported/Evaluate.svg-5724e7f1f19eb077dab3c335eef7ff8b.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/FieldEdit.svg b/assets/icons/FieldEdit.svg
new file mode 100644
index 0000000..113aedd
--- /dev/null
+++ b/assets/icons/FieldEdit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/FieldEdit.svg.import b/assets/icons/FieldEdit.svg.import
new file mode 100644
index 0000000..16d523a
--- /dev/null
+++ b/assets/icons/FieldEdit.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://dr2erka82g6j4"
+path="res://.godot/imported/FieldEdit.svg-e8ff999dd7358dbd11fd6b4a8f4e7c53.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/FieldEdit.svg"
+dest_files=["res://.godot/imported/FieldEdit.svg-e8ff999dd7358dbd11fd6b4a8f4e7c53.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/FileBrowse.svg b/assets/icons/FileBrowse.svg
new file mode 100644
index 0000000..9a9e759
--- /dev/null
+++ b/assets/icons/FileBrowse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/FileBrowse.svg.import b/assets/icons/FileBrowse.svg.import
new file mode 100644
index 0000000..54d73e3
--- /dev/null
+++ b/assets/icons/FileBrowse.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://n6ive1o6t4bp"
+path="res://.godot/imported/FileBrowse.svg-0bf485512d1d53d93fb6eb1a33f8a0f1.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/FileBrowse.svg"
+dest_files=["res://.godot/imported/FileBrowse.svg-0bf485512d1d53d93fb6eb1a33f8a0f1.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/FontFile.svg b/assets/icons/FontFile.svg
new file mode 100644
index 0000000..978f49c
--- /dev/null
+++ b/assets/icons/FontFile.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/FontFile.svg.import b/assets/icons/FontFile.svg.import
new file mode 100644
index 0000000..bea730f
--- /dev/null
+++ b/assets/icons/FontFile.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://cdwcacnr58ful"
+path="res://.godot/imported/FontFile.svg-dd136d59f4d6ab3ba702aa8c4136c037.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/FontFile.svg"
+dest_files=["res://.godot/imported/FontFile.svg-dd136d59f4d6ab3ba702aa8c4136c037.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/PresetGrayscale.svg b/assets/icons/PresetGrayscale.svg
index f14673c..211f3d0 100644
--- a/assets/icons/PresetGrayscale.svg
+++ b/assets/icons/PresetGrayscale.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/assets/icons/Previews.svg b/assets/icons/Previews.svg
new file mode 100644
index 0000000..772c154
--- /dev/null
+++ b/assets/icons/Previews.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/Previews.svg.import b/assets/icons/Previews.svg.import
new file mode 100644
index 0000000..f42893d
--- /dev/null
+++ b/assets/icons/Previews.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bknpsqstquq0i"
+path="res://.godot/imported/Previews.svg-47fc30093a76768c174aa90c9a7f5bc1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/icons/Previews.svg"
+dest_files=["res://.godot/imported/Previews.svg-47fc30093a76768c174aa90c9a7f5bc1.ctex"]
+
+[params]
+
+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
+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
+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/SelectAll.svg b/assets/icons/SelectAll.svg
new file mode 100644
index 0000000..e9c114d
--- /dev/null
+++ b/assets/icons/SelectAll.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/SelectAll.svg.import b/assets/icons/SelectAll.svg.import
new file mode 100644
index 0000000..2c7667a
--- /dev/null
+++ b/assets/icons/SelectAll.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://bcuoywxlgwx8h"
+path="res://.godot/imported/SelectAll.svg-2e837c78507e6706303a574d35f49c9d.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/SelectAll.svg"
+dest_files=["res://.godot/imported/SelectAll.svg-2e837c78507e6706303a574d35f49c9d.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/SideSliderArrow.svg.import b/assets/icons/SideSliderArrow.svg.import
deleted file mode 100644
index c40cae9..0000000
--- a/assets/icons/SideSliderArrow.svg.import
+++ /dev/null
@@ -1,18 +0,0 @@
-[remap]
-
-importer="svg"
-type="DPITexture"
-uid="uid://cmu6r4ipti60x"
-path="res://.godot/imported/SideSliderArrow.svg-12020a4c094bbac9e72e1e1468d7b2eb.dpitex"
-
-[deps]
-
-source_file="res://assets/icons/SideSliderArrow.svg"
-dest_files=["res://.godot/imported/SideSliderArrow.svg-12020a4c094bbac9e72e1e1468d7b2eb.dpitex"]
-
-[params]
-
-base_scale=1.0
-saturation=1.0
-color_map={}
-compress=true
diff --git a/assets/icons/SideSliderArrow.svg b/assets/icons/SliderArrowSide.svg
similarity index 100%
rename from assets/icons/SideSliderArrow.svg
rename to assets/icons/SliderArrowSide.svg
diff --git a/assets/icons/SliderArrowSide.svg.import b/assets/icons/SliderArrowSide.svg.import
new file mode 100644
index 0000000..025818a
--- /dev/null
+++ b/assets/icons/SliderArrowSide.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://cmu6r4ipti60x"
+path="res://.godot/imported/SliderArrowSide.svg-8461bf1264cf697663ecc3a7b90a85ee.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/SliderArrowSide.svg"
+dest_files=["res://.godot/imported/SliderArrowSide.svg-8461bf1264cf697663ecc3a7b90a85ee.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/SmallArrowDown.svg b/assets/icons/SmallArrowDown.svg
new file mode 100644
index 0000000..869d05b
--- /dev/null
+++ b/assets/icons/SmallArrowDown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/SmallArrowDown.svg.import b/assets/icons/SmallArrowDown.svg.import
new file mode 100644
index 0000000..91fca00
--- /dev/null
+++ b/assets/icons/SmallArrowDown.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://c7wpe43oopx33"
+path="res://.godot/imported/SmallArrowDown.svg-8a83a9f0fe9e05aad940a1a4dc5c7dd7.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/SmallArrowDown.svg"
+dest_files=["res://.godot/imported/SmallArrowDown.svg-8a83a9f0fe9e05aad940a1a4dc5c7dd7.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/SmallArrowLeft.svg b/assets/icons/SmallArrowLeft.svg
new file mode 100644
index 0000000..7941d4f
--- /dev/null
+++ b/assets/icons/SmallArrowLeft.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/SmallArrowLeft.svg.import b/assets/icons/SmallArrowLeft.svg.import
new file mode 100644
index 0000000..513e9b8
--- /dev/null
+++ b/assets/icons/SmallArrowLeft.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://dtcyde1nieujd"
+path="res://.godot/imported/SmallArrowLeft.svg-7cdfa375bf8ff571458574c7bd8af9cd.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/SmallArrowLeft.svg"
+dest_files=["res://.godot/imported/SmallArrowLeft.svg-7cdfa375bf8ff571458574c7bd8af9cd.dpitex"]
+
+[params]
+
+base_scale=1.0
+saturation=1.0
+color_map={}
+compress=true
diff --git a/assets/icons/Sort.svg b/assets/icons/Sort.svg
new file mode 100644
index 0000000..0647bb4
--- /dev/null
+++ b/assets/icons/Sort.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/icons/Sort.svg.import b/assets/icons/Sort.svg.import
new file mode 100644
index 0000000..02fd247
--- /dev/null
+++ b/assets/icons/Sort.svg.import
@@ -0,0 +1,18 @@
+[remap]
+
+importer="svg"
+type="DPITexture"
+uid="uid://bgs71jm080qnn"
+path="res://.godot/imported/Sort.svg-c2b9db5f8b99d313d1a6de8fbe4c8d01.dpitex"
+
+[deps]
+
+source_file="res://assets/icons/Sort.svg"
+dest_files=["res://.godot/imported/Sort.svg-c2b9db5f8b99d313d1a6de8fbe4c8d01.dpitex"]
+
+[params]
+
+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 59505ca..441d372 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/use.svg b/assets/icons/element/use.svg
index 76df601..948e2c8 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/godot_only/scripts/update_translations.gd b/godot_only/scripts/update_translations.gd
index 46116b9..80ffe06 100644
--- a/godot_only/scripts/update_translations.gd
+++ b/godot_only/scripts/update_translations.gd
@@ -13,10 +13,12 @@ const COMMENTS_DICT: Dictionary[String, String] = {
"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\".",
+ "Previews": "Refers to a part of the layout where icons are previewed at various sizes.",
"Dark": "Refers to a theme preset.",
"Light": "Refers to a theme preset.",
"Black (OLED)": "Refers to a theme preset.",
"translation-credits": "Translators (comma-separated): Name or alias, optionally followed by an email in angle brackets .\nUsed for credits. Adding yourself is optional. New entries go at the end. Don't remove or rearrange existing entries.",
+ "Evaluate": """Refers to evaluating an expression such as "sin(2*pi/5)"."""
}
const TRANSLATIONS_DIR = "translations"
@@ -90,10 +92,10 @@ func search_directory(dir: String) -> void:
for msg in messages:
if msg.msgid == msgid:
already_exists = true
- msg.files.append(full_file_name + ":")
+ msg.files.append(full_file_name)
break
if not already_exists:
- messages.append(Message.new(msgid, PackedStringArray([full_file_name + ":"])))
+ messages.append(Message.new(msgid, PackedStringArray([full_file_name])))
func update_translations() -> void:
diff --git a/project.godot b/project.godot
index 9c60dbf..070ead5 100644
--- a/project.godot
+++ b/project.godot
@@ -329,7 +329,7 @@ debug={
}
advanced_debug={
"deadzone": 0.2,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194334,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":4194334,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
check_updates={
@@ -369,6 +369,11 @@ toggle_fullscreen={
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":true,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194309,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
+evaluate={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":true,"shift_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null)
+]
+}
[input_devices]
diff --git a/src/autoload/Configs.gd b/src/autoload/Configs.gd
index 3f4cf15..505cb80 100644
--- a/src/autoload/Configs.gd
+++ b/src/autoload/Configs.gd
@@ -93,6 +93,7 @@ func _enter_tree() -> void:
sync_locale()
sync_max_fps()
sync_keep_screen_on()
+ sync_fonts()
sync_theme()
@@ -124,3 +125,6 @@ func sync_theme() -> void:
ThemeUtils.generate_and_apply_theme()
theme_changed.emit()
HandlerGUI.set_system_bar_color(savedata.base_color)
+
+func sync_fonts() -> void:
+ ThemeUtils.rebuild_fonts()
diff --git a/src/autoload/HandlerGUI.gd b/src/autoload/HandlerGUI.gd
index a67528e..9cbf037 100644
--- a/src/autoload/HandlerGUI.gd
+++ b/src/autoload/HandlerGUI.gd
@@ -111,7 +111,13 @@ func _on_files_dropped(files: PackedStringArray) -> void:
## Registers the given set of shortcuts to the given node.
func register_shortcuts(node: Node, registrations: ShortcutsRegistration) -> void:
shortcut_registrations[node] = registrations
- node.tree_exiting.connect(func() -> void: shortcut_registrations.erase(node))
+ if not node.tree_exiting.is_connected(forget_all_shortcuts):
+ node.tree_exiting.connect(forget_all_shortcuts.bind(node))
+
+## Removes all shortcuts registered to a node.
+func forget_all_shortcuts(node: Node) -> void:
+ shortcut_registrations.erase(node)
+
## Adds a new menu to menu_stack which hides the previous one.
func add_menu(new_menu: Control) -> void:
@@ -127,8 +133,6 @@ func add_dialog(new_dialog: Control) -> void:
# Common logic for add_menu() and add_dialog().
func _add_control(new_control: Control) -> void:
- # FIXME subpar workaround to drag & drop not able to be canceled manually.
- get_tree().root.propagate_notification(NOTIFICATION_DRAG_END)
remove_all_popups()
var overlay_ref := ColorRect.new()
@@ -139,6 +143,11 @@ func _add_control(new_control: Control) -> void:
overlay_ref.add_child(new_control)
new_control.tree_exiting.connect(_remove_control.bind(overlay_ref))
throw_mouse_motion_event()
+
+ # TODO Right now, I have to force a drag from a control inside the tree,
+ # otherwise the current dragging operation can turn into drag and drop. Wtf Godot?
+ overlay_ref.force_drag(0, null)
+ get_viewport().gui_cancel_drag()
func _remove_control(overlay_ref: ColorRect = null) -> void:
# If an overlay_ref is passed but doesn't match, do nothing.
@@ -177,6 +186,12 @@ func add_popup(new_popup: Control, add_shadow := true) -> Control:
overlay_ref.gui_input.connect(_parse_popup_overlay_event)
popup_stack.append(overlay_ref)
get_tree().root.add_child(overlay_ref)
+
+ # TODO Right now, I have to force a drag from a control inside the tree,
+ # otherwise the current dragging operation can turn into drag and drop. Wtf Godot?
+ overlay_ref.force_drag(0, null)
+ get_viewport().gui_cancel_drag()
+
if add_shadow:
var shadow_container := PanelContainer.new()
var sb := StyleBoxFlat.new()
@@ -278,6 +293,7 @@ func _parse_popup_overlay_event(event: InputEvent) -> void:
remove_popup()
get_viewport().set_input_as_handled()
+
var last_mouse_click_double := false
func _input(event: InputEvent) -> void:
@@ -291,30 +307,29 @@ func _input(event: InputEvent) -> void:
event.double_click = true
last_mouse_click_double = false
- # Prioritize clearing popups over letting controls receive ui_cancel.
- if ShortcutUtils.is_action_pressed(event, "ui_cancel") and not popup_stack.is_empty():
- get_viewport().set_input_as_handled()
- remove_popup()
-
-
-func _unhandled_input(event: InputEvent) -> void:
if not (event is InputEventAction or event is InputEventKey):
return
- if ShortcutUtils.is_action_pressed(event, "ui_cancel") and not menu_stack.is_empty():
+ var focus_owner := get_viewport().gui_get_focus_owner()
+ if is_instance_valid(focus_owner) and not is_node_on_top_menu_or_popup(focus_owner):
get_viewport().set_input_as_handled()
- _remove_control()
+ _react_to_action(event)
+
+func _unhandled_input(event: InputEvent) -> void:
+ if not (event is InputEventAction or event is InputEventKey):
return
+ _react_to_action(event)
+
+func _react_to_action(event: InputEvent) -> void:
+ if ShortcutUtils.is_action_pressed(event, "ui_cancel"):
+ if not popup_stack.is_empty():
+ get_viewport().set_input_as_handled()
+ remove_popup()
+ elif not menu_stack.is_empty():
+ get_viewport().set_input_as_handled()
+ _remove_control()
- var behavior_priority: Array[ShortcutsRegistration.Behavior] = [
- ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH,
- ShortcutsRegistration.Behavior.NO_PASSTHROUGH,
- ShortcutsRegistration.Behavior.PASS_THROUGH_POPUPS,
- ShortcutsRegistration.Behavior.PASS_THROUGH_AND_PRESERVE_POPUPS,
- ShortcutsRegistration.Behavior.PASS_THROUGH_ALL
- ]
-
- for behavior in behavior_priority:
+ for behavior in ShortcutsRegistration.BEHAVIOR_PRIORITY:
for node in shortcut_registrations:
if node is CanvasItem and not node.visible:
continue
@@ -333,19 +348,14 @@ func _unhandled_input(event: InputEvent) -> void:
ShortcutsRegistration.Behavior.PASS_THROUGH_ALL:
should_execute = true
ShortcutsRegistration.Behavior.PASS_THROUGH_POPUPS:
- if menu_stack.is_empty() or menu_stack[-1].is_ancestor_of(node):
+ if is_node_on_top_menu(node):
should_execute = true
should_clear_popups = true
ShortcutsRegistration.Behavior.PASS_THROUGH_AND_PRESERVE_POPUPS:
- if menu_stack.is_empty() or menu_stack[-1].is_ancestor_of(node):
+ if is_node_on_top_menu(node):
should_execute = true
ShortcutsRegistration.Behavior.NO_PASSTHROUGH:
- if (menu_stack.is_empty() and popup_stack.is_empty()) or (popup_stack.is_empty() and menu_stack[-1].is_ancestor_of(node)) or\
- (not popup_stack.is_empty() and popup_stack[-1].is_ancestor_of(node)):
- should_execute = true
- ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH:
- if not get_viewport().gui_is_dragging() and ((menu_stack.is_empty() and popup_stack.is_empty()) or (popup_stack.is_empty() and\
- menu_stack[-1].is_ancestor_of(node)) or (not popup_stack.is_empty() and popup_stack[-1].is_ancestor_of(node))):
+ if not get_viewport().gui_is_dragging() and is_node_on_top_menu_or_popup(node):
should_execute = true
if should_execute:
@@ -357,6 +367,14 @@ func _unhandled_input(event: InputEvent) -> void:
return
+func is_node_on_top_menu(node: Node) -> bool:
+ return (menu_stack.is_empty() or menu_stack[-1].is_ancestor_of(node))
+
+func is_node_on_top_menu_or_popup(node: Node) -> bool:
+ return ((menu_stack.is_empty() and popup_stack.is_empty()) or (popup_stack.is_empty() and\
+ menu_stack[-1].is_ancestor_of(node)) or (not popup_stack.is_empty() and popup_stack[-1].is_ancestor_of(node)))
+
+
func get_window_default_size() -> Vector2i:
return Vector2i(ProjectSettings.get_setting("display/window/size/viewport_width"), ProjectSettings.get_setting("display/window/size/viewport_height"))
diff --git a/src/autoload/State.gd b/src/autoload/State.gd
index 9f9db2b..6cdbccf 100644
--- a/src/autoload/State.gd
+++ b/src/autoload/State.gd
@@ -127,7 +127,7 @@ func setup_from_tab() -> void:
func optimize() -> void:
- root_element.optimize()
+ root_element.optimize(Configs.savedata.default_optimizer)
save_svg()
func get_export_text() -> String:
@@ -722,16 +722,29 @@ func popup_convert_to_context(popup_method: Callable) -> void:
command_picker.force_relativity(Utils.is_string_lower(cmd_char))
var cmd_char_upper := cmd_char.to_upper()
- var disabled_commands: PackedStringArray
+ var disabled_commands := PackedStringArray([cmd_char_upper])
if selection_idx == 0:
- disabled_commands = PackedStringArray(["L", "H", "V", "A", "Z", "Q", "T", "C", "S"])
+ var warned_commands := PackedStringArray(["L", "H", "V", "A", "Z", "Q", "T", "C", "S"])
+ warned_commands.erase(cmd_char_upper)
+ command_picker.mark_invalid(warned_commands, disabled_commands)
else:
- disabled_commands = PackedStringArray([cmd_char.to_upper()])
- if cmd_char_upper != "Z" and path_attrib.get_command_count() > selection_idx + 1 and\
- path_attrib.get_command(selection_idx + 1).command_char.to_upper() == "Z":
+ var prev_cmd_char_upper := path_attrib.get_command(selection_idx - 1).command_char.to_upper()
+
+ if cmd_char_upper != "Z" and (prev_cmd_char_upper == "Z" or\
+ (path_attrib.get_command_count() > selection_idx + 1 and\
+ path_attrib.get_command(selection_idx + 1).command_char.to_upper() == "Z")):
disabled_commands.append("Z")
+
+ var warned_commands := PackedStringArray()
+ match prev_cmd_char_upper.to_upper():
+ "M": warned_commands = PackedStringArray(["M", "Z", "S", "T"])
+ "L", "H", "V", "A": warned_commands = PackedStringArray(["S", "T"])
+ "C", "S": warned_commands = PackedStringArray(["T"])
+ "Q", "T": warned_commands = PackedStringArray(["S"])
+ for cmd in disabled_commands:
+ warned_commands.erase(cmd)
+ command_picker.mark_invalid(warned_commands, disabled_commands)
- command_picker.mark_invalid(PackedStringArray(), disabled_commands)
command_picker.path_command_picked.connect(convert_selected_command_to)
func popup_insert_command_after_context(popup_method: Callable) -> void:
@@ -743,8 +756,8 @@ func popup_insert_command_after_context(popup_method: Callable) -> void:
popup_method.call(command_picker)
command_picker.path_command_picked.connect(insert_path_command_after_selection)
# Disable invalid commands. Z is syntactically invalid, so disallow it even harder.
- var warned_commands: PackedStringArray
- var disabled_commands: PackedStringArray
+ var warned_commands := PackedStringArray()
+ var disabled_commands := PackedStringArray()
# S commands are deliberately warned against in most cases, even though there is some sense in using them without a C or S command before them.
# Same for T commands in most cases, even though there is a notion of letting them determine the next shorthand quadratic curve.
match cmd_char.to_upper():
diff --git a/src/config_classes/Formatter.gd b/src/config_classes/Formatter.gd
index b786a5b..0267326 100644
--- a/src/config_classes/Formatter.gd
+++ b/src/config_classes/Formatter.gd
@@ -10,23 +10,20 @@ enum PrimaryColorSyntax {THREE_OR_SIX_DIGIT_HEX, SIX_DIGIT_HEX, RGB}
# Elements that don't make sense without child elements.
const CONTAINER_ELEMENTS: PackedStringArray = ["svg", "g", "linearGradient", "radialGradient"]
-# TODO Typed Dictionary wonkiness Dictionary[Preset, String]
-static func get_preset_value_text_map() -> Dictionary:
+static func get_preset_value_text_map() -> Dictionary[Preset, String]:
return {
Preset.COMPACT: Translator.translate("Compact"),
Preset.PRETTY: Translator.translate("Pretty"),
}
-# TODO Typed Dictionary wonkiness Dictionary[ShorthandTags, String]
-static func get_shorthand_tags_value_text_map() -> Dictionary:
+static func get_shorthand_tags_value_text_map() -> Dictionary[ShorthandTags, String]:
return {
ShorthandTags.ALWAYS: Translator.translate("Always"),
ShorthandTags.ALL_EXCEPT_CONTAINERS: Translator.translate("All except containers"),
ShorthandTags.NEVER: Translator.translate("Never"),
}
-# TODO Typed Dictionary wonkiness Dictionary[NamedColorUse, String]
-static func get_named_color_use_value_text_map() -> Dictionary:
+static func get_named_color_use_value_text_map() -> Dictionary[NamedColorUse, String]:
return {
NamedColorUse.ALWAYS: Translator.translate("Always"),
NamedColorUse.WHEN_SHORTER_OR_EQUAL: Translator.translate("When shorter or equal"),
@@ -34,16 +31,14 @@ static func get_named_color_use_value_text_map() -> Dictionary:
NamedColorUse.NEVER: Translator.translate("Never"),
}
-# TODO Typed Dictionary wonkiness Dictionary[PrimaryColorSyntax, String]
-static func get_primary_color_syntax_value_text_map() -> Dictionary:
+static func get_primary_color_syntax_value_text_map() -> Dictionary[PrimaryColorSyntax, String]:
return {
PrimaryColorSyntax.THREE_OR_SIX_DIGIT_HEX: Translator.translate("3-digit or 6-digit hex"),
PrimaryColorSyntax.SIX_DIGIT_HEX: Translator.translate("6-digit hex"),
PrimaryColorSyntax.RGB: "RGB",
}
-# TODO Typed Dictionary wonkiness Dictionary[Variant, String]
-static func get_enum_value_text_map(property: String) -> Dictionary:
+static func get_enum_value_text_map(property: String) -> Dictionary[Variant, String]:
match property:
"preset": return get_preset_value_text_map()
"xml_shorthand_tags": return get_shorthand_tags_value_text_map()
@@ -63,7 +58,7 @@ func get_setting_default(setting: String) -> Variant:
"color_primary_syntax": return PrimaryColorSyntax.THREE_OR_SIX_DIGIT_HEX
"color_capital_hex": return false
- "xml_keep_comments": return preset == Preset.PRETTY
+ "xml_remove_comments": return preset == Preset.COMPACT
"xml_shorthand_tags": return ShorthandTags.ALWAYS if preset == Preset.COMPACT else ShorthandTags.ALL_EXCEPT_CONTAINERS
"xml_shorthand_tags_space_out_slash": return preset == Preset.PRETTY
"xml_pretty_formatting": return preset == Preset.PRETTY
@@ -110,10 +105,10 @@ func _init(new_preset := Preset.COMPACT) -> void:
emit_changed()
-@export var xml_keep_comments := false:
+@export var xml_remove_comments := true:
set(new_value):
- if xml_keep_comments != new_value:
- xml_keep_comments = new_value
+ if xml_remove_comments != new_value:
+ xml_remove_comments = new_value
emit_changed()
@export var xml_add_trailing_newline := false:
diff --git a/src/config_classes/Optimizer.gd b/src/config_classes/Optimizer.gd
new file mode 100644
index 0000000..7adb248
--- /dev/null
+++ b/src/config_classes/Optimizer.gd
@@ -0,0 +1,27 @@
+## A resource passed to ElementRoot.optimize() to determine configs.
+class_name Optimizer extends ConfigResource
+
+func get_setting_default(setting: String) -> Variant:
+ match setting:
+ "remove_comments": return true
+ "convert_shapes": return true
+ "simplify_path_parameters": return true
+ return null
+
+@export var remove_comments := true:
+ set(new_value):
+ if remove_comments != new_value:
+ remove_comments = new_value
+ emit_changed()
+
+@export var convert_shapes := true:
+ set(new_value):
+ if convert_shapes != new_value:
+ convert_shapes = new_value
+ emit_changed()
+
+@export var simplify_path_parameters := true:
+ set(new_value):
+ if simplify_path_parameters != new_value:
+ simplify_path_parameters = new_value
+ emit_changed()
diff --git a/src/config_classes/Optimizer.gd.uid b/src/config_classes/Optimizer.gd.uid
new file mode 100644
index 0000000..9da79d0
--- /dev/null
+++ b/src/config_classes/Optimizer.gd.uid
@@ -0,0 +1 @@
+uid://b8fr3xk7nv7hn
diff --git a/src/config_classes/SaveData.gd b/src/config_classes/SaveData.gd
index 7ef2418..6c3da4e 100644
--- a/src/config_classes/SaveData.gd
+++ b/src/config_classes/SaveData.gd
@@ -12,6 +12,9 @@ var _shortcut_validities: Dictionary[Key, bool] = {}
# Most settings don't need a default.
func get_setting_default(setting: String) -> Variant:
match setting:
+ "main_font_path": return ""
+ "bold_font_path": return ""
+ "mono_font_path": return ""
"base_color":
match theme_preset:
ThemePreset.DARK: return Color("1a1a1a")
@@ -192,6 +195,8 @@ func validate() -> void:
editor_formatter = Formatter.new(Formatter.Preset.PRETTY)
if not is_instance_valid(export_formatter):
export_formatter = Formatter.new(Formatter.Preset.COMPACT)
+ if not is_instance_valid(default_optimizer):
+ default_optimizer = Optimizer.new()
if _active_tab_index >= _tabs.size() or _active_tab_index < 0:
_active_tab_index = _active_tab_index # Run the setter.
@@ -246,6 +251,30 @@ const CURRENT_VERSION = 1
external_call(Configs.sync_theme)
+# Don't check if the value has changed here, even the file path haven't changed the font should still update.
+
+@export var main_font_path := "":
+ set(new_value):
+ if new_value.is_empty() or FileAccess.file_exists(new_value):
+ main_font_path = new_value
+ emit_changed()
+ external_call(Configs.sync_fonts)
+
+@export var bold_font_path := "":
+ set(new_value):
+ if new_value.is_empty() or FileAccess.file_exists(new_value):
+ bold_font_path = new_value
+ emit_changed()
+ external_call(Configs.sync_fonts)
+
+@export var mono_font_path := "":
+ set(new_value):
+ if new_value.is_empty() or FileAccess.file_exists(new_value):
+ mono_font_path = new_value
+ emit_changed()
+ external_call(Configs.sync_fonts)
+
+
@export var highlighter_preset := HighlighterPreset.DEFAULT_DARK:
set(new_value):
if highlighter_preset != new_value:
@@ -806,6 +835,14 @@ func set_palettes(new_palettes: Array[Palette]) -> void:
export_formatter.changed.connect(emit_changed)
+@export var default_optimizer: Optimizer = null:
+ set(new_value):
+ if default_optimizer != new_value and is_instance_valid(new_value):
+ default_optimizer = new_value
+ emit_changed()
+ default_optimizer.changed.connect(emit_changed)
+
+
@export var shortcut_panel_layout := ShortcutPanel.Layout.HORIZONTAL_STRIP:
set(new_value):
# Validation
@@ -1123,6 +1160,22 @@ func get_layout_part_index(part: Utils.LayoutPart) -> int:
side_panel_splitter_offset = new_value
emit_changed()
+const DEFAULT_PREVIEW_SIZES: PackedInt32Array = [16, 24, 32, 48, 64]
+@export var preview_sizes := DEFAULT_PREVIEW_SIZES:
+ set(new_value):
+ if preview_sizes != new_value:
+ var real_sizes: PackedInt32Array
+ for size in new_value:
+ real_sizes.append(maxi(size, 1))
+ preview_sizes = real_sizes
+ emit_changed()
+
+@export var previews_background := Color.TRANSPARENT:
+ set(new_value):
+ if previews_background != new_value:
+ previews_background = new_value
+ emit_changed()
+
# Utility
diff --git a/src/data_classes/AttributePathdata.gd b/src/data_classes/AttributePathdata.gd
index 6b48fae..1db7c4d 100644
--- a/src/data_classes/AttributePathdata.gd
+++ b/src/data_classes/AttributePathdata.gd
@@ -208,7 +208,7 @@ func convert_command(idx: int, cmd_char: String) -> void:
if conversion_made:
sync_after_commands_change()
-func convert_commands_optimized(indices: PackedInt32Array, cmd_chars: PackedStringArray) -> void:
+func convert_many_commands(indices: PackedInt32Array, cmd_chars: PackedStringArray) -> void:
var conversions_made := false
for i in indices.size():
var conversion_made := _convert_command(indices[i], cmd_chars[i])
diff --git a/src/data_classes/BasicXNode.gd b/src/data_classes/BasicXNode.gd
index 911905f..92252d3 100644
--- a/src/data_classes/BasicXNode.gd
+++ b/src/data_classes/BasicXNode.gd
@@ -33,7 +33,7 @@ static func get_type_string(node_type: NodeType) -> String:
func get_possible_conversions() -> Array[NodeType]:
var conversions: Array[NodeType] = []
- if (_type == NodeType.TEXT or _type == NodeType.CDATA) and Configs.savedata.editor_formatter.xml_keep_comments:
+ if (_type == NodeType.TEXT or _type == NodeType.CDATA) and not Configs.savedata.editor_formatter.xml_remove_comments:
conversions.append(NodeType.COMMENT)
if _type == NodeType.COMMENT or _type == NodeType.CDATA:
diff --git a/src/data_classes/ElementRoot.gd b/src/data_classes/ElementRoot.gd
index ddc565b..5709a64 100644
--- a/src/data_classes/ElementRoot.gd
+++ b/src/data_classes/ElementRoot.gd
@@ -185,12 +185,12 @@ func replace_xnode(id: PackedInt32Array, new_xnode: XNode) -> void:
## Optimizes the SVG text in ways that attribute formatting doesn't allow.
## The return value is true if the SVG can be optimized, otherwise false.
## If apply_changes is false, you'll only get the return value.
-func optimize(not_applied := false) -> bool:
+func optimize(optimizer: Optimizer, not_applied := false) -> bool:
for xnode in get_all_xnode_descendants():
if not xnode.is_element():
var basic_xnode: BasicXNode = xnode
var xids_to_remove: Array[PackedInt32Array] = []
- if basic_xnode.get_type() == BasicXNode.NodeType.COMMENT:
+ if basic_xnode.get_type() == BasicXNode.NodeType.COMMENT and optimizer.remove_comments:
if not_applied:
return true
xids_to_remove.append(xnode.xid)
@@ -200,33 +200,37 @@ func optimize(not_applied := false) -> bool:
continue
var element: Element = xnode
- match element.name:
- "ellipse":
- # If possible, turn ellipses into circles.
- if element.can_replace("circle"):
- if not_applied:
- return true
- replace_xnode(element.xid, element.get_replacement("circle"))
- "rect":
- # If possible, turn rounded rects into circles or ellipses.
- if element.can_replace("circle"):
- if not_applied:
- return true
- replace_xnode(element.xid, element.get_replacement("circle"))
- elif element.can_replace("ellipse"):
- if not_applied:
- return true
- replace_xnode(element.xid, element.get_replacement("ellipse"))
- elif element.get_rx() == 0:
- # If the rectangle is not rounded, turn it into a path.
+
+ if optimizer.convert_shapes:
+ match element.name:
+ "ellipse":
+ # If possible, turn ellipses into circles.
+ if element.can_replace("circle"):
+ if not_applied:
+ return true
+ replace_xnode(element.xid, element.get_replacement("circle"))
+ "rect":
+ # If possible, turn rounded rects into circles or ellipses.
+ if element.can_replace("circle"):
+ if not_applied:
+ return true
+ replace_xnode(element.xid, element.get_replacement("circle"))
+ elif element.can_replace("ellipse"):
+ if not_applied:
+ return true
+ replace_xnode(element.xid, element.get_replacement("ellipse"))
+ elif element.get_rx() == 0:
+ # If the rectangle is not rounded, turn it into a path.
+ if not_applied:
+ return true
+ replace_xnode(element.xid, element.get_replacement("path"))
+ "polygon", "line", "polyline":
if not_applied:
return true
replace_xnode(element.xid, element.get_replacement("path"))
- "polygon", "line", "polyline":
- if not_applied:
- return true
- replace_xnode(element.xid, element.get_replacement("path"))
- "path":
+
+ if optimizer.simplify_path_parameters:
+ if element.name == "path":
# Replace L with H or V when possible.
var conversion_indices := PackedInt32Array()
var conversion_cmd_chars := PackedStringArray()
@@ -264,6 +268,6 @@ func optimize(not_applied := false) -> bool:
return true
conversion_indices.append(cmd_idx)
conversion_cmd_chars.append("H")
- pathdata.convert_commands_optimized(conversion_indices, conversion_cmd_chars)
+ pathdata.convert_many_commands(conversion_indices, conversion_cmd_chars)
return false
diff --git a/src/data_classes/ElementSVG.gd b/src/data_classes/ElementSVG.gd
index 8ba5a75..0117fc8 100644
--- a/src/data_classes/ElementSVG.gd
+++ b/src/data_classes/ElementSVG.gd
@@ -3,7 +3,8 @@ class_name ElementSVG extends Element
var width: float
var height: float
-var viewbox: Rect2
+var precise_viewbox := PackedFloat64Array([0, 0, 0, 0])
+var viewbox := Rect2()
var viewbox_normalized_diagonal: float
var canvas_transform: Transform2D # Automatically updated with the precise transform.
@@ -28,6 +29,7 @@ func _conditional_update_cache(attribute_name: String) -> void:
func update_cache() -> void:
if svg == null and root != self:
+ _set_cached_viewbox(0, 0, 0, 0)
return
var has_valid_width := has_attribute("width")
@@ -37,8 +39,7 @@ 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
- viewbox = Rect2(0, 0, 0, 0)
- viewbox_normalized_diagonal = 0.0
+ _set_cached_viewbox(0, 0, 0, 0)
canvas_precise_transform = PackedFloat64Array([1.0, 0.0, 0.0, 1.0, 0.0, 0.0])
return
@@ -59,22 +60,26 @@ func update_cache() -> void:
# Cache viewbox.
if has_valid_viewbox and get_attribute("viewBox").get_list_size() >= 4:
var viewbox_attrib: AttributeList = get_attribute("viewBox")
- viewbox = Rect2(viewbox_attrib.get_list_element(0), viewbox_attrib.get_list_element(1),
+ _set_cached_viewbox(viewbox_attrib.get_list_element(0), viewbox_attrib.get_list_element(1),
viewbox_attrib.get_list_element(2), viewbox_attrib.get_list_element(3))
else:
- viewbox = Rect2(0, 0, get_attribute_num("width"), get_attribute_num("height"))
+ _set_cached_viewbox(0, 0, get_attribute_num("width"), get_attribute_num("height"))
# Cache canvas transform.
- var width_ratio := width / viewbox.size.x
- var height_ratio := height / viewbox.size.y
+ var width_ratio := width / precise_viewbox[2]
+ var height_ratio := height / precise_viewbox[3]
if width_ratio < height_ratio:
- canvas_precise_transform = PackedFloat64Array([width_ratio, 0.0, 0.0, width_ratio, -viewbox.position.x * width_ratio,
- -viewbox.position.y * width_ratio + (height - width_ratio * viewbox.size.y) / 2.0])
+ canvas_precise_transform = PackedFloat64Array([width_ratio, 0.0, 0.0, width_ratio, -precise_viewbox[0] * width_ratio,
+ -precise_viewbox[1] * width_ratio + (height - width_ratio * precise_viewbox[3]) / 2.0])
else:
- canvas_precise_transform = PackedFloat64Array([height_ratio, 0.0, 0.0, height_ratio, -viewbox.position.x * height_ratio +\
- (width - height_ratio * viewbox.size.x) / 2, -viewbox.position.y * height_ratio])
+ canvas_precise_transform = PackedFloat64Array([height_ratio, 0.0, 0.0, height_ratio, -precise_viewbox[0] * height_ratio +\
+ (width - height_ratio * precise_viewbox[2]) / 2, -precise_viewbox[1] * height_ratio])
if not canvas_transform.is_finite():
canvas_precise_transform = PackedFloat64Array([1.0, 0.0, 0.0, 1.0, 0.0, 0.0])
- viewbox_normalized_diagonal = Vector2(viewbox.size.x, viewbox.size.y).length() / sqrt(2)
+
+func _set_cached_viewbox(x: float, y: float, w: float, h: float) -> void:
+ precise_viewbox = PackedFloat64Array([x, y, w, h])
+ viewbox = Rect2(x, y, w, h)
+ viewbox_normalized_diagonal = Vector2(w, h).length() / sqrt(2)
func canvas_to_world(pos: Vector2) -> Vector2:
diff --git a/src/data_classes/NumstringParser.gd b/src/data_classes/NumstringParser.gd
index 62c2a0c..79909f0 100644
--- a/src/data_classes/NumstringParser.gd
+++ b/src/data_classes/NumstringParser.gd
@@ -46,12 +46,12 @@ static func evaluate(text: String) -> float:
var expr := Expression.new()
var err := expr.parse(text.replace(",", "."))
if err == OK:
- var result: Variant = expr.execute()
+ var result: Variant = expr.execute([], ExpressionScript, false, true)
if not expr.has_execute_failed() and typeof(result) in [TYPE_FLOAT, TYPE_INT]:
return result
err = expr.parse(text)
if err == OK:
- var result: Variant = expr.execute()
+ var result: Variant = expr.execute([], ExpressionScript, false, true)
if not expr.has_execute_failed() and typeof(result) in [TYPE_FLOAT, TYPE_INT]:
return result
return NAN
diff --git a/src/data_classes/SVGParser.gd b/src/data_classes/SVGParser.gd
index 61fa5c5..506e82a 100644
--- a/src/data_classes/SVGParser.gd
+++ b/src/data_classes/SVGParser.gd
@@ -85,7 +85,7 @@ static func _xnode_to_markup(xnode: XNode, formatter: Formatter, make_attributes
markup = formatter.get_indent_string().repeat(xnode.xid.size())
if not xnode.is_element():
- if (not formatter.xml_keep_comments and xnode.get_type() == BasicXNode.NodeType.COMMENT):
+ if (formatter.xml_remove_comments and xnode.get_type() == BasicXNode.NodeType.COMMENT):
return ""
match xnode.get_type():
@@ -233,7 +233,7 @@ static func markup_to_root(markup: String) -> ParseResult:
break
XMLParser.NODE_COMMENT:
- if Configs.savedata.editor_formatter.xml_keep_comments:
+ if not Configs.savedata.editor_formatter.xml_remove_comments:
unclosed_element_stack.back().insert_child(-1, BasicXNode.new(BasicXNode.NodeType.COMMENT, parser.get_node_name()))
XMLParser.NODE_TEXT:
var real_text := parser.get_node_data().strip_edges()
@@ -252,7 +252,7 @@ static func markup_to_root(markup: String) -> ParseResult:
static func _find_closure_string_in_utf8_buffer(buffer: PackedByteArray, offset: int) -> int:
while true:
offset = buffer.find(ord("/"), offset)
- if offset == -1:
+ if offset == -1 or offset == buffer.size() - 1:
return -1
elif buffer[offset + 1] == ord(">"):
return offset
diff --git a/src/data_classes/ShortcutRegistration.gd b/src/data_classes/ShortcutRegistration.gd
index 56299f5..4b84b2a 100644
--- a/src/data_classes/ShortcutRegistration.gd
+++ b/src/data_classes/ShortcutRegistration.gd
@@ -1,9 +1,16 @@
class_name ShortcutsRegistration extends RefCounted
+const BEHAVIOR_PRIORITY: Array[Behavior] = [
+ Behavior.NO_PASSTHROUGH,
+ Behavior.PASS_THROUGH_POPUPS,
+ Behavior.PASS_THROUGH_AND_PRESERVE_POPUPS,
+ Behavior.PASS_THROUGH_ALL,
+]
+
@warning_ignore("unused_signal")
signal activated(activated_action: String)
-enum Behavior {PASS_THROUGH_ALL, PASS_THROUGH_POPUPS, PASS_THROUGH_AND_PRESERVE_POPUPS, NO_PASSTHROUGH, STRICT_NO_PASSTHROUGH}
+enum Behavior {PASS_THROUGH_ALL, PASS_THROUGH_POPUPS, PASS_THROUGH_AND_PRESERVE_POPUPS, NO_PASSTHROUGH}
# The elements with the same indices from these 3 arrays corresponds to a shortcut registration.
var actions := PackedStringArray()
diff --git a/src/ui_parts/about_menu.gd b/src/ui_parts/about_menu.gd
index 97fb728..b252acd 100644
--- a/src/ui_parts/about_menu.gd
+++ b/src/ui_parts/about_menu.gd
@@ -1,5 +1,13 @@
extends PanelContainer
+const UNUSED_MODULE_PATHS: PackedStringArray = ["modules/betsy", "modules/godot_physics_2d",
+ "modules/godot_physics_3d", "modules/jolt_physics", "modules/lightmapper_rd", "thirdparty/brotli",
+ "thirdparty/cvtt", "thirdparty/basis_universal", "thirdparty/d3d12", "thirdparty/etcpak",
+ "thirdparty/graphite", "thirdparty/meshoptimizer", "thirdparty/minimp3", "thirdparty/minizip",
+ "thirdparty/openxr", "thirdparty/tinyexr", "thirdparty/vhacd", "thirdparty/volk",
+ "thirdparty/vulkan", "thirdparty/xatlas"
+]
+
@onready var back_button: Button = $VBoxContainer/PanelContainer/BackButton
@onready var translators_vbox: VBoxContainer = %TranslatorsVBox
@onready var developers_list: PanelGrid = %DevelopersList
@@ -159,7 +167,17 @@ func _on_tab_changed(idx: int) -> void:
{
"copyright": ["2012, Google Inc."],
"license": "OFL-1.1",
- "files": ["res://visual/fonts/Font.ttf", "res://visual/fonts/FontBold.ttf"]
+ "files": ["res://visual/fonts/original/NotoSans-SemiBold.woff2", "res://visual/fonts/original/NotoSans-ExtraBold.woff2"]
+ }
+ ]
+ },
+ {
+ "name": "Droid Sans font",
+ "parts": [
+ {
+ "copyright": ["2008, The Android Open Source Project"],
+ "license": "Apache-2.0",
+ "files": ["res://visual/fonts/original/DroidSansFallback.woff2"]
}
]
},
@@ -169,7 +187,7 @@ func _on_tab_changed(idx: int) -> void:
{
"copyright": ["2020, JetBrains s.r.o."],
"license": "OFL-1.1",
- "files": ["res://visual/fonts/FontMono.ttf"]
+ "files": ["res://visual/fonts/original/JetBrainsMono-Medium.woff2"]
}
]
}
@@ -190,24 +208,15 @@ func _on_tab_changed(idx: int) -> void:
vbox.add_child(label)
%VectorTouchParts.add_child(vbox)
- # Clean up Godot's copyright info from some stripped modules
- # to show more relevant components and load the UI faster.
+ # Clean up Godot's copyright info from some stripped modules to show more relevant components and load the UI faster.
var used_licenses: PackedStringArray
- const unused_module_paths: PackedStringArray = ["modules/betsy",
- "modules/godot_physics_2d", "modules/godot_physics_3d",
- "modules/jolt_physics", "modules/lightmapper_rd", "thirdparty/brotli",
- "thirdparty/cvtt", "thirdparty/basis_universal", "thirdparty/d3d12",
- "thirdparty/etcpak", "thirdparty/graphite", "thirdparty/meshoptimizer",
- "thirdparty/minimp3", "thirdparty/minizip", "thirdparty/openxr",
- "thirdparty/tinyexr", "thirdparty/vhacd", "thirdparty/volk",
- "thirdparty/vulkan", "thirdparty/xatlas"]
for copyright_info_idx in range(godot_copyright_info.size() - 1, -1, -1):
var copyright_info: Dictionary = godot_copyright_info[copyright_info_idx]
for part_idx in range(copyright_info["parts"].size() -1, -1, -1):
var part: Dictionary = copyright_info["parts"][part_idx]
if part.has("files"):
for i in range(part["files"].size() - 1, -1, -1):
- for module_path in unused_module_paths:
+ for module_path in UNUSED_MODULE_PATHS:
if module_path in part["files"][i]:
part["files"].remove_at(i)
break
diff --git a/src/ui_parts/about_menu.tscn b/src/ui_parts/about_menu.tscn
index c0c8748..6be98ef 100644
--- a/src/ui_parts/about_menu.tscn
+++ b/src/ui_parts/about_menu.tscn
@@ -3,7 +3,7 @@
[ext_resource type="Script" uid="uid://ys8g367cpqc2" path="res://src/ui_parts/about_menu.gd" id="1_xxltt"]
[ext_resource type="Texture2D" uid="uid://ljdlk0jneuwh" path="res://assets/icons/ArrowLeft.svg" id="2_q2got"]
[ext_resource type="Texture2D" uid="uid://mkitu0lvacs2" path="res://assets/logos/icon.svg" id="2_t7fbd"]
-[ext_resource type="FontFile" uid="uid://depydd16jq777" path="res://assets/fonts/FontMono.ttf" id="3_e8i1t"]
+[ext_resource type="FontVariation" uid="uid://pup5vmxl1t6m" path="res://assets/fonts/MonoFont.tres" id="4_4hgea"]
[ext_resource type="Script" uid="uid://ci44864moadn" path="res://src/ui_widgets/PanelGrid.gd" id="7_nvctb"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_s8tsc"]
@@ -241,7 +241,7 @@ theme_override_constants/margin_right = 2
[node name="LicenseLabel" type="Label" parent="VBoxContainer/TabContainer/License/MarginContainer"]
unique_name_in_owner = true
layout_mode = 2
-theme_override_fonts/font = ExtResource("3_e8i1t")
+theme_override_fonts/font = ExtResource("4_4hgea")
theme_override_font_sizes/font_size = 11
[node name="Third-party Licenses" type="ScrollContainer" parent="VBoxContainer/TabContainer"]
diff --git a/src/ui_parts/code_editor.tscn b/src/ui_parts/code_editor.tscn
index bc9f675..c423bed 100644
--- a/src/ui_parts/code_editor.tscn
+++ b/src/ui_parts/code_editor.tscn
@@ -1,8 +1,7 @@
-[gd_scene load_steps=5 format=3 uid="uid://cr1fdlmbknnko"]
+[gd_scene load_steps=4 format=3 uid="uid://cr1fdlmbknnko"]
[ext_resource type="Script" uid="uid://c3q5dvxm6ro1m" path="res://src/ui_parts/code_editor.gd" id="1_nffk0"]
-[ext_resource type="FontFile" uid="uid://depydd16jq777" path="res://assets/fonts/FontMono.ttf" id="2_p4nol"]
-[ext_resource type="Texture2D" uid="uid://dthdjf4v2vlvg" path="res://assets/icons/CodeOptions.svg" id="4_sos04"]
+[ext_resource type="Texture2D" uid="uid://dthdjf4v2vlvg" path="res://assets/icons/Edit.svg" id="4_sos04"]
[ext_resource type="Script" uid="uid://dh5mir6i27u4u" path="res://src/ui_widgets/BetterTextEdit.gd" id="8_ser4i"]
[node name="CodeEditor" type="VBoxContainer"]
@@ -51,6 +50,5 @@ layout_mode = 2
[node name="Label" type="RichTextLabel" parent="ScriptEditor/ErrorBar"]
custom_minimum_size = Vector2(0, 20)
layout_mode = 2
-theme_override_fonts/normal_font = ExtResource("2_p4nol")
theme_override_font_sizes/normal_font_size = 14
fit_content = true
diff --git a/src/ui_parts/current_file_button.gd b/src/ui_parts/current_file_button.gd
index 9085e86..a263b9d 100644
--- a/src/ui_parts/current_file_button.gd
+++ b/src/ui_parts/current_file_button.gd
@@ -19,7 +19,7 @@ func _on_file_button_pressed() -> void:
not FileAccess.file_exists(Configs.savedata.get_active_tab().svg_file_path)))
var context_popup := ContextPopup.new()
- context_popup.setup(btn_array, true, size.x, -1, PackedInt32Array([2]))
+ context_popup.setup(btn_array, true, size.x, PackedInt32Array([2]))
HandlerGUI.popup_under_rect_center(context_popup, get_global_rect(), get_viewport())
func update_file_button() -> void:
diff --git a/src/ui_parts/debug_content.gd b/src/ui_parts/debug_content.gd
index ac625e3..17c1275 100644
--- a/src/ui_parts/debug_content.gd
+++ b/src/ui_parts/debug_content.gd
@@ -62,7 +62,7 @@ func _update_input_debug(event: InputEvent) -> void:
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) + ")"
+ event_text += " (" + Utils.num_simple(event.position.x, 2) + ", " + Utils.num_simple(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.tscn b/src/ui_parts/display.tscn
index 0ca949a..88639bc 100644
--- a/src/ui_parts/display.tscn
+++ b/src/ui_parts/display.tscn
@@ -116,7 +116,6 @@ layout_mode = 2
theme_type_variation = &"LeftConnectedLineEdit"
max_length = 20
min_value = 0.001
-allow_lower = false
[node name="spacer" type="Control" parent="ViewportPanel/VBoxContainer/Toolbar/ViewportOptions"]
layout_mode = 2
diff --git a/src/ui_parts/editor_scene.gd b/src/ui_parts/editor_scene.gd
index 81df4c4..1c5dc87 100644
--- a/src/ui_parts/editor_scene.gd
+++ b/src/ui_parts/editor_scene.gd
@@ -14,16 +14,16 @@ func _ready() -> void:
var shortcuts := ShortcutsRegistration.new()
shortcuts.add_shortcut("save", FileUtils.save_svg, ShortcutsRegistration.Behavior.PASS_THROUGH_AND_PRESERVE_POPUPS)
shortcuts.add_shortcut("save_as", FileUtils.save_svg_as, ShortcutsRegistration.Behavior.PASS_THROUGH_POPUPS)
- shortcuts.add_shortcut("optimize", State.optimize, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("reset_svg", FileUtils.reset_svg, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("ui_undo", func() -> void: Configs.savedata.get_active_tab().undo(), ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("ui_redo", func() -> void: Configs.savedata.get_active_tab().redo(), ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("ui_cancel", State.clear_all_selections, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("delete", State.delete_selected, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("move_up", State.move_up_selected, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("move_down", State.move_down_selected, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("duplicate", State.duplicate_selected, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
- shortcuts.add_shortcut("select_all", State.select_all, ShortcutsRegistration.Behavior.STRICT_NO_PASSTHROUGH)
+ shortcuts.add_shortcut("optimize", State.optimize)
+ shortcuts.add_shortcut("reset_svg", FileUtils.reset_svg)
+ shortcuts.add_shortcut("ui_undo", func() -> void: Configs.savedata.get_active_tab().undo())
+ shortcuts.add_shortcut("ui_redo", func() -> void: Configs.savedata.get_active_tab().redo())
+ shortcuts.add_shortcut("ui_cancel", State.clear_all_selections)
+ shortcuts.add_shortcut("delete", State.delete_selected)
+ shortcuts.add_shortcut("move_up", State.move_up_selected)
+ shortcuts.add_shortcut("move_down", State.move_down_selected)
+ shortcuts.add_shortcut("duplicate", State.duplicate_selected)
+ shortcuts.add_shortcut("select_all", State.select_all)
shortcuts.add_shortcut("move_absolute", State.respond_to_key_input.bind("M"))
shortcuts.add_shortcut("move_relative", State.respond_to_key_input.bind("m"))
diff --git a/src/ui_parts/export_menu.gd b/src/ui_parts/export_menu.gd
index d39335c..c08ddc9 100644
--- a/src/ui_parts/export_menu.gd
+++ b/src/ui_parts/export_menu.gd
@@ -1,7 +1,7 @@
extends PanelContainer
const NumberEdit = preload("res://src/ui_widgets/number_edit.gd")
-const Dropdown = preload("res://src/ui_widgets/dropdown.gd")
+const BasicDropdown = preload("res://src/ui_widgets/dropdown_basic.gd")
const PreviewRect = preload("res://src/ui_widgets/preview_rect.gd")
var undo_redo := UndoRedoRef.new()
diff --git a/src/ui_parts/export_menu.tscn b/src/ui_parts/export_menu.tscn
index e612e94..8bcdd81 100644
--- a/src/ui_parts/export_menu.tscn
+++ b/src/ui_parts/export_menu.tscn
@@ -3,7 +3,7 @@
[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="PackedScene" uid="uid://dbu1lvajypafb" path="res://src/ui_widgets/dropdown.tscn" id="5_y6ex0"]
+[ext_resource type="PackedScene" uid="uid://bpr5yv7pbv13g" path="res://src/ui_widgets/dropdown_basic.tscn" id="5_y6ex0"]
[ext_resource type="PackedScene" uid="uid://dad7fkhmsooc6" path="res://src/ui_widgets/number_edit.tscn" id="6_w1sag"]
[node name="ExportMenu" type="PanelContainer"]
@@ -109,9 +109,9 @@ layout_mode = 2
theme_override_font_sizes/font_size = 12
[node name="Dropdown" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer/FormatHBox" instance=ExtResource("5_y6ex0")]
+custom_minimum_size = Vector2(60, 22)
layout_mode = 2
-values = ["svg", "png", "jpeg", "webp"]
-aliases = {
+aliases = Dictionary[String, Variant]({
"JPEG": "jpeg",
"JPG": "jpg",
"PNG": "png",
@@ -119,7 +119,7 @@ aliases = {
"WEBP": "webp",
"WebP": "webp",
"jpg": "jpeg"
-}
+})
editing_enabled = true
[node name="FinalSizeLabel" type="Label" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer"]
@@ -156,8 +156,6 @@ layout_mode = 2
min_value = 1.0
max_value = 100.0
initial_value = 75.0
-allow_lower = false
-allow_higher = false
is_float = false
[node name="SizeContainer" type="CenterContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer"]
@@ -189,8 +187,6 @@ unique_name_in_owner = true
custom_minimum_size = Vector2(47, 22)
layout_mode = 2
size_flags_vertical = 4
-allow_lower = false
-allow_higher = false
[node name="RightPanel" type="PanelContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer/SizeContainer/HBoxContainer"]
layout_mode = 2
@@ -212,9 +208,8 @@ theme_override_font_sizes/font_size = 12
unique_name_in_owner = true
custom_minimum_size = Vector2(47, 22)
layout_mode = 2
+min_value = 1.0
max_value = 16384.0
-allow_lower = false
-allow_higher = false
is_float = false
[node name="HeightContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer/TitledPanel/VBoxContainer/CenterContainer/VBoxContainer/SizeContainer/HBoxContainer/RightPanel/VBoxContainer"]
@@ -230,9 +225,8 @@ theme_override_font_sizes/font_size = 12
unique_name_in_owner = true
custom_minimum_size = Vector2(47, 22)
layout_mode = 2
+min_value = 1.0
max_value = 16384.0
-allow_lower = false
-allow_higher = false
is_float = false
[node name="ButtonContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"]
diff --git a/src/ui_parts/good_file_dialog.gd b/src/ui_parts/good_file_dialog.gd
index 2506777..c6167bd 100644
--- a/src/ui_parts/good_file_dialog.gd
+++ b/src/ui_parts/good_file_dialog.gd
@@ -13,6 +13,7 @@ signal files_selected(paths: PackedStringArray)
const folder_icon = preload("res://assets/icons/Folder.svg")
const broken_file_icon = preload("res://assets/icons/FileBroken.svg")
const text_file_icon = preload("res://assets/icons/TextFile.svg")
+const font_file_icon = preload("res://assets/icons/FontFile.svg")
const system_dirs_to_show: Array[OS.SystemDir] = [OS.SYSTEM_DIR_DESKTOP, OS.SYSTEM_DIR_DOCUMENTS,
OS.SYSTEM_DIR_DOWNLOADS, OS.SYSTEM_DIR_MOVIES, OS.SYSTEM_DIR_MUSIC, OS.SYSTEM_DIR_PICTURES]
@@ -204,23 +205,22 @@ func update_filtering() -> void:
func open_dir(dir: String, add_to_history := true, only_filtering_update := false) -> void:
dir_cursor = DirAccess.open(dir)
if not is_instance_valid(dir_cursor):
- # TODO implement a fallback.
return
- if dir != current_dir and search_button.button_pressed:
- search_button.button_pressed = false
-
if add_to_history:
navigation_index += 1
navigation_history.resize(navigation_index)
navigation_history.append(dir)
update_navigation_buttons()
+ if dir != current_dir:
+ current_dir = dir
+ if search_button.button_pressed:
+ search_button.button_pressed = false
+
file_list.clear()
file_list.get_v_scroll_bar().value = 0
- current_dir = dir
-
if not only_filtering_update:
sync_to_selection()
directory_path_widget.set_path(current_dir)
@@ -260,13 +260,17 @@ func open_dir(dir: String, add_to_history := true, only_filtering_update := fals
file_list.set_item_metadata(item_idx, Actions.new(open_dir.bind(dir_path), sync_to_selection, open_dir_context.bind(dir_path)))
for file in files:
- if not file.get_extension() in extensions or (not search_text.is_empty() and not search_text.is_subsequence_ofn(file)):
+ if not Utils.get_lowercase_extension(file) in extensions or (not search_text.is_empty() and not search_text.is_subsequence_ofn(file)):
continue
var item_idx := file_list.add_item(file, null)
- if file.get_extension() == "xml":
+ var file_extension := Utils.get_lowercase_extension(file)
+ if file_extension == "xml":
file_list.set_item_icon(item_idx, text_file_icon)
file_list.set_item_icon_modulate(item_idx, ThemeUtils.text_file_color)
+ elif file_extension in Utils.DYNAMIC_FONT_FORMATS:
+ file_list.set_item_icon(item_idx, font_file_icon)
+ file_list.set_item_icon_modulate(item_idx, ThemeUtils.text_file_color)
file_list.set_item_metadata(item_idx, Actions.new(select_files, sync_to_selection, open_file_context))
# If we don't await this stuff, sometimes the item_rect we get is all wrong.
await file_list.draw
@@ -277,7 +281,7 @@ func sync_file_field() -> void:
file_field.text = add_extension_if_missing(get_save_name())
func add_extension_if_missing(file_name: String) -> String:
- if not file_name.is_empty() and not file_name.get_extension() in extensions and\
+ if not file_name.is_empty() and not Utils.get_lowercase_extension(file_name) in extensions and\
extensions.size() >= 1:
return file_name + "." + extensions[0]
else:
@@ -298,7 +302,7 @@ func _setup_file_images() -> void:
var file_rect := file_list.get_item_rect(item_idx)
if not is_instance_valid(file_list.get_item_icon(item_idx)) and file_rect.end.y > visible_start and file_rect.position.y < visible_end:
var file := file_list.get_item_text(item_idx)
- match file.get_extension():
+ match Utils.get_lowercase_extension(file):
"svg":
# Setup a clean SVG graphic by using the scaling parameter.
var svg_text := FileAccess.get_file_as_string(current_dir.path_join(file))
diff --git a/src/ui_parts/good_file_dialog.tscn b/src/ui_parts/good_file_dialog.tscn
index eba6699..fbdda01 100644
--- a/src/ui_parts/good_file_dialog.tscn
+++ b/src/ui_parts/good_file_dialog.tscn
@@ -5,12 +5,12 @@
[ext_resource type="Texture2D" uid="uid://40yul4xup585" path="res://assets/icons/GoBack.svg" id="2_dyt2g"]
[ext_resource type="Texture2D" uid="uid://bo4xsfjm6wg6v" path="res://assets/icons/GoForward.svg" id="3_8ufx4"]
[ext_resource type="PackedScene" uid="uid://byriqsdywhr1k" path="res://src/ui_widgets/directory_path_widget.tscn" id="4_1umq0"]
-[ext_resource type="Texture2D" uid="uid://dr2erka82g6j4" path="res://assets/icons/Edit.svg" id="4_8ufx4"]
+[ext_resource type="Texture2D" uid="uid://dr2erka82g6j4" path="res://assets/icons/FieldEdit.svg" id="4_8ufx4"]
[ext_resource type="Texture2D" uid="uid://cvh3kwbucf2n1" path="res://assets/icons/Reload.svg" id="4_udwbh"]
[ext_resource type="Texture2D" uid="uid://kkxyv1gyrjgj" path="res://assets/icons/Visuals.svg" id="5_2ggtv"]
[ext_resource type="Texture2D" uid="uid://d4c7haflm8evm" path="res://assets/icons/Search.svg" id="6_otods"]
-[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="7_eeq17"]
[ext_resource type="Script" uid="uid://ynx3s1jc6bwq" path="res://src/ui_widgets/BetterButton.gd" id="7_ejhg0"]
+[ext_resource type="FontVariation" uid="uid://bo626nsycqtaj" path="res://assets/fonts/MainFont.tres" id="11_1umq0"]
[node name="GoodFileDialog" type="PanelContainer"]
offset_right = 684.0
@@ -113,7 +113,7 @@ layout_mode = 2
unique_name_in_owner = true
visible = false
layout_mode = 2
-theme_override_fonts/font = ExtResource("7_eeq17")
+theme_override_fonts/font = ExtResource("11_1umq0")
script = ExtResource("2_52puw")
[node name="VisualPicker" type="PanelContainer" parent="VBoxContainer/MainContainer/FilePicker"]
diff --git a/src/ui_parts/import_warning_menu.gd b/src/ui_parts/import_warning_menu.gd
index 0b7b030..ad65853 100644
--- a/src/ui_parts/import_warning_menu.gd
+++ b/src/ui_parts/import_warning_menu.gd
@@ -43,13 +43,33 @@ func _ready() -> void:
warnings_label.add_theme_color_override("default_color", Configs.savedata.basic_color_error)
warnings_label.text = "[center]%s: %s" % [Translator.translate("Syntax error"), SVGParser.get_parsing_error_string(imported_text_parse_result.error)]
else:
- var svg_warnings := get_svg_warnings(imported_text_parse_result.svg)
- if svg_warnings.is_empty():
+ var unrecognized_elements := PackedStringArray()
+ var unrecognized_attributes := PackedStringArray()
+ for element in imported_text_parse_result.svg.get_all_element_descendants():
+ if element is ElementUnrecognized:
+ if not element.name in unrecognized_elements:
+ unrecognized_elements.append(element.name)
+ else:
+ for attribute in element.get_all_attributes():
+ if not DB.is_attribute_recognized(element.name, attribute.name) and not attribute.name in unrecognized_attributes:
+ unrecognized_attributes.append(attribute.name)
+
+ if unrecognized_attributes.is_empty() and unrecognized_elements.is_empty():
finish_import()
else:
warnings_label.add_theme_color_override("default_color", Configs.savedata.basic_color_warning)
- for warning in svg_warnings:
- warnings_label.text += warning + "\n"
+ for element in unrecognized_elements:
+ warnings_label.add_text(Translator.translate("Unrecognized element") + ": ")
+ warnings_label.push_mono()
+ warnings_label.add_text(element)
+ warnings_label.pop()
+ warnings_label.newline()
+ for attribute in unrecognized_attributes:
+ warnings_label.add_text(Translator.translate("Unrecognized attribute") + ": ")
+ warnings_label.push_mono()
+ warnings_label.add_text(attribute)
+ warnings_label.pop()
+ warnings_label.newline()
ok_button.grab_focus()
$VBoxContainer/TitleLabel.text = Translator.translate("Import Problems")
ok_button.text = Translator.translate("Import")
@@ -58,22 +78,3 @@ func _ready() -> void:
func set_svg(text: String) -> void:
imported_text = text
-
-
-func get_svg_warnings(root_element: ElementRoot) -> PackedStringArray:
- var unrecognized_elements := PackedStringArray()
- var unrecognized_attributes := PackedStringArray()
- for element in root_element.get_all_element_descendants():
- if element is ElementUnrecognized:
- if not element.name in unrecognized_elements:
- unrecognized_elements.append(element.name)
- else:
- for attribute in element.get_all_attributes():
- if not DB.is_attribute_recognized(element.name, attribute.name) and not attribute.name in unrecognized_attributes:
- unrecognized_attributes.append(attribute.name)
- var warnings := PackedStringArray()
- for element in unrecognized_elements:
- warnings.append("%s: %s" % [Translator.translate("Unrecognized element"), element])
- for attribute in unrecognized_attributes:
- warnings.append("%s: %s" % [Translator.translate("Unrecognized attribute"), attribute])
- return warnings
diff --git a/src/ui_parts/import_warning_menu.tscn b/src/ui_parts/import_warning_menu.tscn
index 065d76b..c02f3e2 100644
--- a/src/ui_parts/import_warning_menu.tscn
+++ b/src/ui_parts/import_warning_menu.tscn
@@ -1,8 +1,7 @@
-[gd_scene load_steps=4 format=3 uid="uid://bhskf8yrulqtj"]
+[gd_scene load_steps=3 format=3 uid="uid://bhskf8yrulqtj"]
[ext_resource type="Script" uid="uid://d1mdyvr7majfe" path="res://src/ui_parts/import_warning_menu.gd" id="1_1rv5w"]
[ext_resource type="PackedScene" uid="uid://xh26qa68xed4" path="res://src/ui_widgets/preview_rect.tscn" id="2_j1v8v"]
-[ext_resource type="FontFile" uid="uid://depydd16jq777" path="res://assets/fonts/FontMono.ttf" id="4_rpfrk"]
[node name="ImportWarningPanel" type="PanelContainer"]
anchors_preset = 8
@@ -55,7 +54,6 @@ unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-theme_override_fonts/normal_font = ExtResource("4_rpfrk")
bbcode_enabled = true
fit_content = true
scroll_active = false
diff --git a/src/ui_parts/inspector.gd b/src/ui_parts/inspector.gd
index a422692..c6fbc98 100644
--- a/src/ui_parts/inspector.gd
+++ b/src/ui_parts/inspector.gd
@@ -59,10 +59,9 @@ func _on_add_button_pressed() -> void:
false, DB.get_element_icon(element_name))
btn.add_theme_font_override("font", ThemeUtils.mono_font)
btn_array.append(btn)
- var separator_indices := PackedInt32Array([1, 4, 7])
var add_popup := ContextPopup.new()
- add_popup.setup(btn_array, true, add_button.size.x, -1, separator_indices)
+ add_popup.setup(btn_array, true, add_button.size.x, PackedInt32Array([1, 4, 7]))
HandlerGUI.popup_under_rect(add_popup, add_button.get_global_rect(), get_viewport())
diff --git a/src/ui_parts/layout_configuration.gd b/src/ui_parts/layout_configuration.gd
index bf0d094..445515c 100644
--- a/src/ui_parts/layout_configuration.gd
+++ b/src/ui_parts/layout_configuration.gd
@@ -87,13 +87,13 @@ func _on_window_mouse_exited() -> void:
func _draw() -> void:
var half_width := size.x / 2.0
- var right_rect := Rect2(half_width, 18, half_width, half_width * 1.25)
+ var right_rect := Rect2(half_width, 20, half_width, half_width * 1.25)
# Fixed viewport location for now.
get_theme_stylebox("disabled", "TranslucentButton").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, ThemeUtils.tinted_contrast_color)
+ viewport_icon.draw(ci, (right_rect.get_center() - viewport_icon.get_size() / 2).round(), ThemeUtils.tinted_contrast_color)
for layout_location in section_areas:
var area := section_areas[layout_location].grow(-BUFFER_SIZE)
@@ -144,13 +144,13 @@ 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, ThemeUtils.tinted_contrast_color)
+ icon.draw(ci, (rect.get_center() - icon.get_size() / 2.0).round(), ThemeUtils.tinted_contrast_color)
- ThemeUtils.regular_font.draw_string(ci, Vector2(0, 12),
+ ThemeUtils.main_font.draw_string(ci, Vector2(0, 14),
Translator.translate("Layout") + ":", HORIZONTAL_ALIGNMENT_CENTER, size.x,
get_theme_font_size("font_size", "Label"), ThemeUtils.text_color)
- ThemeUtils.regular_font.draw_string(ci, Vector2(0, size.x * 0.625 + 33),
+ ThemeUtils.main_font.draw_string(ci, Vector2(0, size.x * 0.625 + 35),
Translator.translate("Excluded") + ":", HORIZONTAL_ALIGNMENT_CENTER, size.x,
get_theme_font_size("font_size", "Label"), ThemeUtils.text_color)
@@ -322,7 +322,7 @@ func update_areas() -> void:
var included_rect_height := size.x * 0.625
var half_width := size.x / 2.0
var included_rect_half_height := included_rect_height / 2.0
- var v_offset := 18.0
+ var v_offset := 19.0
section_areas.clear()
section_areas[SaveData.LayoutLocation.EXCLUDED] = Rect2(0, v_offset * 2 + included_rect_height + 2, size.x, PART_UI_SIZE + 8)
diff --git a/src/ui_parts/layout_popup.tscn b/src/ui_parts/layout_popup.tscn
index 68daa3d..babcdff 100644
--- a/src/ui_parts/layout_popup.tscn
+++ b/src/ui_parts/layout_popup.tscn
@@ -14,6 +14,6 @@ theme_override_constants/margin_right = 2
theme_override_constants/margin_bottom = 2
[node name="LayoutConfiguration" type="Control" parent="MarginContainer"]
-custom_minimum_size = Vector2(160, 176)
+custom_minimum_size = Vector2(200, 203)
layout_mode = 2
script = ExtResource("2_lmeyv")
diff --git a/src/ui_parts/previews.gd b/src/ui_parts/previews.gd
new file mode 100644
index 0000000..557fa67
--- /dev/null
+++ b/src/ui_parts/previews.gd
@@ -0,0 +1,365 @@
+extends VTitledPanel
+
+const ColorSwatch = preload("res://src/ui_widgets/color_swatch.gd")
+const ColorEdit = preload("res://src/ui_widgets/color_edit.gd")
+const NumberEdit = preload("res://src/ui_widgets/number_edit.gd")
+
+const NumberEditScene = preload("res://src/ui_widgets/number_edit.tscn")
+
+const more_icon = preload("res://assets/icons/SmallMore.svg")
+const edit_icon = preload("res://assets/icons/Edit.svg")
+const delete_icon = preload("res://assets/icons/Delete.svg")
+const plus_icon = preload("res://assets/icons/Plus.svg")
+
+const TILE_MARGIN = 2.0
+const TILE_TOP_PADDING = 4.0
+const TILE_LEFT_PADDING = 4.0
+const TILE_RIGHT_PADDING = 4.0
+const TILE_BOTTOM_PADDING = 2.0
+const ICON_TEXT_SPACING = 4.0
+const MORE_ICON_SIZE = 16.0
+const MAX_ICON_PREVIEW_SIZE = 128
+
+@onready var icon_preview_tiles: ProceduralControl = %IconPreviewTiles
+@onready var add_new_preview_button: Button = %AddNewPreviewButton
+@onready var texture_rect: TextureRect = %TextureRect
+@onready var scaled_preview_panel: PanelContainer = %ScaledPreviewPanel
+@onready var size_label: Label = %SizeLabel
+@onready var split_container: SplitContainer = %SplitContainer
+@onready var transparent_color_swatch: ColorSwatch = %TransparentColorSwatch
+@onready var black_color_swatch: ColorSwatch = %BlackColorSwatch
+@onready var white_color_swatch: ColorSwatch = %WhiteColorSwatch
+@onready var color_edit: ColorEdit = %ColorEdit
+@onready var preview_top_panel: PanelContainer = $SplitContainer/PreviewTopPanel
+@onready var more_button: Button = $ActionContainer/MoreButton
+@onready var size_label_margins: MarginContainer = %SizeLabelMargins
+
+class IconPreviewTileData extends RefCounted:
+ var index := -1
+ var position: Vector2
+ var size: Vector2
+ var preview_rect: Rect2
+ var label_rect: Rect2
+ var more_button_rect: Rect2
+ var bigger_dimension: int
+ var label_text: String
+ var preview_texture: DPITexture
+
+ func _init(new_index: int) -> void:
+ index = new_index
+ bigger_dimension = Configs.savedata.preview_sizes[index]
+ var svg_size := State.root_element.get_size()
+ var multiplier := bigger_dimension / maxf(svg_size.x, svg_size.y)
+ svg_size *= multiplier
+
+ label_text = "%d×%d (%sx)" % [int(svg_size.x), int(svg_size.y), Utils.num_simple(multiplier, 1)]
+ var label_size := ThemeUtils.main_font.get_string_size(label_text, HORIZONTAL_ALIGNMENT_LEFT, -1, 14)
+ var preview_size := svg_size if bigger_dimension <= MAX_ICON_PREVIEW_SIZE else svg_size * MAX_ICON_PREVIEW_SIZE / maxf(svg_size.x, svg_size.y)
+ var bottom_row_size := label_size.x + MORE_ICON_SIZE
+
+ # The position needs to be set when all sizes are known, so only size is set here.
+ size = Vector2(maxf(preview_size.x, bottom_row_size) + TILE_LEFT_PADDING + TILE_RIGHT_PADDING,
+ preview_size.y + label_size.y + TILE_TOP_PADDING + TILE_BOTTOM_PADDING + ICON_TEXT_SPACING)
+
+ if preview_size.x >= bottom_row_size:
+ preview_rect = Rect2(Vector2(TILE_TOP_PADDING, TILE_LEFT_PADDING), preview_size)
+ var half_offset := roundf((preview_size.x - label_size.x - MORE_ICON_SIZE - 1) / 2.0)
+ label_rect = Rect2(Vector2(TILE_TOP_PADDING + half_offset, TILE_LEFT_PADDING + preview_size.y + ICON_TEXT_SPACING), label_size - Vector2(1, 0))
+ more_button_rect = Rect2(Vector2(TILE_TOP_PADDING + label_size.x + half_offset, label_rect.position.y + 2), Vector2(MORE_ICON_SIZE, MORE_ICON_SIZE))
+ else:
+ preview_rect = Rect2(Vector2(TILE_TOP_PADDING, TILE_LEFT_PADDING) + Vector2(roundf((bottom_row_size - preview_size.x) / 2.0), 0), preview_size)
+ label_rect = Rect2(Vector2(TILE_TOP_PADDING + 1, TILE_LEFT_PADDING + preview_size.y + ICON_TEXT_SPACING), label_size - Vector2(1, 0))
+ more_button_rect = Rect2(Vector2(TILE_TOP_PADDING + label_size.x, label_rect.position.y + 2), Vector2(MORE_ICON_SIZE, MORE_ICON_SIZE))
+
+ preview_texture = DPITexture.create_from_string(State.stable_export_markup, multiplier)
+
+var tiles: Array[IconPreviewTileData] = []
+var hovered_tile_index := -1
+var selected_tile_index := -1
+var edited_tile_index := -1
+var edit_field: NumberEdit
+
+func _ready() -> void:
+ icon_preview_tiles.draw.connect(_on_preview_tiles_draw)
+ icon_preview_tiles.gui_input.connect(_on_tiles_gui_input)
+ icon_preview_tiles.mouse_exited.connect(_on_tiles_mouse_exited)
+ more_button.pressed.connect(_on_more_button_pressed)
+
+ transparent_color_swatch.color = "none"
+ transparent_color_swatch.pressed.connect(func(): color_edit.value = "#fff0")
+ black_color_swatch.color = "#000"
+ black_color_swatch.pressed.connect(func(): color_edit.value = "#000")
+ white_color_swatch.color = "#fff"
+ white_color_swatch.pressed.connect(func(): color_edit.value = "#fff")
+
+ color_edit.value_changed.connect(_update_preview_background)
+ color_edit.value = Configs.savedata.previews_background.to_html()
+
+ Configs.theme_changed.connect(sync_theming)
+ sync_theming()
+
+ add_new_preview_button.tooltip_text = Translator.translate("Add new preview")
+ add_new_preview_button.pressed.connect(_add_new_tile)
+
+ State.svg_changed.connect(sync_tiles)
+ visibility_changed.connect(
+ func() -> void:
+ if visible:
+ sync_tiles()
+ )
+
+ split_container.resized.connect(
+ func():
+ split_container.vertical = (split_container.size.y * 2.0 > split_container.size.x)
+ sync_preview_top_panel_expand_margins()
+ sync_tile_positions()
+ )
+
+ icon_preview_tiles.resized.connect(sync_tile_positions)
+ sync_tiles()
+
+
+func sync_theming() -> void:
+ preview_top_panel.add_theme_stylebox_override("panel", get_theme_stylebox("tabbar_background", "TabContainer"))
+ sync_preview_top_panel_expand_margins()
+ color = Color.TRANSPARENT
+ border_color = ThemeUtils.subtle_panel_border_color
+ title_color = ThemeUtils.basic_panel_inner_color
+
+func sync_preview_top_panel_expand_margins() -> void:
+ var stylebox := preview_top_panel.get_theme_stylebox("panel").duplicate()
+ if split_container.vertical:
+ stylebox.expand_margin_top = 8.0
+ stylebox.expand_margin_left = 0.0
+ else:
+ stylebox.expand_margin_top = 0.0
+ stylebox.expand_margin_left = 8.0
+ preview_top_panel.add_theme_stylebox_override("panel", stylebox)
+ size_label_margins.add_theme_constant_override("margin_top", -3 if split_container.vertical else 1)
+
+func sync_tiles() -> void:
+ tiles.clear()
+ for i in Configs.savedata.preview_sizes.size():
+ tiles.append(IconPreviewTileData.new(i))
+ icon_preview_tiles.queue_redraw()
+ sync_tile_positions()
+ _sync_texture()
+
+func sync_tile_positions() -> void:
+ var current_x := TILE_MARGIN
+ var current_y := TILE_MARGIN
+ var row_height := 0.0
+ var row_start_index := 0
+
+ for index in tiles.size():
+ var tile := tiles[index]
+ var tile_needed_width := tile.size.x + TILE_MARGIN * 2.0
+
+ if current_x + tile_needed_width > icon_preview_tiles.size.x and index > row_start_index:
+ # Finalize current row by centering horizontally and aligning vertically.
+ var row_width := current_x - TILE_MARGIN
+ var offset_x := roundf((icon_preview_tiles.size.x - row_width) / 2.0)
+ for i in range(row_start_index, index):
+ tiles[i].position.x += offset_x
+ tiles[i].position.y = current_y + (row_height - tiles[i].size.y) / 2.0
+
+ # Start new row.
+ current_y += row_height + TILE_MARGIN * 2.0
+ current_x = TILE_MARGIN
+ row_height = 0.0
+ row_start_index = index
+
+ # Add tile to current row.
+ tile.position.x = current_x
+ current_x += tile.size.x + TILE_MARGIN * 2.0
+ row_height = maxf(row_height, tile.size.y)
+
+ # Finalize last row.
+ if row_start_index < tiles.size():
+ var row_width := current_x - TILE_MARGIN
+ var offset_x := (icon_preview_tiles.size.x - row_width) / 2.0
+ for i in range(row_start_index, tiles.size()):
+ tiles[i].position.x += offset_x
+ tiles[i].position.y = current_y + (row_height - tiles[i].size.y) / 2.0
+
+ icon_preview_tiles.custom_minimum_size.y = current_y + row_height + TILE_MARGIN
+ icon_preview_tiles.queue_redraw()
+
+ icon_preview_tiles.buttons.clear()
+ for tile in tiles:
+ icon_preview_tiles.buttons.append(ProceduralControl.ButtonData.create_from_icon(
+ Rect2(tile.position + tile.more_button_rect.position, tile.more_button_rect.size), _show_tile_popup_under_more_button.bind(tile), more_icon))
+
+
+func _on_preview_tiles_draw() -> void:
+ var font := ThemeUtils.main_font
+ var font_size := get_theme_font_size("font_size", "Label")
+
+ for tile in tiles:
+ var stylebox: StyleBox
+ if tile.index == selected_tile_index:
+ stylebox = get_theme_stylebox("pressed", "Button")
+ elif tile.index == hovered_tile_index:
+ stylebox = get_theme_stylebox("hover", "Button")
+ else:
+ stylebox = get_theme_stylebox("normal", "Button")
+
+ stylebox.draw(icon_preview_tiles.ci, Rect2(tile.position, tile.size))
+
+ if tile.preview_texture:
+ tile.preview_texture.draw_rect(icon_preview_tiles.ci, Rect2(tile.position + tile.preview_rect.position, tile.preview_rect.size), false)
+
+ font.draw_string(icon_preview_tiles.ci, tile.position + tile.label_rect.position + Vector2(0, 14),
+ tile.label_text, HORIZONTAL_ALIGNMENT_LEFT, tile.label_rect.size.x, font_size, ThemeUtils.text_color)
+
+
+func _on_tiles_gui_input(event: InputEvent) -> void:
+ if event is InputEventMouseMotion:
+ var old_hovered_index := hovered_tile_index
+ hovered_tile_index = -1
+
+ for tile in tiles:
+ if Rect2(tile.position, tile.size).has_point(event.position):
+ hovered_tile_index = tile.index
+ break
+
+ if old_hovered_index != hovered_tile_index:
+ icon_preview_tiles.queue_redraw()
+
+ elif event is InputEventMouseButton:
+ if event.is_pressed():
+ if event.button_index in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MIDDLE]:
+ _select_tile(hovered_tile_index)
+ elif event.button_index == MOUSE_BUTTON_RIGHT:
+ if hovered_tile_index >= 0:
+ for tile in tiles:
+ if Rect2(tile.position, tile.size).has_point(event.position):
+ _show_tile_popup_at_pos(tile, event.global_position)
+ break
+ else:
+ var btn_array: Array[Button] = []
+ btn_array.append(ContextPopup.create_button(Translator.translate("Add new preview"), _add_new_tile, false, plus_icon))
+ var popup := ContextPopup.new()
+ popup.setup(btn_array, true)
+ var vp := get_viewport()
+ HandlerGUI.popup_under_pos(popup, vp.get_mouse_position(), vp)
+
+
+func _on_tiles_mouse_exited() -> void:
+ hovered_tile_index = -1
+ icon_preview_tiles.queue_redraw()
+
+func _select_tile(tile_index: int) -> void:
+ selected_tile_index = tile_index
+ size_label.text = tiles[tile_index].label_text if tile_index >= 0 else ""
+ preview_top_panel.visible = (tile_index >= 0)
+ _sync_texture()
+ icon_preview_tiles.queue_redraw()
+
+func _sync_texture() -> void:
+ if selected_tile_index >= 0:
+ texture_rect.texture = tiles[selected_tile_index].preview_texture
+
+
+func _generate_tile_popup(tile: IconPreviewTileData) -> ContextPopup:
+ var btn_array: Array[Button] = []
+ btn_array.append(ContextPopup.create_button(Translator.translate("Edit"), _edit_tile_size.bind(tile), false, edit_icon))
+ btn_array.append(ContextPopup.create_button(Translator.translate("Delete"), _delete_tile.bind(tile), false, delete_icon))
+ var popup := ContextPopup.new()
+ popup.setup(btn_array, true)
+ return popup
+
+func _show_tile_popup_at_pos(tile: IconPreviewTileData, pos: Vector2) -> void:
+ HandlerGUI.popup_under_pos(_generate_tile_popup(tile), pos, get_viewport())
+
+func _show_tile_popup_under_more_button(tile: IconPreviewTileData) -> void:
+ HandlerGUI.popup_under_rect_center(_generate_tile_popup(tile),
+ Rect2(icon_preview_tiles.global_position + tile.position + tile.more_button_rect.position, tile.more_button_rect.size), get_viewport())
+
+
+func _edit_tile_size(tile: IconPreviewTileData) -> void:
+ edited_tile_index = tile.index
+
+ edit_field = NumberEditScene.instantiate()
+ edit_field.initial_value = tile.bigger_dimension
+ edit_field.min_value = 1.0
+ edit_field.max_value = 16384.0
+ edit_field.is_float = false
+ icon_preview_tiles.add_child(edit_field)
+ edit_field.text = String.num_uint64(tile.bigger_dimension)
+ edit_field.position = icon_preview_tiles.position + tile.position + tile.label_rect.position - Vector2(3, 4)
+ edit_field.size = tile.label_rect.size
+ edit_field.add_theme_font_override("font", ThemeUtils.main_font)
+ edit_field.focus_exited.connect(edit_field.queue_free)
+ edit_field.value_changed.connect(_on_edit_field_value_changed)
+ edit_field.grab_focus()
+ edit_field.select_all()
+
+func _on_edit_field_value_changed(new_value: float) -> void:
+ var sizes := Configs.savedata.preview_sizes.duplicate()
+ sizes[edited_tile_index] = roundi(new_value)
+ Configs.savedata.preview_sizes = sizes
+ sync_tiles()
+ if edited_tile_index == selected_tile_index:
+ _select_tile(edited_tile_index)
+
+func _delete_tile(tile: IconPreviewTileData) -> void:
+ var sizes := Configs.savedata.preview_sizes.duplicate()
+ var index := sizes.find(tile.bigger_dimension)
+ if index >= 0:
+ sizes.remove_at(index)
+ Configs.savedata.preview_sizes = sizes
+ sync_tiles()
+
+func are_tiles_default() -> bool:
+ return Configs.savedata.preview_sizes == SaveData.DEFAULT_PREVIEW_SIZES
+
+func are_tiles_sorted() -> bool:
+ var sorted_array := Configs.savedata.preview_sizes.duplicate()
+ sorted_array.sort()
+ return Configs.savedata.preview_sizes == sorted_array
+
+func sort_tiles() -> void:
+ _select_tile(-1)
+ Configs.savedata.preview_sizes.sort()
+ sync_tiles()
+
+func reset_tiles() -> void:
+ _select_tile(-1)
+ Configs.savedata.preview_sizes = SaveData.DEFAULT_PREVIEW_SIZES.duplicate()
+ sync_tiles()
+
+func clear_all_tiles() -> void:
+ _select_tile(-1)
+ Configs.savedata.preview_sizes = PackedInt32Array()
+ sync_tiles()
+
+func _add_new_tile() -> void:
+ var old_icon_sizes := Configs.savedata.preview_sizes.duplicate()
+ old_icon_sizes.append(16)
+ Configs.savedata.preview_sizes = old_icon_sizes
+ sync_tiles()
+
+func _update_preview_background(new_value: String) -> void:
+ Configs.savedata.previews_background = ColorParser.text_to_color(new_value, Color.BLACK, true)
+ sync_tiles()
+ if Configs.savedata.previews_background == Color.TRANSPARENT:
+ scaled_preview_panel.remove_theme_stylebox_override("panel")
+ else:
+ var colored_sb := StyleBoxFlat.new()
+ colored_sb.bg_color = Configs.savedata.previews_background
+ scaled_preview_panel.add_theme_stylebox_override("panel", colored_sb)
+
+
+func _on_more_button_pressed() -> void:
+ var btn_array: Array[Button] = [
+ ContextPopup.create_button(Translator.translate("Reset to default"),
+ reset_tiles, are_tiles_default(), load("res://assets/icons/Reload.svg")),
+ ContextPopup.create_button(Translator.translate("Clear all"),
+ clear_all_tiles, Configs.savedata.preview_sizes.is_empty(), load("res://assets/icons/Clear.svg")),
+ ContextPopup.create_button(Translator.translate("Sort"),
+ sort_tiles, are_tiles_sorted(), load("res://assets/icons/Sort.svg")),
+ ]
+ var context_popup := ContextPopup.new()
+ context_popup.setup(btn_array, true)
+ HandlerGUI.popup_under_rect_center(context_popup, more_button.get_global_rect(), get_viewport())
diff --git a/src/ui_parts/previews.gd.uid b/src/ui_parts/previews.gd.uid
new file mode 100644
index 0000000..41bb0a8
--- /dev/null
+++ b/src/ui_parts/previews.gd.uid
@@ -0,0 +1 @@
+uid://dpn15qyr7xsds
diff --git a/src/ui_parts/previews.tscn b/src/ui_parts/previews.tscn
new file mode 100644
index 0000000..05ba15b
--- /dev/null
+++ b/src/ui_parts/previews.tscn
@@ -0,0 +1,139 @@
+[gd_scene load_steps=7 format=3 uid="uid://ck1u5onyy0cdc"]
+
+[ext_resource type="Script" uid="uid://dpn15qyr7xsds" path="res://src/ui_parts/previews.gd" id="1_uogc6"]
+[ext_resource type="Texture2D" uid="uid://eif2ioi0mw17" path="res://assets/icons/Plus.svg" id="2_pm7dr"]
+[ext_resource type="PackedScene" uid="uid://bujllg1bqlub6" path="res://src/ui_widgets/color_swatch.tscn" id="3_auodr"]
+[ext_resource type="PackedScene" uid="uid://5f8uxavn1or1" path="res://src/ui_widgets/color_edit.tscn" id="4_mkhk3"]
+[ext_resource type="Texture2D" uid="uid://ccbta5q43jobk" path="res://assets/icons/More.svg" id="5_ue2r5"]
+[ext_resource type="Script" uid="uid://bniafq6ma1iln" path="res://src/ui_widgets/ProceduralControl.gd" id="6_6v74c"]
+
+[node name="IconPreiew" type="Container"]
+offset_bottom = 169.0
+size_flags_vertical = 3
+script = ExtResource("1_uogc6")
+border_width = 2
+corner_radius_top_left = 5
+corner_radius_top_right = 5
+corner_radius_bottom_left = 5
+corner_radius_bottom_right = 5
+title_margin = 4
+panel_margin = 2
+metadata/_custom_type_script = "uid://ojo0537b6hcy"
+
+[node name="ActionContainer" type="HBoxContainer" parent="."]
+layout_mode = 2
+theme_override_constants/separation = 8
+
+[node name="AddNewPreviewButton" type="Button" parent="ActionContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 0
+size_flags_vertical = 0
+focus_mode = 0
+mouse_default_cursor_shape = 2
+theme_type_variation = &"IconButton"
+icon = ExtResource("2_pm7dr")
+
+[node name="ColorsContainer" type="HBoxContainer" parent="ActionContainer"]
+layout_mode = 2
+size_flags_horizontal = 6
+
+[node name="TransparentColorSwatch" parent="ActionContainer/ColorsContainer" instance=ExtResource("3_auodr")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 4
+
+[node name="BlackColorSwatch" parent="ActionContainer/ColorsContainer" instance=ExtResource("3_auodr")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 4
+
+[node name="WhiteColorSwatch" parent="ActionContainer/ColorsContainer" instance=ExtResource("3_auodr")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 4
+
+[node name="ColorEdit" parent="ActionContainer/ColorsContainer" instance=ExtResource("4_mkhk3")]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 4
+enable_alpha = true
+
+[node name="MoreButton" type="Button" parent="ActionContainer"]
+layout_mode = 2
+focus_mode = 0
+mouse_default_cursor_shape = 2
+theme_type_variation = &"IconButton"
+icon = ExtResource("5_ue2r5")
+
+[node name="SplitContainer" type="SplitContainer" parent="."]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 80)
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_constants/separation = 0
+split_offset = 250
+vertical = true
+
+[node name="ScrollContainer" type="ScrollContainer" parent="SplitContainer"]
+custom_minimum_size = Vector2(144, 64)
+layout_mode = 2
+horizontal_scroll_mode = 0
+vertical_scroll_mode = 4
+
+[node name="MarginContainer" type="MarginContainer" parent="SplitContainer/ScrollContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_constants/margin_left = 2
+theme_override_constants/margin_top = 2
+theme_override_constants/margin_right = 2
+theme_override_constants/margin_bottom = 2
+
+[node name="IconPreviewTiles" type="Control" parent="SplitContainer/ScrollContainer/MarginContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+script = ExtResource("6_6v74c")
+metadata/_custom_type_script = "uid://bniafq6ma1iln"
+
+[node name="PreviewTopPanel" type="PanelContainer" parent="SplitContainer"]
+visible = false
+layout_mode = 2
+
+[node name="ScaledPreview" type="VBoxContainer" parent="SplitContainer/PreviewTopPanel"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="SizeLabelMargins" type="MarginContainer" parent="SplitContainer/PreviewTopPanel/ScaledPreview"]
+unique_name_in_owner = true
+layout_mode = 2
+theme_override_constants/margin_top = -3
+theme_override_constants/margin_bottom = -2
+
+[node name="SizeLabel" type="Label" parent="SplitContainer/PreviewTopPanel/ScaledPreview/SizeLabelMargins"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 0
+
+[node name="ScaledPreviewPanel" type="PanelContainer" parent="SplitContainer/PreviewTopPanel/ScaledPreview"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_vertical = 3
+theme_type_variation = &"OutlinedPanel"
+
+[node name="ScrollContainer" type="ScrollContainer" parent="SplitContainer/PreviewTopPanel/ScaledPreview/ScaledPreviewPanel"]
+custom_minimum_size = Vector2(64, 64)
+layout_mode = 2
+
+[node name="TextureRect" type="TextureRect" parent="SplitContainer/PreviewTopPanel/ScaledPreview/ScaledPreviewPanel/ScrollContainer"]
+unique_name_in_owner = true
+texture_filter = 1
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+stretch_mode = 5
diff --git a/src/ui_parts/root_element_editor.gd b/src/ui_parts/root_element_editor.gd
index 515aa34..212f9ea 100644
--- a/src/ui_parts/root_element_editor.gd
+++ b/src/ui_parts/root_element_editor.gd
@@ -2,9 +2,8 @@ extends VBoxContainer
const NumberEdit = preload("res://src/ui_widgets/number_edit.gd")
-# So, about this editor. Width and height don't have default values, so they use NAN and
-# use NumberEdit, rather than NumberField. Viewbox is a list and it also doesn't have a
-# default value, so it uses 4 NumberEdits.
+# So, about this editor. Width and height don't have default values, so they use NAN and use NumberEdit,
+# rather than NumberField. Viewbox is a fixed size list without a default value, so it uses 4 NumberEdits.
@onready var width_button: BetterButton = %Size/Width/WidthButton
@onready var height_button: BetterButton = %Size/Height/HeightButton
@@ -77,10 +76,10 @@ func update_attributes() -> void:
func update_editable() -> void:
width_edit.set_value(State.root_element.width, false)
height_edit.set_value(State.root_element.height, false)
- viewbox_edit_x.set_value(State.root_element.viewbox.position.x, false)
- viewbox_edit_y.set_value(State.root_element.viewbox.position.y, false)
- viewbox_edit_w.set_value(State.root_element.viewbox.size.x, false)
- viewbox_edit_h.set_value(State.root_element.viewbox.size.y, false)
+ viewbox_edit_x.set_value(State.root_element.precise_viewbox[0], false)
+ viewbox_edit_y.set_value(State.root_element.precise_viewbox[1], false)
+ viewbox_edit_w.set_value(State.root_element.precise_viewbox[2], false)
+ viewbox_edit_h.set_value(State.root_element.precise_viewbox[3], false)
var is_width_valid := State.root_element.has_attribute("width")
var is_height_valid := State.root_element.has_attribute("height")
diff --git a/src/ui_parts/root_element_editor.tscn b/src/ui_parts/root_element_editor.tscn
index 7ff8c25..8b40a21 100644
--- a/src/ui_parts/root_element_editor.tscn
+++ b/src/ui_parts/root_element_editor.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://bktmk76u7dsu0"]
[ext_resource type="Script" uid="uid://beukt3a23d5ug" path="res://src/ui_parts/root_element_editor.gd" id="1_xgyg0"]
-[ext_resource type="FontFile" uid="uid://depydd16jq777" path="res://assets/fonts/FontMono.ttf" id="2_fm5sa"]
+[ext_resource type="FontVariation" uid="uid://pup5vmxl1t6m" path="res://assets/fonts/MonoFont.tres" id="2_l0alx"]
[ext_resource type="PackedScene" uid="uid://dad7fkhmsooc6" path="res://src/ui_widgets/number_edit.tscn" id="3_1gu7n"]
[ext_resource type="Script" uid="uid://ynx3s1jc6bwq" path="res://src/ui_widgets/BetterButton.gd" id="4_7r848"]
@@ -31,16 +31,16 @@ layout_mode = 2
size_flags_horizontal = 4
focus_mode = 0
theme_type_variation = &"TextButton"
-theme_override_fonts/font = ExtResource("2_fm5sa")
+theme_override_fonts/font = ExtResource("2_l0alx")
theme_override_font_sizes/font_size = 12
toggle_mode = true
+action_mode = 0
text = "width"
script = ExtResource("4_7r848")
[node name="WidthEdit" parent="CenterContainer/Edits/Size/Width" instance=ExtResource("3_1gu7n")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
-allow_lower = false
[node name="Height" type="VBoxContainer" parent="CenterContainer/Edits/Size"]
layout_mode = 2
@@ -51,16 +51,16 @@ layout_mode = 2
size_flags_horizontal = 4
focus_mode = 0
theme_type_variation = &"TextButton"
-theme_override_fonts/font = ExtResource("2_fm5sa")
+theme_override_fonts/font = ExtResource("2_l0alx")
theme_override_font_sizes/font_size = 12
toggle_mode = true
+action_mode = 0
text = "height"
script = ExtResource("4_7r848")
[node name="HeightEdit" parent="CenterContainer/Edits/Size/Height" instance=ExtResource("3_1gu7n")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
-allow_lower = false
[node name="Viewbox" type="VBoxContainer" parent="CenterContainer/Edits"]
unique_name_in_owner = true
@@ -72,9 +72,10 @@ layout_mode = 2
size_flags_horizontal = 4
focus_mode = 0
theme_type_variation = &"TextButton"
-theme_override_fonts/font = ExtResource("2_fm5sa")
+theme_override_fonts/font = ExtResource("2_l0alx")
theme_override_font_sizes/font_size = 12
toggle_mode = true
+action_mode = 0
text = "viewBox"
script = ExtResource("4_7r848")
@@ -84,17 +85,17 @@ layout_mode = 2
[node name="ViewboxEditX" parent="CenterContainer/Edits/Viewbox/Rect" instance=ExtResource("3_1gu7n")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
+min_value = inf_neg
[node name="ViewboxEditY" parent="CenterContainer/Edits/Viewbox/Rect" instance=ExtResource("3_1gu7n")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
+min_value = inf_neg
[node name="ViewboxEditW" parent="CenterContainer/Edits/Viewbox/Rect" instance=ExtResource("3_1gu7n")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
-allow_lower = false
[node name="ViewboxEditH" parent="CenterContainer/Edits/Viewbox/Rect" instance=ExtResource("3_1gu7n")]
custom_minimum_size = Vector2(48, 22)
layout_mode = 2
-allow_lower = false
diff --git a/src/ui_parts/settings_menu.gd b/src/ui_parts/settings_menu.gd
index 319b658..e3497f5 100644
--- a/src/ui_parts/settings_menu.gd
+++ b/src/ui_parts/settings_menu.gd
@@ -11,11 +11,12 @@ const SettingsContentShortcuts = preload("res://src/ui_widgets/settings_content_
@onready var back_button: Button = $VBoxContainer/PanelContainer/BackButton
@onready var preview_panel: PanelContainer = $VBoxContainer/PreviewPanel
-enum TabIndex {FORMATTING, PALETTES, SHORTCUTS, THEMING, TAB_BAR, OTHER}
+enum TabIndex {FORMATTING, OPTIMIZER, PALETTES, SHORTCUTS, THEMING, TAB_BAR, OTHER}
func get_tab_localized_name(tab_index: TabIndex) -> String:
match tab_index:
TabIndex.FORMATTING: return Translator.translate("Formatting")
+ TabIndex.OPTIMIZER: return Translator.translate("Optimizer")
TabIndex.PALETTES: return Translator.translate("Palettes")
TabIndex.SHORTCUTS: return Translator.translate("Shortcuts")
TabIndex.THEMING: return Translator.translate("Theming")
@@ -110,6 +111,12 @@ func setup_content() -> void:
Configs.savedata.export_formatter] as Array[ConfigResource], focused_tab_index)
content_container.add_child(current_content)
current_content.preview_changed.connect(set_preview)
+ TabIndex.OPTIMIZER:
+ preview_panel.hide()
+ var current_content := SettingsContentGeneric.instantiate()
+ current_content.setup([Configs.savedata.default_optimizer] as Array[ConfigResource], focused_tab_index)
+ content_container.add_child(current_content)
+ current_content.preview_changed.connect(set_preview)
TabIndex.PALETTES:
preview_panel.hide()
var current_content := SettingsContentPalettes.instantiate()
diff --git a/src/ui_parts/shortcut_panel.gd b/src/ui_parts/shortcut_panel.gd
index ffb0ef3..043387f 100644
--- a/src/ui_parts/shortcut_panel.gd
+++ b/src/ui_parts/shortcut_panel.gd
@@ -18,8 +18,7 @@ const config_icon = preload("res://assets/icons/Config.svg")
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.
+# 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 set_position_absolute(new_position: Vector2) -> void:
@@ -95,8 +94,7 @@ func update_layout() -> void:
var margin_container := MarginContainer.new()
margin_container.begin_bulk_theme_override()
- const CONST_ARR: PackedStringArray = ["margin_left", "margin_right", "margin_top",
- "margin_bottom"]
+ const CONST_ARR: PackedStringArray = ["margin_left", "margin_right", "margin_top", "margin_bottom"]
for theme_type in CONST_ARR:
margin_container.add_theme_constant_override(theme_type, 4)
margin_container.begin_bulk_theme_override()
@@ -112,6 +110,7 @@ func update_layout() -> void:
Layout.HORIZONTAL_TWO_ROWS:
buttons_container = GridContainer.new()
buttons_container.columns = ceili(SaveData.SHORTCUT_PANEL_MAX_SLOTS / 2.0)
+ buttons_container.size_flags_vertical = Control.SIZE_SHRINK_CENTER
for i in range(SaveData.SHORTCUT_PANEL_MAX_SLOTS):
var shortcut := Configs.savedata.get_shortcut_panel_slot(i)
diff --git a/src/ui_parts/shortcut_panel_config.gd b/src/ui_parts/shortcut_panel_config.gd
index 558a210..46b225d 100644
--- a/src/ui_parts/shortcut_panel_config.gd
+++ b/src/ui_parts/shortcut_panel_config.gd
@@ -1,15 +1,15 @@
extends PanelContainer
-const Dropdown = preload("res://src/ui_widgets/dropdown.gd")
+const BasicDropdown = preload("res://src/ui_widgets/dropdown_basic.gd")
const ShortcutPanel = preload("res://src/ui_parts/shortcut_panel.gd")
const clear_icon = preload("res://assets/icons/Clear.svg")
-const DropdownScene = preload("res://src/ui_widgets/dropdown.tscn")
+const BasicDropdownScene = preload("res://src/ui_widgets/dropdown_basic.tscn")
@onready var close_button: Button = $VBoxContainer/CloseButton
@onready var slot_container: VBoxContainer = %SlotContainer
-@onready var layout_dropdown: Dropdown = %LayoutDropdown
+@onready var layout_dropdown: BasicDropdown = %LayoutDropdown
func _ready() -> void:
close_button.pressed.connect(queue_free)
@@ -50,7 +50,7 @@ func update_shortcut_slots() -> void:
icon_presentation.add_child(icon)
hbox.add_child(icon_presentation)
- var dropdown := DropdownScene.instantiate()
+ var dropdown := BasicDropdownScene.instantiate()
dropdown.custom_minimum_size = Vector2(100, 28)
dropdown.size_flags_horizontal = Control.SIZE_EXPAND_FILL
dropdown.align_left = true
diff --git a/src/ui_parts/shortcut_panel_config.tscn b/src/ui_parts/shortcut_panel_config.tscn
index 28be390..29d2bac 100644
--- a/src/ui_parts/shortcut_panel_config.tscn
+++ b/src/ui_parts/shortcut_panel_config.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://cnay1l0u6a5tw"]
[ext_resource type="Script" uid="uid://cnmsf3h1qq3q6" path="res://src/ui_parts/shortcut_panel_config.gd" id="1_eg1f5"]
-[ext_resource type="PackedScene" uid="uid://dbu1lvajypafb" path="res://src/ui_widgets/dropdown.tscn" id="2_4egw5"]
+[ext_resource type="PackedScene" uid="uid://bpr5yv7pbv13g" path="res://src/ui_widgets/dropdown_basic.tscn" id="2_4egw5"]
[node name="ShortcutPanelConfig" type="PanelContainer"]
custom_minimum_size = Vector2(200, 300)
@@ -61,7 +61,6 @@ layout_mode = 2
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
-size_flags_vertical = 1
[node name="CloseButton" type="Button" parent="VBoxContainer"]
unique_name_in_owner = true
diff --git a/src/ui_parts/tab_bar.gd b/src/ui_parts/tab_bar.gd
index ddbdc88..f5d7e08 100644
--- a/src/ui_parts/tab_bar.gd
+++ b/src/ui_parts/tab_bar.gd
@@ -1,4 +1,4 @@
-extends Control
+extends ProceduralControl
const PreviewRectScene = preload("res://src/ui_widgets/preview_rect.tscn")
@@ -11,13 +11,11 @@ const DEFAULT_TAB_WIDTH = 140.0
const MIN_TAB_WIDTH = 70.0
const CLOSE_BUTTON_MARGIN = 2
const SCROLL_SPEED = 10.0
-
-var ci := get_canvas_item()
+const BUTTON_SCROLL_INTENSITY = 48.0
var current_scroll := 0.0
var scrolling_backwards := false
var scrolling_forwards := false
-var active_controls: Array[Control] = []
# Processing is enabled only when dragging.
var proposed_drop_idx := -1:
@@ -27,6 +25,7 @@ var proposed_drop_idx := -1:
queue_redraw()
func _ready() -> void:
+ super()
var shortcuts := ShortcutsRegistration.new()
shortcuts.add_shortcut("close_tab", func() -> void: FileUtils.close_tabs(Configs.savedata.get_active_tab_index()),
ShortcutsRegistration.Behavior.PASS_THROUGH_POPUPS)
@@ -49,19 +48,54 @@ func _ready() -> void:
ShortcutsRegistration.Behavior.PASS_THROUGH_POPUPS)
HandlerGUI.register_shortcuts(self, shortcuts)
- Configs.active_tab_changed.connect(activate)
- Configs.tabs_changed.connect(activate)
+ Configs.active_tab_changed.connect(sync_buttons)
+ Configs.tabs_changed.connect(sync_buttons)
Configs.active_tab_changed.connect(scroll_to_active)
Configs.tabs_changed.connect(scroll_to_active)
resized.connect(scroll_to_active)
Configs.language_changed.connect(queue_redraw)
- mouse_entered.connect(_on_mouse_entered)
- mouse_exited.connect(_on_mouse_exited)
+ resized.connect(sync_buttons)
set_process(false)
+
+func sync_buttons() -> void:
+ buttons.clear()
+
+ var close_rect := get_close_button_rect()
+ if close_rect.has_area():
+ var new_button := ButtonData.create_from_icon(close_rect, func() -> void: FileUtils.close_tabs(Configs.savedata.get_active_tab_index()), close_icon)
+ new_button.use_arrow_cursor = true
+ new_button.theme_color_overrides = {
+ "icon_normal_color": ThemeUtils.tinted_contrast_color,
+ "icon_pressed_color": ThemeUtils.highlighted_text_color,
+ }
+ var hover_sb: StyleBoxFlat = get_theme_stylebox("hover", "FlatButton").duplicate()
+ hover_sb.bg_color = ThemeUtils.strong_hover_overlay_color
+ new_button.theme_stylebox_overrides["hover"] = hover_sb
+ var pressed_sb: StyleBoxFlat = get_theme_stylebox("pressed", "FlatButton").duplicate()
+ pressed_sb.bg_color = ThemeUtils.hover_pressed_overlay_color
+ new_button.theme_stylebox_overrides["pressed"] = pressed_sb
+ buttons.append(new_button)
+
+ var add_rect := get_add_button_rect()
+ if add_rect.has_area():
+ var new_button := ButtonData.create_from_icon(add_rect, Configs.savedata.add_empty_tab, plus_icon)
+ new_button.use_arrow_cursor = true
+ new_button.theme_color_overrides = {
+ "icon_normal_color": ThemeUtils.tinted_contrast_color,
+ "icon_pressed_color": ThemeUtils.highlighted_text_color,
+ }
+ const CONST_ARR: PackedStringArray = ["hover", "pressed"]
+ for stylebox_theme in CONST_ARR:
+ var sb: StyleBoxFlat = get_theme_stylebox(stylebox_theme, "FlatButton").duplicate()
+ sb.corner_radius_bottom_left = 0
+ sb.corner_radius_bottom_right = 0
+ new_button.theme_stylebox_overrides[stylebox_theme] = sb
+ buttons.append(new_button)
+ queue_redraw()
+
func _draw() -> void:
get_theme_stylebox("tabbar_background", "TabContainer").draw(ci, get_rect())
-
var mouse_pos := get_local_mouse_position()
for tab_index in Configs.savedata.get_tab_count():
@@ -82,15 +116,9 @@ func _draw() -> void:
if text_line_width > 0:
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.add_string(current_tab_name, ThemeUtils.main_font, 13)
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, ThemeUtils.tinted_contrast_color)
else:
var is_hovered := rect.has_point(mouse_pos)
get_theme_stylebox("tab_hovered" if is_hovered else "tab_unselected", "TabContainer").draw(ci, rect)
@@ -101,13 +129,10 @@ 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.add_string(current_tab_name, ThemeUtils.main_font, 13)
text_line.width = text_line_width
text_line.draw(ci, rect.position + Vector2(4, 3), text_color)
- var add_button_rect := get_add_button_rect()
- plus_icon.draw(ci, Vector2(add_button_rect.position + (add_button_rect.size - plus_icon.get_size()) / 2.0), ThemeUtils.tinted_contrast_color)
-
var scroll_backwards_rect := get_scroll_backwards_area_rect()
if scroll_backwards_rect.has_area():
var scroll_backwards_icon_size := scroll_backwards_icon.get_size()
@@ -138,6 +163,8 @@ func _draw() -> void:
draw_texture_rect(scroll_forwards_icon, Rect2(scroll_forwards_rect.position + (scroll_forwards_rect.size - scroll_forwards_icon_size) / 2.0,
scroll_forwards_icon_size), false, icon_modulate)
+ super()
+
if proposed_drop_idx != -1:
var prev_tab_rect := get_tab_rect(proposed_drop_idx - 1)
var x_pos: float
@@ -149,6 +176,7 @@ func _draw() -> void:
func _gui_input(event: InputEvent) -> void:
+ super(event)
if not event is InputEventMouse:
return
@@ -166,8 +194,8 @@ func _gui_input(event: InputEvent) -> void:
scroll_to_active()
else:
# Give time for deferred callbacks that might change the active SVG.
- # For example, the code editor might get unfocused by you clicking on
- # a tab, changing the SVG, so this should be deferred.
+ # For example, the code editor might get unfocused by clicking on a tab,
+ # changing the SVG, so this should be deferred.
Configs.savedata.set_active_tab_index.call_deferred(hovered_idx)
if event.button_index == MOUSE_BUTTON_LEFT:
var scroll_backwards_area_rect := get_scroll_backwards_area_rect()
@@ -217,7 +245,7 @@ func _gui_input(event: InputEvent) -> void:
btn_arr.append(ContextPopup.create_shortcut_button("open_externally", file_absent))
btn_arr.append(ContextPopup.create_shortcut_button("open_in_folder", file_absent))
var tab_popup := ContextPopup.new()
- tab_popup.setup(btn_arr, true, -1, -1, PackedInt32Array([6]))
+ tab_popup.setup(btn_arr, true, -1, PackedInt32Array([6]))
if hovered_idx != -1:
var tab_global_rect := get_tab_rect(hovered_idx)
@@ -236,35 +264,23 @@ func _gui_input(event: InputEvent) -> void:
scrolling_forwards = false
set_process(false)
+
# Autoscroll when the dragged tab is hovered beyond the tabs area.
-func _process(_delta: float) -> void:
+func _process(delta: float) -> void:
var mouse_pos := get_local_mouse_position()
var scroll_forwards_area_rect := get_scroll_forwards_area_rect()
if ((scrolling_forwards and scroll_forwards_area_rect.has_point(mouse_pos)) or\
(mouse_pos.x > size.x - size.y - scroll_forwards_area_rect.size.x)) and scroll_forwards_area_rect.has_area():
- scroll_forwards()
+ scroll_forwards(delta * BUTTON_SCROLL_INTENSITY)
return
var scroll_backwards_area_rect := get_scroll_backwards_area_rect()
if ((scrolling_backwards and scroll_backwards_area_rect.has_point(mouse_pos)) or\
(mouse_pos.x < scroll_backwards_area_rect.size.x)) and scroll_backwards_area_rect.has_area():
- scroll_backwards()
+ scroll_backwards(delta * BUTTON_SCROLL_INTENSITY)
return
-func _on_mouse_entered() -> void:
- activate()
-
-func _on_mouse_exited() -> void:
- cleanup()
-
-func cleanup() -> void:
- for control in active_controls:
- control.queue_free()
- active_controls = []
- queue_redraw()
-
-
func scroll_backwards(factor := 1.0) -> void:
set_scroll(current_scroll - SCROLL_SPEED * factor)
@@ -283,8 +299,7 @@ func set_scroll(new_value: float) -> void:
new_value = clampf(new_value, 0, get_scroll_limit())
if current_scroll != new_value:
current_scroll = new_value
- queue_redraw()
- activate()
+ sync_buttons()
func get_tab_rect(idx: int) -> Rect2:
@@ -352,45 +367,11 @@ func get_hovered_index() -> int:
return -1
-func activate() -> void:
- cleanup()
-
- var close_rect := get_close_button_rect()
- if close_rect.has_area():
- var close_button := Button.new()
- close_button.theme_type_variation = "FlatButton"
- close_button.focus_mode = Control.FOCUS_NONE
- close_button.position = close_rect.position
- close_button.size = close_rect.size
- close_button.mouse_filter = Control.MOUSE_FILTER_PASS
- add_child(close_button)
- active_controls.append(close_button)
- close_button.pressed.connect(func() -> void:
- FileUtils.close_tabs(Configs.savedata.get_active_tab_index())
- )
-
- var add_rect := get_add_button_rect()
- var add_button := Button.new()
- add_button.theme_type_variation = "FlatButton"
- add_button.begin_bulk_theme_override()
- const CONST_ARR: PackedStringArray = ["hover", "pressed"]
- for stylebox_theme in CONST_ARR:
- var sb: StyleBoxFlat = add_button.get_theme_stylebox(stylebox_theme, "FlatButton").duplicate()
- sb.corner_radius_bottom_left = 0
- sb.corner_radius_bottom_right = 0
- add_button.add_theme_stylebox_override(stylebox_theme, sb)
- add_button.end_bulk_theme_override()
- add_button.focus_mode = Control.FOCUS_NONE
- add_button.position = add_rect.position
- add_button.size = add_rect.size
- add_button.mouse_filter = Control.MOUSE_FILTER_PASS
- add_button.tooltip_text = Translator.translate("Create a new tab")
- add_child(add_button)
- active_controls.append(add_button)
- add_button.pressed.connect(Configs.savedata.add_empty_tab)
-
-
func _get_tooltip(at_position: Vector2) -> String:
+ var add_rect := get_add_button_rect()
+ if add_rect.has_point(at_position):
+ return Translator.translate("Create a new tab")
+
var hovered_tab_idx := get_tab_index_at(at_position)
if hovered_tab_idx == -1:
var backwards_area_rect := get_scroll_backwards_area_rect()
@@ -416,8 +397,13 @@ func _make_custom_tooltip(for_text: String) -> Object:
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)
- label.add_theme_font_size_override("font_size", 12)
+ if is_saved:
+ label.begin_bulk_theme_override()
+ label.add_theme_font_override("font", ThemeUtils.mono_font)
+ label.add_theme_font_size_override("font_size", 12)
+ label.end_bulk_theme_override()
+ else:
+ label.add_theme_font_override("font", ThemeUtils.main_font)
label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
label.text = path if is_saved else Translator.translate("This SVG is not bound to a file location yet.")
Utils.set_max_text_width(label, 192.0, 4.0)
diff --git a/src/ui_parts/top_app_bar.gd b/src/ui_parts/top_app_bar.gd
index e8ca637..dd2e092 100644
--- a/src/ui_parts/top_app_bar.gd
+++ b/src/ui_parts/top_app_bar.gd
@@ -42,32 +42,33 @@ func sync_theming() -> void:
update_size_button_colors()
func _on_size_button_pressed() -> void:
- var btn_array: Array[Button] = [
- ContextPopup.create_shortcut_button("optimize")]
+ var btn_array: Array[Button] = [ContextPopup.create_shortcut_button("optimize")]
var context_popup := ContextPopup.new()
context_popup.setup(btn_array, true)
HandlerGUI.popup_under_rect_center(context_popup, size_button.get_global_rect(), get_viewport())
func _on_more_options_pressed() -> void:
- var can_show_savedata_folder := DisplayServer.has_feature(
- DisplayServer.FEATURE_NATIVE_DIALOG_FILE_EXTRA)
var buttons_arr: Array[Button] = []
+ var separator_indices := PackedInt32Array()
+
buttons_arr.append(ContextPopup.create_shortcut_button("check_updates"))
- if can_show_savedata_folder:
- buttons_arr.append(ContextPopup.create_button(Translator.translate(
- "View savedata"), open_savedata_folder , false,
- load("res://assets/icons/OpenFolder.svg")))
+ if DisplayServer.has_feature(DisplayServer.FEATURE_NATIVE_DIALOG_FILE_EXTRA):
+ buttons_arr.append(ContextPopup.create_button(Translator.translate("View savedata"),
+ open_savedata_folder, false, load("res://assets/icons/OpenFolder.svg")))
+
+ separator_indices.append(buttons_arr.size())
var about_btn := ContextPopup.create_shortcut_button("about_info", false, "", load("res://assets/logos/icon.svg"), true)
buttons_arr.append(about_btn)
+
+ separator_indices.append(buttons_arr.size())
+
buttons_arr.append(ContextPopup.create_shortcut_button("about_repo"))
- var separator_indices := PackedInt32Array([1, 3])
- if can_show_savedata_folder:
- separator_indices = PackedInt32Array([2, 4])
+ buttons_arr.append(ContextPopup.create_shortcut_button("about_website"))
var more_popup := ContextPopup.new()
- more_popup.setup(buttons_arr, true, -1, -1, separator_indices)
+ more_popup.setup(buttons_arr, true, -1, separator_indices)
HandlerGUI.popup_under_rect_center(more_popup, more_options.get_global_rect(), get_viewport())
@@ -79,7 +80,7 @@ func update_size_button() -> void:
var svg_text_size := State.get_export_text().length()
size_button.text = String.humanize_size(svg_text_size)
size_button.tooltip_text = String.num_uint64(svg_text_size) + " B"
- if State.root_element.optimize(true):
+ if State.root_element.optimize(Configs.savedata.default_optimizer, true):
size_button.disabled = false
size_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
update_size_button_colors()
diff --git a/src/ui_parts/top_app_bar.tscn b/src/ui_parts/top_app_bar.tscn
index ecdb03b..c23b2ff 100644
--- a/src/ui_parts/top_app_bar.tscn
+++ b/src/ui_parts/top_app_bar.tscn
@@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://ckkkgof1hcbld" path="res://assets/icons/Gear.svg" id="3_mw1j6"]
[ext_resource type="Script" uid="uid://ynx3s1jc6bwq" path="res://src/ui_widgets/BetterButton.gd" id="4_1c622"]
[ext_resource type="Texture2D" uid="uid://b6mqp088ef65" path="res://assets/icons/Layouts.svg" id="5_wucs8"]
-[ext_resource type="FontFile" uid="uid://dc0w4sx0h0fui" path="res://assets/fonts/FontBold.ttf" id="6_8jjfh"]
+[ext_resource type="FontVariation" uid="uid://o6egawwljhgy" path="res://assets/fonts/BoldFont.tres" id="6_8jjfh"]
[ext_resource type="Texture2D" uid="uid://bnl24bflj771n" path="res://assets/icons/CreateTab.svg" id="7_1c622"]
[ext_resource type="Script" uid="uid://41g64ussxcbn" path="res://src/ui_parts/current_file_button.gd" id="7_irbyw"]
[ext_resource type="Texture2D" uid="uid://6ymbl3jqersp" path="res://assets/icons/Import.svg" id="8_qg4on"]
diff --git a/src/ui_widgets/BetterLineEdit.gd b/src/ui_widgets/BetterLineEdit.gd
index b840559..b3774f5 100644
--- a/src/ui_widgets/BetterLineEdit.gd
+++ b/src/ui_widgets/BetterLineEdit.gd
@@ -36,7 +36,6 @@ func sync_theming() -> void:
var first_click := false
var text_before_focus := ""
-var popup_level := -1 # Set when focused, as it can't be focused unless it's top level.
func _on_base_class_focus_entered() -> void:
# Hack to check if focus entered was from a mouse click.
@@ -45,7 +44,6 @@ func _on_base_class_focus_entered() -> void:
else:
select_all()
text_before_focus = text
- popup_level = HandlerGUI.popup_stack.size()
func _on_base_class_focus_exited() -> void:
first_click = false
@@ -76,9 +74,8 @@ func _input(event: InputEvent) -> void:
if not has_focus():
return
- if event is InputEventMouseButton and (event.button_index in [MOUSE_BUTTON_LEFT,
- MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MIDDLE]):
- if event.is_pressed() and not get_global_rect().has_point(event.position) and popup_level == HandlerGUI.popup_stack.size():
+ if event is InputEventMouseButton and (event.button_index in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MIDDLE]):
+ if event.is_pressed() and not get_global_rect().has_point(event.position) and HandlerGUI.is_node_on_top_menu_or_popup(self):
release_focus()
elif event.is_released() and first_click and not has_selection():
first_click = false
@@ -88,6 +85,24 @@ func _input(event: InputEvent) -> void:
select_all()
func _gui_input(event: InputEvent) -> void:
+ if event.is_action_pressed("evaluate"):
+ var numstring_evaluation := NumstringParser.evaluate(get_selected_text() if has_selection() else text)
+ if not is_nan(numstring_evaluation):
+ if has_selection():
+ var selection_start := get_selection_from_column()
+ var caret_column_was_at_start := (selection_start == caret_column)
+ var result := Utils.num_simple(numstring_evaluation, Utils.MAX_NUMERIC_PRECISION)
+ var new_selection_end := selection_start + result.length()
+
+ text = text.left(selection_start) + result + text.right(-get_selection_to_column())
+ select(selection_start, new_selection_end)
+ caret_column = selection_start if caret_column_was_at_start else new_selection_end
+ else:
+ text = Utils.num_simple(numstring_evaluation, Utils.MAX_NUMERIC_PRECISION)
+ caret_column = text.length()
+ accept_event()
+ return
+
if event.is_action_pressed("select_all"):
menu_option(MENU_SELECT_ALL)
accept_event()
@@ -105,25 +120,34 @@ func _gui_input(event: InputEvent) -> void:
elif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed():
grab_focus()
var btn_arr: Array[Button] = []
- var separator_arr: Array[int] = []
+ var separator_arr := PackedInt32Array()
var is_text_empty := text.is_empty()
if editable:
+ var text_to_evaluate := get_selected_text() if has_selection() else text
+ var selection_evaluation := NumstringParser.evaluate(text_to_evaluate)
+ if not is_nan(selection_evaluation) and Utils.num_simple(selection_evaluation, Utils.MAX_NUMERIC_PRECISION) != text_to_evaluate:
+ btn_arr.append(ContextPopup.create_shortcut_button("evaluate"))
+
+ if not btn_arr.is_empty():
+ separator_arr.append(btn_arr.size())
+
btn_arr.append(ContextPopup.create_shortcut_button("ui_undo", not has_undo()))
btn_arr.append(ContextPopup.create_shortcut_button("ui_redo", not has_redo()))
if DisplayServer.has_feature(DisplayServer.FEATURE_CLIPBOARD):
- separator_arr = [2]
+ separator_arr.append(btn_arr.size())
btn_arr.append(ContextPopup.create_shortcut_button("ui_cut", is_text_empty))
btn_arr.append(ContextPopup.create_shortcut_button("ui_copy", is_text_empty))
- btn_arr.append(ContextPopup.create_shortcut_button("ui_paste",
- not Utils.has_clipboard_web_safe()))
+ btn_arr.append(ContextPopup.create_shortcut_button("ui_paste", not Utils.has_clipboard_web_safe()))
+ btn_arr.append(ContextPopup.create_shortcut_button("select_all", is_text_empty))
else:
btn_arr.append(ContextPopup.create_shortcut_button("ui_copy", is_text_empty))
+ btn_arr.append(ContextPopup.create_shortcut_button("select_all", is_text_empty))
var vp := get_viewport()
var context_popup := ContextPopup.new()
- context_popup.setup(btn_arr, true, -1, -1, separator_arr)
+ context_popup.setup(btn_arr, true, -1, separator_arr)
HandlerGUI.popup_under_pos(context_popup, vp.get_mouse_position(), vp)
accept_event()
# Wow, no way to find out the column of a given click? Okay...
diff --git a/src/ui_widgets/BetterTextEdit.gd b/src/ui_widgets/BetterTextEdit.gd
index 16bdbb8..afd4a1d 100644
--- a/src/ui_widgets/BetterTextEdit.gd
+++ b/src/ui_widgets/BetterTextEdit.gd
@@ -51,6 +51,7 @@ func recalibrate_line_gutter() -> void:
_line_gutter_needed_space = int(max_digits * get_theme_font("font").get_char_size(69, get_theme_font_size("font_size")).x) + 12
set_gutter_width(0, _line_gutter_needed_space)
+# TODO Add RID get_canvas_item() as a first element when #108369 merged.
func _line_number_draw_callback(line: int, _gutter: int, region: Rect2) -> void:
if not Rect2(Vector2.ZERO, size).intersects(region):
return
@@ -154,10 +155,38 @@ func _draw() -> void:
func _input(event: InputEvent) -> void:
if (has_focus() and event is InputEventMouseButton and (event.button_index in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MIDDLE]) and\
- event.is_pressed() and not get_global_rect().has_point(event.position) and HandlerGUI.popup_stack.is_empty()):
+ event.is_pressed() and not get_global_rect().has_point(event.position) and HandlerGUI.is_node_on_top_menu_or_popup(self)):
release_focus()
func _gui_input(event: InputEvent) -> void:
+ if event.is_action_pressed("evaluate"):
+ var numstring_evaluation := NumstringParser.evaluate(get_selected_text() if has_selection() else text)
+ if not is_nan(numstring_evaluation):
+ if has_selection():
+ var selection_start_line := get_selection_from_line()
+ var selection_start_column := get_selection_from_column()
+ var selection_end_column := get_selection_to_column()
+ var caret_column_was_at_start := (selection_start_column == get_selection_origin_column() and selection_start_line == get_selection_origin_line())
+
+ var result := Utils.num_simple(numstring_evaluation, Utils.MAX_NUMERIC_PRECISION)
+ var new_selection_end := selection_start_column + result.length()
+
+ var line_text := get_line(selection_start_line)
+ begin_complex_operation()
+ delete_selection()
+ set_line(selection_start_line, line_text.left(selection_start_column) + result + line_text.right(-selection_end_column))
+ end_complex_operation()
+ if caret_column_was_at_start:
+ select(selection_start_line, selection_start_column, selection_start_line, new_selection_end)
+ else:
+ select(selection_start_line, new_selection_end, selection_start_line, selection_start_column)
+ else:
+ text = Utils.num_simple(numstring_evaluation, Utils.MAX_NUMERIC_PRECISION)
+ set_caret_line(0)
+ set_caret_column(get_line(0).length())
+ accept_event()
+ return
+
if event.is_action_pressed("select_all"):
select_all()
accept_event()
@@ -165,42 +194,51 @@ func _gui_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
release_focus()
+ accept_event()
return
mouse_filter = Utils.mouse_filter_pass_non_drag_events(event)
if event is InputEventMouseMotion and event.button_mask == 0:
queue_redraw()
- elif event is InputEventMouseButton:
- if event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed():
- grab_focus()
- var btn_arr: Array[Button] = []
- var separator_arr := PackedInt32Array()
+ elif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed():
+ grab_focus()
+ var btn_arr: Array[Button] = []
+ var separator_arr := PackedInt32Array()
+
+ var is_text_empty := text.is_empty()
+
+ if editable:
+ var text_to_evaluate := get_selected_text() if has_selection() else text
+ var selection_evaluation := NumstringParser.evaluate(text_to_evaluate)
+ if not is_nan(selection_evaluation) and Utils.num_simple(selection_evaluation, Utils.MAX_NUMERIC_PRECISION) != text_to_evaluate:
+ btn_arr.append(ContextPopup.create_shortcut_button("evaluate"))
- var is_text_empty := text.is_empty()
+ if not btn_arr.is_empty():
+ separator_arr.append(btn_arr.size())
- if editable:
- btn_arr.append(ContextPopup.create_shortcut_button("ui_undo", not has_undo()))
- btn_arr.append(ContextPopup.create_shortcut_button("ui_redo", not has_redo()))
- if DisplayServer.has_feature(DisplayServer.FEATURE_CLIPBOARD):
- separator_arr = PackedInt32Array([2])
- btn_arr.append(ContextPopup.create_shortcut_button("ui_cut", is_text_empty))
- btn_arr.append(ContextPopup.create_shortcut_button("ui_copy", is_text_empty))
- btn_arr.append(ContextPopup.create_shortcut_button("ui_paste",
- not Utils.has_clipboard_web_safe()))
- else:
+ btn_arr.append(ContextPopup.create_shortcut_button("ui_undo", not has_undo()))
+ btn_arr.append(ContextPopup.create_shortcut_button("ui_redo", not has_redo()))
+ if DisplayServer.has_feature(DisplayServer.FEATURE_CLIPBOARD):
+ separator_arr.append(btn_arr.size())
+ btn_arr.append(ContextPopup.create_shortcut_button("ui_cut", is_text_empty))
btn_arr.append(ContextPopup.create_shortcut_button("ui_copy", is_text_empty))
-
- var context_popup := ContextPopup.new()
- context_popup.setup(btn_arr, true, -1, -1, separator_arr)
- var vp := get_viewport()
- HandlerGUI.popup_under_pos(context_popup, vp.get_mouse_position(), vp)
- accept_event()
- var click_pos := get_line_column_at_pos(event.position)
- if get_selection_at_line_column(click_pos.y, click_pos.x) == -1:
- deselect()
- set_caret_line(click_pos.y, false)
- set_caret_column(click_pos.x, false)
+ btn_arr.append(ContextPopup.create_shortcut_button("ui_paste", not Utils.has_clipboard_web_safe()))
+ btn_arr.append(ContextPopup.create_shortcut_button("select_all", is_text_empty))
+ else:
+ btn_arr.append(ContextPopup.create_shortcut_button("ui_copy", is_text_empty))
+ btn_arr.append(ContextPopup.create_shortcut_button("select_all", is_text_empty))
+
+ var context_popup := ContextPopup.new()
+ context_popup.setup(btn_arr, true, -1, separator_arr)
+ var vp := get_viewport()
+ HandlerGUI.popup_under_pos(context_popup, vp.get_mouse_position(), vp)
+ accept_event()
+ var click_pos := get_line_column_at_pos(event.position)
+ if get_selection_at_line_column(click_pos.y, click_pos.x) == -1:
+ deselect()
+ set_caret_line(click_pos.y, false)
+ set_caret_column(click_pos.x, false)
else:
# Set these inputs as handled, so the default UndoRedo doesn't eat them.
if ShortcutUtils.is_action_pressed(event, "ui_undo"):
diff --git a/src/ui_widgets/Canvas.gd b/src/ui_widgets/Canvas.gd
index bb414c1..afc839a 100644
--- a/src/ui_widgets/Canvas.gd
+++ b/src/ui_widgets/Canvas.gd
@@ -63,6 +63,7 @@ signal camera_center_changed
var camera_zoom := -1.0:
set(new_value):
+ new_value = clampf(new_value, MIN_ZOOM, MAX_ZOOM)
if camera_zoom != new_value:
camera_zoom = new_value
checkerboard.material.set_shader_parameter("uv_scale", nearest_po2(int(camera_zoom * 32.0)) / 32.0)
@@ -154,8 +155,7 @@ func center_frame() -> void:
var available_size := size * ZOOM_RESET_BUFFER
var ratio := available_size / root_element.get_size()
if ratio.is_finite():
- var new_zoom := nearest_po2(ceili(minf(ratio.x, ratio.y) * 32.0)) / 64.0
- camera_zoom = new_zoom
+ camera_zoom = nearest_po2(ceili(minf(ratio.x, ratio.y) * 32.0)) / 64.0
else:
camera_zoom = 1.0
@@ -224,77 +224,60 @@ func update_show_grid() -> void:
RenderingServer.canvas_item_set_visible(grid_numbers_ci, show_grid)
queue_redraw()
-# Don't ask me to explain this.
func _draw() -> void:
RenderingServer.canvas_item_clear(grid_ci)
RenderingServer.canvas_item_clear(grid_numbers_ci)
- var snapped_pos := get_camera_position()
var axis_line_color := Color(Configs.savedata.grid_color, 0.75)
var major_grid_color := Color(Configs.savedata.grid_color, 0.35)
var minor_grid_color := Color(Configs.savedata.grid_color, 0.15)
- var grid_size := size / camera_zoom
- RenderingServer.canvas_item_add_line(grid_ci, Vector2(-snapped_pos.x * camera_zoom, 0),
- Vector2(-snapped_pos.x * camera_zoom, grid_size.y * camera_zoom), axis_line_color)
- RenderingServer.canvas_item_add_line(grid_ci, Vector2(0, -snapped_pos.y * camera_zoom),
- Vector2(grid_size.x * camera_zoom, -snapped_pos.y * camera_zoom), axis_line_color)
-
var major_points := PackedVector2Array()
var minor_points := PackedVector2Array()
- var draw_minor_lines := (camera_zoom >= 8.0)
- var mark_pixel_lines := (camera_zoom >= 128.0)
+ var snapped_pos := get_camera_position()
+ var grid_size := size / camera_zoom
+ var mark_pixel_lines := (camera_zoom > 127.999)
var rate := nearest_po2(roundi(maxf(128.0 / (TICKS_INTERVAL * camera_zoom), 2.0))) / 2
- var i := fmod(-snapped_pos.x, 1.0)
- var major_line_h_offset := fposmod(-snapped_pos.x, TICK_DISTANCE)
+ # Draw axis lines.
+ RenderingServer.canvas_item_add_line(grid_ci, Vector2(-snapped_pos.x * camera_zoom, 0),
+ Vector2(-snapped_pos.x, grid_size.y) * camera_zoom, axis_line_color)
+ RenderingServer.canvas_item_add_line(grid_ci, Vector2(0, -snapped_pos.y * camera_zoom),
+ Vector2(grid_size.x, -snapped_pos.y) * camera_zoom, axis_line_color)
+
+ var i := fmod(-snapped_pos.x, rate)
# Horizontal offset.
while i <= grid_size.x:
- if major_line_h_offset != fposmod(i, TICK_DISTANCE):
- if draw_minor_lines:
- minor_points.append(Vector2(i * camera_zoom, 0))
- minor_points.append(Vector2(i * camera_zoom, grid_size.y * camera_zoom))
- if mark_pixel_lines:
- ThemeUtils.regular_font.draw_string(grid_numbers_ci,
- Vector2(i * camera_zoom + 4, 14), String.num_int64(floori(i + snapped_pos.x)),
- HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
+ var coord := snappedi(i + snapped_pos.x, rate)
+ if coord % (rate * TICKS_INTERVAL) == 0:
+ major_points.append(Vector2(i * camera_zoom, 0))
+ major_points.append(Vector2(i, grid_size.y) * camera_zoom)
+ ThemeUtils.main_font.draw_string(grid_numbers_ci, Vector2(i * camera_zoom + 4, 14),
+ String.num_int64(coord), HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
else:
- var coord := snappedi(i + snapped_pos.x, TICKS_INTERVAL)
- if int(coord / TICK_DISTANCE) % rate == 0:
- major_points.append(Vector2(i * camera_zoom, 0))
- major_points.append(Vector2(i * camera_zoom, grid_size.y * camera_zoom))
- ThemeUtils.regular_font.draw_string(grid_numbers_ci,
- Vector2(i * camera_zoom + 4, 14), String.num_int64(coord),
- HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
- elif coord % rate == 0:
- minor_points.append(Vector2(i * camera_zoom, 0))
- minor_points.append(Vector2(i * camera_zoom, grid_size.y * camera_zoom))
- i += 1.0
+ minor_points.append(Vector2(i * camera_zoom, 0))
+ minor_points.append(Vector2(i, grid_size.y) * camera_zoom)
+ if mark_pixel_lines:
+ ThemeUtils.main_font.draw_string(grid_numbers_ci, Vector2(i * camera_zoom + 4, 14),
+ String.num_int64(coord), HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
+ i += rate
- i = fmod(-snapped_pos.y, 1.0)
- var major_line_v_offset := fposmod(-snapped_pos.y, TICK_DISTANCE)
+ i = fmod(-snapped_pos.y, rate)
# Vertical offset.
- while i < grid_size.y:
- if major_line_v_offset != fposmod(i, TICK_DISTANCE):
- if draw_minor_lines:
- minor_points.append(Vector2(0, i * camera_zoom))
- minor_points.append(Vector2(grid_size.x * camera_zoom, i * camera_zoom))
- if mark_pixel_lines:
- ThemeUtils.regular_font.draw_string(grid_numbers_ci,
- Vector2(4, i * camera_zoom + 14), String.num_int64(floori(i + snapped_pos.y)),
- HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
+ while i <= grid_size.y:
+ var coord := snappedi(i + snapped_pos.y, rate)
+ if coord % (rate * TICKS_INTERVAL) == 0:
+ major_points.append(Vector2(0, i * camera_zoom))
+ major_points.append(Vector2(grid_size.x, i) * camera_zoom)
+ ThemeUtils.main_font.draw_string(grid_numbers_ci, Vector2(4, i * camera_zoom + 14),
+ String.num_int64(coord), HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
else:
- var coord := snappedi(i + snapped_pos.y, TICKS_INTERVAL)
- if int(coord / TICK_DISTANCE) % rate == 0:
- major_points.append(Vector2(0, i * camera_zoom))
- major_points.append(Vector2(grid_size.x * camera_zoom, i * camera_zoom))
- ThemeUtils.regular_font.draw_string(grid_numbers_ci,
- Vector2(4, i * camera_zoom + 14), String.num_int64(coord),
- HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
- elif coord % rate == 0:
- minor_points.append(Vector2(0, i * camera_zoom))
- minor_points.append(Vector2(grid_size.x * camera_zoom, i * camera_zoom))
- i += 1.0
+ minor_points.append(Vector2(0, i * camera_zoom))
+ minor_points.append(Vector2(grid_size.x, i) * camera_zoom)
+ if mark_pixel_lines:
+ ThemeUtils.main_font.draw_string(grid_numbers_ci, Vector2(4, i * camera_zoom + 14),
+ String.num_int64(coord), HORIZONTAL_ALIGNMENT_LEFT, -1, 14, axis_line_color)
+ i += rate
if not major_points.is_empty():
var pca := PackedColorArray()
@@ -317,7 +300,7 @@ var limit_bottom_right := Vector2.ZERO
func set_zoom(new_zoom: float, offset := Vector2(0.5, 0.5)) -> void:
- camera_zoom = clampf(new_zoom, MIN_ZOOM, MAX_ZOOM)
+ camera_zoom = new_zoom
adjust_view(offset)
# Top left corner.
diff --git a/src/ui_widgets/ContextPopup.gd b/src/ui_widgets/ContextPopup.gd
index 8871b14..1135134 100644
--- a/src/ui_widgets/ContextPopup.gd
+++ b/src/ui_widgets/ContextPopup.gd
@@ -20,13 +20,11 @@ static func create_shortcut_button(action: String, disabled := false, custom_tex
var btn := create_button(custom_text, HandlerGUI.throw_action_event.bind(action),
disabled, custom_icon, no_modulation, ShortcutUtils.get_action_showcase_text(action))
- var shortcut_events := ShortcutUtils.get_action_all_valid_shortcuts(action)
- if not shortcut_events.is_empty():
- var shortcut_obj := Shortcut.new()
- shortcut_obj.events = shortcut_events
- btn.shortcut = shortcut_obj
- btn.shortcut_in_tooltip = false
- btn.shortcut_feedback = false
+ if not ShortcutUtils.get_action_all_valid_shortcuts(action).is_empty():
+ var shortcuts := ShortcutsRegistration.new()
+ shortcuts.add_shortcut(action, btn.pressed.emit)
+ HandlerGUI.register_shortcuts(btn, shortcuts)
+
return btn
static func create_shortcut_button_without_icon(action: String, disabled := false, custom_text := "") -> Button:
@@ -39,13 +37,10 @@ static func create_shortcut_button_without_icon(action: String, disabled := fals
var btn := create_button(custom_text, HandlerGUI.throw_action_event.bind(action),
disabled, null, false, ShortcutUtils.get_action_showcase_text(action))
- var shortcut_events := ShortcutUtils.get_action_all_valid_shortcuts(action)
- if not shortcut_events.is_empty():
- var shortcut_obj := Shortcut.new()
- shortcut_obj.events = shortcut_events
- btn.shortcut = shortcut_obj
- btn.shortcut_in_tooltip = false
- btn.shortcut_feedback = false
+ if not ShortcutUtils.get_action_all_valid_shortcuts(action).is_empty():
+ var shortcuts := ShortcutsRegistration.new()
+ shortcuts.add_shortcut(action, btn.pressed.emit)
+ HandlerGUI.register_shortcuts(btn, shortcuts)
return btn
@@ -107,8 +102,7 @@ static func create_shortcut_checkbox(action: String, start_toggled: bool, disabl
return
return create_checkbox(TranslationUtils.get_action_description(action, true),
- HandlerGUI.throw_action_event.bind(action),
- start_toggled, disabled, ShortcutUtils.get_action_showcase_text(action))
+ HandlerGUI.throw_action_event.bind(action), start_toggled, disabled, ShortcutUtils.get_action_showcase_text(action))
static func create_checkbox(text: String, toggle_action: Callable, start_toggled: bool, disabled := false, dim_text := "") -> CheckBox:
# Create main checkbox.
@@ -163,8 +157,7 @@ func _order_signals(btn: Button) -> void:
btn.pressed.connect(connection.callable, CONNECT_DEFERRED)
set_block_signals(true)
-func setup(buttons: Array[Button], align_left := false, min_width := -1.0,
-max_height := -1.0, separator_indices := PackedInt32Array()) -> void:
+func setup(buttons: Array[Button], align_left := false, min_width := -1.0, separator_indices := PackedInt32Array()) -> void:
var main_container := _common_initial_setup()
# Add the buttons.
if buttons.is_empty():
@@ -181,7 +174,9 @@ max_height := -1.0, separator_indices := PackedInt32Array()) -> void:
await main_container.ready
if min_width > 0:
custom_minimum_size.x = min_width
- if max_height > 0 and max_height < get_minimum_size().y:
+
+ var max_height := get_window().size.y / (get_tree().root.content_scale_factor * 2.0) - 16.0
+ if get_minimum_size().y > max_height:
custom_minimum_size.y = max_height
main_container.get_parent().vertical_scroll_mode = ScrollContainer.SCROLL_MODE_AUTO
diff --git a/src/ui_widgets/Dropdown.gd b/src/ui_widgets/Dropdown.gd
new file mode 100644
index 0000000..8c1e9cd
--- /dev/null
+++ b/src/ui_widgets/Dropdown.gd
@@ -0,0 +1,84 @@
+# A dropdown with multiple options, not tied to any attribute.
+@abstract class_name Dropdown extends Control
+
+const arrow_icon = preload("res://assets/icons/SmallArrowDown.svg")
+
+var ci := get_canvas_item()
+var line_edit: BetterLineEdit
+var _text: String
+
+@export var editing_enabled := false
+@export var align_left := false # The alignment of the popup options' text.
+
+func set_text(new_text: String) -> void:
+ if _text != new_text:
+ _text = new_text
+ queue_redraw()
+
+func _ready() -> void:
+ theme_type_variation = "Dropdown"
+ mouse_exited.connect(_on_mouse_exited)
+
+func _draw() -> void:
+ var normal_sb: StyleBoxFlat = get_theme_stylebox("normal")
+ var font := get_theme_font("font")
+ var font_size := get_theme_font_size("font_size")
+ var spacing := size.y - arrow_icon.get_height()
+ var half_spacing := spacing / 2.0
+
+ normal_sb.draw(ci, Rect2(Vector2.ZERO, size))
+ if get_viewport().gui_get_hovered_control() == self:
+ get_theme_stylebox("hover").draw(ci, Rect2(Vector2.ZERO, size))
+ arrow_icon.draw(ci, Vector2(size.x - arrow_icon.get_width() - half_spacing, half_spacing), ThemeUtils.icon_hover_color)
+ else:
+ arrow_icon.draw(ci, Vector2(size.x - arrow_icon.get_width() - half_spacing, half_spacing), ThemeUtils.icon_normal_color)
+
+ var text_line := TextLine.new()
+ text_line.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
+ text_line.width = size.x - spacing - arrow_icon.get_width() - normal_sb.content_margin_left + 2
+ text_line.add_string(_text, font, font_size)
+
+ var y_offset := normal_sb.get_offset().y + (size.y - normal_sb.get_minimum_size().y - text_line.get_size().y) / 2.0
+ text_line.draw(ci, Vector2(normal_sb.content_margin_left, y_offset), get_theme_color("font_color"))
+
+
+func _on_mouse_exited() -> void:
+ queue_redraw()
+
+func _gui_input(event: InputEvent) -> void:
+ if event is InputEventMouseMotion and event.button_mask == 0:
+ queue_redraw()
+ elif event is InputEventMouseButton and event.is_pressed():
+ if event.button_index == MOUSE_BUTTON_RIGHT and not (_text.is_empty() and not editing_enabled):
+ _enter_edit_mode()
+ accept_event()
+ elif event.button_index in [MOUSE_BUTTON_LEFT, MOUSE_BUTTON_MIDDLE]:
+ focus_entered.emit()
+ var value_picker := ContextPopup.new()
+ value_picker.setup(_get_dropdown_buttons(), align_left, size.x)
+ queue_redraw()
+ accept_event()
+ HandlerGUI.popup_under_rect(value_picker, get_global_rect(), get_viewport())
+
+func _enter_edit_mode() -> void:
+ line_edit = BetterLineEdit.new()
+ line_edit.size = size
+ line_edit.editable = editing_enabled
+ line_edit.text = _get_line_edit_activation_text()
+ line_edit.text_submitted.connect(_on_text_submitted)
+ line_edit.text_changed.connect(_on_text_changed)
+ line_edit.focus_exited.connect(line_edit.queue_free)
+ line_edit.add_theme_font_override("font", get_theme_font("font"))
+ add_child(line_edit)
+ line_edit.grab_focus()
+
+func _get_line_edit_activation_text() -> String:
+ return _text
+
+func _on_text_submitted(_new_text: String) -> void:
+ queue_redraw()
+
+func _on_text_changed(_new_text: String) -> void:
+ return
+
+@abstract func _get_dropdown_buttons() -> Array[Button]
diff --git a/src/ui_widgets/Dropdown.gd.uid b/src/ui_widgets/Dropdown.gd.uid
new file mode 100644
index 0000000..17581da
--- /dev/null
+++ b/src/ui_widgets/Dropdown.gd.uid
@@ -0,0 +1 @@
+uid://s6av6gwx03m4
diff --git a/src/ui_widgets/LineEditButton.gd b/src/ui_widgets/LineEditButton.gd
index e8aa60d..792b2cc 100644
--- a/src/ui_widgets/LineEditButton.gd
+++ b/src/ui_widgets/LineEditButton.gd
@@ -1,16 +1,14 @@
+## An optimized control representing a LineEdit with a button attached to it.
@icon("res://godot_only/icons/LineEditButton.svg")
class_name LineEditButton extends Control
-## An optimized control representing a LineEdit with a button attached to it.
# A fake-out is drawn to avoid adding unnecessary nodes.
# The real controls are only created when necessary, such as when hovered or focused.
-const BUTTON_WIDTH = 20.0
-
signal pressed
signal text_change_canceled
-signal text_changed
-signal text_submitted
+signal text_changed(new_text: String)
+signal text_submitted(new_text: String)
signal button_gui_input(event: InputEvent)
var _should_stay_active_outside := false
@@ -64,6 +62,11 @@ var temp_button: Button
@export var icon: Texture2D
@export var button_visuals := true
@export var mono_font_tooltip := false
+@export var button_width := 14.0:
+ set(new_value):
+ if not is_equal_approx(new_value, button_width):
+ button_width = new_value
+ queue_redraw()
var ci := get_canvas_item()
@@ -107,7 +110,7 @@ func _setup() -> void:
return
active = true
temp_line_edit = BetterLineEdit.new()
- temp_line_edit.size = Vector2(size.x - BUTTON_WIDTH, 22)
+ temp_line_edit.size = Vector2(size.x - button_width, 22)
temp_line_edit.tooltip_text = tooltip_text
temp_line_edit.mono_font_tooltip = mono_font_tooltip
temp_line_edit.placeholder_text = placeholder_text
@@ -125,8 +128,8 @@ func _setup() -> void:
add_child(temp_line_edit)
temp_button = Button.new()
temp_button.show_behind_parent = true # Lets the icon draw in front.
- temp_button.custom_minimum_size = Vector2(BUTTON_WIDTH, 22)
- temp_button.position.x = size.x - BUTTON_WIDTH
+ temp_button.custom_minimum_size = Vector2(button_width, 22)
+ temp_button.position.x = size.x - button_width
temp_button.focus_mode = Control.FOCUS_NONE
temp_button.mouse_filter = Control.MOUSE_FILTER_PASS
temp_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
@@ -160,24 +163,24 @@ func _draw() -> void:
var horizontal_margin_width := sb.content_margin_left + sb.content_margin_right
if not active:
sb.draw(ci, Rect2(Vector2.ZERO, size))
- draw_line(Vector2(size.x - BUTTON_WIDTH, 0), Vector2(size.x - BUTTON_WIDTH, size.y), sb.border_color, 2)
+ draw_line(Vector2(size.x - button_width, 0), Vector2(size.x - button_width, size.y), sb.border_color, 2)
# The default overrun behavior couldn't be changed for the simplest draw methods.
var text_obj := TextLine.new()
text_obj.text_overrun_behavior = TextServer.OVERRUN_TRIM_CHAR
- text_obj.width = size.x - BUTTON_WIDTH - horizontal_margin_width
+ text_obj.width = size.x - button_width - horizontal_margin_width
text_obj.add_string(placeholder_text if text.is_empty() else text, _get_font(), get_theme_font_size("font_size", "LineEdit"))
text_obj.draw(ci, Vector2(5, 2), get_theme_color("font_placeholder_color", "LineEdit") if text.is_empty() else _get_font_color())
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,
+ 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, get_theme_color("icon_normal_color", "LeftConnectedButton"))
# Helpers
func _get_font() -> Font:
- return ThemeUtils.mono_font if use_mono_font else ThemeUtils.regular_font
+ return ThemeUtils.mono_font if use_mono_font else ThemeUtils.main_font
func _get_font_color() -> Color:
return get_theme_color("font_color", "LineEdit") if font_color == Color.TRANSPARENT else font_color
@@ -185,4 +188,4 @@ func _get_font_color() -> Color:
func draw_button_border(theme_name: String) -> void:
var button_outline: StyleBoxFlat = get_theme_stylebox(theme_name, "LeftConnectedButton").duplicate()
button_outline.draw_center = false
- button_outline.draw(ci, Rect2(size.x - BUTTON_WIDTH, 0, BUTTON_WIDTH, size.y))
+ button_outline.draw(ci, Rect2(size.x - button_width, 0, button_width, size.y))
diff --git a/src/ui_widgets/PanelGrid.gd b/src/ui_widgets/PanelGrid.gd
index 2b4eb72..b6de2ad 100644
--- a/src/ui_widgets/PanelGrid.gd
+++ b/src/ui_widgets/PanelGrid.gd
@@ -15,6 +15,7 @@ const bottom_spacing = 2
var boxes: Array[Rect2] = []
var copy_button: Button
+var hovered_email: String
func _ready() -> void:
@@ -77,7 +78,9 @@ func _gui_input(event: InputEvent) -> void:
var email := item_after_angle_bracket.get_slice(">", 0)
var box := boxes[idx]
if box.has_point(event.position):
- if not is_instance_valid(copy_button):
+ if email != hovered_email:
+ if is_instance_valid(copy_button):
+ copy_button.queue_free()
copy_button = Button.new()
copy_button.theme_type_variation = "FlatButton"
copy_button.icon = copy_icon
@@ -94,3 +97,4 @@ func _gui_input(event: InputEvent) -> void:
func remove_copy_button() -> void:
if is_instance_valid(copy_button):
copy_button.queue_free()
+ hovered_email = ""
diff --git a/src/ui_widgets/ProceduralControl.gd b/src/ui_widgets/ProceduralControl.gd
new file mode 100644
index 0000000..a81c46c
--- /dev/null
+++ b/src/ui_widgets/ProceduralControl.gd
@@ -0,0 +1,240 @@
+## A control meant to be fully drawn. Such controls often need flat-like buttons, so this control providing a common implementation.
+class_name ProceduralControl extends Control
+
+var ci := get_canvas_item()
+
+class ButtonData extends RefCounted:
+ var rect: Rect2
+ var callable: Callable
+ var text_line: TextLine
+ var icon: DPITexture
+ var disabled: bool
+
+ var theme_variation := "FlatButton"
+ var theme_color_overrides: Dictionary[String, Color]
+ var theme_stylebox_overrides: Dictionary[String, StyleBox]
+ var theme_h_separation_override := -1
+ var use_arrow_cursor := false
+
+ static func create_from_icon(new_rect: Rect2, new_callable: Callable, new_icon: DPITexture) -> ButtonData:
+ var new_button_data := ButtonData.new()
+ new_button_data.rect = new_rect
+ new_button_data.callable = new_callable
+ new_button_data.icon = new_icon
+ return new_button_data
+
+ static func create_from_textline(new_rect: Rect2, new_callable: Callable, new_text_line: TextLine) -> ButtonData:
+ var new_button_data := ButtonData.new()
+ new_button_data.rect = new_rect
+ new_button_data.callable = new_callable
+ new_button_data.text_line = new_text_line
+ return new_button_data
+
+ static func create_from_icon_and_textline(new_rect: Rect2, new_callable: Callable, new_icon: DPITexture, new_text_line: TextLine) -> ButtonData:
+ var new_button_data := ButtonData.new()
+ new_button_data.rect = new_rect
+ new_button_data.callable = new_callable
+ new_button_data.icon = new_icon
+ new_button_data.text_line = new_text_line
+ return new_button_data
+
+var buttons: Array[ButtonData] = []
+var hovered_button: ButtonData = null
+var pressed_button: ButtonData = null
+
+func _ready() -> void:
+ mouse_exited.connect(_on_base_class_mouse_exited)
+
+func _on_base_class_mouse_exited() -> void:
+ hovered_button = null
+ mouse_default_cursor_shape = Control.CURSOR_ARROW
+ queue_redraw()
+
+func _draw() -> void:
+ for i in buttons.size():
+ var button := buttons[i]
+
+ # Stylebox drawing.
+ if button.disabled:
+ if "disabled" in button.theme_stylebox_overrides:
+ button.theme_stylebox_overrides["disabled"].draw(ci, button.rect)
+ else:
+ get_theme_stylebox("disabled", button.theme_variation).draw(ci, button.rect)
+ else:
+ if button == pressed_button and button == hovered_button:
+ if "pressed" in button.theme_stylebox_overrides:
+ button.theme_stylebox_overrides["pressed"].draw(ci, button.rect)
+ else:
+ get_theme_stylebox("pressed", button.theme_variation).draw(ci, button.rect)
+ elif button == hovered_button:
+ if "hover" in button.theme_stylebox_overrides:
+ button.theme_stylebox_overrides["hover"].draw(ci, button.rect)
+ else:
+ get_theme_stylebox("hover", button.theme_variation).draw(ci, button.rect)
+
+ # Text and icon drawing
+ var has_text := is_instance_valid(button.text_line)
+ var has_icon := is_instance_valid(button.icon)
+
+ if has_text and has_icon:
+ var h_separation: int
+ if button.theme_h_separation_override >= 0:
+ h_separation = button.theme_h_separation_override
+ else:
+ h_separation = get_theme_constant("h_separation", button.theme_variation)
+
+ var font_color: Color
+ var icon_color: Color
+ if button.disabled:
+ if "icon_disabled_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_disabled_color"]
+ else:
+ icon_color = get_theme_color("icon_disabled_color", button.theme_variation)
+
+ if "font_disabled_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_disabled_color"]
+ else:
+ font_color = get_theme_color("font_disabled_color", button.theme_variation)
+ else:
+ if button == pressed_button and button == hovered_button:
+ if "icon_pressed_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_pressed_color"]
+ else:
+ icon_color = get_theme_color("icon_pressed_color", button.theme_variation)
+
+ if "font_pressed_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_pressed_color"]
+ else:
+ font_color = get_theme_color("font_pressed_color", button.theme_variation)
+ elif button == hovered_button:
+ if "icon_hover_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_hover_color"]
+ else:
+ icon_color = get_theme_color("icon_hover_color", button.theme_variation)
+
+ if "font_hover_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_hover_color"]
+ else:
+ font_color = get_theme_color("font_hover_color", button.theme_variation)
+ else:
+ if "icon_normal_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_normal_color"]
+ else:
+ icon_color = get_theme_color("icon_normal_color", button.theme_variation)
+
+ if "font_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_color"]
+ else:
+ font_color = get_theme_color("font_color", button.theme_variation)
+
+ var text_size := button.text_line.get_size()
+ var icon_size := button.icon.get_size()
+ var icon_pos := button.rect.position + (Vector2(button.rect.size.x - text_size.x - icon_size.x - h_separation,
+ button.rect.size.y - icon_size.y - 2) / 2.0).round() + Vector2(0, 1)
+ button.icon.draw(ci, icon_pos, icon_color)
+ button.text_line.draw(ci, Vector2(icon_pos.x + icon_size.x + h_separation, (button.rect.size.y - text_size.y + 1) / 2.0).round(), font_color)
+ elif has_text:
+ var font_color: Color
+ if button.disabled:
+ if "font_disabled_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_disabled_color"]
+ else:
+ font_color = get_theme_color("font_disabled_color", button.theme_variation)
+ else:
+ if button == pressed_button and button == hovered_button:
+ if "font_pressed_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_pressed_color"]
+ else:
+ font_color = get_theme_color("font_pressed_color", button.theme_variation)
+ elif button == hovered_button:
+ if "font_hover_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_hover_color"]
+ else:
+ font_color = get_theme_color("font_hover_color", button.theme_variation)
+ else:
+ if "font_color" in button.theme_color_overrides:
+ font_color = button.theme_color_overrides["font_color"]
+ else:
+ font_color = get_theme_color("font_color", button.theme_variation)
+
+ button.text_line.draw(ci, button.rect.position + (button.rect.size - button.text_line.get_size()) / 2.0, font_color)
+ elif has_icon:
+ var icon_color: Color
+ if button.disabled:
+ if "icon_disabled_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_disabled_color"]
+ else:
+ icon_color = get_theme_color("icon_disabled_color", button.theme_variation)
+ else:
+ if button == pressed_button and button == hovered_button:
+ if "icon_pressed_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_pressed_color"]
+ else:
+ icon_color = get_theme_color("icon_pressed_color", button.theme_variation)
+ elif button == hovered_button:
+ if "icon_hover_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_hover_color"]
+ else:
+ icon_color = get_theme_color("icon_hover_color", button.theme_variation)
+ else:
+ if "icon_normal_color" in button.theme_color_overrides:
+ icon_color = button.theme_color_overrides["icon_normal_color"]
+ else:
+ icon_color = get_theme_color("icon_normal_color", button.theme_variation)
+
+ button.icon.draw(ci, button.rect.position + (button.rect.size - button.icon.get_size()) / 2.0, icon_color)
+
+func _gui_input(event: InputEvent) -> void:
+ if event is InputEventMouse:
+ var mouse_event: InputEventMouse = event
+ var event_pos := mouse_event.position
+ var should_update_hover := (event is InputEventMouse)
+
+ if event is InputEventMouseButton:
+ if event.button_index == MOUSE_BUTTON_LEFT:
+ if event.is_pressed():
+ pressed_button = hovered_button
+ queue_redraw()
+ elif event.is_released():
+ if is_instance_valid(pressed_button) and pressed_button == hovered_button and not pressed_button.disabled:
+ pressed_button.callable.call()
+ pressed_button = null
+ should_update_hover = true
+
+ if should_update_hover:
+ if event.button_mask == 0 and not (event is InputEventMouseButton and event.is_released() and event.button_index != MOUSE_BUTTON_NONE):
+ var found_hovered := false
+ for button in buttons:
+ if button.disabled:
+ continue
+ if button.rect.has_point(event_pos):
+ if hovered_button != button:
+ hovered_button = button
+ if not button.use_arrow_cursor:
+ mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+ queue_redraw()
+ found_hovered = true
+ break
+
+ if not found_hovered and hovered_button != null:
+ hovered_button = null
+ mouse_default_cursor_shape = Control.CURSOR_ARROW
+ queue_redraw()
+ else:
+ var found_hovered := false
+ for button in buttons:
+ if button.disabled:
+ continue
+ if button.rect.has_point(event_pos):
+ if hovered_button != button and button == pressed_button:
+ hovered_button = button
+ if not button.use_arrow_cursor:
+ mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+ queue_redraw()
+ found_hovered = true
+ break
+
+ if not found_hovered and hovered_button != null:
+ hovered_button = null
+ mouse_default_cursor_shape = Control.CURSOR_ARROW
+ queue_redraw()
diff --git a/src/ui_widgets/ProceduralControl.gd.uid b/src/ui_widgets/ProceduralControl.gd.uid
new file mode 100644
index 0000000..e3afdcc
--- /dev/null
+++ b/src/ui_widgets/ProceduralControl.gd.uid
@@ -0,0 +1 @@
+uid://bniafq6ma1iln
diff --git a/src/ui_widgets/basic_xnode_frame.tscn b/src/ui_widgets/basic_xnode_frame.tscn
index 366b078..0ab9dd1 100644
--- a/src/ui_widgets/basic_xnode_frame.tscn
+++ b/src/ui_widgets/basic_xnode_frame.tscn
@@ -26,5 +26,6 @@ mouse_filter = 2
[node name="TextEdit" type="TextEdit" parent="."]
custom_minimum_size = Vector2(0, 44)
layout_mode = 2
+indent_wrapped_lines = true
script = ExtResource("2_0i3q7")
show_line_numbers = false
diff --git a/src/ui_widgets/choose_name_dialog.gd b/src/ui_widgets/choose_name_dialog.gd
index 56ee534..a1d3638 100644
--- a/src/ui_widgets/choose_name_dialog.gd
+++ b/src/ui_widgets/choose_name_dialog.gd
@@ -17,7 +17,7 @@ func _ready() -> void:
name_edit.text_changed.connect(adapt_to_text)
name_edit.text_change_canceled.connect(queue_free)
name_edit.text_submitted.connect(_on_name_edit_text_submitted)
- name_edit.add_theme_font_override("font", ThemeUtils.regular_font)
+ name_edit.add_theme_font_override("font", ThemeUtils.main_font)
func _on_name_edit_text_submitted(_text: String) -> void:
if not action_button.disabled:
diff --git a/src/ui_widgets/collapseable_description.gd b/src/ui_widgets/collapseable_description.gd
new file mode 100644
index 0000000..4aee38d
--- /dev/null
+++ b/src/ui_widgets/collapseable_description.gd
@@ -0,0 +1,35 @@
+extends MarginContainer
+
+const collapsed_arrow = preload("res://assets/icons/SmallArrowLeft.svg")
+const expanded_arrow = preload("res://assets/icons/SmallArrowDown.svg")
+
+@onready var label: Label = %Label
+@onready var panel: PanelContainer = $Panel
+
+var collapsed := true
+var short_text := ""
+var full_text := ""
+
+func _ready() -> void:
+ label.add_theme_color_override("font_color", ThemeUtils.dim_text_color)
+ panel.draw.connect(_on_panel_draw)
+
+func setup(new_full_text: String, new_short_text: String) -> void:
+ short_text = new_short_text
+ full_text = new_full_text
+ update_text()
+
+func _on_panel_draw() -> void:
+ var arrow_texture := collapsed_arrow if collapsed else expanded_arrow
+ var texture_size := arrow_texture.get_size()
+ panel.draw_texture_rect(arrow_texture, Rect2(Vector2(panel.size.x - texture_size.x - 4, panel.size.y / 2 - texture_size.y / 2), texture_size),
+ false, ThemeUtils.icon_normal_color)
+
+func _gui_input(event: InputEvent) -> void:
+ if event is InputEventMouseButton and event.is_pressed() and event.button_index == MOUSE_BUTTON_LEFT:
+ collapsed = not collapsed
+ update_text()
+
+func update_text() -> void:
+ label.text = short_text if collapsed else full_text
+ queue_redraw()
diff --git a/src/ui_widgets/collapseable_description.gd.uid b/src/ui_widgets/collapseable_description.gd.uid
new file mode 100644
index 0000000..94968d4
--- /dev/null
+++ b/src/ui_widgets/collapseable_description.gd.uid
@@ -0,0 +1 @@
+uid://djwq26clcpsil
diff --git a/src/ui_widgets/collapseable_description.tscn b/src/ui_widgets/collapseable_description.tscn
new file mode 100644
index 0000000..101b314
--- /dev/null
+++ b/src/ui_widgets/collapseable_description.tscn
@@ -0,0 +1,30 @@
+[gd_scene load_steps=2 format=3 uid="uid://cii0useu00gj3"]
+
+[ext_resource type="Script" uid="uid://djwq26clcpsil" path="res://src/ui_widgets/collapseable_description.gd" id="1_d5e1r"]
+
+[node name="CollapseableDescription" type="MarginContainer"]
+anchors_preset = 10
+anchor_right = 1.0
+offset_bottom = 27.0
+grow_horizontal = 2
+size_flags_horizontal = 3
+mouse_filter = 0
+theme_override_constants/margin_bottom = 4
+script = ExtResource("1_d5e1r")
+
+[node name="Panel" type="PanelContainer" parent="."]
+layout_mode = 2
+mouse_filter = 1
+theme_type_variation = &"SubtleFlatPanel"
+
+[node name="MarginContainer" type="MarginContainer" parent="Panel"]
+layout_mode = 2
+theme_override_constants/margin_right = 20
+
+[node name="Label" type="Label" parent="Panel/MarginContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/line_spacing = 1
+theme_override_constants/paragraph_spacing = 4
+autowrap_mode = 3
diff --git a/src/ui_widgets/color_configuration_popup.tscn b/src/ui_widgets/color_configuration_popup.tscn
index 031a3b3..c35f73b 100644
--- a/src/ui_widgets/color_configuration_popup.tscn
+++ b/src/ui_widgets/color_configuration_popup.tscn
@@ -1,8 +1,8 @@
[gd_scene load_steps=7 format=3 uid="uid://b7wobq0ndm35"]
[ext_resource type="Script" uid="uid://btl68wj2dmivk" path="res://src/ui_widgets/color_configuration_popup.gd" id="1_j0oms"]
-[ext_resource type="Texture2D" uid="uid://dr2erka82g6j4" path="res://assets/icons/Edit.svg" id="2_y6afs"]
-[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="3_wd5vj"]
+[ext_resource type="Texture2D" uid="uid://dr2erka82g6j4" path="res://assets/icons/FieldEdit.svg" id="2_y6afs"]
+[ext_resource type="FontVariation" uid="uid://bo626nsycqtaj" path="res://assets/fonts/MainFont.tres" id="3_j0oms"]
[ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="4_u07gm"]
[ext_resource type="PackedScene" uid="uid://5f8uxavn1or1" path="res://src/ui_widgets/color_edit.tscn" id="5_idufj"]
[ext_resource type="Texture2D" uid="uid://cj5x2ti8150ja" path="res://assets/icons/Delete.svg" id="6_50dbg"]
@@ -47,7 +47,7 @@ layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
focus_mode = 1
-theme_override_fonts/font = ExtResource("3_wd5vj")
+theme_override_fonts/font = ExtResource("3_j0oms")
alignment = 1
max_length = 30
script = ExtResource("4_u07gm")
diff --git a/src/ui_widgets/color_edit.gd b/src/ui_widgets/color_edit.gd
index 35b2294..ff902e4 100644
--- a/src/ui_widgets/color_edit.gd
+++ b/src/ui_widgets/color_edit.gd
@@ -55,8 +55,8 @@ func _draw() -> void:
stylebox.corner_radius_bottom_right = 5
stylebox.bg_color = ColorParser.text_to_color(ColorParser.add_hash_if_hex(value),
Color(), enable_alpha)
- draw_texture(checkerboard, Vector2(size.x - BUTTON_WIDTH, 1))
- draw_style_box(stylebox, Rect2(size.x - BUTTON_WIDTH, 1, BUTTON_WIDTH - 1, size.y - 2))
+ draw_texture(checkerboard, Vector2(size.x - button_width, 1))
+ draw_style_box(stylebox, Rect2(size.x - button_width, 1, button_width - 1, size.y - 2))
if is_instance_valid(temp_button) and temp_button.button_pressed:
draw_button_border("pressed")
elif is_instance_valid(temp_button) and temp_button.get_global_rect().has_point(
diff --git a/src/ui_widgets/color_field.gd b/src/ui_widgets/color_field.gd
index 1ce92ad..576113c 100644
--- a/src/ui_widgets/color_field.gd
+++ b/src/ui_widgets/color_field.gd
@@ -99,7 +99,7 @@ func _on_pressed() -> void:
func _draw() -> void:
super()
- var h_offset := size.x - BUTTON_WIDTH
+ var h_offset := size.x - button_width
var r := 5
checkerboard.draw(ci, Vector2(h_offset, 1))
# Draw the color or gradient.
@@ -117,16 +117,14 @@ func _draw() -> void:
var initial_pts := PackedVector2Array([Vector2(0, 1), Vector2(0, size.y - 1)])
for deg in range(90, -1, -15):
var rad := deg_to_rad(deg)
- initial_pts.append(Vector2(BUTTON_WIDTH - 1 - r + r * cos(rad),
- size.y - 1 - r + r * sin(rad)))
+ initial_pts.append(Vector2(button_width - 1 - r + r * cos(rad), size.y - 1 - r + r * sin(rad)))
for deg in range(0, -91, -15):
var rad := deg_to_rad(deg)
- initial_pts.append(Vector2(BUTTON_WIDTH - 1 - r + r * cos(rad),
- r + 1 + r * sin(rad)))
+ initial_pts.append(Vector2(button_width - 1 - r + r * cos(rad), r + 1 + r * sin(rad)))
for pt in initial_pts:
points.append(pt + Vector2(h_offset, 0))
colors.append(Color.WHITE)
- uvs.append(pt / Vector2(BUTTON_WIDTH - 1, size.y - 1))
+ uvs.append(pt / Vector2(button_width - 1, size.y - 1))
RenderingServer.canvas_item_add_polygon(ci, points, colors, uvs, gradient_texture)
drawn = true
@@ -134,9 +132,8 @@ func _draw() -> void:
var stylebox := StyleBoxFlat.new()
stylebox.corner_radius_top_right = r
stylebox.corner_radius_bottom_right = r
- stylebox.bg_color = ColorParser.text_to_color(
- element.get_attribute_true_color(attribute_name), Color.TRANSPARENT)
- stylebox.draw(ci, Rect2(h_offset, 1, BUTTON_WIDTH - 1, size.y - 2))
+ stylebox.bg_color = ColorParser.text_to_color(element.get_attribute_true_color(attribute_name), Color.TRANSPARENT)
+ stylebox.draw(ci, Rect2(h_offset, 1, button_width - 1, size.y - 2))
# Draw the button border.
if is_instance_valid(temp_button) and temp_button.button_pressed:
draw_button_border("pressed")
diff --git a/src/ui_widgets/color_field_popup.tscn b/src/ui_widgets/color_field_popup.tscn
index afd61a0..e556438 100644
--- a/src/ui_widgets/color_field_popup.tscn
+++ b/src/ui_widgets/color_field_popup.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://f5cljfdpe85v"]
[ext_resource type="Script" uid="uid://caecf6gysjqel" path="res://src/ui_widgets/color_field_popup.gd" id="1_xn1jy"]
-[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="2_cds3l"]
+[ext_resource type="FontVariation" uid="uid://bo626nsycqtaj" path="res://assets/fonts/MainFont.tres" id="2_xn1jy"]
[ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="3_1h7ne"]
[ext_resource type="PackedScene" uid="uid://b1eig44cov474" path="res://src/ui_widgets/good_color_picker.tscn" id="4_0v7ma"]
@@ -42,7 +42,7 @@ theme_override_constants/margin_right = 12
[node name="SearchField" type="LineEdit" parent="MainContainer/Content/Palettes/VBoxContainer/SearchBox"]
layout_mode = 2
size_flags_horizontal = 3
-theme_override_fonts/font = ExtResource("2_cds3l")
+theme_override_fonts/font = ExtResource("2_xn1jy")
script = ExtResource("3_1h7ne")
[node name="PalettesContent" type="VBoxContainer" parent="MainContainer/Content/Palettes/VBoxContainer"]
diff --git a/src/ui_widgets/directory_path_widget.gd b/src/ui_widgets/directory_path_widget.gd
index cab90ce..76dc01e 100644
--- a/src/ui_widgets/directory_path_widget.gd
+++ b/src/ui_widgets/directory_path_widget.gd
@@ -1,52 +1,32 @@
-extends Control
+extends ProceduralControl
+const BUTTON_SIDE_MARGIN := 2.0
+const DROPDOWN_BUTTON_SIDE_MARGIN := 4.0
+const ICON_SPACING = 2
const SLASH_SPACING = 8.0
-const ICON_SPACING = 3.0
const MAX_BUTTON_WIDTH = 180.0
-const BUTTON_SIDE_MARGIN := 2.0
-const DROPDOWN_BUTTON_SIDE_MARGIN := 5.0
const home_icon = preload("res://assets/icons/Home.svg")
const computer_icon = preload("res://assets/icons/Computer.svg")
-var ci := get_canvas_item()
-
signal directory_selected(path: String)
-class ButtonData extends RefCounted:
- var rect: Rect2
- var path: String
- var display_text: String
- var icon: Texture2D
-
- func _init(new_rect: Rect2, new_path: String, new_display_text: String, new_icon: Texture2D = null) -> void:
- rect = new_rect
- path = new_path
- display_text = new_display_text
- icon = new_icon
-
-var buttons: Array[ButtonData] = [] # The last button isn't clickable.
-var dropdown_button: ButtonData = null # Uses collapsed paths
+var dropdown_button: ButtonData
var collapsed_paths := PackedStringArray()
-var hovered_button: ButtonData = null
-var pressed_button: ButtonData = null
var path := ""
-func _ready() -> void:
- mouse_exited.connect(_on_mouse_exited)
-
func set_path(new_path: String) -> void:
path = new_path
sync_buttons.call_deferred()
queue_redraw()
func sync_buttons() -> void:
+ dropdown_button = null
buttons.clear()
collapsed_paths.clear()
- dropdown_button = null
- var font := ThemeUtils.regular_font
+ var font := ThemeUtils.main_font
var font_size := get_theme_font_size("font_size", "FlatButton")
var available_width := size.x - 20.0
@@ -57,180 +37,139 @@ func sync_buttons() -> void:
var processed_path_component := processed_path.get_file()
var button_content_width: float
+ var special_button_text := ""
+ var special_button_icon: DPITexture
+ var is_first_dir := false
if processed_path_component.is_empty():
- if is_instance_valid(dropdown_button):
- collapsed_paths.append(processed_path)
- else:
- button_content_width = font.get_string_size("Computer", HORIZONTAL_ALIGNMENT_CENTER, MAX_BUTTON_WIDTH, font_size).x + ICON_SPACING + computer_icon.get_width()
- if offset + button_content_width + BUTTON_SIDE_MARGIN * 2 + SLASH_SPACING > size.x:
- button_content_width = font.get_string_size("…", HORIZONTAL_ALIGNMENT_CENTER, MAX_BUTTON_WIDTH, font_size).x
- dropdown_button = ButtonData.new(Rect2(0, 1, button_content_width + DROPDOWN_BUTTON_SIDE_MARGIN * 2, size.y - 2), "", "…")
- collapsed_paths.append(processed_path)
- else:
- buttons.append(ButtonData.new(Rect2(0, 1, button_content_width + BUTTON_SIDE_MARGIN * 2, size.y - 2), processed_path, "Computer", computer_icon))
- offset += button_content_width + SLASH_SPACING + BUTTON_SIDE_MARGIN * 2
- break
+ special_button_text = "Computer"
+ special_button_icon = computer_icon
+ is_first_dir = true
elif processed_path == Utils.get_home_dir():
+ special_button_text = "Home"
+ special_button_icon = home_icon
+ if path != processed_path:
+ is_first_dir = true
+
+ if not special_button_text.is_empty():
if is_instance_valid(dropdown_button):
collapsed_paths.append(processed_path)
else:
- button_content_width = font.get_string_size("Home", HORIZONTAL_ALIGNMENT_CENTER, MAX_BUTTON_WIDTH, font_size).x + ICON_SPACING + home_icon.get_width()
+ var text_line := TextLine.new()
+ text_line.width = MAX_BUTTON_WIDTH
+ text_line.add_string(special_button_text, font, font_size)
+ button_content_width = text_line.get_line_width() + ICON_SPACING + special_button_icon.get_width()
if offset + button_content_width + BUTTON_SIDE_MARGIN * 2 + SLASH_SPACING > size.x:
- button_content_width = font.get_string_size("…", HORIZONTAL_ALIGNMENT_CENTER, MAX_BUTTON_WIDTH, font_size).x
- dropdown_button = ButtonData.new(Rect2(0, 1, button_content_width + DROPDOWN_BUTTON_SIDE_MARGIN * 2, size.y - 2), "", "…")
+ text_line.clear()
+ text_line.add_string("…", font, font_size)
+ dropdown_button = ButtonData.create_from_textline(
+ Rect2(0, 1, text_line.get_line_width() + DROPDOWN_BUTTON_SIDE_MARGIN * 2, size.y - 2), _popup_dropdown, text_line)
+ dropdown_button.theme_color_overrides = {
+ "font_color": ThemeUtils.dimmer_text_color,
+ "font_hover_color": ThemeUtils.text_color,
+ "font_pressed_color": ThemeUtils.highlighted_text_color,
+ "font_disabled_color": ThemeUtils.text_color,
+ }
+ dropdown_button.use_arrow_cursor = true
+ buttons.append(dropdown_button)
collapsed_paths.append(processed_path)
else:
- buttons.append(ButtonData.new(Rect2(0, 1, button_content_width + BUTTON_SIDE_MARGIN * 2, size.y - 2), processed_path, "Home", home_icon))
+ var new_button := ButtonData.create_from_icon_and_textline(Rect2(0, 1, button_content_width + BUTTON_SIDE_MARGIN * 2, size.y - 2),
+ directory_selected.emit.bind(processed_path), special_button_icon, text_line)
+ new_button.use_arrow_cursor = true
+ new_button.theme_h_separation_override = ICON_SPACING
+ new_button.theme_color_overrides = {
+ "icon_normal_color": ThemeUtils.dimmer_text_color,
+ "font_color": ThemeUtils.dimmer_text_color,
+ "icon_hover_color": ThemeUtils.text_color,
+ "font_hover_color": ThemeUtils.text_color,
+ "icon_pressed_color": ThemeUtils.highlighted_text_color,
+ "font_pressed_color": ThemeUtils.highlighted_text_color,
+ "icon_disabled_color": ThemeUtils.text_color,
+ "font_disabled_color": ThemeUtils.text_color,
+ }
+ new_button.theme_stylebox_overrides = {"disabled": StyleBoxEmpty.new()}
+ buttons.append(new_button)
offset += button_content_width + SLASH_SPACING + BUTTON_SIDE_MARGIN * 2
- if path != processed_path:
+ if is_first_dir:
break
else:
if is_instance_valid(dropdown_button):
collapsed_paths.append(processed_path)
else:
- button_content_width = font.get_string_size(processed_path_component, HORIZONTAL_ALIGNMENT_CENTER, MAX_BUTTON_WIDTH, font_size).x
+ var text_line := TextLine.new()
+ text_line.width = MAX_BUTTON_WIDTH
+ text_line.add_string(processed_path_component, font, font_size)
+ button_content_width = text_line.get_line_width()
# Check against available width since space for the dropdown button is still needed.
if offset + button_content_width + BUTTON_SIDE_MARGIN * 2 + SLASH_SPACING > available_width:
- button_content_width = font.get_string_size("…", HORIZONTAL_ALIGNMENT_CENTER, MAX_BUTTON_WIDTH, font_size).x
- dropdown_button = ButtonData.new(Rect2(0, 1, button_content_width + DROPDOWN_BUTTON_SIDE_MARGIN * 2, size.y - 2), "", "…")
+ text_line.clear()
+ text_line.add_string("…", font, font_size)
+ dropdown_button = ButtonData.create_from_textline(
+ Rect2(0, 1, text_line.get_line_width() + DROPDOWN_BUTTON_SIDE_MARGIN * 2, size.y - 2), _popup_dropdown, text_line)
+ dropdown_button.theme_color_overrides = {
+ "font_color": ThemeUtils.dimmer_text_color,
+ "font_hover_color": ThemeUtils.text_color,
+ "font_pressed_color": ThemeUtils.highlighted_text_color,
+ "font_disabled_color": ThemeUtils.text_color,
+ }
+ dropdown_button.use_arrow_cursor = true
+ buttons.append(dropdown_button)
collapsed_paths.append(processed_path)
else:
- buttons.append(ButtonData.new(Rect2(0, 1, button_content_width + BUTTON_SIDE_MARGIN * 2, size.y - 2), processed_path, processed_path_component))
+ var new_button := ButtonData.create_from_textline(Rect2(0, 1, button_content_width + BUTTON_SIDE_MARGIN * 2, size.y - 2),
+ directory_selected.emit.bind(processed_path), text_line)
+ new_button.use_arrow_cursor = true
+ new_button.theme_h_separation_override = ICON_SPACING
+ new_button.theme_color_overrides = {
+ "icon_normal_color": ThemeUtils.dimmer_text_color,
+ "font_color": ThemeUtils.dimmer_text_color,
+ "icon_hover_color": ThemeUtils.text_color,
+ "font_hover_color": ThemeUtils.text_color,
+ "icon_pressed_color": ThemeUtils.highlighted_text_color,
+ "font_pressed_color": ThemeUtils.highlighted_text_color,
+ "icon_disabled_color": ThemeUtils.text_color,
+ "font_disabled_color": ThemeUtils.text_color,
+ }
+ new_button.theme_stylebox_overrides = {"disabled": StyleBoxEmpty.new()}
+ buttons.append(new_button)
offset += button_content_width + SLASH_SPACING + BUTTON_SIDE_MARGIN * 2
- if processed_path == processed_path.get_base_dir():
- break
processed_path = processed_path.get_base_dir()
+ buttons[0].disabled = true
buttons.reverse()
- var buttons_to_reposition: Array[ButtonData] = buttons.duplicate()
- if is_instance_valid(dropdown_button):
- buttons_to_reposition.push_front(dropdown_button)
-
+ # Reorder buttons.
offset = 0.0
- for i in buttons_to_reposition.size():
- var button := buttons_to_reposition[i]
-
+ for i in buttons.size():
+ var button := buttons[i]
button.rect.position.x = offset
-
- var side_margin := DROPDOWN_BUTTON_SIDE_MARGIN if button == dropdown_button else BUTTON_SIDE_MARGIN
- var content_width := font.get_string_size(button.display_text, HORIZONTAL_ALIGNMENT_CENTER, MAX_BUTTON_WIDTH, font_size).x
- if is_instance_valid(button.icon):
- content_width += button.icon.get_width() + ICON_SPACING
- offset += content_width + side_margin * 2
-
- if i != buttons_to_reposition.size() - 1:
+ offset += button.rect.size.x
+ if i != buttons.size() - 1:
offset += SLASH_SPACING
HandlerGUI.throw_mouse_motion_event()
queue_redraw()
func _draw() -> void:
- var font := ThemeUtils.regular_font
+ super()
+ var font := ThemeUtils.main_font
var font_size := get_theme_font_size("font_size", "FlatButton")
-
- var buttons_to_draw: Array[ButtonData] = buttons.duplicate()
- if is_instance_valid(dropdown_button):
- buttons_to_draw.push_front(dropdown_button)
-
- for i in buttons_to_draw.size():
- var button := buttons_to_draw[i]
-
- var component_modulate := ThemeUtils.dimmer_text_color
- if button == pressed_button and button == hovered_button:
- component_modulate = ThemeUtils.highlighted_text_color
- elif i == buttons_to_draw.size() - 1 or button == hovered_button:
- component_modulate = ThemeUtils.text_color
-
- if button == pressed_button and button == hovered_button:
- get_theme_stylebox("pressed", "FlatButton").draw(ci, button.rect)
- elif button == hovered_button:
- get_theme_stylebox("hover", "FlatButton").draw(ci, button.rect)
-
- if is_instance_valid(button.icon):
- var text_x := button.rect.position.x + BUTTON_SIDE_MARGIN
- button.icon.draw(ci, Vector2(text_x, (size.y - button.icon.get_height()) / 2.0), component_modulate)
- text_x += button.icon.get_width() + ICON_SPACING
- font.draw_string(ci, Vector2(text_x, 16), button.display_text, HORIZONTAL_ALIGNMENT_LEFT, MAX_BUTTON_WIDTH, font_size, component_modulate)
- else:
- var text_line := TextLine.new()
- text_line.add_string(button.display_text, font, font_size)
- text_line.width = button.rect.size.x
- text_line.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
- var side_margin := DROPDOWN_BUTTON_SIDE_MARGIN if button == dropdown_button else BUTTON_SIDE_MARGIN
- text_line.draw(ci, Vector2(button.rect.position.x + side_margin, 2), component_modulate)
-
- if i < buttons_to_draw.size() - 1:
- font.draw_string(ci, Vector2(button.rect.end.x + 0.5, 16), "/", HORIZONTAL_ALIGNMENT_CENTER, SLASH_SPACING, font_size, ThemeUtils.dimmer_text_color)
+ for i in buttons.size() - 1:
+ font.draw_string(ci, Vector2(buttons[i].rect.end.x + 0.5, 16), "/", HORIZONTAL_ALIGNMENT_CENTER, SLASH_SPACING, font_size, ThemeUtils.dimmer_text_color)
-func _gui_input(event: InputEvent) -> void:
- if event is InputEventMouseMotion:
- if event.button_mask == 0:
- var found_hovered := false
- for button_idx in buttons.size() - 1:
- var button := buttons[button_idx]
- if button.rect.has_point(event.position):
- if hovered_button != button:
- hovered_button = button
- queue_redraw()
- found_hovered = true
- break
-
- if not found_hovered and is_instance_valid(dropdown_button) and dropdown_button.rect.has_point(event.position):
- if hovered_button != dropdown_button:
- hovered_button = dropdown_button
- queue_redraw()
- found_hovered = true
-
- if not found_hovered and hovered_button != null:
- hovered_button = null
- queue_redraw()
+
+func _popup_dropdown() -> void:
+ var btn_array: Array[Button] = []
+ for collapsed_path in collapsed_paths:
+ var display_name := collapsed_path.get_file()
+ if display_name.is_empty():
+ btn_array.append(ContextPopup.create_button("Computer", directory_selected.emit.bind(collapsed_path), false, computer_icon))
+ elif collapsed_path == Utils.get_home_dir():
+ btn_array.append(ContextPopup.create_button("Home", directory_selected.emit.bind(collapsed_path), false, home_icon))
else:
- var found_hovered := false
- for button_idx in buttons.size() - 1:
- var button := buttons[button_idx]
- if button.rect.has_point(event.position):
- if hovered_button != button and button == pressed_button:
- hovered_button = button
- queue_redraw()
- found_hovered = true
- break
-
- if not found_hovered and is_instance_valid(dropdown_button) and dropdown_button.rect.has_point(event.position):
- if hovered_button != dropdown_button:
- hovered_button = dropdown_button
- queue_redraw()
- found_hovered = true
-
- if not found_hovered and hovered_button != null:
- hovered_button = null
- queue_redraw()
+ btn_array.append(ContextPopup.create_button(display_name, directory_selected.emit.bind(collapsed_path)))
- elif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
- if event.is_pressed():
- pressed_button = hovered_button
- queue_redraw()
- elif event.is_released():
- if is_instance_valid(pressed_button) and pressed_button == hovered_button:
- if pressed_button == dropdown_button:
- var btn_array: Array[Button] = []
- for collapsed_path in collapsed_paths:
- var display_name := collapsed_path.get_file()
- if display_name.is_empty():
- btn_array.append(ContextPopup.create_button("Computer", directory_selected.emit.bind(collapsed_path), false, computer_icon))
- elif collapsed_path == Utils.get_home_dir():
- btn_array.append(ContextPopup.create_button("Home", directory_selected.emit.bind(collapsed_path), false, home_icon))
- else:
- btn_array.append(ContextPopup.create_button(display_name, directory_selected.emit.bind(collapsed_path)))
-
- var dropdown_popup := ContextPopup.new()
- dropdown_popup.setup(btn_array, true, dropdown_button.rect.size.x, -1)
- HandlerGUI.popup_under_rect_center(dropdown_popup, Rect2(dropdown_button.rect.position + global_position, dropdown_button.rect.size), get_viewport())
- else:
- directory_selected.emit(pressed_button.path)
- pressed_button = null
-
-func _on_mouse_exited() -> void:
- hovered_button = null
- queue_redraw()
+ var dropdown_popup := ContextPopup.new()
+ dropdown_popup.setup(btn_array, true)
+ HandlerGUI.popup_under_rect_center(dropdown_popup, Rect2(dropdown_button.rect.position + global_position, dropdown_button.rect.size), get_viewport())
diff --git a/src/ui_widgets/dropdown.gd b/src/ui_widgets/dropdown.gd
deleted file mode 100644
index 36db216..0000000
--- a/src/ui_widgets/dropdown.gd
+++ /dev/null
@@ -1,85 +0,0 @@
-# A dropdown with multiple options, not tied to any attribute.
-extends HBoxContainer
-
-@export var values: Array[Variant]
-@export var disabled_values: Array[Variant] # References values.
-@export var aliases: Dictionary = {} # References values.
-@export var restricted := true
-@export var editing_enabled := false
-@export var align_left := false # The alignment of the popup options' text.
-# TODO Typed Dictionary wonkiness
-@export var value_text_map: Dictionary = {} # Dictionary[Variant, String]
-
-@onready var line_edit: BetterLineEdit = $LineEdit
-@onready var button: Button = $Button
-
-signal value_changed(new_value: Variant)
-var _value: Variant
-
-var tap_start_time := 0.0
-
-func set_value(new_value: Variant, emit_changed := true) -> void:
- if _value != new_value:
- _value = new_value
- if emit_changed:
- value_changed.emit(_value)
- if is_instance_valid(line_edit):
- _sync_line_edit()
-
-func _ready() -> void:
- if not editing_enabled:
- line_edit.editable = false
- line_edit.gui_input.connect(_on_line_edit_gui_input)
- line_edit.text_changed.connect(_on_text_changed)
- line_edit.text_submitted.connect(_on_text_submitted)
- button.pressed.connect(_on_button_pressed)
- _sync_line_edit()
-
- var max_width := 0
- for val in values:
- max_width = maxi(int(line_edit.get_theme_font("font").get_string_size(str(val),
- HORIZONTAL_ALIGNMENT_LEFT, -1, line_edit.get_theme_font_size("font_size")).x),
- max_width)
- line_edit.size.x = max_width + 4
-
-func _on_line_edit_gui_input(event: InputEvent) -> void:
- if event is InputEventScreenTouch:
- if event.pressed:
- tap_start_time = Time.get_ticks_msec()
- else:
- var tap_duration := Time.get_ticks_msec() - tap_start_time
- if tap_duration <= 200:
- line_edit.release_focus()
- _on_button_pressed()
-
-func _on_button_pressed() -> void:
- var btn_arr: Array[Button] = []
- for val in values:
- btn_arr.append(ContextPopup.create_button(value_text_map.get(val, str(val)),
- set_value.bind(val), disabled_values.has(val) or val == _value))
-
- var value_picker := ContextPopup.new()
- var max_height = get_window().size.y / (get_tree().root.content_scale_factor * 2.0)
- value_picker.setup(btn_arr, align_left, size.x, max_height)
- HandlerGUI.popup_under_rect(value_picker, line_edit.get_global_rect(), get_viewport())
-
-
-func _on_text_submitted(new_text: String) -> void:
- if new_text in aliases:
- new_text = aliases[new_text]
-
- if (restricted and new_text in values) or not restricted:
- set_value(new_text)
- else:
- _sync_line_edit()
- line_edit.remove_theme_color_override("font_color")
-
-func _on_text_changed(new_text: String) -> void:
- if restricted:
- if new_text in aliases:
- new_text = aliases[new_text]
- line_edit.add_theme_color_override("font_color",
- Configs.savedata.get_validity_color(not new_text in values))
-
-func _sync_line_edit() -> void:
- line_edit.text = value_text_map.get(_value, str(_value))
diff --git a/src/ui_widgets/dropdown.gd.uid b/src/ui_widgets/dropdown.gd.uid
deleted file mode 100644
index 96a7bf9..0000000
--- a/src/ui_widgets/dropdown.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://bp4ji11u8dr0m
diff --git a/src/ui_widgets/dropdown.tscn b/src/ui_widgets/dropdown.tscn
deleted file mode 100644
index 2ec7810..0000000
--- a/src/ui_widgets/dropdown.tscn
+++ /dev/null
@@ -1,33 +0,0 @@
-[gd_scene load_steps=5 format=3 uid="uid://dbu1lvajypafb"]
-
-[ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="1_0ifbb"]
-[ext_resource type="Script" uid="uid://bp4ji11u8dr0m" path="res://src/ui_widgets/dropdown.gd" id="1_133xu"]
-[ext_resource type="Texture2D" uid="uid://coda6chhcatal" path="res://assets/icons/Arrow.svg" id="2_4oygd"]
-[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="2_s4ro5"]
-
-[node name="Dropdown" 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_133xu")
-
-[node name="LineEdit" type="LineEdit" parent="."]
-layout_mode = 2
-size_flags_horizontal = 3
-theme_type_variation = &"RightConnectedLineEdit"
-theme_override_fonts/font = ExtResource("2_s4ro5")
-script = ExtResource("1_0ifbb")
-
-[node name="Button" type="Button" parent="."]
-custom_minimum_size = Vector2(20, 0)
-layout_mode = 2
-size_flags_horizontal = 8
-focus_mode = 0
-mouse_filter = 1
-mouse_default_cursor_shape = 2
-theme_type_variation = &"LeftConnectedButton"
-icon = ExtResource("2_4oygd")
-expand_icon = true
diff --git a/src/ui_widgets/dropdown_basic.gd b/src/ui_widgets/dropdown_basic.gd
new file mode 100644
index 0000000..ee988fb
--- /dev/null
+++ b/src/ui_widgets/dropdown_basic.gd
@@ -0,0 +1,40 @@
+# A dropdown with multiple options, not tied to any attribute.
+extends Dropdown
+
+@export var values: Array
+@export var disabled_values: Array # References values.
+@export var aliases: Dictionary[String, Variant] = {} # References values.
+# TODO Typed Dictionary wonkiness
+@export var value_text_map := {} # Dictionary[Variant, String]
+
+signal value_changed(new_value: Variant)
+var _value: Variant
+
+func set_value(new_value: Variant, emit_changed := true) -> void:
+ if _value != new_value:
+ _value = new_value
+ if emit_changed:
+ value_changed.emit(_value)
+ set_text(get_value_string(_value))
+
+
+func _on_text_submitted(new_text: String) -> void:
+ var new_value: Variant = new_text
+ if new_text in aliases:
+ new_text = aliases[new_text]
+ if new_value in values:
+ set_value(new_value)
+
+func _on_text_changed(new_text: String) -> void:
+ if new_text in aliases:
+ new_text = aliases[new_text]
+ line_edit.add_theme_color_override("font_color", Configs.savedata.get_validity_color(not new_text in values))
+
+func _get_dropdown_buttons() -> Array[Button]:
+ var btn_arr: Array[Button] = []
+ for i in values:
+ btn_arr.append(ContextPopup.create_button(get_value_string(i), set_value.bind(i), disabled_values.has(i) or i == _value))
+ return btn_arr
+
+func get_value_string(p_value: Variant) -> String:
+ return value_text_map.get(p_value, str(p_value))
diff --git a/src/ui_widgets/dropdown_basic.gd.uid b/src/ui_widgets/dropdown_basic.gd.uid
new file mode 100644
index 0000000..fab0fd2
--- /dev/null
+++ b/src/ui_widgets/dropdown_basic.gd.uid
@@ -0,0 +1 @@
+uid://bvh3i8ytaohao
diff --git a/src/ui_widgets/dropdown_basic.tscn b/src/ui_widgets/dropdown_basic.tscn
new file mode 100644
index 0000000..493cfad
--- /dev/null
+++ b/src/ui_widgets/dropdown_basic.tscn
@@ -0,0 +1,12 @@
+[gd_scene load_steps=2 format=3 uid="uid://bpr5yv7pbv13g"]
+
+[ext_resource type="Script" uid="uid://bvh3i8ytaohao" path="res://src/ui_widgets/dropdown_basic.gd" id="1_1wr00"]
+
+[node name="DropdownBasic" type="Control"]
+custom_minimum_size = Vector2(48, 22)
+layout_mode = 3
+anchors_preset = 0
+offset_right = 144.0
+offset_bottom = 22.0
+mouse_filter = 1
+script = ExtResource("1_1wr00")
diff --git a/src/ui_widgets/dropdown_numeric.gd b/src/ui_widgets/dropdown_numeric.gd
new file mode 100644
index 0000000..ce5bd9b
--- /dev/null
+++ b/src/ui_widgets/dropdown_numeric.gd
@@ -0,0 +1,43 @@
+# A dropdown with multiple options, not tied to any attribute.
+extends Dropdown
+
+const edit_icon = preload("res://assets/icons/Edit.svg")
+
+@export var use_integers := false
+@export var min_value := 0.0
+@export var max_value := INF
+@export var special_value_exception := NAN # An optional single value outside of the range.
+@export var values_for_dropdown: PackedFloat64Array
+@export var value_text_map: Dictionary[float, String] = {}
+
+signal value_changed(new_value: float)
+var _value := NAN
+
+func set_value(new_value: float, emit_changed := true) -> void:
+ if _value != new_value:
+ _value = new_value
+ if emit_changed:
+ value_changed.emit(_value)
+ set_text(get_value_string(_value))
+
+
+func _on_text_submitted(new_text: String) -> void:
+ var new_value := NumstringParser.evaluate(new_text)
+ if new_value == special_value_exception:
+ set_value(new_value)
+ else:
+ set_value(clampf(new_value, min_value, max_value))
+
+func _get_dropdown_buttons() -> Array[Button]:
+ var btn_arr: Array[Button] = []
+
+ var edit_btn := ContextPopup.create_button("", _enter_edit_mode, false, edit_icon)
+ edit_btn.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
+ btn_arr.append(edit_btn)
+
+ for i in values_for_dropdown:
+ btn_arr.append(ContextPopup.create_button(get_value_string(i), set_value.bind(i), is_equal_approx(i, _value)))
+ return btn_arr
+
+func get_value_string(p_value: float) -> String:
+ return value_text_map.get(p_value, String.num_int64(roundi(p_value)) if use_integers else String.num(p_value))
diff --git a/src/ui_widgets/dropdown_numeric.gd.uid b/src/ui_widgets/dropdown_numeric.gd.uid
new file mode 100644
index 0000000..81cde36
--- /dev/null
+++ b/src/ui_widgets/dropdown_numeric.gd.uid
@@ -0,0 +1 @@
+uid://jt23l0tx8vdj
diff --git a/src/ui_widgets/dropdown_numeric.tscn b/src/ui_widgets/dropdown_numeric.tscn
new file mode 100644
index 0000000..d63aaf5
--- /dev/null
+++ b/src/ui_widgets/dropdown_numeric.tscn
@@ -0,0 +1,13 @@
+[gd_scene load_steps=2 format=3 uid="uid://dps7jypr3qy61"]
+
+[ext_resource type="Script" uid="uid://jt23l0tx8vdj" path="res://src/ui_widgets/dropdown_numeric.gd" id="1_w2lqh"]
+
+[node name="NumericDropdown" type="Control"]
+layout_mode = 3
+anchors_preset = 0
+size_flags_horizontal = 0
+size_flags_vertical = 0
+mouse_filter = 1
+script = ExtResource("1_w2lqh")
+special_value_exception = nan
+editing_enabled = true
diff --git a/src/ui_widgets/enum_field.gd b/src/ui_widgets/enum_field.gd
index 211ddd6..2706203 100644
--- a/src/ui_widgets/enum_field.gd
+++ b/src/ui_widgets/enum_field.gd
@@ -1,5 +1,5 @@
# An editor to be tied to an enum attribute.
-extends LineEditButton
+extends Dropdown
var element: Element
var attribute_name: String # May propagate.
@@ -12,24 +12,24 @@ func set_value(new_value: String, save := false) -> void:
if save:
State.save_svg()
-func setup_placeholder() -> void:
- placeholder_text = element.get_default(attribute_name)
-
func _ready() -> void:
+ add_theme_font_override("font", ThemeUtils.mono_font)
+ super()
Configs.basic_colors_changed.connect(sync)
sync()
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)
- text_submitted.connect(_on_text_submitted)
- focus_entered.connect(reset_font_color)
- text_changed.connect(_on_text_changed)
- text_change_canceled.connect(sync)
- pressed.connect(_on_pressed)
- button_gui_input.connect(_on_button_gui_input)
tooltip_text = attribute_name
- setup_placeholder()
+ check_placeholder_logic()
+
+func check_placeholder_logic() -> void:
+ if element.has_attribute(attribute_name):
+ remove_theme_color_override("font_color")
+ else:
+ add_theme_color_override("font_color", get_theme_color("font_placeholder_color", "LineEdit"))
+ set_text(element.get_default(attribute_name))
func _on_element_attribute_changed(attribute_changed: String) -> void:
@@ -38,11 +38,11 @@ func _on_element_attribute_changed(attribute_changed: String) -> void:
func _on_element_ancestor_attribute_changed(attribute_changed: String) -> void:
if attribute_name == attribute_changed:
- setup_placeholder()
+ check_placeholder_logic()
sync()
-func _on_pressed() -> void:
+func _get_dropdown_buttons() -> Array[Button]:
var btn_arr: Array[Button] = []
# Add a default.
var reset_btn := ContextPopup.create_button("", set_value.bind("", true),
@@ -51,15 +51,12 @@ func _on_pressed() -> void:
btn_arr.append(reset_btn)
# Add a button for each enum value.
for enum_constant in DB.ATTRIBUTE_ENUM_VALUES[attribute_name]:
- var btn := ContextPopup.create_button(enum_constant,
- set_value.bind(enum_constant, true),
+ var btn := ContextPopup.create_button(enum_constant, set_value.bind(enum_constant, true),
enum_constant == element.get_attribute_value(attribute_name))
if enum_constant == element.get_default(attribute_name):
btn.add_theme_font_override("font", ThemeUtils.bold_font)
btn_arr.append(btn)
- var value_picker := ContextPopup.new()
- value_picker.setup(btn_arr, false, size.x)
- HandlerGUI.popup_under_rect(value_picker, get_global_rect(), get_viewport())
+ return btn_arr
func _on_text_submitted(new_text: String) -> void:
@@ -68,23 +65,23 @@ func _on_text_submitted(new_text: String) -> void:
else:
sync()
-
func _on_text_changed(new_text: String) -> void:
- font_color = Configs.savedata.get_validity_color(
- not new_text in DB.ATTRIBUTE_ENUM_VALUES[attribute_name])
+ line_edit.add_theme_color_override("font_color", Configs.savedata.get_validity_color(not new_text in DB.ATTRIBUTE_ENUM_VALUES[attribute_name]))
+
+func _get_line_edit_activation_text() -> String:
+ return element.get_attribute_value(attribute_name)
func sync() -> void:
var new_value := element.get_attribute_value(attribute_name)
- text = new_value
- reset_font_color()
+ set_text(new_value)
if new_value == element.get_default(attribute_name):
- font_color = Configs.savedata.basic_color_warning
-
-
-func _on_button_gui_input(event: InputEvent) -> void:
- if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_RIGHT and event.is_pressed():
- accept_event()
- HandlerGUI.throw_mouse_motion_event()
+ add_theme_color_override("font_color", Configs.savedata.basic_color_warning)
else:
- temp_button.mouse_filter = Utils.mouse_filter_pass_non_drag_events(event)
+ check_placeholder_logic()
+
+func _make_custom_tooltip(for_text: String) -> Object:
+ var label := Label.new()
+ label.add_theme_font_override("font", ThemeUtils.mono_font)
+ label.text = for_text
+ return label
diff --git a/src/ui_widgets/enum_field.tscn b/src/ui_widgets/enum_field.tscn
index 7f30830..16d24f5 100644
--- a/src/ui_widgets/enum_field.tscn
+++ b/src/ui_widgets/enum_field.tscn
@@ -1,12 +1,12 @@
-[gd_scene load_steps=3 format=3 uid="uid://d2da0thyq5rq8"]
+[gd_scene load_steps=2 format=3 uid="uid://d2da0thyq5rq8"]
[ext_resource type="Script" uid="uid://bplpuld6fqv7q" path="res://src/ui_widgets/enum_field.gd" id="1_1jqoy"]
-[ext_resource type="Texture2D" uid="uid://coda6chhcatal" path="res://assets/icons/Arrow.svg" id="3_vhd8v"]
[node name="EnumField" type="Control"]
-custom_minimum_size = Vector2(75, 0)
+custom_minimum_size = Vector2(81, 22)
layout_mode = 3
anchors_preset = 0
+offset_right = 75.0
+mouse_filter = 1
script = ExtResource("1_1jqoy")
-icon = ExtResource("3_vhd8v")
-mono_font_tooltip = true
+editing_enabled = true
diff --git a/src/ui_widgets/file_path_field.gd b/src/ui_widgets/file_path_field.gd
new file mode 100644
index 0000000..4033d61
--- /dev/null
+++ b/src/ui_widgets/file_path_field.gd
@@ -0,0 +1,43 @@
+extends HBoxContainer
+
+var extensions := PackedStringArray()
+
+@onready var line_edit: BetterLineEdit = $LineEdit
+@onready var button: Button = $Button
+
+signal value_changed(new_value: String)
+var value := "":
+ set(new_value):
+ if value != new_value:
+ value = new_value
+ value_changed.emit(new_value)
+
+func set_value(new_value: String) -> void:
+ value = new_value
+
+func _ready() -> void:
+ button.pressed.connect(FileUtils.open_custom_import_dialog.bind(extensions, set_value))
+ line_edit.text_submitted.connect(_on_text_submitted)
+ line_edit.text_changed.connect(sync_line_edit_font.unbind(1))
+ line_edit.placeholder_text = Translator.translate("No file path")
+ value_changed.connect(sync_line_edit.unbind(1))
+ sync_line_edit()
+
+func sync_line_edit() -> void:
+ if is_instance_valid(line_edit):
+ line_edit.text = Utils.simplify_file_path(value)
+ sync_line_edit_font()
+
+func sync_line_edit_font() -> void:
+ if is_instance_valid(line_edit):
+ if line_edit.text.is_empty():
+ line_edit.add_theme_font_override("font", ThemeUtils.main_font)
+ else:
+ line_edit.remove_theme_font_override("font")
+ # TODO This should not be needed.
+ line_edit.text += " "
+ await get_tree().process_frame
+ line_edit.text = line_edit.text.left(-1)
+
+func _on_text_submitted(new_text: String) -> void:
+ set_value(new_text.replace("~", Utils.get_home_dir()))
diff --git a/src/ui_widgets/file_path_field.gd.uid b/src/ui_widgets/file_path_field.gd.uid
new file mode 100644
index 0000000..03e0170
--- /dev/null
+++ b/src/ui_widgets/file_path_field.gd.uid
@@ -0,0 +1 @@
+uid://dm646g7ndq56u
diff --git a/src/ui_widgets/file_path_field.tscn b/src/ui_widgets/file_path_field.tscn
new file mode 100644
index 0000000..0b38718
--- /dev/null
+++ b/src/ui_widgets/file_path_field.tscn
@@ -0,0 +1,31 @@
+[gd_scene load_steps=4 format=3 uid="uid://dm3l2yb8crdqr"]
+
+[ext_resource type="Script" uid="uid://dm646g7ndq56u" path="res://src/ui_widgets/file_path_field.gd" id="1_vugfe"]
+[ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="2_vugfe"]
+[ext_resource type="Texture2D" uid="uid://n6ive1o6t4bp" path="res://assets/icons/FileBrowse.svg" id="3_qlle3"]
+
+[node name="FilePathField" type="HBoxContainer"]
+custom_minimum_size = Vector2(130, 22)
+offset_right = 93.0
+offset_bottom = 31.0
+size_flags_horizontal = 0
+size_flags_vertical = 0
+theme_override_constants/separation = 0
+script = ExtResource("1_vugfe")
+
+[node name="LineEdit" type="LineEdit" parent="."]
+layout_mode = 2
+size_flags_horizontal = 3
+theme_type_variation = &"RightConnectedLineEdit"
+script = ExtResource("2_vugfe")
+
+[node name="Button" type="Button" parent="."]
+custom_minimum_size = Vector2(24, 0)
+layout_mode = 2
+size_flags_horizontal = 8
+focus_mode = 0
+mouse_filter = 1
+mouse_default_cursor_shape = 2
+theme_type_variation = &"LeftConnectedButton"
+icon = ExtResource("3_qlle3")
+expand_icon = true
diff --git a/src/ui_widgets/flag_field.gd b/src/ui_widgets/flag_field.gd
index 7016a5f..d8f52d6 100644
--- a/src/ui_widgets/flag_field.gd
+++ b/src/ui_widgets/flag_field.gd
@@ -1,6 +1,8 @@
# An editor for flags with the value of 0 or 1, not tied to an attribute.
extends Button
+var ci := get_canvas_item()
+
var hovered := false
signal value_changed(new_value: int)
@@ -20,16 +22,14 @@ func _on_toggled(is_state_pressed: bool) -> void:
set_value(1 if is_state_pressed else 0)
func _ready() -> void:
- value_changed.connect(_on_value_changed)
toggled.connect(_on_toggled)
mouse_entered.connect(_on_mouse_entered)
mouse_exited.connect(_on_mouse_exited)
- button_pressed = (get_value() == 1)
- text = String.num_uint64(get_value())
+ value_changed.connect(_on_value_changed)
+ _on_value_changed(get_value())
func _on_value_changed(new_value: int) -> void:
button_pressed = (new_value == 1)
- text = String.num_uint64(new_value)
func _on_mouse_entered() -> void:
@@ -48,7 +48,16 @@ func _draw() -> void:
hover_stylebox.corner_radius_top_right = 3
hover_stylebox.border_width_bottom = 2
hover_stylebox.border_color = Color(1, 1, 1, 0.2)
- draw_style_box(hover_stylebox, Rect2(Vector2.ZERO, size))
+ hover_stylebox.draw(ci, Rect2(Vector2.ZERO, size))
+ if button_pressed:
+ ThemeUtils.mono_font.draw_char(ci, Vector2(5, 14), ord("1"), 14, get_theme_color("font_hover_pressed_color"))
+ else:
+ ThemeUtils.mono_font.draw_char(ci, Vector2(5, 14), ord("0"), 14, get_theme_color("font_hover_color"))
+ else:
+ if button_pressed:
+ ThemeUtils.mono_font.draw_char(ci, Vector2(5, 14), ord("1"), 14, get_theme_color("font_pressed_color"))
+ else:
+ ThemeUtils.mono_font.draw_char(ci, Vector2(5, 14), ord("0"), 14, get_theme_color("font_color"))
func _make_custom_tooltip(for_text: String) -> Object:
diff --git a/src/ui_widgets/flag_field.tscn b/src/ui_widgets/flag_field.tscn
index ae5f211..3dc316a 100644
--- a/src/ui_widgets/flag_field.tscn
+++ b/src/ui_widgets/flag_field.tscn
@@ -1,13 +1,7 @@
-[gd_scene load_steps=7 format=3 uid="uid://br8g7w38jguh4"]
+[gd_scene load_steps=5 format=3 uid="uid://br8g7w38jguh4"]
-[ext_resource type="FontFile" uid="uid://depydd16jq777" path="res://assets/fonts/FontMono.ttf" id="1_p8s8y"]
[ext_resource type="Script" uid="uid://ndfvlxytvcm8" path="res://src/ui_widgets/flag_field.gd" id="2_0bhg4"]
-[sub_resource type="FontVariation" id="FontVariation_46ud6"]
-base_font = ExtResource("1_p8s8y")
-spacing_top = -1
-spacing_bottom = -1
-
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_oo47u"]
content_margin_left = 5.0
content_margin_top = 0.0
@@ -39,15 +33,15 @@ offset_bottom = 18.0
focus_mode = 0
mouse_filter = 1
mouse_default_cursor_shape = 2
-theme_override_colors/font_color = Color(1, 0.84705883, 0.84313726, 1)
-theme_override_colors/font_pressed_color = Color(0.70666665, 1, 0.6, 1)
-theme_override_fonts/font = SubResource("FontVariation_46ud6")
-theme_override_font_sizes/font_size = 14
+theme_override_colors/font_color = Color(1, 0.7490196, 0.7490196, 1)
+theme_override_colors/font_pressed_color = Color(0.7019608, 1, 0.6, 1)
+theme_override_colors/font_hover_color = Color(1, 1, 1, 1)
+theme_override_colors/font_hover_pressed_color = Color(1, 1, 1, 1)
theme_override_styles/normal = SubResource("StyleBoxFlat_oo47u")
theme_override_styles/pressed = SubResource("StyleBoxFlat_uepoa")
theme_override_styles/hover = SubResource("StyleBoxFlat_oo47u")
theme_override_styles/hover_pressed = SubResource("StyleBoxFlat_uepoa")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_kfgda")
toggle_mode = true
-text = "0"
+action_mode = 0
script = ExtResource("2_0bhg4")
diff --git a/src/ui_widgets/fps_limit_dropdown.gd b/src/ui_widgets/fps_limit_dropdown.gd
deleted file mode 100644
index 1ba6683..0000000
--- a/src/ui_widgets/fps_limit_dropdown.gd
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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
deleted file mode 100644
index 070a17a..0000000
--- a/src/ui_widgets/fps_limit_dropdown.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://bfpf8mrhc3135
diff --git a/src/ui_widgets/fps_limit_dropdown.tscn b/src/ui_widgets/fps_limit_dropdown.tscn
deleted file mode 100644
index 36361c1..0000000
--- a/src/ui_widgets/fps_limit_dropdown.tscn
+++ /dev/null
@@ -1,31 +0,0 @@
-[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 7b1249e..dc57a43 100644
--- a/src/ui_widgets/good_color_picker.gd
+++ b/src/ui_widgets/good_color_picker.gd
@@ -4,7 +4,7 @@ const EyedropperPopupScene = preload("res://src/ui_parts/eyedropper_popup.tscn")
const handle_texture = preload("res://assets/icons/BWHandle.svg")
const slider_arrow = preload("res://assets/icons/SliderArrow.svg")
-const side_slider_arrow = preload("res://assets/icons/SideSliderArrow.svg")
+const side_slider_arrow = preload("res://assets/icons/SliderArrowSide.svg")
const bg_pattern = preload("res://assets/icons/CheckerboardMini.svg")
var alpha_enabled := false
@@ -364,7 +364,7 @@ func _on_slider3_text_submitted(new_text: String) -> void:
func _on_slider4_text_submitted(new_text: String) -> void:
var new_color := display_color
- new_color.a = clampf(new_text.to_int() / 100.0, 0.0, 1.0)
+ new_color.a = clampf(new_text.to_int() / 255.0, 0.0, 1.0)
register_visual_change(new_color, false)
slider4_update()
@@ -390,7 +390,7 @@ func slider3_update() -> void:
_slider_set_text(fields_arr[3], number)
func slider4_update() -> void:
- _slider_set_text(fields_arr[4], display_color.a * 100)
+ _slider_set_text(fields_arr[4], display_color.a * 255)
func _slider_set_text(field: BetterLineEdit, number: float) -> void:
field.text = String.num_uint64(roundi(number))
diff --git a/src/ui_widgets/id_field.gd b/src/ui_widgets/id_field.gd
index 308db91..5b2d9da 100644
--- a/src/ui_widgets/id_field.gd
+++ b/src/ui_widgets/id_field.gd
@@ -12,15 +12,26 @@ func set_value(new_value: String, save := false) -> void:
func _ready() -> void:
+ Configs.language_changed.connect(sync_localization)
+ sync_localization()
Configs.basic_colors_changed.connect(sync)
sync()
element.attribute_changed.connect(_on_element_attribute_changed)
text_changed.connect(_on_text_changed)
+ setup_font()
text_submitted.connect(_on_text_submitted)
text_change_canceled.connect(sync)
focus_entered.connect(_on_focus_entered)
tooltip_text = attribute_name
+func sync_localization() -> void:
+ placeholder_text = Translator.translate("No ID")
+
+func setup_font() -> void:
+ if text.is_empty():
+ add_theme_font_override("font", ThemeUtils.main_font)
+
+
func _on_element_attribute_changed(attribute_changed: String) -> void:
if attribute_name == attribute_changed:
sync()
@@ -40,7 +51,9 @@ func _on_text_changed(new_text: String) -> void:
validity_level == Attribute.NameValidityLevel.INVALID,
validity_level == Attribute.NameValidityLevel.INVALID_XML_NAMETOKEN)
add_theme_color_override("font_color", font_color)
+ setup_font()
func sync() -> void:
text = element.get_attribute_value(attribute_name)
remove_theme_color_override("font_color")
+ setup_font()
diff --git a/src/ui_widgets/number_dropdown.gd b/src/ui_widgets/number_dropdown.gd
deleted file mode 100644
index 62e6309..0000000
--- a/src/ui_widgets/number_dropdown.gd
+++ /dev/null
@@ -1,63 +0,0 @@
-# A dropdown with multiple options, not tied to any attribute.
-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
-@export var restricted := true
-@export var min_value := -INF
-@export var max_value := INF
-
-var _value := ""
-
-func set_value(new_value: String) -> void:
- var current_num := _value.to_float()
- var proposed_num := new_value.to_float()
- if is_integer:
- proposed_num = roundi(proposed_num)
- if not restricted and not proposed_num in values:
- proposed_num = clampf(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_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:
- 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: float) -> String:
- # Right now, all the places this is used benefit from showing "1" as "1.0".
- return String.num(num, 0 if is_integer else Utils.MAX_NUMERIC_PRECISION)
-
-func _on_text_submitted(new_text: String) -> void:
- if (restricted and new_text.to_float() in values) or not restricted:
- set_value(new_text)
- else:
- line_edit.text = _value
- line_edit.remove_theme_color_override("font_color")
-
-
-func _on_text_changed(new_text: String) -> void:
- if restricted:
- line_edit.add_theme_color_override("font_color",
- Configs.savedata.get_validity_color(not new_text.to_float() in values))
diff --git a/src/ui_widgets/number_dropdown.gd.uid b/src/ui_widgets/number_dropdown.gd.uid
deleted file mode 100644
index da7316a..0000000
--- a/src/ui_widgets/number_dropdown.gd.uid
+++ /dev/null
@@ -1 +0,0 @@
-uid://trxmy0mb706i
diff --git a/src/ui_widgets/number_dropdown.tscn b/src/ui_widgets/number_dropdown.tscn
deleted file mode 100644
index c589176..0000000
--- a/src/ui_widgets/number_dropdown.tscn
+++ /dev/null
@@ -1,31 +0,0 @@
-[gd_scene load_steps=5 format=3 uid="uid://b4qgdo1od11hx"]
-
-[ext_resource type="Script" uid="uid://trxmy0mb706i" path="res://src/ui_widgets/number_dropdown.gd" id="1_axymu"]
-[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="2_v4n2i"]
-[ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="3_y7lt6"]
-[ext_resource type="Texture2D" uid="uid://coda6chhcatal" path="res://assets/icons/Arrow.svg" id="4_vet1k"]
-
-[node name="NumberDropdown" 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_axymu")
-
-[node name="LineEdit" type="LineEdit" parent="."]
-layout_mode = 2
-theme_type_variation = &"RightConnectedLineEdit"
-theme_override_fonts/font = ExtResource("2_v4n2i")
-script = ExtResource("3_y7lt6")
-
-[node name="Button" type="Button" parent="."]
-custom_minimum_size = Vector2(20, 0)
-layout_mode = 2
-focus_mode = 0
-mouse_filter = 1
-mouse_default_cursor_shape = 2
-theme_type_variation = &"LeftConnectedButton"
-icon = ExtResource("4_vet1k")
-expand_icon = true
diff --git a/src/ui_widgets/number_edit.gd b/src/ui_widgets/number_edit.gd
index 3f89d4c..19f9106 100644
--- a/src/ui_widgets/number_edit.gd
+++ b/src/ui_widgets/number_edit.gd
@@ -8,7 +8,7 @@ extends BetterLineEdit
if _value < min_value:
set_value(min_value)
-@export var max_value := 1.0:
+@export var max_value := INF:
set(new_value):
if max_value != new_value:
max_value = new_value
@@ -16,8 +16,6 @@ extends BetterLineEdit
set_value(max_value)
@export var initial_value := 1.0
-@export var allow_lower := true
-@export var allow_higher := true
@export var is_float := true
signal value_changed(new_value: float)
@@ -28,10 +26,7 @@ func set_value(new_value: float, emit_changed := true) -> void:
sync_text()
return
elif _value != new_value:
- if not allow_higher and new_value > max_value:
- new_value = max_value
- elif not allow_lower and new_value < min_value:
- new_value = min_value
+ new_value = clampf(new_value, min_value, max_value)
if _value != new_value:
_value = new_value
if emit_changed:
diff --git a/src/ui_widgets/number_field_with_slider.gd b/src/ui_widgets/number_field_with_slider.gd
index 3d2a02e..966d0a9 100644
--- a/src/ui_widgets/number_field_with_slider.gd
+++ b/src/ui_widgets/number_field_with_slider.gd
@@ -97,7 +97,7 @@ func _draw() -> void:
stylebox.corner_radius_top_right = 5
stylebox.corner_radius_bottom_right = 5
stylebox.bg_color = get_theme_stylebox("normal", "LineEdit").bg_color
- stylebox.draw(ci, Rect2(size.x - BUTTON_WIDTH, 1, BUTTON_WIDTH - 2, size.y - 2))
+ stylebox.draw(ci, Rect2(size.x - button_width, 1, button_width - 2, size.y - 2))
var fill_height := (size.y - 4) * (element.get_attribute_num(attribute_name) - MIN_VALUE) / MAX_VALUE
# Create a stylebox that'll occupy the exact amount of space.
var fill_stylebox := StyleBoxFlat.new()
@@ -106,7 +106,7 @@ func _draw() -> void:
fill_stylebox.bg_color.a = 0.65
elif not slider_hovered:
fill_stylebox.bg_color.a = 0.5
- fill_stylebox.draw(ci, Rect2(size.x - BUTTON_WIDTH, size.y - 2 - fill_height, BUTTON_WIDTH - 2, fill_height))
+ fill_stylebox.draw(ci, Rect2(size.x - button_width, size.y - 2 - fill_height, button_width - 2, fill_height))
if slider_dragged:
draw_button_border("pressed")
elif slider_hovered:
diff --git a/src/ui_widgets/optimizer_setting_info.gd b/src/ui_widgets/optimizer_setting_info.gd
new file mode 100644
index 0000000..8d28712
--- /dev/null
+++ b/src/ui_widgets/optimizer_setting_info.gd
@@ -0,0 +1,32 @@
+extends PanelContainer
+
+var formatter := Formatter.new(Formatter.Preset.PRETTY)
+
+@onready var label: Label = %Label
+@onready var before_label: Label = %BeforeLabel
+@onready var before_text_edit: BetterTextEdit = %BeforeTextEdit
+@onready var after_label: Label = %AfterLabel
+@onready var after_text_edit: BetterTextEdit = %AfterTextEdit
+@onready var vbox_container: VBoxContainer = $VBoxContainer
+
+var main_text := ""
+var before_text := ""
+var after_text := ""
+
+func setup(example_root: ElementRoot, optimizer: Optimizer, new_main_text: String) -> void:
+ main_text = new_main_text
+ before_text = SVGParser.root_to_markup(example_root, formatter)
+ example_root.optimize(optimizer)
+ after_text = SVGParser.root_to_markup(example_root, formatter)
+
+func _ready() -> void:
+ before_label.add_theme_color_override("font_color", ThemeUtils.dim_text_color)
+ after_label.add_theme_color_override("font_color", ThemeUtils.dim_text_color)
+ before_text_edit.syntax_highlighter = SVGHighlighter.new()
+ after_text_edit.syntax_highlighter = SVGHighlighter.new()
+
+ label.text = main_text
+ before_label.text = Translator.translate("Before") + " (%d B)" % before_text.length()
+ before_text_edit.text = before_text
+ after_label.text = Translator.translate("After") + " (%d B)" % after_text.length()
+ after_text_edit.text = after_text
diff --git a/src/ui_widgets/optimizer_setting_info.gd.uid b/src/ui_widgets/optimizer_setting_info.gd.uid
new file mode 100644
index 0000000..6d3213f
--- /dev/null
+++ b/src/ui_widgets/optimizer_setting_info.gd.uid
@@ -0,0 +1 @@
+uid://xeenmv8f8au0
diff --git a/src/ui_widgets/optimizer_setting_info.tscn b/src/ui_widgets/optimizer_setting_info.tscn
new file mode 100644
index 0000000..678d19e
--- /dev/null
+++ b/src/ui_widgets/optimizer_setting_info.tscn
@@ -0,0 +1,66 @@
+[gd_scene load_steps=3 format=3 uid="uid://cmo78vpyllsmp"]
+
+[ext_resource type="Script" uid="uid://xeenmv8f8au0" path="res://src/ui_widgets/optimizer_setting_info.gd" id="1_hf6yr"]
+[ext_resource type="Script" uid="uid://dh5mir6i27u4u" path="res://src/ui_widgets/BetterTextEdit.gd" id="2_lgjs3"]
+
+[node name="OptimizerSettingInfo" type="PanelContainer"]
+offset_top = 156.0
+offset_right = 724.0
+offset_bottom = 156.0
+theme_type_variation = &"SpaciousPanel"
+script = ExtResource("1_hf6yr")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 2
+theme_override_constants/separation = 10
+
+[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"]
+custom_minimum_size = Vector2(725, 0)
+layout_mode = 2
+
+[node name="Label" type="Label" parent="VBoxContainer/MarginContainer"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(725, 0)
+layout_mode = 2
+autowrap_mode = 3
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
+layout_mode = 2
+
+[node name="BeforeBox" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="BeforeLabel" type="Label" parent="VBoxContainer/HBoxContainer/BeforeBox"]
+unique_name_in_owner = true
+layout_mode = 2
+horizontal_alignment = 1
+
+[node name="BeforeTextEdit" type="TextEdit" parent="VBoxContainer/HBoxContainer/BeforeBox"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 125)
+layout_mode = 2
+theme_override_colors/font_readonly_color = Color(1, 1, 1, 1)
+editable = false
+indent_wrapped_lines = true
+script = ExtResource("2_lgjs3")
+metadata/_custom_type_script = "uid://dh5mir6i27u4u"
+
+[node name="AfterBox" type="VBoxContainer" parent="VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="AfterLabel" type="Label" parent="VBoxContainer/HBoxContainer/AfterBox"]
+unique_name_in_owner = true
+layout_mode = 2
+horizontal_alignment = 1
+
+[node name="AfterTextEdit" type="TextEdit" parent="VBoxContainer/HBoxContainer/AfterBox"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(0, 125)
+layout_mode = 2
+theme_override_colors/font_readonly_color = Color(1, 1, 1, 1)
+editable = false
+indent_wrapped_lines = true
+script = ExtResource("2_lgjs3")
+metadata/_custom_type_script = "uid://dh5mir6i27u4u"
diff --git a/src/ui_widgets/palette_config.gd b/src/ui_widgets/palette_config.gd
index 94832f7..bfc1c16 100644
--- a/src/ui_widgets/palette_config.gd
+++ b/src/ui_widgets/palette_config.gd
@@ -223,29 +223,29 @@ func find_palette_index() -> int:
func _on_palette_button_pressed() -> void:
var palette_idx := find_palette_index()
- var separator_idx := 3
var btn_arr: Array[Button] = []
btn_arr.append(ContextPopup.create_button(Translator.translate("Rename"),
popup_edit_name, false, load("res://assets/icons/Rename.svg")))
if palette_idx >= 1:
- separator_idx += 1
btn_arr.append(ContextPopup.create_button(Translator.translate("Move Up"),
move_up, false, load("res://assets/icons/MoveUp.svg")))
if palette_idx < Configs.savedata.get_palette_count() - 1:
- separator_idx += 1
btn_arr.append(ContextPopup.create_button(Translator.translate("Move Down"),
move_down, false, load("res://assets/icons/MoveDown.svg")))
btn_arr.append(ContextPopup.create_button(Translator.translate("Apply Preset"),
open_palette_options, false, load("res://assets/icons/Import.svg")))
btn_arr.append(ContextPopup.create_button(Translator.translate("Delete"),
delete, false, load("res://assets/icons/Delete.svg")))
+
+ var separator_arr := PackedInt32Array([btn_arr.size()])
+
btn_arr.append(ContextPopup.create_button(Translator.translate("Copy as XML"),
copy_palette.bind(palette_idx), false, load("res://assets/icons/Copy.svg")))
btn_arr.append(ContextPopup.create_button(Translator.translate("Save as XML"),
save_palette.bind(palette_idx), false, load("res://assets/icons/Export.svg")))
var context_popup := ContextPopup.new()
- context_popup.setup(btn_arr, true, -1, -1, PackedInt32Array([separator_idx]))
+ context_popup.setup(btn_arr, true, -1, separator_arr)
HandlerGUI.popup_under_rect_center(context_popup, palette_button.get_global_rect(), get_viewport())
diff --git a/src/ui_widgets/palette_config.tscn b/src/ui_widgets/palette_config.tscn
index e507692..be3ea4d 100644
--- a/src/ui_widgets/palette_config.tscn
+++ b/src/ui_widgets/palette_config.tscn
@@ -1,22 +1,10 @@
-[gd_scene load_steps=6 format=3 uid="uid://c5cavwa2xdt0b"]
+[gd_scene load_steps=5 format=3 uid="uid://c5cavwa2xdt0b"]
[ext_resource type="Script" uid="uid://e73am1tdeku" path="res://src/ui_widgets/palette_config.gd" id="1_2fy8k"]
[ext_resource type="Script" uid="uid://1hox6gd5pxku" path="res://src/ui_widgets/BetterLineEdit.gd" id="2_coqnx"]
-[ext_resource type="FontFile" uid="uid://clpf84p1lfwlp" path="res://assets/fonts/Font.ttf" id="2_cttpy"]
+[ext_resource type="FontVariation" uid="uid://bo626nsycqtaj" path="res://assets/fonts/MainFont.tres" id="2_uvri4"]
[ext_resource type="Texture2D" uid="uid://dbyjet4nt246k" path="res://assets/icons/Warning.svg" id="4_43bpt"]
-[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lq3bn"]
-draw_center = false
-border_width_left = 2
-border_width_top = 2
-border_width_right = 2
-border_width_bottom = 2
-border_color = Color(0.2, 0.34902, 0.501961, 1)
-corner_radius_top_left = 5
-corner_radius_top_right = 5
-corner_radius_bottom_right = 5
-corner_radius_bottom_left = 5
-
[node name="PaletteConfig" type="PanelContainer"]
offset_right = 21.0
offset_bottom = 46.0
@@ -48,8 +36,7 @@ custom_minimum_size = Vector2(120, 0)
layout_mode = 2
size_flags_horizontal = 3
focus_mode = 1
-theme_override_fonts/font = ExtResource("2_cttpy")
-theme_override_styles/normal = SubResource("StyleBoxFlat_lq3bn")
+theme_override_fonts/font = ExtResource("2_uvri4")
alignment = 1
max_length = 30
script = ExtResource("2_coqnx")
diff --git a/src/ui_widgets/path_command_button.gd b/src/ui_widgets/path_command_button.gd
index 5790629..4f1816c 100644
--- a/src/ui_widgets/path_command_button.gd
+++ b/src/ui_widgets/path_command_button.gd
@@ -10,10 +10,10 @@ signal pressed_custom(cmd_char: String)
func _ready() -> void:
text = ""
queue_redraw()
- pressed.connect(emit_pressed_custom)
-
-func emit_pressed_custom() -> void:
- pressed_custom.emit(command_char)
+ pressed.connect(
+ func() -> void:
+ pressed_custom.emit(command_char)
+ )
func set_invalid(new_state := true) -> void:
disabled = new_state
@@ -38,12 +38,17 @@ func _draw() -> void:
var normal_text := " " + TranslationUtils.get_path_command_description(command_char, true)
# Try with font size 13.
text_obj.add_string(bold_text, ThemeUtils.bold_font, 13)
- text_obj.add_string(normal_text, ThemeUtils.regular_font, 13)
+ text_obj.add_string(normal_text, ThemeUtils.main_font, 13)
if text_obj.get_line_width() > max_size:
# Try with font size 12.
text_obj.clear()
text_obj.add_string(bold_text, ThemeUtils.bold_font, 12)
- text_obj.add_string(normal_text, ThemeUtils.regular_font, 12)
+ text_obj.add_string(normal_text, ThemeUtils.main_font, 12)
if text_obj.get_line_width() > max_size:
custom_minimum_size.x = size.x + 4 + text_obj.get_line_width() - max_size
text_obj.draw(get_canvas_item(), Vector2(left_margin + 2, 3), text_color)
+
+
+func _unhandled_input(event: InputEvent) -> void:
+ if event is InputEventKey and event.is_pressed() and event.keycode == OS.find_keycode_from_string(command_char):
+ pressed.emit()
diff --git a/src/ui_widgets/path_popup.gd b/src/ui_widgets/path_popup.gd
index bd9a853..eb77f7f 100644
--- a/src/ui_widgets/path_popup.gd
+++ b/src/ui_widgets/path_popup.gd
@@ -38,9 +38,12 @@ func force_relativity(relative: bool) -> void:
for command_button in command_container.get_children():
if relative:
command_button.command_char = command_button.command_char.to_lower()
- command_button.queue_redraw()
else:
command_button.command_char = command_button.command_char.to_upper()
- command_button.queue_redraw()
+ command_button.queue_redraw()
await get_tree().process_frame
reset_size()
+
+func _unhandled_input(event: InputEvent) -> void:
+ if relative_toggle.visible and event is InputEventKey and event.is_pressed() and event.keycode == KEY_SHIFT:
+ relative_toggle.button_pressed = not relative_toggle.button_pressed
diff --git a/src/ui_widgets/pathdata_field.gd b/src/ui_widgets/pathdata_field.gd
index 224bf36..7c17542 100644
--- a/src/ui_widgets/pathdata_field.gd
+++ b/src/ui_widgets/pathdata_field.gd
@@ -13,8 +13,8 @@ const STRIP_HEIGHT = 22.0
signal focused
-const MiniNumberFieldScene = preload("mini_number_field.tscn")
-const FlagFieldScene = preload("flag_field.tscn")
+const MiniNumberFieldScene = preload("res://src/ui_widgets/mini_number_field.tscn")
+const FlagFieldScene = preload("res://src/ui_widgets/flag_field.tscn")
const more_icon = preload("res://assets/icons/SmallMore.svg")
const plus_icon = preload("res://assets/icons/Plus.svg")
@@ -23,7 +23,7 @@ var mini_line_edit_stylebox := get_theme_stylebox("normal", "MiniLineEdit")
var mini_line_edit_font_size := get_theme_font_size("font_size", "MiniLineEdit")
var mini_line_edit_font_color := get_theme_color("font_color", "MiniLineEdit")
-@onready var line_edit: LineEdit = $LineEdit
+@onready var line_edit: BetterLineEdit = $LineEdit
@onready var commands_container: Control = $Commands
# Variables around the big optimization.
@@ -98,7 +98,7 @@ func _on_line_edit_focus_entered() -> void:
func setup_font(new_text: String) -> void:
if new_text.is_empty():
- line_edit.add_theme_font_override("font", ThemeUtils.regular_font)
+ line_edit.add_theme_font_override("font", ThemeUtils.main_font)
else:
line_edit.remove_theme_font_override("font")
@@ -106,12 +106,12 @@ var last_synced_value := " " # Invalid initial string.
func sync() -> void:
var new_value := element.get_attribute_value(attribute_name)
+ line_edit.text = new_value
+ setup_font(new_value)
if last_synced_value == new_value:
return
last_synced_value = new_value
- line_edit.text = new_value
- setup_font(new_value)
# A plus button for adding a move command if empty.
var cmd_count: int = element.get_attribute(attribute_name).get_command_count()
if cmd_count == 0 and not is_instance_valid(add_move_button):
diff --git a/src/ui_widgets/points_field.gd b/src/ui_widgets/points_field.gd
index 2c20805..b441f96 100644
--- a/src/ui_widgets/points_field.gd
+++ b/src/ui_widgets/points_field.gd
@@ -13,7 +13,7 @@ const STRIP_HEIGHT = 22.0
signal focused
-const MiniNumberFieldScene = preload("mini_number_field.tscn")
+const MiniNumberFieldScene = preload("res://src/ui_widgets/mini_number_field.tscn")
const more_icon = preload("res://assets/icons/SmallMore.svg")
const plus_icon = preload("res://assets/icons/Plus.svg")
@@ -22,7 +22,7 @@ var mini_line_edit_stylebox := get_theme_stylebox("normal", "MiniLineEdit")
var mini_line_edit_font_size := get_theme_font_size("font_size", "MiniLineEdit")
var mini_line_edit_font_color := get_theme_color("font_color", "MiniLineEdit")
-@onready var line_edit: LineEdit = $LineEdit
+@onready var line_edit: BetterLineEdit = $LineEdit
@onready var points_container: Control = $Points
# Variables around the big optimization.
@@ -96,7 +96,7 @@ func _on_line_edit_focus_entered() -> void:
func setup_font(new_text: String) -> void:
if new_text.is_empty():
- line_edit.add_theme_font_override("font", ThemeUtils.regular_font)
+ line_edit.add_theme_font_override("font", ThemeUtils.main_font)
else:
line_edit.remove_theme_font_override("font")
@@ -104,12 +104,12 @@ var last_synced_value := " " # Invalid initial string.
func sync() -> void:
var new_value := element.get_attribute_value(attribute_name)
+ line_edit.text = new_value
+ setup_font(new_value)
if last_synced_value == new_value:
return
last_synced_value = new_value
- line_edit.text = new_value
- setup_font(new_value)
# A plus button for adding a first point if empty.
var points_count: int = element.get_attribute(attribute_name).get_list_size() / 2
if points_count == 0 and not is_instance_valid(add_move_button):
diff --git a/src/ui_widgets/profile_frame.gd b/src/ui_widgets/profile_frame.gd
index b44a913..5db4571 100644
--- a/src/ui_widgets/profile_frame.gd
+++ b/src/ui_widgets/profile_frame.gd
@@ -1,12 +1,12 @@
# This is similar to SettingFrame, but specifically for dropdowns without a default value.
extends MarginContainer
-const Dropdown = preload("res://src/ui_widgets/dropdown.gd")
+const BasicDropdown = preload("res://src/ui_widgets/dropdown_basic.gd")
signal value_changed
signal defaults_applied
-const DropdownScene = preload("res://src/ui_widgets/dropdown.tscn")
+const BasicDropdownScene = preload("res://src/ui_widgets/dropdown_basic.tscn")
var getter: Callable
var setter: Callable
@@ -14,15 +14,16 @@ var disabled_check_callback: Callable
var text: String
var ci := get_canvas_item()
-var dropdown: Dropdown
+var dropdown: BasicDropdown
var is_hovered := false
+var tooltip_rect := Rect2(NAN, NAN, NAN, NAN)
@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 = BasicDropdownScene.instantiate()
dropdown.values = values
dropdown.value_text_map = value_text_map
@@ -57,7 +58,7 @@ func button_update_disabled() -> void:
func setup_size() -> void:
dropdown.position = Vector2(control.size.x - 102, 1)
- dropdown.size = Vector2(98, 22)
+ dropdown.size = Vector2(100, 22)
queue_redraw()
# value can be String for dropdown or int for enum dropdown.
@@ -78,5 +79,20 @@ 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, 19), text,
- HORIZONTAL_ALIGNMENT_LEFT, -1, 13, ThemeUtils.text_color)
+
+ var text_width := size.x - button.size.x - dropdown.size.x - 16
+ var text_obj := TextLine.new()
+ text_obj.add_string(text, ThemeUtils.main_font, 13)
+ text_obj.width = text_width
+ text_obj.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
+ text_obj.draw(ci, Vector2(4, 5), ThemeUtils.text_color)
+
+ if text_width < ThemeUtils.main_font.get_string_size(text, HORIZONTAL_ALIGNMENT_LEFT, -1, 13).x:
+ tooltip_rect = Rect2(4, 5, text_width, size.y - 10)
+ else:
+ tooltip_rect = Rect2(NAN, NAN, NAN, NAN)
+
+func _get_tooltip(at_position: Vector2) -> String:
+ if tooltip_rect.is_finite() and tooltip_rect.has_point(at_position):
+ return text
+ return ""
diff --git a/src/ui_widgets/profile_frame.tscn b/src/ui_widgets/profile_frame.tscn
index 48fc25a..038d265 100644
--- a/src/ui_widgets/profile_frame.tscn
+++ b/src/ui_widgets/profile_frame.tscn
@@ -15,6 +15,7 @@ script = ExtResource("1_urnhl")
[node name="HBoxContainer" type="HBoxContainer" parent="."]
layout_mode = 2
+theme_override_constants/separation = 2
[node name="Control" type="Control" parent="HBoxContainer"]
layout_mode = 2
diff --git a/src/ui_widgets/setting_frame.gd b/src/ui_widgets/setting_frame.gd
index 15fdd36..ec0375b 100644
--- a/src/ui_widgets/setting_frame.gd
+++ b/src/ui_widgets/setting_frame.gd
@@ -1,14 +1,20 @@
extends Control
-enum Type {NONE, CHECKBOX, COLOR, DROPDOWN, NUMBER_DROPDOWN}
+const reload_icon = preload("res://assets/icons/Reload.svg")
+const clear_icon = preload("res://assets/icons/Clear.svg")
+
+enum Type {NONE, CHECKBOX, COLOR, DROPDOWN, NUMERIC_DROPDOWN, FILE_PATH}
var type := Type.NONE
signal value_changed
+const info_icon = preload("res://assets/icons/Info.svg")
+
+const OptimizerSettingInfoScene = preload("res://src/ui_widgets/optimizer_setting_info.tscn")
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")
+const BasicDropdownScene = preload("res://src/ui_widgets/dropdown_basic.tscn")
+const NumericDropdownScene = preload("res://src/ui_widgets/dropdown_numeric.tscn")
+const FilePathFieldScene = preload("res://src/ui_widgets/file_path_field.tscn")
var getter: Callable
var setter: Callable
@@ -25,12 +31,30 @@ var dim_text := false # For settings that wouldn't have an effect.
var widget: Control
var panel_width := 0
+var info_button: Button
var is_focused := false
+var tooltip_rect := Rect2(NAN, NAN, NAN, NAN)
@onready var reset_button: Button = $ResetButton
var ci := get_canvas_item()
+func set_optimizer_info(example_root: ElementRoot, optimizer: Optimizer, main_text := "") -> void:
+ info_button = Button.new()
+ info_button.icon = info_icon
+ info_button.theme_type_variation = "FlatButton"
+ info_button.mouse_filter = Control.MOUSE_FILTER_PASS
+ info_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
+ info_button.focus_mode = Control.FOCUS_NONE
+ add_child(info_button)
+ info_button.pressed.connect(func() -> void:
+ var info := OptimizerSettingInfoScene.instantiate()
+ info.setup(example_root.duplicate(), optimizer, main_text)
+ HandlerGUI.popup_under_rect_center(info, info_button.get_global_rect(), get_viewport())
+ )
+ var margin_size := (size.y - info_button.size.y) / 2.0
+ info_button.position = Vector2(margin_size, margin_size)
+
func permanent_disable_checkbox(checkbox_state: bool) -> void:
disabled = true
widget.set_pressed_no_signal(checkbox_state)
@@ -46,7 +70,7 @@ func setup_checkbox() -> void:
widget.button_pressed = getter.call()
widget.toggled.connect(_checkbox_modification.unbind(1))
type = Type.CHECKBOX
- panel_width = 76
+ panel_width = 74
func setup_color(enable_alpha: bool) -> void:
widget = ColorEditScene.instantiate()
@@ -55,52 +79,58 @@ func setup_color(enable_alpha: bool) -> void:
add_child(widget)
widget.value_changed.connect(_color_modification.bind(enable_alpha))
type = Type.COLOR
- panel_width = 114 if enable_alpha else 100
+ panel_width = 110 if enable_alpha else 96
+
+func setup_file_path(extensions: PackedStringArray) -> void:
+ widget = FilePathFieldScene.instantiate()
+ widget.extensions = extensions
+ widget.value = getter.call()
+ add_child(widget)
+ widget.value_changed.connect(_generic_modification)
+ type = Type.FILE_PATH
+ panel_width = 160
# TODO Typed Dictionary wonkiness
-func setup_dropdown(values: Array[Variant],
-value_text_map: Dictionary) -> void: # Dictionary[Variant, String]
- widget = DropdownScene.instantiate()
+func setup_dropdown(values: Array[Variant], value_text_map: Dictionary) -> void: # Dictionary[Variant, String]
+ widget = BasicDropdownScene.instantiate()
widget.values = values
- widget.restricted = true
widget.value_text_map = value_text_map
add_child(widget)
- widget.value_changed.connect(_dropdown_modification)
+ widget.value_changed.connect(_generic_modification)
type = Type.DROPDOWN
- panel_width = 100
+ panel_width = 140
-func setup_number_dropdown(values: Array[float], is_integer: bool, restricted: bool,
-min_value: float, max_value: float) -> void:
- widget = NumberDropdownScene.instantiate()
- widget.values = values
- widget.is_integer = is_integer
- widget.restricted = restricted
+func setup_numeric_dropdown(values_for_dropdown: PackedFloat64Array, use_integers: bool,
+min_value: float, max_value: float, special_value_exception: float, value_text_map: Dictionary[float, String]) -> void:
+ widget = NumericDropdownScene.instantiate()
+ widget.values_for_dropdown = values_for_dropdown
+ widget.use_integers = use_integers
widget.min_value = min_value
widget.max_value = max_value
+ widget.special_value_exception = special_value_exception
+ widget.value_text_map = value_text_map
add_child(widget)
- widget.value_changed.connect(_number_dropdown_modification)
- 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
+ widget.value_changed.connect(_float_modification_with_nan_reset)
+ type = Type.NUMERIC_DROPDOWN
+ panel_width = 101
func _ready() -> void:
- widget.size = Vector2(panel_width - 32, 22)
+ widget.custom_minimum_size = Vector2(panel_width - 28, 22)
focus_entered.connect(_on_focus_entered)
focus_exited.connect(_on_focus_exited)
resized.connect(_on_resized)
reset_button.reset_size()
if type != Type.NONE:
widget.reset_size()
- reset_button.tooltip_text = Translator.translate("Reset to default")
- reset_button.set_anchors_and_offsets_preset(Control.PRESET_CENTER_RIGHT)
+ reset_button.position = Vector2(size.x - 24, 4)
reset_button.pressed.connect(_on_reset_button_pressed)
update_widgets()
+ if typeof(default) == TYPE_STRING and default.is_empty():
+ reset_button.tooltip_text = Translator.translate("Clear")
+ reset_button.icon = clear_icon
+ else:
+ reset_button.tooltip_text = Translator.translate("Reset to default")
+ reset_button.icon = reload_icon
func _on_resized() -> void:
widget.position = Vector2(size.x - panel_width, 3)
@@ -120,33 +150,15 @@ func _color_modification(value: String, enable_alpha: bool) -> void:
setter.call(ColorParser.text_to_color(value, Color(), enable_alpha))
post_modification()
-func _dropdown_modification(value: int) -> void:
+func _generic_modification(value: Variant) -> void:
setter.call(value)
post_modification()
-func _number_dropdown_modification(value: String) -> void:
- var actual_number := NumstringParser.evaluate(value)
- actual_number = clampf(actual_number, widget.min_value, widget.max_value)
- value = var_to_str(actual_number)
- if value == "nan":
+func _float_modification_with_nan_reset(value: float) -> void:
+ if is_nan(value):
setter.call(default)
else:
- 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)
+ setter.call(value)
post_modification()
@@ -169,11 +181,11 @@ func update_widgets() -> void:
var setting_str := setting_value.to_html(show_alpha)
widget.value = setting_str
reset_button.visible = (not disabled and getter.call().to_html() != default.to_html())
- Type.DROPDOWN:
+ Type.DROPDOWN, Type.FILE_PATH:
widget.set_value(getter.call())
reset_button.visible = (not disabled and getter.call() != default)
- Type.NUMBER_DROPDOWN:
- widget.set_value(widget.to_str(getter.call()))
+ Type.NUMERIC_DROPDOWN:
+ widget.set_value(getter.call())
reset_button.visible = not (disabled or is_equal_approx(getter.call(), default))
queue_redraw()
@@ -199,11 +211,25 @@ func _draw() -> void:
elif dim_text:
color = ThemeUtils.dimmer_text_color
+ var text_pos_x := 4.0
var non_panel_width := size.x - panel_width
+ var text_space := non_panel_width - 16
+ if is_instance_valid(info_button):
+ text_pos_x += info_button.size.x + (size.y - info_button.size.x) / 2.0
+ text_space -= size.y
var text_obj := TextLine.new()
- text_obj.add_string(text, ThemeUtils.regular_font, 13)
- text_obj.width = non_panel_width - 16
+ text_obj.add_string(text, ThemeUtils.main_font, 13)
+ text_obj.width = text_space
text_obj.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
- text_obj.draw(ci, Vector2(4, 5), color)
- get_theme_stylebox("panel", "SubtleFlatPanel").draw(ci, Rect2(non_panel_width - 2, 2,
- panel_width, size.y - 4))
+ text_obj.draw(ci, Vector2(text_pos_x, 5), color)
+ get_theme_stylebox("panel", "SubtleFlatPanel").draw(ci, Rect2(non_panel_width - 2, 2, panel_width, size.y - 4))
+
+ if text_space < ThemeUtils.main_font.get_string_size(text, HORIZONTAL_ALIGNMENT_LEFT, -1, 13).x:
+ tooltip_rect = Rect2(text_pos_x, 5, text_space, size.y - 10)
+ else:
+ tooltip_rect = Rect2(NAN, NAN, NAN, NAN)
+
+func _get_tooltip(at_position: Vector2) -> String:
+ if tooltip_rect.is_finite() and tooltip_rect.has_point(at_position):
+ return text
+ return ""
diff --git a/src/ui_widgets/setting_frame.tscn b/src/ui_widgets/setting_frame.tscn
index 9b64060..7651941 100644
--- a/src/ui_widgets/setting_frame.tscn
+++ b/src/ui_widgets/setting_frame.tscn
@@ -1,7 +1,6 @@
-[gd_scene load_steps=3 format=3 uid="uid://speqrhruag5k"]
+[gd_scene load_steps=2 format=3 uid="uid://speqrhruag5k"]
[ext_resource type="Script" uid="uid://3tqaiuqu1h01" path="res://src/ui_widgets/setting_frame.gd" id="1_p1ngn"]
-[ext_resource type="Texture2D" uid="uid://cvh3kwbucf2n1" path="res://assets/icons/Reload.svg" id="2_8lqnd"]
[node name="SettingFrame" type="Control"]
custom_minimum_size = Vector2(0, 28)
@@ -28,4 +27,3 @@ focus_mode = 0
mouse_filter = 1
mouse_default_cursor_shape = 2
theme_type_variation = &"FlatButton"
-icon = ExtResource("2_8lqnd")
diff --git a/src/ui_widgets/settings_content_generic.gd b/src/ui_widgets/settings_content_generic.gd
index 388d456..9bec221 100644
--- a/src/ui_widgets/settings_content_generic.gd
+++ b/src/ui_widgets/settings_content_generic.gd
@@ -2,6 +2,7 @@ extends VBoxContainer
const SettingsMenu = preload("res://src/ui_parts/settings_menu.gd")
+const CollapseableDescriptionScene = preload("res://src/ui_widgets/collapseable_description.tscn")
const SettingFrameScene = preload("res://src/ui_widgets/setting_frame.tscn")
const ProfileFrameScene = preload("res://src/ui_widgets/profile_frame.tscn")
@@ -11,10 +12,11 @@ var type: SettingsMenu.TabIndex
var current_setup_setting := ""
var current_setup_resource_index := 0
+var current_setup_container: VBoxContainer
+
var setting_container: VBoxContainer
var previews: Dictionary[String, RefCounted] = {}
-
var current_previewed_setting := ""
signal preview_changed(node: Control)
@@ -109,9 +111,11 @@ func setup_content() -> void:
for child in setting_container.get_children():
setting_container.remove_child(child)
child.queue_free()
+ current_setup_container = setting_container
match type:
SettingsMenu.TabIndex.FORMATTING: setup_formatting_content()
+ SettingsMenu.TabIndex.OPTIMIZER: setup_optimizer_content()
SettingsMenu.TabIndex.THEMING: setup_theming_content()
SettingsMenu.TabIndex.TAB_BAR: setup_tab_bar_content()
SettingsMenu.TabIndex.OTHER: setup_other_content()
@@ -120,26 +124,35 @@ func setup_content() -> void:
func setup_formatting_content() -> void:
var current_setup_resource: Formatter = _get_current_setup_resource()
+ var additional_text := "\n" + Translator.translate(
+ "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact.")
+
+ if current_setup_resource == Configs.savedata.editor_formatter:
+ var short_text := Translator.translate("Determines how SVG attributes and content appear in the GodSVG interface.")
+ add_clarification_text(short_text + additional_text, short_text)
+ elif current_setup_resource == Configs.savedata.export_formatter:
+ var short_text := Translator.translate("Determines how SVG attributes and content are formatted when saving the file.")
+ add_clarification_text(short_text + additional_text, short_text)
+
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_preview(SettingTextPreview.new(
- Translator.translate("Determines the default values of the formatter configs.")))
+ add_preview(SettingTextPreview.new(Translator.translate(
+ "Determines the default values of the formatter configs.")))
add_section("XML")
- current_setup_setting = "xml_keep_comments"
- add_checkbox(Translator.translate("Keep comments"))
- var xml_keep_comments_root_element := ElementRoot.new()
- xml_keep_comments_root_element.insert_child(0,
- BasicXNode.new(BasicXNode.NodeType.COMMENT, " Comment "))
- var xml_keep_comments_circle_element := ElementCircle.new()
- xml_keep_comments_circle_element.set_attribute("cx", 6)
- xml_keep_comments_circle_element.set_attribute("cy", 8)
- xml_keep_comments_circle_element.set_attribute("r", 4)
- xml_keep_comments_circle_element.set_attribute("fill", "gold")
- xml_keep_comments_root_element.insert_child(1, xml_keep_comments_circle_element)
- add_preview(SettingFormatterPreview.new(current_setup_resource, xml_keep_comments_root_element, true))
+ current_setup_setting = "xml_remove_comments"
+ add_checkbox(Translator.translate("Remove comments"))
+ var xml_remove_comments_root_element := ElementRoot.new()
+ xml_remove_comments_root_element.insert_child(0, BasicXNode.new(BasicXNode.NodeType.COMMENT, " Comment "))
+ var xml_remove_comments_circle_element := ElementCircle.new()
+ xml_remove_comments_circle_element.set_attribute("cx", 6)
+ xml_remove_comments_circle_element.set_attribute("cy", 8)
+ xml_remove_comments_circle_element.set_attribute("r", 4)
+ xml_remove_comments_circle_element.set_attribute("fill", "gold")
+ xml_remove_comments_root_element.insert_child(1, xml_remove_comments_circle_element)
+ add_preview(SettingFormatterPreview.new(current_setup_resource, xml_remove_comments_root_element, true))
current_setup_setting = "xml_add_trailing_newline"
add_checkbox(Translator.translate("Add trailing newline"))
@@ -219,8 +232,8 @@ func setup_formatting_content() -> void:
not current_setup_resource.xml_pretty_formatting)))
current_setup_setting = "xml_indentation_spaces"
- add_number_dropdown(Translator.translate("Number of indentation spaces"),
- [2, 3, 4, 6, 8], true, false, Formatter.INDENTS_MIN, Formatter.INDENTS_MAX,
+ add_numeric_dropdown(Translator.translate("Number of indentation spaces"),
+ PackedFloat64Array([2, 3, 4, 6, 8]), true, Formatter.INDENTS_MIN, Formatter.INDENTS_MAX, NAN, {},
not (current_setup_resource.xml_pretty_formatting and current_setup_resource.xml_indentation_use_spaces))
if current_setup_resource.xml_pretty_formatting and current_setup_resource.xml_indentation_use_spaces:
var xml_indentation_spaces_root_element := ElementRoot.new()
@@ -376,6 +389,80 @@ func setup_formatting_content() -> void:
transform_list_remove_unnecessary_params_root_element.insert_child(0, transform_list_remove_unnecessary_params_polygon_element)
add_preview(SettingFormatterPreview.new(current_setup_resource, transform_list_remove_unnecessary_params_root_element, true))
+func setup_optimizer_content() -> void:
+ var short_text := Translator.translate("Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action.").format(
+ {"optimize": TranslationUtils.get_action_description("optimize")})
+ var additional_text := "\n" + Translator.translate(
+ "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually.")
+ add_clarification_text(short_text + additional_text, short_text)
+
+ add_section("Lossless")
+
+ current_setup_setting = "remove_comments"
+ var remove_comments_checkbox := add_checkbox(Translator.translate("Remove comments"), false)
+ var remove_comments_root_element := ElementRoot.new()
+ remove_comments_root_element.set_attribute("xmlns", "http://www.w3.org/2000/svg")
+ remove_comments_root_element.set_attribute("width", "16")
+ remove_comments_root_element.set_attribute("height", "16")
+ var remove_comments_circle := ElementCircle.new()
+ remove_comments_circle.set_attribute("stroke", "plum")
+ remove_comments_circle.set_attribute("fill", "olive")
+ remove_comments_circle.set_attribute("cx", "8")
+ remove_comments_circle.set_attribute("cy", "8")
+ remove_comments_circle.set_attribute("r", "6")
+ remove_comments_root_element.insert_child(0, BasicXNode.new(BasicXNode.NodeType.COMMENT, " A comment "))
+ remove_comments_root_element.insert_child(1, remove_comments_circle)
+ remove_comments_checkbox.set_optimizer_info(remove_comments_root_element, Optimizer.new(), Translator.translate("Remove comments"))
+
+ current_setup_setting = "convert_shapes"
+ var convert_shapes_checkbox := add_checkbox(Translator.translate("Convert shapes"), false)
+ var convert_shapes_root_element := ElementRoot.new()
+ convert_shapes_root_element.set_attribute("xmlns", "http://www.w3.org/2000/svg")
+ convert_shapes_root_element.set_attribute("width", "16")
+ convert_shapes_root_element.set_attribute("height", "16")
+ var convert_shapes_rect := ElementRect.new()
+ convert_shapes_rect.set_attribute("x", "4")
+ convert_shapes_rect.set_attribute("y", "2")
+ convert_shapes_rect.set_attribute("width", "8")
+ convert_shapes_rect.set_attribute("height", "8")
+ convert_shapes_rect.set_attribute("fill", "plum")
+ convert_shapes_root_element.insert_child(0, convert_shapes_rect)
+ var convert_shapes_ellipse := ElementEllipse.new()
+ convert_shapes_ellipse.set_attribute("cx", "7")
+ convert_shapes_ellipse.set_attribute("cy", "5")
+ convert_shapes_ellipse.set_attribute("rx", "4")
+ convert_shapes_ellipse.set_attribute("ry", "4")
+ convert_shapes_ellipse.set_attribute("fill", "olive")
+ convert_shapes_root_element.insert_child(1, convert_shapes_ellipse)
+ var convert_shapes_line := ElementLine.new()
+ convert_shapes_line.set_attribute("x1", "12")
+ convert_shapes_line.set_attribute("y1", "8")
+ convert_shapes_line.set_attribute("x2", "9")
+ convert_shapes_line.set_attribute("y2", "14")
+ convert_shapes_line.set_attribute("stroke", "gold")
+ convert_shapes_root_element.insert_child(2, convert_shapes_line)
+ var convert_shapes_polygon := ElementLine.new()
+ convert_shapes_polygon.set_attribute("points", "2 2 9 14 5 12 5 2")
+ convert_shapes_polygon.set_attribute("stroke", "silver")
+ convert_shapes_root_element.insert_child(3, convert_shapes_polygon)
+ convert_shapes_checkbox.set_optimizer_info(convert_shapes_root_element, Optimizer.new(), Translator.translate(
+ "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible.") +\
+ "\nTemporary note: Currently, paths can't be simplified.")
+
+ current_setup_setting = "simplify_path_parameters"
+ var simplify_path_params_checkbox := add_checkbox(Translator.translate("Simplify path parameters"), false)
+ var simplify_path_params_root_element := ElementRoot.new()
+ simplify_path_params_root_element.set_attribute("xmlns", "http://www.w3.org/2000/svg")
+ simplify_path_params_root_element.set_attribute("width", "16")
+ simplify_path_params_root_element.set_attribute("height", "16")
+ var simplify_path_params_rect := ElementPath.new()
+ simplify_path_params_rect.set_attribute("fill", "plum")
+ simplify_path_params_rect.set_attribute("d", "M 2 2 L 8 2 L 8 5 A 3 3 -90 0 0 12 10")
+ simplify_path_params_root_element.insert_child(0, simplify_path_params_rect)
+ simplify_path_params_checkbox.set_optimizer_info(simplify_path_params_root_element, Optimizer.new(), Translator.translate(
+ "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible.") +\
+ "\nTemporary note: Currently, the only simplifications are converting lines into horizontal or vertical ones, and clearing rotation from circular arcs.")
+
func setup_theming_content() -> void:
var current_setup_resource := Configs.savedata
@@ -401,6 +488,14 @@ func setup_theming_content() -> void:
var basic_svg_text_with_syntax_error = """ Basic text & " ' ]]> """
+ add_section(Translator.translate("Fonts"))
+ current_setup_setting = "main_font_path"
+ add_font_file_path_field(Translator.translate("Main font"))
+ current_setup_setting = "bold_font_path"
+ add_font_file_path_field(Translator.translate("Bold font"))
+ current_setup_setting = "mono_font_path"
+ add_font_file_path_field(Translator.translate("Mono font"))
+
add_section(Translator.translate("SVG Text colors"))
current_setup_setting = "highlighter_preset"
add_profile_picker(Translator.translate("Highlighter preset"),
@@ -470,8 +565,8 @@ func setup_theming_content() -> void:
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)
+ add_numeric_dropdown(Translator.translate("Size"), PackedFloat64Array([0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.5, 3.0]),
+ false, SaveData.HANDLE_SIZE_MIN, SaveData.HANDLE_SIZE_MAX, NAN, {})
add_preview(SettingCanvasPreview.new(handle_presentation_root, PackedInt32Array([0, 2]), [PackedInt32Array([0, 1]), PackedInt32Array([0, 2, 1])], false))
current_setup_setting = "handle_inner_color"
add_color_edit(Translator.translate("Inside color"), false)
@@ -491,20 +586,17 @@ func setup_theming_content() -> void:
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)
+ add_numeric_dropdown(Translator.translate("Speed"),
+ PackedFloat64Array([0.0, 10.0, 20.0, 30.0, 50.0, 80.0, 130.0]), false,
+ -SaveData.MAX_SELECTION_RECTANGLE_SPEED, SaveData.MAX_SELECTION_RECTANGLE_SPEED)
add_preview(SettingCanvasPreview.new(selection_rectangle_presentation_root, PackedInt32Array(), [PackedInt32Array([0])]))
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)
+ add_numeric_dropdown(Translator.translate("Width"),
+ PackedFloat64Array([1.0, 2.0, 3.0, 4.0]), false, 1.0, SaveData.MAX_SELECTION_RECTANGLE_WIDTH)
add_preview(SettingCanvasPreview.new(selection_rectangle_presentation_root, PackedInt32Array(), [PackedInt32Array([0])]))
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)
+ add_numeric_dropdown(Translator.translate("Dash length"),
+ PackedFloat64Array([5.0, 10.0, 15.0, 20.0]), false, 1.0, SaveData.MAX_SELECTION_RECTANGLE_DASH_LENGTH)
add_preview(SettingCanvasPreview.new(selection_rectangle_presentation_root, PackedInt32Array(), [PackedInt32Array([0])]))
current_setup_setting = "selection_rectangle_color1"
add_color_edit(Translator.translate("Color {index}").format({"index": "1"}))
@@ -554,8 +646,8 @@ func setup_other_content() -> void:
wraparound_panning.permanent_disable_checkbox(false)
current_setup_setting = "panning_speed"
- add_number_dropdown(Translator.translate("Panning speed"), [5, 10, 20, 30, 50], true, false,
- SaveData.PANNING_SPEED_MIN, SaveData.PANNING_SPEED_MAX)
+ add_numeric_dropdown(Translator.translate("Panning speed"), PackedFloat64Array([5, 10, 20, 30, 50]),
+ true, SaveData.PANNING_SPEED_MIN, SaveData.PANNING_SPEED_MAX)
add_preview(SettingTextPreview.new(Translator.translate(
"Determines how much the view moves for scroll-based panning inputs.")))
@@ -589,8 +681,7 @@ func setup_other_content() -> void:
current_setup_setting = "ui_scale"
add_dropdown(Translator.translate("UI scale"), dropdown_map.keys(), dropdown_map)
- add_preview(SettingTextPreview.new(
- Translator.translate("Determines the scale factor for the interface.")))
+ add_preview(SettingTextPreview.new(Translator.translate("Determines the scale factor for the interface.")))
current_setup_setting = "vsync"
add_checkbox(Translator.translate("V-Sync"))
@@ -598,9 +689,9 @@ func setup_other_content() -> void:
"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_preview(SettingTextPreview.new(Translator.translate(
- "Determines the maximum number of frames per second.")))
+ add_numeric_dropdown(Translator.translate("Maximum FPS"), PackedFloat64Array([0, 30, 60, 90, 120, 144, 240, 360]),
+ true, SaveData.MAX_FPS_MIN, SaveData.MAX_FPS_MAX, 0, {0: Translator.translate("Unlimited")})
+ add_preview(SettingTextPreview.new(Translator.translate("Determines the maximum number of frames per second.")))
current_setup_setting = "keep_screen_on"
var keep_screen_on := add_checkbox(Translator.translate("Keep screen on"))
@@ -631,6 +722,11 @@ func setup_other_content() -> void:
"When enabled, adds the current file name before the \"VectorTouch\" window title.")))
+func add_clarification_text(full_text: String, short_text: String) -> void:
+ var clarification := CollapseableDescriptionScene.instantiate()
+ current_setup_container.add_child(clarification)
+ clarification.setup(full_text, short_text)
+
func add_section(section_name: String) -> void:
var vbox := VBoxContainer.new()
vbox.add_theme_constant_override("separation", 0)
@@ -642,7 +738,9 @@ func add_section(section_name: String) -> void:
var spacer := Control.new()
spacer.custom_minimum_size.y = 2
vbox.add_child(spacer)
- setting_container.add_child(vbox)
+ current_setup_container = setting_container
+ current_setup_container.add_child(vbox)
+ current_setup_container = vbox
func add_profile_picker(text: String, application_callback: Callable, profile_count: int,
value_text_map: Dictionary, disabled_check_callback: Callable) -> void:
@@ -654,12 +752,11 @@ value_text_map: Dictionary, disabled_check_callback: Callable) -> void:
frame.value_changed.connect.call_deferred(setup_content)
frame.defaults_applied.connect(application_callback)
frame.defaults_applied.connect(setup_content)
- add_frame(frame)
+ current_setup_container.add_child(frame)
var resource_permanent_ref := _get_current_setup_resource()
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)
+ 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()
@@ -667,7 +764,7 @@ func add_checkbox(text: String, dim_text := false) -> Control:
frame.text = text
setup_frame(frame)
frame.setup_checkbox()
- add_frame(frame)
+ current_setup_container.add_child(frame)
# Some checkboxes need to update the dimness of the text of other settings.
# There's no continuous editing with checkboxes, so it's safe to just rebuild
# the content for them.
@@ -675,43 +772,44 @@ func add_checkbox(text: String, dim_text := false) -> Control:
return frame
# TODO Typed Dictionary wonkiness
-func add_dropdown(text: String, values: Array[Variant],
-value_text_map: Dictionary) -> Control: # Dictionary[Variant, String]
+func add_dropdown(text: String, values: Array[Variant], value_text_map := {}) -> Control: # Dictionary[Variant, String]
var frame := SettingFrameScene.instantiate()
frame.text = text
setup_frame(frame)
frame.setup_dropdown(values, value_text_map)
- add_frame(frame)
+ current_setup_container.add_child(frame)
# Some checkboxes need to update the dimness of the text of other settings.
# There's no continuous editing with checkboxes, so it's safe to just rebuild the content for them.
frame.value_changed.connect(setup_content)
return frame
-func add_number_dropdown(text: String, values: Array[float], is_integer := false,
-restricted := true, min_value := -INF, max_value := INF, dim_text := false) -> Control:
+func add_numeric_dropdown(text: String, values_for_dropdown: PackedFloat64Array, use_integers := false,
+min_value := -INF, max_value := INF, special_value_exception := NAN, value_text_map: Dictionary[float, String] = {}, dim_text := false) -> Control:
var frame := SettingFrameScene.instantiate()
frame.dim_text = dim_text
frame.text = text
setup_frame(frame)
- frame.setup_number_dropdown(values, is_integer, restricted, min_value, max_value)
- add_frame(frame)
+ frame.setup_numeric_dropdown(values_for_dropdown, use_integers, min_value, max_value, special_value_exception, value_text_map)
+ current_setup_container.add_child(frame)
return frame
-func add_fps_limit_dropdown(text: String, dim_text := false) -> Control:
+func add_color_edit(text: String, enable_alpha := true) -> Control:
var frame := SettingFrameScene.instantiate()
- frame.dim_text = dim_text
frame.text = text
setup_frame(frame)
- frame.setup_fps_limit_dropdown()
- add_frame(frame)
+ frame.setup_color(enable_alpha)
+ current_setup_container.add_child(frame)
return frame
-func add_color_edit(text: String, enable_alpha := true) -> Control:
+func add_font_file_path_field(text: String) -> Control:
+ return _add_file_path_field(text, Utils.DYNAMIC_FONT_FORMATS)
+
+func _add_file_path_field(text: String, extensions_list: PackedStringArray) -> Control:
var frame := SettingFrameScene.instantiate()
frame.text = text
setup_frame(frame)
- frame.setup_color(enable_alpha)
- add_frame(frame)
+ frame.setup_file_path(extensions_list)
+ current_setup_container.add_child(frame)
return frame
func setup_frame(frame: Control, has_default := true) -> void:
@@ -733,12 +831,6 @@ func setup_frame(frame: Control, has_default := true) -> void:
HandlerGUI.popups_cleared.connect(remove_preview.bind(bind), CONNECT_ONE_SHOT)
)
-func add_frame(frame: Control) -> void:
- if setting_container.get_child_count() > 0:
- setting_container.get_child(-1).add_child(frame)
- else:
- setting_container.add_child(frame)
-
func add_preview(preview: RefCounted) -> void:
previews[current_setup_setting] = preview
diff --git a/src/ui_widgets/transform_editor.tscn b/src/ui_widgets/transform_editor.tscn
index caadf22..469aa07 100644
--- a/src/ui_widgets/transform_editor.tscn
+++ b/src/ui_widgets/transform_editor.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://c7xhf7bodwnl1"]
[ext_resource type="Script" uid="uid://cdipr84aqj703" path="res://src/ui_widgets/transform_editor.gd" id="1_q14io"]
-[ext_resource type="FontFile" uid="uid://depydd16jq777" path="res://assets/fonts/FontMono.ttf" id="2_84xsl"]
+[ext_resource type="FontVariation" uid="uid://pup5vmxl1t6m" path="res://assets/fonts/MonoFont.tres" id="2_futq3"]
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_af5dq"]
content_margin_left = 2.0
@@ -30,4 +30,4 @@ focus_mode = 0
mouse_default_cursor_shape = 2
theme_type_variation = &"FlatButton"
theme_override_constants/h_separation = 4
-theme_override_fonts/font = ExtResource("2_84xsl")
+theme_override_fonts/font = ExtResource("2_futq3")
diff --git a/src/ui_widgets/transform_field.gd b/src/ui_widgets/transform_field.gd
index aa82da7..7cb764d 100644
--- a/src/ui_widgets/transform_field.gd
+++ b/src/ui_widgets/transform_field.gd
@@ -15,6 +15,7 @@ func set_value(new_value: String, save := false) -> void:
func _ready() -> void:
Configs.language_changed.connect(sync_localization)
+ sync_localization()
sync()
element.attribute_changed.connect(_on_element_attribute_changed)
tooltip_text = attribute_name
@@ -24,7 +25,6 @@ func _ready() -> void:
text_change_canceled.connect(sync)
button_gui_input.connect(_on_button_gui_input)
pressed.connect(_on_pressed)
- sync_localization()
func _on_element_attribute_changed(attribute_changed: String) -> void:
@@ -39,6 +39,7 @@ func setup_font(new_text: String) -> void:
func sync() -> void:
text = element.get_attribute_value(attribute_name)
+ setup_font(text)
func _on_pressed() -> void:
var transform_popup := TransformPopupScene.instantiate()
diff --git a/src/utils/ClipboardUtils.gd b/src/utils/ClipboardUtils.gd
index 99fa8ac..d83c680 100644
--- a/src/utils/ClipboardUtils.gd
+++ b/src/utils/ClipboardUtils.gd
@@ -50,33 +50,26 @@ static func copy_image(export_data: ImageExportData) -> ClipboardError:
# 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":
+ var temp_path := _save_temp_to_disk(export_data)
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)
+ _clean_temp(temp_path)
"wl-copy":
- cmd = ["wl-copy -f -t %s < '%s'" % [mime_type, temp_path]]
- var dict := OS.execute_with_pipe("bash", ["-c", "".join(cmd)], false)
+ var dict := OS.execute_with_pipe("wl-copy", ["-t", mime_type], 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.store_buffer(export_data.image_to_buffer(export_data.generate_image()))
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")
+ OS.delay_msec(10)
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:
diff --git a/src/utils/ExpressionScript.gd b/src/utils/ExpressionScript.gd
new file mode 100644
index 0000000..dcc1585
--- /dev/null
+++ b/src/utils/ExpressionScript.gd
@@ -0,0 +1,11 @@
+class_name ExpressionScript extends Object
+
+const E = 2.718281828
+const PHI = (1 + sqrt(5)) / 2.0
+const e = E
+const pi = PI
+const tau = TAU
+const phi = PHI
+const Pi = PI
+const Tau = TAU
+const Phi = PHI
diff --git a/src/utils/ExpressionScript.gd.uid b/src/utils/ExpressionScript.gd.uid
new file mode 100644
index 0000000..3529a2c
--- /dev/null
+++ b/src/utils/ExpressionScript.gd.uid
@@ -0,0 +1 @@
+uid://byp7i4a25j0qa
diff --git a/src/utils/FileUtils.gd b/src/utils/FileUtils.gd
index cddbf23..4c1de58 100644
--- a/src/utils/FileUtils.gd
+++ b/src/utils/FileUtils.gd
@@ -156,7 +156,7 @@ static func _finish_xml_export(file_path: String, xml: String) -> void:
static func _finish_reference_load(data: Variant, file_path: String, final_callback: Callable) -> void:
var img := Image.new()
- match file_path.get_extension().to_lower():
+ match Utils.get_lowercase_extension(file_path):
"svg": img.load_svg_from_string(data)
"png": img.load_png_from_buffer(data)
"jpg", "jpeg": img.load_jpg_from_buffer(data)
@@ -173,17 +173,17 @@ static func _choose_file_name() -> String:
# No need for completion callback here yet.
static func open_svg_import_dialog() -> void:
- _open_import_dialog(PackedStringArray(["svg"]), _apply_svg, true)
+ open_custom_import_dialog(PackedStringArray(["svg"]), _apply_svg, true)
static func open_image_import_dialog(completion_callback: Callable) -> void:
- _open_import_dialog(PackedStringArray(["png", "jpg", "jpeg", "webp", "svg"]), _finish_reference_load.bind(completion_callback))
+ open_custom_import_dialog(Utils.IMAGE_FORMATS, _finish_reference_load.bind(completion_callback))
static func open_xml_import_dialog(completion_callback: Callable) -> void:
- _open_import_dialog(PackedStringArray(["xml"]), completion_callback)
+ open_custom_import_dialog(PackedStringArray(["xml"]), completion_callback)
# On web, the completion callback can't use the full file path.
-static func _open_import_dialog(extensions: PackedStringArray, completion_callback: Callable, multi_select := false) -> void:
+static func open_custom_import_dialog(extensions: PackedStringArray, completion_callback: Callable, multi_select := false) -> void:
var permission := "android.permission.READ_MEDIA_IMAGES"
if Configs.current_sdk < 33:
permission = "android.permission.READ_EXTERNAL_STORAGE"
@@ -225,7 +225,7 @@ static func _start_file_import_process(file_paths: PackedStringArray, completion
allowed_extensions: PackedStringArray, show_incorrect_extension_errors := true) -> void:
if not show_incorrect_extension_errors:
for i in range(file_paths.size() - 1, -1, -1):
- if not file_paths[i].get_extension() in allowed_extensions:
+ if not Utils.get_lowercase_extension(file_paths[i]) in allowed_extensions:
file_paths.remove_at(i)
if not file_paths.is_empty():
_file_import_proceed(file_paths, completion_callback)
@@ -233,7 +233,7 @@ allowed_extensions: PackedStringArray, show_incorrect_extension_errors := true)
var incorrect_extension_file_paths := PackedStringArray()
for i in range(file_paths.size() - 1, -1, -1):
- if not file_paths[i].get_extension() in allowed_extensions:
+ if not Utils.get_lowercase_extension(file_paths[i]) in allowed_extensions:
incorrect_extension_file_paths.append(Utils.simplify_file_path(file_paths[i]))
file_paths.remove_at(i)
@@ -309,14 +309,18 @@ static func _file_import_proceed(file_paths: PackedStringArray, completion_callb
# The XML callbacks currently happen to not need the file path.
# The SVG callback used currently can popup extra dialogs, so they need the callable.
- match file_path.get_extension():
- "svg":
- if file_paths.is_empty():
- completion_callback.call(file.get_as_text(), file_path)
- else:
- completion_callback.call(file.get_as_text(), file_path, proceed_callback, false)
- "xml": completion_callback.call(file.get_as_text())
- _: completion_callback.call(file.get_buffer(file.get_length()), file_path)
+ var file_extension := Utils.get_lowercase_extension(file_path)
+ if file_extension == "svg":
+ if file_paths.is_empty():
+ completion_callback.call(file.get_as_text(), file_path)
+ else:
+ completion_callback.call(file.get_as_text(), file_path, proceed_callback, false)
+ elif file_extension == "xml":
+ completion_callback.call(file.get_as_text())
+ elif file_extension in Utils.DYNAMIC_FONT_FORMATS:
+ completion_callback.call(file_path)
+ else:
+ completion_callback.call(file.get_buffer(file.get_length()), file_path)
static func _apply_svg(data: Variant, file_path: String, proceed_callback := Callable(), is_last_file := true) -> void:
@@ -333,7 +337,7 @@ static func _apply_svg(data: Variant, file_path: String, proceed_callback := Cal
{"file_path": Utils.simplify_file_path(file_path)})
if compare_svg_to_disk_contents(existing_tab_idx) == FileState.DIFFERENT:
alert_message += "\n\n" + Translator.translate(
- "If you want to revert your edits since the last save, use {reset_svg}.").format(
+ "If you want to revert your edits since the last save, use \"{reset_svg}\".").format(
{"reset_svg": TranslationUtils.get_action_description("reset_svg")})
if is_last_file:
@@ -598,7 +602,7 @@ static func _web_on_files_selected(args: Array) -> void:
window.vectortouchFileNames[i] = file.name
# Read file based on extension.
- if file.name.get_extension().to_lower() in ["svg", "xml"]:
+ if Utils.get_lowercase_extension(file.name) in ["svg", "xml"]:
reader.readAsText(file)
else:
reader.readAsArrayBuffer(file)
@@ -614,7 +618,7 @@ static func _web_on_file_loaded(args: Array, file_index: int) -> void:
var file_name: String = window.vectortouchFileNames[file_index]
# Store file data based on type.
- if file_name.get_extension().to_lower() in ["svg", "xml"]:
+ if Utils.get_lowercase_extension(file_name) in ["svg", "xml"]:
# For text files, store directly
window.vectortouchFileDataArray[file_index] = event.target.result
else:
diff --git a/src/utils/ShortcutUtils.gd b/src/utils/ShortcutUtils.gd
index 1c6c4ea..bc2f0a4 100644
--- a/src/utils/ShortcutUtils.gd
+++ b/src/utils/ShortcutUtils.gd
@@ -34,6 +34,7 @@ const _action_categories_dict: Dictionary[String, Dictionary] = {
"move_down": true,
"delete": true,
"find": true,
+ "evaluate": true,
},
"view": {
"zoom_in": true,
@@ -113,6 +114,8 @@ static func get_action_icon(action: String) -> Texture2D:
"about_repo", "about_website": return load("res://assets/icons/Link.svg")
"toggle_fullscreen": return load("res://assets/icons/Expand.svg")
"load_reference": return load("res://assets/icons/Reference.svg")
+ "select_all": return load("res://assets/icons/SelectAll.svg")
+ "evaluate": return load("res://assets/icons/Evaluate.svg")
_: return load("res://assets/icons/Placeholder.svg")
static func get_actions(category: String) -> PackedStringArray:
diff --git a/src/utils/ThemeUtils.gd b/src/utils/ThemeUtils.gd
index 05a0c5b..ae3347d 100644
--- a/src/utils/ThemeUtils.gd
+++ b/src/utils/ThemeUtils.gd
@@ -1,8 +1,8 @@
@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")
+static var main_font: FontVariation = preload("res://assets/fonts/MainFont.tres")
+static var bold_font: FontVariation = preload("res://assets/fonts/BoldFont.tres")
+static var mono_font: FontVariation = preload("res://assets/fonts/MonoFont.tres")
static var base_color: Color
static var accent_color: Color
@@ -245,16 +245,29 @@ static func recalculate_colors() -> void:
selected_tab_color = softer_intermediate_hover_color.lerp(accent_color, 0.2)
selected_tab_border_color = accent_color
+static func rebuild_fonts() -> void:
+ main_font.base_font = FontFile.new()
+ if not Configs.savedata.main_font_path.is_empty():
+ main_font.base_font.load_dynamic_font(Configs.savedata.main_font_path)
+
+ bold_font.base_font = FontFile.new()
+ if not Configs.savedata.bold_font_path.is_empty():
+ bold_font.base_font.load_dynamic_font(Configs.savedata.bold_font_path)
+
+ mono_font.base_font = FontFile.new()
+ if not Configs.savedata.mono_font_path.is_empty():
+ mono_font.base_font.load_dynamic_font(Configs.savedata.mono_font_path)
static func generate_theme() -> Theme:
recalculate_colors()
var theme := Theme.new()
- theme.default_font = regular_font
+ theme.default_font = main_font
theme.default_font_size = 13
_setup_panelcontainer(theme)
_setup_button(theme)
_setup_checkbox(theme)
_setup_checkbutton(theme)
+ _setup_dropdown(theme)
_setup_itemlist(theme)
_setup_lineedit(theme)
_setup_scrollbar(theme)
@@ -269,7 +282,7 @@ static func generate_theme() -> Theme:
static func generate_and_apply_theme() -> void:
var default_theme := ThemeDB.get_default_theme()
- default_theme.default_font = regular_font
+ default_theme.default_font = main_font
default_theme.default_font_size = 13
var generated_theme := generate_theme()
default_theme.merge_with(generated_theme)
@@ -973,6 +986,28 @@ static func _setup_itemlist(theme: Theme) -> void:
theme.set_stylebox("hovered_selected", "ItemList", hovered_selected_item_stylebox)
theme.set_stylebox("hovered_selected_focus", "ItemList", hovered_selected_item_stylebox)
+static func _setup_dropdown(theme: Theme) -> void:
+ theme.add_type("Dropdown")
+ theme.set_type_variation("Dropdown", "Control")
+ theme.set_font_size("font_size", "Dropdown", 12)
+ theme.set_font("font", "Dropdown", main_font)
+ theme.set_color("font_color", "Dropdown", ThemeUtils.editable_text_color)
+
+ var stylebox := StyleBoxFlat.new()
+ stylebox.set_corner_radius_all(5)
+ stylebox.set_border_width_all(2)
+ stylebox.content_margin_left = 5.0
+ stylebox.content_margin_right = 5.0
+
+ var normal_stylebox := stylebox.duplicate()
+ normal_stylebox.bg_color = line_edit_inner_color
+ normal_stylebox.border_color = line_edit_normal_border_color
+ theme.set_stylebox("normal", "Dropdown", normal_stylebox)
+
+ var hover_stylebox := stylebox.duplicate()
+ hover_stylebox.draw_center = false
+ hover_stylebox.border_color = strong_hover_overlay_color if is_theme_dark else stronger_hover_overlay_color
+ theme.set_stylebox("hover", "Dropdown", hover_stylebox)
static func _setup_lineedit(theme: Theme) -> void:
theme.add_type("LineEdit")
@@ -1014,8 +1049,6 @@ static func _setup_lineedit(theme: Theme) -> void:
theme.add_type("LeftConnectedLineEdit")
theme.set_type_variation("LeftConnectedLineEdit", "LineEdit")
- theme.set_font_size("font_size", "LeftConnectedLineEdit", 12)
- theme.set_font("font", "LeftConnectedLineEdit", mono_font)
var left_connected_stylebox := StyleBoxFlat.new()
left_connected_stylebox.corner_radius_top_left = 0
left_connected_stylebox.corner_radius_bottom_left = 0
@@ -1052,8 +1085,6 @@ static func _setup_lineedit(theme: Theme) -> void:
theme.add_type("RightConnectedLineEdit")
theme.set_type_variation("RightConnectedLineEdit", "LineEdit")
- theme.set_font_size("font_size", "RightConnectedLineEdit", 12)
- theme.set_font("font", "RightConnectedLineEdit", mono_font)
var right_connected_stylebox := StyleBoxFlat.new()
right_connected_stylebox.corner_radius_top_left = 5
right_connected_stylebox.corner_radius_bottom_left = 5
@@ -1223,6 +1254,7 @@ static func _setup_label(theme: Theme) -> void:
theme.set_color("default_color", "RichTextLabel", text_color)
theme.set_color("selection_color", "RichTextLabel", selection_color)
theme.set_font("bold_font", "RichTextLabel", bold_font)
+ theme.set_font("mono_font", "RichTextLabel", mono_font)
static func _setup_tabcontainer(theme: Theme) -> void:
@@ -1308,18 +1340,13 @@ static func _setup_textedit(theme: Theme) -> void:
theme.set_stylebox("normal", "TextEdit", normal_stylebox)
theme.set_stylebox("read_only", "TextEdit", normal_stylebox)
- var focus_stylebox := StyleBoxFlat.new()
+ var focus_stylebox := normal_stylebox.duplicate()
focus_stylebox.draw_center = false
focus_stylebox.border_color = line_edit_focus_color
- focus_stylebox.set_border_width_all(2)
- focus_stylebox.set_corner_radius_all(5)
theme.set_stylebox("focus", "TextEdit", focus_stylebox)
- var hover_stylebox := StyleBoxFlat.new()
- hover_stylebox.draw_center = false
+ var hover_stylebox := focus_stylebox.duplicate()
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)
@@ -1339,7 +1366,7 @@ static func _setup_tooltip(theme: Theme) -> void:
theme.add_type("TooltipLabel")
theme.set_color("font_color", "TooltipLabel", text_color)
theme.set_font_size("font_size", "TooltipLabel", 14)
- theme.set_font("font", "TooltipLabel", regular_font)
+ theme.set_font("font", "TooltipLabel", main_font)
static func _setup_splitcontainer(theme: Theme) -> void:
diff --git a/src/utils/TranslationUtils.gd b/src/utils/TranslationUtils.gd
index 59e738f..cb21cbd 100644
--- a/src/utils/TranslationUtils.gd
+++ b/src/utils/TranslationUtils.gd
@@ -47,6 +47,7 @@ static func get_action_description(action_name: String, for_button := false) ->
"ui_copy": return Translator.translate("Copy")
"ui_paste": return Translator.translate("Paste")
"ui_cut": return Translator.translate("Cut")
+ "evaluate": return Translator.translate("Evaluate")
"select_all": return Translator.translate("Select all")
"duplicate": return Translator.translate("Duplicate") if for_button else Translator.translate("Duplicate the selection")
"delete": return Translator.translate("Delete") if for_button else Translator.translate("Delete the selection")
@@ -125,6 +126,7 @@ static func get_layout_part_name(layout_part: Utils.LayoutPart) -> String:
Utils.LayoutPart.CODE_EDITOR: return Translator.translate("Code editor")
Utils.LayoutPart.INSPECTOR: return Translator.translate("Inspector")
Utils.LayoutPart.VIEWPORT: return Translator.translate("Viewport")
+ Utils.LayoutPart.PREVIEWS: return Translator.translate("Previews")
_: return ""
## Generates an alert text for unsupported file extensions.
@@ -139,9 +141,10 @@ static func get_file_dialog_select_mode_title_text(multi_select: bool, extension
if multi_select:
return Translator.translate("Select {format} files").format({"format": _get_extension_readable_name("svg")})
else:
- if extensions.size() > 1:
- # Multiple formats currently only show up for reference images.
+ if extensions == Utils.IMAGE_FORMATS:
return Translator.translate("Select an image")
+ elif extensions == Utils.DYNAMIC_FONT_FORMATS:
+ return Translator.translate("Select a font")
else:
# "an" because this can currently only show for SVG and XML files.
return Translator.translate("Select an {format} file").format({"format": _get_extension_readable_name(extensions[0])})
diff --git a/src/utils/Utils.gd b/src/utils/Utils.gd
index 7880a7c..b1d1948 100644
--- a/src/utils/Utils.gd
+++ b/src/utils/Utils.gd
@@ -1,15 +1,19 @@
@abstract class_name Utils
+const IMAGE_FORMATS: PackedStringArray = ["png", "jpg", "jpeg", "webp", "svg"]
+const DYNAMIC_FONT_FORMATS: PackedStringArray = ["ttf", "otf", "woff", "woff2", "pfb", "pfm"]
+
const MAX_NUMERIC_PRECISION = 6
const MAX_ANGLE_PRECISION = 4
enum InteractionType {NONE = 0, HOVERED = 1, SELECTED = 2, HOVERED_SELECTED = 3}
-enum LayoutPart {NONE, CODE_EDITOR, INSPECTOR, VIEWPORT}
+enum LayoutPart {NONE, CODE_EDITOR, INSPECTOR, VIEWPORT, PREVIEWS}
const _LAYOUT_ICONS: Dictionary[LayoutPart, Texture2D] = {
LayoutPart.CODE_EDITOR: preload("res://assets/icons/CodeEditor.svg"),
LayoutPart.INSPECTOR: preload("res://assets/icons/Inspector.svg"),
LayoutPart.VIEWPORT: preload("res://assets/icons/Viewport.svg"),
+ LayoutPart.PREVIEWS: preload("res://assets/icons/Previews.svg"),
}
const _LAYOUT_PLACEHOLDER_ICON = preload("res://assets/icons/Placeholder.svg")
@@ -29,6 +33,9 @@ static func is_string_lower(string: String) -> bool:
static func get_file_name(string: String) -> String:
return string.get_file().trim_suffix("." + string.get_extension())
+static func get_lowercase_extension(string: String) -> String:
+ return string.get_extension().to_lower()
+
## Method for showing the file path without stuff like "/home/mewpurpur/".
static func simplify_file_path(file_path: String) -> String:
var home_dir := get_home_dir()
diff --git a/translations/VectorTouch.pot b/translations/VectorTouch.pot
index af2c87e..1592d95 100644
--- a/translations/VectorTouch.pot
+++ b/translations/VectorTouch.pot
@@ -16,1412 +16,1512 @@ msgstr ""
msgid "translation-credits"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
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:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its proportions are too extreme."
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its size is not defined."
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr ""
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "The last edited state of this tab could not be found."
msgstr ""
-#: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr ""
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr ""
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr ""
-#: src/autoload/State.gd:
+#: 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 ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr ""
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr ""
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr ""
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr ""
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr ""
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr ""
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr ""
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr ""
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr ""
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr ""
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr ""
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr ""
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr ""
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr ""
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Clear reference image"
msgstr ""
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr ""
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr ""
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr ""
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr ""
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr ""
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr ""
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr ""
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go forward"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
+#: src/ui_parts/import_warning_menu.gd
+msgid "Unrecognized element"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
+#: src/ui_parts/import_warning_menu.gd
+msgid "Unrecognized attribute"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Unrecognized element"
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Unrecognized attribute"
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
msgstr ""
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr ""
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr ""
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+msgid "Add new preview"
+msgstr ""
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr ""
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr ""
+
+#: src/ui_parts/previews.gd
+msgid "Clear all"
+msgstr ""
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr ""
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+msgid "Optimizer"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr ""
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr ""
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr ""
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr ""
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr ""
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr ""
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr ""
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr ""
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr ""
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr ""
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr ""
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr ""
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr ""
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr ""
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr ""
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr ""
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr ""
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr ""
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr ""
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr ""
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "Before"
+msgstr ""
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr ""
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr ""
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr ""
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr ""
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr ""
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr ""
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr ""
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr ""
-#: src/ui_widgets/profile_frame.gd:
+#: 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 ""
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr ""
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr ""
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr ""
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr ""
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Preset"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Remove comments"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr ""
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr ""
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr ""
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr ""
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr ""
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the base color of VectorTouch's interface."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr ""
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr ""
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr ""
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr ""
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr ""
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr ""
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr ""
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr ""
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr ""
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View advanced debug information"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr ""
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+msgid "Select a font"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr ""
diff --git a/translations/bg.po b/translations/bg.po
index e9459b2..3ee6a95 100644
--- a/translations/bg.po
+++ b/translations/bg.po
@@ -17,1412 +17,1512 @@ msgstr ""
msgid "translation-credits"
msgstr "MewPurPur "
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "Затвори VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Наистина ли искаш да затвориш VectorTouch?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Затвори"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Провери за ъпдейти?"
-#: src/autoload/HandlerGUI.gd:
+#: 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 за да сравни числата на версиите. Не се събират или изпращат никакви други данни."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "Добре"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its proportions are too extreme."
msgstr "Графиката може да бъде експортирана само като SVG защото височината и широчината са твърде различни."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its size is not defined."
msgstr "Графиката може да бъде експортирана само като SVG защото размерът не е определен."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Искаш ли да продължиш?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Експортирай SVG-то"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Експортирай"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "The last edited state of this tab could not be found."
msgstr "Последното състояние на този раздел не беше намерено."
-#: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Предупреждение!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Затвори раздела"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Възстанови"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Виж в инспектора"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Превърни в"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Вмъкни отпред"
-#: src/autoload/State.gd:
+#: 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-то от тази пътека?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Компактен"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Красив"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Винаги"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Всички освен контейнери"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Никога"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Когато е по-късо или еднакво дълго"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Когато е по-късо"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "Хекс с 3 или 6 цифри"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "Хекс с 6 цифри"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr "Тъмна"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr "Светла"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr "Черна (OLED)"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr "Тъмна по подразбиране"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr "Светла по подразбиране"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Празен"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Незаписан"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Коментар"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Текст"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr "{element} трябва да е във {allowed} за да има ефект."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "Не е дефиниран \"id\" атрибут."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "Няма елемент под този градиент."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr "Този градиент е едноцветен."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Тази група няма елементи."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "Тази група има само един елемент."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Текстът не описва SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Несъвместими тагове."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Затвори"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Автори"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Дарители"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Лиценз"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Основател и мениджър на проекта"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Програмисти"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Преводачи"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Златни дарители"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Диамантени дарители"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "Запиши SVG-то като…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Графики"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Размер на захващането"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Постави справочно изображение"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Clear reference image"
msgstr "Изчисти справочно изображение"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Линкове към платформи за дарение"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Отказ"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Добави елемент"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Измерения"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "Размерът на визуализацията е ограничен до {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Размер"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Конфигурация на експорта"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Формат"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Без загуба на качество"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Качество"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Мащаб"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Широчина"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Височина"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Копирай"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Оформление"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Виж запазените данни"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Обнови файловете"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Превключи видимостта на скритите файлове"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Търсене из файловете"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr "Назад"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go forward"
msgstr "Напред"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Запиши"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Избери"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Замени"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Създай нова папка"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Невалидно име за папка."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Папка с това име вече съществува."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Папката не можа да бъде създадена."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Отвори"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Копирай пътеката"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!"
msgstr "Файл с името \"{file_name}\" вече съществува. Заместването ще пренапише неговото съдържание!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Синтактична грешка"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Проблеми в импортирането"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Импортирай"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Непознат елемент"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Непознат атрибут"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Проблеми в импортирането"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Импортирай"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Добави елемент"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Изключени"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Влачи и пусни за да промениш оформлението на интерфейса"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Файл"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Промени"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Инструмент"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Гледка"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+msgid "Add new preview"
+msgstr "Добави нова гледка"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Премахни"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Възстанови началната стойност"
+
+#: src/ui_parts/previews.gd
+msgid "Clear all"
+msgstr "Изчисти всички"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr "Сортирай"
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Форматиране"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+msgid "Optimizer"
+msgstr "Оптимизатор"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
-msgstr "Палети"
+msgstr "Палитри"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Бързи клавиши"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Гама"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Лента с раздели"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Други"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Език"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Хоризонтална лента"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Вертикална лента"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Хоризонтален с два реда"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Настройки на панела с бързи клавиши"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Създай нов раздел"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Превърти назад"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Превърти напред"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Това SVG не е свързано с местоположение на компютъра."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Опитай отново"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Покажи предварителните издания"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Настояща версия"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Извлича се информацията..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Грешка в проверката за ъпдейти"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Разгледай всички издания"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch е актуален."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "Налични са нови версии!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr "Копирай имейла"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Създай"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Промени името на цвета"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Изтрий цвета"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Неименуван"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Търсене на цвят"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Цветно колело"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
-msgstr "Неограничено"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
+msgstr "Няма пътека към файл"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Ключови цветове"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Пипета"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Нова фигура"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr "Няма ID"
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr "SVG-то е синтактично грешно. Всяка редакция която не е направена през редактора за код ще го рестартира."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "Before"
+msgstr "Преди"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr "След"
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
msgstr "Добави нов цвят"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
-msgstr "Неименуваните палети няма да бъдат показани."
+msgstr "Неименуваните палитри няма да бъдат показани."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
-msgstr "Не може няколко палети да имат едно и също име."
+msgstr "Не може няколко палитри да имат едно и също име."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
-msgstr "Тази палета има еднакво определетни цветове."
+msgstr "Тази палитра има еднакво определетни цветове."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Преименувай"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Премести нагоре"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Премести надолу"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Приложи шаблон"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Премахни"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Копирай като XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Запиши като XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Относително"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Няма пътека"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Няма точки"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Използва се също от"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr "Приложи"
-#: src/ui_widgets/profile_frame.gd:
+#: 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 "Възстанови началната стойност"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Неизползван"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Добави бърз клавиш"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Натисни клавиши…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Форматировач за приложението"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Форматировач за експортиране"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Определя как SVG атрибутите и съдържанието се показват в интерфейса на GodSVG."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Определя как SVG атрибутите и съдържанието се форматират когато файлът се запазва."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Шаблон"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
-msgstr "Определя стойностите по подразбиране на настройките на форматировача."
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
-msgstr "Запази коментарите"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Remove comments"
+msgstr "Премахване на коментарите"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Добави нов ред накрая"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Използвай кратък синтаксис за тагове"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Остави растояние преди наклонената черта на съкратени тагове"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Включи красивото форматиране"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Използвай интервали вместо табулатор"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Брой интервали за отстъп"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Числа"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Премахни водещата нула"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Използвай експонент когато е по-кратко"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Цветове"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Използвай именувани цветове"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Първичен синтаксис"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Използвай главни хексадецимални букви"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Данни за пътека"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Смали числата"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Намали паузите"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Премахни паузите след флаговете"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Премахни последователните команди"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Поредици от трансформации"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Премахни ненужните параметри"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr "Определя настройките на оптимизатора по подразбиране, използвани когато ползваш \"{optimize}\""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes"
+msgstr "Превръщане фигури"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr "Опростяване на параметрите в пътеки"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr "Шаблон на тема"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr "Основни цветове на темата"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr "Базов цвят"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr "Акцентен цвят"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr "Шрифтове"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr "Основен шрифт"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr "Удебелен шрифт"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr "Моноширинен шрифт"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "Цветове на SVG текста"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr "Шаблон на синтаксово маркиране"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr "Определя стойностите по подразбиране на синтаксовото маркиране за SVG текста."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Цвят на символите"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Цвят на елементите"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Цвят на атрибутите"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Цвят на низовете"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Цвят на коментарите"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Цвят на текста"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "Цвят на CDATA"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Цвят на грешките"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr "Дръжки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Вътрешен цвят"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Обикновен цвят"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Цвят под курсора"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Избран цвят"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Избран цвят под курсора"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr "Правоъгълник за селекцията"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr "Скорост"
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr "Дължина на чертичките"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr "Цвят {index}"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Основни цветове"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr "Цвят на платното"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Цвят на решетката"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Цвят на валидният текст"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Цвят на предупрежденията"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Входни сигнали"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Затваряне на раздели със средното копче на мишката"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Обърни посоката на увеличение"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Превъртане на курсора"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr "Скорост на панорамиране"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Използвай CTRL за увеличение"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr "Дисплей"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Мащаб на интерфейса"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "Определя мащаба на интерфейса."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr "Вертикална синхронизация"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr "Максимални кадри в секунда"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr "Неограничено"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr "Определя максималния брой кадри в секунда."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr "Задръж екрана включен"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Разни"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Използвай местния файлов мениджър"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Синхронизирай името на прозореца с файла"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr "Настройката няма ефект в текущата конфигурация."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr "Настройката не може да бъде променена на тази платформа."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr "Форматировачите могат да променят форматирането на съдържанието и атрибутите на SVG. Тези промени не засягат неговата структура или структурата на по-сложните атрибути, като данни за пътеки. Форматировачите могат да бъдат конфигурирани да направят SVG по-красив или по-компактен."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr "Определя стойностите по подразбиране на настройките на форматировача."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr "Когато е активирано, използва интервали за отстъп вместо едни табулатор."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr "Оптимизаторите могат да променят структурата на SVG и неговите сложни атрибути, като данни за пътеки. Тези промени намаляват сложността на SVG, обикновено водейки до намаляване на размера на файла, но могат да бъдат деструктивни и да нарушат бъдещото редактиране в сравнение с ръчната оптимизация на SVG."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "Преобразува фигурите в такива, които могат да бъдат дефинирани идентично, но имат по-кратко представяне, ако е възможно."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "Преобразува или опростява параметрите на пътищата в такива, които могат да бъдат дефинирани идентично, но имат по-кратко представяне, ако е възможно."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr "Определя стойностите по подразбиране на гамовите настройки, включително шаблона на синтаксовото маркиране."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the base color of VectorTouch's interface."
msgstr "Определя основния цвят на интерфейса на VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Определя акцентния цвят, използван за подчертаване на елементи в интерфейса на VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr "Когато е активирано, натискането на раздел със средното копче на мишката затваря раздела вместо просто да го фокусира."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "Разменя посоките на влачене за намаляване и увеличаване."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning."
msgstr "Превърта курсора когато той достигне краищата на екрана докато влачи гледката."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr "Определя колко бързо гледката се движи при плъзгане с превъртане."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr "Когато е активирано, влаченето премества гледката. За увеличение, задръж CTRL докато влачиш."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "Определя мащаба на интерфейса."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr "Синхронизира рендирането с честотата на опресняване на дисплея, за да предотврати артефакти от разкъсване на екранното изображение. Може леко да забави входните сигнали."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr "Определя максималния брой кадри в секунда."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr "Поддържа екрана включен дори при неактивност, така че скрийнсейвърът да не се включва."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "Когато е активирано, ще бъде използван файловият мениджър на твоята операционна система вместо вградения файлов мениджър на VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr "Когато е включено, добавя името на настоящия файл пред заглавието на прозореца \"VectorTouch\"."
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
-msgstr "Добави палета"
+msgstr "Добави палитра"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
-msgstr "Добави палета от XML"
+msgstr "Добави палитра от XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "Импортирай XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "Постави XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Помощ"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Няма трансформации"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Приложи матрицата"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Вмъкни отзад"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Нова трансформация"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch не разпознава този атрибут"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Следните файлове бяха отхвърлени:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} бе отхвърлен."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Отхвърлени файлове"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Продължи"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "{file_name} не можа да бъде отворен."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Проверете дали файлът все още съществува на избраното място."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Продължи с импортирането на останалите файлове?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Продължи за всеки файл който не може да бъде отворен"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "Записване на файла?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Искаш ли да запишеш този файл?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "Записване на промените?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Промените ще бъдат изгубени ако не ги запишеш."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Не записвай"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "{file_path} вече се редактира в VectorTouch."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
-msgstr "Ако искаш да премахнеш промените след последното записване, използвай {reset_svg}."
+#: src/utils/FileUtils.gd
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
+msgstr "Ако искаш да премахнеш промените след последното записване, използвай \"{reset_svg}\"."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Искаш ли да запишеш промените върху {file_name}?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "Запиши SVG-то"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "Запиши SVG-то като"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Затвори разделите отляво"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Затвори разделите отдясно"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Затвори другите раздели"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Затвори празните раздели"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Затвори записаните раздели"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Създай раздел"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Избери раздела отпред"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Избери раздела отзад"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Оптимизирай"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "Оптимизирай SVG-то"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Копирай всичкия текст"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Копирай всичкия SVG текст"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "Рестартирай SVG-то"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Отвори с външно приложение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "Отвори SVG с външно приложение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Покажи във файловия мениджър"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Покажи SVG-то във файловия мениджър"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Върни назад"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Върни напред"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Постави"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Изрежи"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr "Сметни"
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Избери всички"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Дублирай"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Изтрий селекцията"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Изтрий селекцията"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Премести нагоре"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Премести селекцията нагоре"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Премести надолу"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Премести селекцията надолу"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Намери"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Увеличи"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Намали"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Рестартирай мащаба"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Покажи решетката"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Покажи дръжките"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Покажи растеризиран SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Превключи захващането"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Зареди справочно изображение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Покажи справочното изображение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Насложи справочното изображение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Покажи дебъг информацията"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View advanced debug information"
msgstr "Покажи подробна дебъг информация"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Настройки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Отвори настройките"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Относно приложението…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Отвори информацията за приложението"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Направи дарение…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Отвори менюто за дарения"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "Репозиторията на VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Отвори репозиторията на VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "Уебсайта на VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Отвори уебсайта на VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Провери за ъпдейти"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Излизане от апликацията"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Превключване на пълен екран"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Премести до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Отсечка до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Хоризонтална отсечка до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Вертикална отсечка до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Затвори пътеката"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Елиптична дъга до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Квадратна крива на Безие до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Кратка квадратна крива на Безие до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Кубична крива на Безие до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Кратка кубична крива на Безие до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Абсолютно"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Редактор за код"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "Инспектор"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Гледка"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr "Визуализации"
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Единствено {extension_list} файлове се поддържат от тази операция."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Избери {format} файлове"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Избери изображение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+msgid "Select a font"
+msgstr "Избери шрифт"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Избери {format} файл"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Запази {format} файла"
diff --git a/translations/de.po b/translations/de.po
index 73d8179..4a0876e 100644
--- a/translations/de.po
+++ b/translations/de.po
@@ -17,1437 +17,1550 @@ msgstr ""
msgid "translation-credits"
msgstr "Kiisu-Master, Swarkin"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "VectorTouch beenden"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Möchten Sie VectorTouch beenden?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Beenden"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Nach Aktualisierungen suchen?"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "OK"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Möchten Sie fortfahren?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "SVG exportieren"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Exportieren"
-#: src/autoload/State.gd:
+#: 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."
-#: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Achtung!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Registerkarte schließen"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Wiederherstellen"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Im Inspektor anzeigen"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Konvertieren zu"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Danach einsetzen"
-#: src/autoload/State.gd:
+#: 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?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Kompakt"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Schön"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Immer"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Alle außer Behälter"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Nie"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Wenn kürzer oder gleich"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Wenn kürzer"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "3-stelligen oder 6-stelligen Hex"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "6-stelligen Hex"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
#, fuzzy
msgid "Light"
msgstr "Höhe"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr ""
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Leer"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Ungespeichert"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Kommentar"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Text"
-#: src/data_classes/Element.gd:
+#: 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."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "Kein \"id\" Attribut definiert."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "Keine Elemente unter diesem Farbverlauf."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr "Dieser Farbverlauf ist einfarbig."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Diese Gruppe hat keine Elemente."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "Diese Gruppe hat nur ein Element."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Beschreibt kein SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Ungültige Formatierung."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Schließen"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Autoren"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Spender"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Lizenz"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Projektgründer und Manager"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Entwickler"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Übersetzer"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Gold-Spender"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Diamant-Spender"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "SVG speichern als…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Visuelles"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Rastergröße"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Referenzbild einfügen"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
#, fuzzy
msgid "Clear reference image"
msgstr "Referenzbild laden"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Links zu Spendenplattformen"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Abbrechen"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Neues Element"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Dimensionen"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "Vorschaubildgröße ist auf {dimensions} limitiert."
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Größe"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Export-Konfiguration"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Format"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Verlustlos"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Qualität"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Skalieren"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Breite"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Höhe"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Kopieren"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Layout"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Speicherdaten anzeigen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Dateien aktualisieren"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Versteckte Dateien anzeigen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Datei suchen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
#, fuzzy
msgid "Go forward"
msgstr "Nach vorne scrollen"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Speichern"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Auswählen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Ersetzen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Neuen Ordner erstellen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Ungültiger Ordnername."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Ein gleichnamiger Ordner existiert bereits."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Ordner konnte nicht erstellt werden."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Öffnen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Pfad kopieren"
-#: src/ui_parts/good_file_dialog.gd:
+#: 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!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Syntaxfehler"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Probleme beim Importieren"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Importieren"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Unerkanntes Element"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Unerkanntes Attribut"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Probleme beim Importieren"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Importieren"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Element hinzufügen"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Ausgeschlossen"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Ziehen und Ablegen zum Ändern des Layouts"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Datei"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Bearbeiten"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Werkzeuge"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Ansicht"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Add new preview"
+msgstr "Farbe hinzufügen"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Löschen"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Zurücksetzen"
+
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Clear all"
+msgstr "SVG zurücksetzen"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Formatierung"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+#, fuzzy
+msgid "Optimizer"
+msgstr "Optimieren"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Paletten"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Tastenkombinationen"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Farbschema"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Tableiste"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Anderes"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Sprache"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Horizontaler Streifen"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Vertikaler Streifen"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Horizontal mit zwei Reihen"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Kurzbefehlsmenü anpassen"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Neue Registerkarte erstellen"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Nach hinten scrollen"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Nach vorne scrollen"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Dieses SVG ist noch nicht an einen Dateiort gebunden."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Erneut versuchen"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Vorschauversionen anzeigen"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Aktuelle Version"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Abruf von Informationen..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Aktualisierungsprüfung fehlgeschlagen"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Alle Veröffentlichungen anzeigen"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch ist auf dem neuesten Stand."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "Neue Versionen verfügbar!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
#, fuzzy
msgid "Copy email"
msgstr "Pfad kopieren"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Erstellen"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Farbnamen ändern"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Farbe löschen"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Unbenannt"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Farbe suchen"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Farbauswahl"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Farbschlüsselwörter"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Pipette"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Neue Form"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+#, fuzzy
+msgid "Before"
+msgstr "Davor einsetzen"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
#, fuzzy
msgid "Add new color"
msgstr "Farbe hinzufügen"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "Unbenannte Paletten werden nicht angezeigt."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Mehrere Paletten können nicht den gleichen Namen besitzen."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "Diese Palette hat identisch definierte Farben."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Umbenennen"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Nach oben"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Nach unten"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Voreinstellung anwenden"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Löschen"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Kopieren als XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Speichern als XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Relativ"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Keine Pfaddaten"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Keine Punkte"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Auch genutzt von"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr ""
-#: src/ui_widgets/profile_frame.gd:
+#: 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"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Unbenutzt"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Tastenkombination hinzufügen"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Drücke Tasten…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Editor-Formatierer"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Export-Formatierer"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Preset"
-msgstr "Voreinstellung"
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
-msgid "Determines the default values of the formatter configs."
+msgid "Determines how SVG attributes and content are formatted when saving the file."
msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Preset"
+msgstr "Voreinstellung"
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Remove comments"
msgstr "Kommentare beibehalten"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Nachfolgenden Zeilenumbruch hinzufügen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Kurzbezeichnung für Tags verwenden"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Leerzeichen zu dem Schrägstrich bei abgekürzten Tags hinzufügen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Schöne Formatierung verwenden"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Leerzeichen anstatt Tabulatorzeichen verwenden"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Anzahl der Tabulationsleerzeichen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Nummern"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Führende Null entfernen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Exponentialschreibweise benutzen wenn kürzer"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Farben"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Farben mit Namen verwenden"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Primärsyntax"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Hexadezimale Buchstaben großschreiben"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Pfaddaten"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Nummern komprimieren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Leerplatz minimieren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Leerplätze nach Eigenschaften (flag) entfernen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Aufeinanderfolgende Befehle entfernen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Transformationlisten"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Unnötige Parameter entfernen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Convert shapes"
+msgstr "Konvertieren zu"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Theme preset"
msgstr "Zoom zurücksetzen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Primary theme colors"
msgstr "Farbe deaktivieren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Base color"
msgstr "Allgemeine Farben"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Accent color"
msgstr "Textfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "SVG Textfarben"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Symbolfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Elementfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Attributfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Zeichenkettenfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Kommentarfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Textfarbe"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "CDATA-Farbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Fehlerfarbe"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Handles"
msgstr "Griffgröße"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Innenfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Normalfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Farbe unter der Maus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Auswahlfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Ausgewählte Farbe unter der Maus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Selection rectangle"
msgstr "Bild auswählen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr ""
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Color {index}"
msgstr "Farbauswahl"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Allgemeine Farben"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Canvas color"
msgstr "Innenfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Rasterfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Gültige Farbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Warnfarbe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Eingabe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Registerkarten mit mittlerer Maustaste schließen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Zoomrichtung umkehren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Herumwickelndes Verschieben"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Strg-Taste zum Zoomen benutzen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Benutzeroberflächenskalierung"
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines the scale factor for the interface."
+msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Verschiedenes"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Nativen Dateidialog verwenden"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Fenstertitel mit Dateinamen synchronisieren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines the default values of the formatter configs."
+msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the base color of VectorTouch's interface."
msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "Tauscht die Scrollrichtung für das Rein- und Rauszoomen."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, scrolling pans the view instead of zooming in. 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_widgets/settings_content_generic.gd:
-#, fuzzy
-msgid "Determines the scale factor for the interface."
-msgstr "Verändert den Skalierungsfaktor der Benutzeroberfläche."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr ""
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "Wenn diese Option aktiviert ist, wird der Dateidialog des Betriebssystems verwendet. Wenn diese Option deaktiviert ist, wird VectorTouch's eingebauter Dateidialog verwendet."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Neue Palette"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Neue Palette aus XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "XML importieren"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "XML einfügen"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Hilfe"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Keine Transformationen"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Die Matrix anwenden"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Davor einsetzen"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Neue Transformation"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch erkennt diese Attribute nicht"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Die folgenden Dateien wurden verworfen:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} wurde verworfen."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Verworfene Dateien"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Fortfahren"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "{file_name} konnte nicht geöffnet werden."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Prüfen, ob die Datei im ausgewählten Dateipfad noch existiert."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Mit dem Importieren der restlichen Dateien fortfahren?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Fortfahren für alle Dateien, die nicht geöffnet werden können"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "Datei speichern?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Möchten Sie diese Datei speichern?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "Die Änderungen speichern?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Ihre Änderungen gehen verloren, wenn sie nicht gespeichert werden."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Nicht speichern"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "{file_path} wird bereits in VectorTouch bearbeitet."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+#, fuzzy
+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}."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Möchten Sie die an {file_name} vorgenommenen Änderungen speichern?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "SVG speichern"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "SVG speichern als"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Alle Registerkarten links schließen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Alle Registerkarten rechts schließen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Alle anderen Registerkarten schließen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Leere Registerkarten schließen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Gespeicherte Registerkarten schließen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Registerkarte erstellen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Nächsten Tab auswählen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Vorherigen Tab auswählen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Optimieren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "SVG optimieren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Text kopieren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "SVG-Text kopieren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "SVG zurücksetzen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Extern öffnen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "SVG extern öffnen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Im Dateisystem anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "SVG im Dateisystem anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Rückgängig"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Wiederholen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Einfügen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Ausschneiden"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Alle auswählen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Duplizieren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Auswahl duplizieren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Auswahl löschen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Nach oben verschieben"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Auswahl nach oben verschieben"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Nach unten verschieben"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Auswahl nach unten verschieben"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Finden"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Hineinzoomen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Herauszoomen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Zoom zurücksetzen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Raster anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Griffe anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Rasterisiertes SVG anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Einrasten aktivieren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Referenzbild laden"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Referenzbild anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Referenzbild überblenden"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Debuginformationen anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
#, fuzzy
msgid "View advanced debug information"
msgstr "Debuginformationen anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Einstellungen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Einstellungsmenü öffnen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Über…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Infomenü anzeigen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Spenden…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Spendemenü öffnen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "VectorTouch Repository"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "VectorTouch-Repository öffnen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "VectorTouch Webseite"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "VectorTouch-Webseite öffnen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Nach Aktualisierungen suchen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Anwendung verlassen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Vollbildmodus umschalten"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Bewege zu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Linie zu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Horizontale Linie zu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Vertikale Linue zu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Pfad schließen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Elliptischer Bogen zu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Quadratischer Bezier zu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Kurzhand-Quadratischer Bezier zu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Kubischer Bezier to"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Kurzhand-Kubischer Bezier to"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Absolut"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Code-Editor"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "Inspektor"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Ansichtsfenster"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Nur {extension_list}-Dateien werden für diese Operation unterstützt."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "{format}-Dateien auswählen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Bild auswählen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+#, fuzzy
+msgid "Select a font"
+msgstr "Alle auswählen"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "{format}-Datei auswählen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Die {format}-Datei speichern"
+#~ msgid "Keep comments"
+#~ msgstr "Kommentare beibehalten"
+
#~ msgid "Go to parent folder"
#~ msgstr "Zum übergeordneten Ordner gehen"
@@ -1534,9 +1647,6 @@ msgstr "Die {format}-Datei speichern"
#~ msgid "Clear saving path"
#~ msgstr "Speicherpfad löschen"
-#~ msgid "Clear SVG"
-#~ msgstr "SVG zurücksetzen"
-
#, fuzzy
#~ msgid "Open SVG file"
#~ msgstr "Datei öffnen"
diff --git a/translations/en.po b/translations/en.po
index 64677bc..cf7775c 100644
--- a/translations/en.po
+++ b/translations/en.po
@@ -17,1412 +17,1512 @@ msgstr ""
msgid "translation-credits"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
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:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its proportions are too extreme."
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its size is not defined."
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr ""
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr ""
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "The last edited state of this tab could not be found."
msgstr ""
-#: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr ""
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr ""
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr ""
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr ""
-#: src/autoload/State.gd:
+#: 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 ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr ""
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr ""
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr ""
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr ""
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr ""
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr ""
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr ""
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr ""
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr ""
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr ""
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr ""
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr ""
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr ""
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr ""
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr ""
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr ""
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr ""
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Clear reference image"
msgstr ""
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr ""
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr ""
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr ""
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr ""
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr ""
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr ""
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr ""
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr ""
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go forward"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
+#: src/ui_parts/import_warning_menu.gd
+msgid "Unrecognized element"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
+#: src/ui_parts/import_warning_menu.gd
+msgid "Unrecognized attribute"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Unrecognized element"
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
msgstr ""
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Unrecognized attribute"
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
msgstr ""
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr ""
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr ""
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr ""
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+msgid "Add new preview"
+msgstr ""
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr ""
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr ""
+
+#: src/ui_parts/previews.gd
+msgid "Clear all"
+msgstr ""
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr ""
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+msgid "Optimizer"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr ""
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr ""
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr ""
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr ""
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr ""
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr ""
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr ""
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr ""
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr ""
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr ""
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr ""
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr ""
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr ""
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr ""
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr ""
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr ""
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr ""
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr ""
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr ""
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr ""
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr ""
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr ""
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "Before"
+msgstr ""
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr ""
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr ""
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr ""
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr ""
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr ""
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr ""
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr ""
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr ""
-#: src/ui_widgets/profile_frame.gd:
+#: 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 ""
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr ""
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr ""
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr ""
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr ""
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Preset"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Remove comments"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr ""
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr ""
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr ""
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr ""
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr ""
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the base color of VectorTouch's interface."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr ""
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr ""
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr ""
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr ""
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr ""
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr ""
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr ""
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr ""
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr ""
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
msgstr ""
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View advanced debug information"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr ""
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+msgid "Select a font"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr ""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr ""
diff --git a/translations/es.po b/translations/es.po
index 4d0dad7..3cfb433 100644
--- a/translations/es.po
+++ b/translations/es.po
@@ -17,1437 +17,1550 @@ msgstr ""
msgid "translation-credits"
msgstr "Alejandro Moctezuma "
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "Salir de VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "¿Quieres salir de VectorTouch?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Salir"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "¿Buscar actualizaciones?"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "OK"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "¿Quieres continuar?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Exportar SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Exportar"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
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: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "¡Advertencia!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Cerrar pestaña"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Restaurar"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Ver en el Inspector"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Convertir a"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Insertar después"
-#: src/autoload/State.gd:
+#: 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?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Compacto"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Chulo"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Siempre"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Todo excepto contenedores"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Nunca"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Cuando es más corto o igual que"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Cuando es más corto que"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "Hexadecimal de 3 o 6 dígitos"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "Hexadecimal de 6 dígitos"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
#, fuzzy
msgid "Light"
msgstr "Alto"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr ""
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Vacío"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Sin guardar"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Comentario"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Texto"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
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/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "No hay ningún atributo \"id\" definido."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "No hay elementos en este gradiente."
-#: src/data_classes/ElementBaseGradient.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:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Este grupo no tiene elementos."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "Este grupo solo tiene un elemento."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "No describe un SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Anidación inadecuada."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Cerrar"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Autores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Donadores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Licencia"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Fundador y administrador del proyecto"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Desarrolladores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Traductores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Donadores dorados"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Donadores de diamante"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "Guardar SVG como…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Visuales"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Tamaño de ajuste"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Pegar imagen de referencia"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
#, fuzzy
msgid "Clear reference image"
msgstr "Cargar imagen de referencia"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Enlaces de las plataformas de donación"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Cancelar"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Nuevo elemento"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Dimensiones"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "El tamaño de la imagen de vista previa está limitado a {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Tamaño"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Exportar configuración"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Formato"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Sin pérdida"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Calidad"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Escala"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Ancho"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Alto"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Copiar"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Diseño"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Ver datos guardados"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Actualizar archivos"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Alternar visibilidad de archivos ocultos"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Buscar archivos"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
#, fuzzy
msgid "Go forward"
msgstr "Desplazarse hacia adelante"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Guardar"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Seleccionar"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Reemplazar"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Crear nueva carpeta"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Nombre inválido para una carpeta."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Ya existe una carpeta con este nombre."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Error al crear una carpeta."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Abrir"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Copiar ruta"
-#: src/ui_parts/good_file_dialog.gd:
+#: 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!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Error de sintaxis"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Problemas de la importación"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Importar"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Elemento no reconocido"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Atributo no reconocido"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Problemas de la importación"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Importar"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Añadir elemento"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Excluidos"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Arrastra y suelta para cambiar el diseño"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Archivo"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Editar"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Herramientas"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Ver"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Add new preview"
+msgstr "Color del texto"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Eliminar"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Reestablecer a los valores predeterminados"
+
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Clear all"
+msgstr "Seleccionar todo"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Formato"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+#, fuzzy
+msgid "Optimizer"
+msgstr "Optimizar"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Paletas"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Atajos"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Temas"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Barra de pestañas"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Otro"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Idioma"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Franja horizontal"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Franja vertical"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Horizontal con dos filas"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Configurar el panel de accesos directos"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Crear una nueva pestaña"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Desplazarse hacia atrás"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Desplazarse hacia adelante"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Este SVG aún no está vinculado a una ubicación de archivo."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Reintentar"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Mostrar prelanzamientos"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Versión actual"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Recuperando la información..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Error en la verificación de actualizaciones"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Ver todos los lanzamientos"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch está actualizado."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "¡Nuevas versiones disponibles!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
#, fuzzy
msgid "Copy email"
msgstr "Copiar ruta"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Crear"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Editar nombre del color"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Eliminar color"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Sin nombre"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Buscar color"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Cuentagotas"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Palabras clave de colores"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Cuentagotas"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Nueva forma"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+#, fuzzy
+msgid "Before"
+msgstr "Insertar antes"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
#, fuzzy
msgid "Add new color"
msgstr "Color del texto"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "No se mostrarán las paletas sin nombre."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Varias paletas no pueden tener el mismo nombre."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "Esta paleta tiene colores definidos idénticamente."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Renombrar"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Mover hacia arriba"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Mover hacia abajo"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Aplicar preajuste"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Eliminar"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Copiar como XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Guardar como XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Relativo"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Sin datos de ruta"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Sin puntos"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "También usado por"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr ""
-#: src/ui_widgets/profile_frame.gd:
+#: 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"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "No usado"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Añadir atajo"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Presiona una tecla…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Formato del editor"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Formato de exportación"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Determina el factor de escala de la interfaz."
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Determina el factor de escala de la interfaz."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Preajuste"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
-msgid "Determines the default values of the formatter configs."
-msgstr "Si la velocidad de fotogramas está limitada, este valor determina la cantidad máxima de fotogramas por segundo."
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+msgid "Remove comments"
msgstr "Mantener comentarios"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Agregar nueva línea final"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Usar la sintaxis de etiqueta abreviada"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Espaciar la barra diagonal de las etiquetas abreviadas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Usar formato chulo"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Usar espacios en vez de pestañas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Número de espacios de sangría"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Números"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Eliminar ceros iniciales"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Usar exponenciales cuando sean más cortos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Colores"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Usar colores con nombre"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Sintaxis primaria"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Poner en mayúsculas las letras hexadecimales"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Datos de ruta"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Comprimir números"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Minimizar el espaciado"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Eliminar espaciado después de banderas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Eliminar comandos consecutivos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Transformar listas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Eliminar parámetros innecesarios"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Convert shapes"
+msgstr "Convertir a"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Theme preset"
msgstr "Reestablecer el zoom"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Base color"
msgstr "Colores básicos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Accent color"
msgstr "Color del texto"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "Colores del texto de los SVG"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Color de los símbolos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Color de los elementos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Color de los atributos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Color de las cadenas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Color de los comentarios"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Color del texto"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "Color de CDATA"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Color de los errores"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Handles"
msgstr "Tamaño de los controladores"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Color interno"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Color normal"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Color flotante"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Color seleccionado"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Color flotante seleccionado"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Selection rectangle"
msgstr "Selecciona una imagen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr ""
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Color {index}"
msgstr "Cuentagotas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Colores básicos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Canvas color"
msgstr "Color interno"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Color de la cuadrícula"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Color válido"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Color de las advertencias"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Entrada"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Cerrar pestañas con el botón central del ratón"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Invertir dirección de zoom"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Desplazamiento envolvente"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Usar Ctrl para hacer zoom"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr "Visualización"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Escala de la interfaz de usuario"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "Determina el factor de escala de la interfaz."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Maximum FPS"
msgstr "FPS máximos personalizados"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Misceláneos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Usar diálogo de archivos nativo"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Sincronizar título de la ventana con el nombre del archivo"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines the default values of the formatter configs."
+msgstr "Si la velocidad de fotogramas está limitada, este valor determina la cantidad máxima de fotogramas por segundo."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the base color of VectorTouch's interface."
msgstr "Determina el factor de escala de la interfaz."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Determina el factor de escala de la interfaz."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "Intercambia las direcciones de desplazamiento para acercar y alejar."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, scrolling pans the view instead of zooming in. 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_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "Determina el factor de escala de la interfaz."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr ""
-#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
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 VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Nueva paleta"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Nueva paleta desde XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "Importar XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "Pegar XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Ayuda"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Sin transformaciones"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Aplicar la matriz"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Insertar antes"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Nueva transformación"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch no reconoce este atributo"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Se descartaron los siguientes archivos:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} fue descartado."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Archivos descartados"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Continuar"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "{file_name} no pudo ser abierto."
-#: src/utils/FileUtils.gd:
+#: 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."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "¿Continuar con la importación del resto de los archivos?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Continuar para todos los archivos que no se pueden abrir"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "¿Guardar el archivo?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "¿Quieres guardar este archivo?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "¿Guardar los cambios?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Tus cambios se perderán si no los guardas."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "No guardar"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "{file_path} ya se está editando dentro de VectorTouch."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+#, fuzzy
+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}."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "¿Quieres guardar los cambios realizados en {file_name}?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "Guardar SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "Guardar SVG como"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Cerrar pestañas a la izquierda"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Cerrar pestañas a la derecha"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Cerrar todas las demás pestañas"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Cerrar pestañas vacías"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Cerrar pestañas guardadas"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Crear pestaña"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Seleccionar la siguiente pestaña"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Seleccionar la pestaña anterior"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Optimizar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "Optimizar SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Copiar todo el texto"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Copiar todo el texto SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "Reestablecer SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Abrir externamente"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "Abrir SVG externamente"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Mostrar en Explorador de Archivos"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Mostrar SVG en Explorador de Archivos"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Deshacer"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Rehacer"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Pegar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Cortar"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Seleccionar todo"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Duplicar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Duplicar la selección"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Eliminar la selección"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Mover hacia arriba"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Mover la selección hacia arriba"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Mover hacia abajo"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Mover la selección hacia abajo"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Buscar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Acercarse"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Alejarse"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Reestablecer el zoom"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Mostrar cuadrícula"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Mostrar controladores"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Mostrar SVG rasterizado"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Alternar ajuste"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Cargar imagen de referencia"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Mostrar imagen de referencia"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Superponer imagen de referencia"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Ver información de depuración"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
#, fuzzy
msgid "View advanced debug information"
msgstr "Ver información de depuración"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Configuración"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Abrir el menú Configuración"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Acerca de…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Abrir el menú Acerca de"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Donar…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Abrir el menú Donar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "Repositorio de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Abrir repositorio de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "Sitio web de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Abrir sitio web de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Buscar actualizaciones"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Salir de la aplicación"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Alternar pantalla completa"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Mover a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Alinear a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Línea horizontal a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Línea vertical a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Cerrar trazo"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Arco elíptico a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Bezier cuadrática a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Bezier cuadrática abreviada a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Bezier cúbica a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Beziers cúbica abreviada a"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Absoluto"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Editor de código"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "Inspector"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Ventana gráfica"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Solo se admiten archivos {extension_list} para esta operación."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Selecciona archivos {format}"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Selecciona una imagen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+#, fuzzy
+msgid "Select a font"
+msgstr "Seleccionar todo"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Selecciona un archivo {format}"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Guardar el archivo {format}"
+#~ msgid "Keep comments"
+#~ msgstr "Mantener comentarios"
+
#~ msgid "Go to parent folder"
#~ msgstr "Ir a la carpeta contenedora"
diff --git a/translations/et.po b/translations/et.po
index 5f56ee7..9fd5f83 100644
--- a/translations/et.po
+++ b/translations/et.po
@@ -17,1417 +17,1519 @@ msgstr ""
msgid "translation-credits"
msgstr "Kiisu-Master"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "Sulge VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Kas te tahate sulgeda VectorTouch?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Sulge"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Otsi uuendusi?"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "Okei"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Kas te tahate jätkata?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Ekspordi SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Ekspordi"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
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: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Hoiatus!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Sulge vahekaart"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Taasta"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Näita inspektoris"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
-msgstr "Konverteeri"
+msgstr "Teisenda"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Sisesta pärast"
-#: src/autoload/State.gd:
+#: 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?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Kompaktne"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Ilus"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Alati"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Kõik, v.a. konteinerid"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Mitte kunagi"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Kui on lühem või võrdne"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Kui on lühem"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "3- või 6-kohaline hex"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "6-kohaline hex"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr "Tume"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr "Hele"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr "Must (OLED)"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr "Vaikimisi tume"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr "Vaikimisi hele"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Tühi"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Salvestamata"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Kommentaar"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Tekst"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr "{element} peab olema {allowed} sees, et sellel oleks mõju."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "\"id\" atribuut pole defineeritud."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "Gradiendis puuduvad elemendid."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr "Gradient on ühevärviline."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Grupis pole ühtegi elementi."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "Grupis on ainult üks element."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Ei kirjelda SVGd."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Vigane pesitsus."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Sulge"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Autorid"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Annetajad"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Litsents"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Projekti asutaja ja juht"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Arendajad"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Tõlkijad"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Kuldsed annetajad"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Teemant annetajad"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "Salvesta SVG kui…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Visuaalid"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Joondamise mastaap"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Kleebi võrdluspilt"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Clear reference image"
msgstr "Eemalda võrdluspilt"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Annetusplatvormide lingid"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Katkesta"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Uus element"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Dimensioonid"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "Eelvaade on piiratud suurusele {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Suurus"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Ekspordi konfiguratsioon"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Formaat"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Kadudeta"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Kvaliteet"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Skaala"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Laius"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Kõrgus"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Kopeeri"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Paigutus"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Kuva savedata"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Värskenda failinimekiri"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Lülita peidetud failide kuvamine sisse"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Otsi faile"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
-msgstr ""
+msgstr "Tagasi"
-#: src/ui_parts/good_file_dialog.gd:
-#, fuzzy
+#: src/ui_parts/good_file_dialog.gd
msgid "Go forward"
-msgstr "Keri edasi"
+msgstr "Edasi"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Salvesta"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Vali"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Asenda"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Loo uus kaust"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Vigane kausta nimi."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Kaust selle nimega on juba olemas."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Kausta loomine ebaõnnestus."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Ava"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Kopeeri asukoht"
-#: src/ui_parts/good_file_dialog.gd:
+#: 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!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Süntaksiviga"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Impordi probleemid"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Impordi"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Tundmatu element"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Tundmatu atribuut"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Impordi probleemid"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Impordi"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Lisa element"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Peidetud"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Lohista, et muuta paigutust"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Fail"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Redigeeri"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Tööriist"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Vaade"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+msgid "Add new preview"
+msgstr "Lisa uus eelvaade"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Kustuta"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Lähtesta vaikeväärtusele"
+
+#: src/ui_parts/previews.gd
+msgid "Clear all"
+msgstr "Eemalda kõik"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr "Sorteeri"
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Vorming"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+msgid "Optimizer"
+msgstr "Optimeerija"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Värvipaletid"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Kiirklahvid"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Teema"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Kaardiriba"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Muu"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Keel"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Horisontaalne riba"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Vertikaalne riba"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Horisontaalne riba kahe reaga"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Kiirklahvida seadistamise paneel"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Loo uus vahekaart"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Keri tagasi"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Keri edasi"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "See SVG ei ole veel seotud failiasukohaga."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Proovi uuesti"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Näita eelväljaandeid"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Praegune versioon"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Informatsiooni saamine..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Uuenduste otsimine ebaõnnestus"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Näita kõiki väljaandeid"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch on ajakohane."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "Uuem versioon on saadaval!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr "Kopeeri e-posti aadress"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Loo"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Muuda värvi nime"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Kustuta värv"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Nimetu"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Otsi värvi"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Värvivalija"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
-msgstr "Piiramatu"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
+msgstr "Faili asukoht puudub"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Värvi võtmesõnad"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Värvipipett"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Uus kujund"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr "ID puudub"
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr "SVG süntaksis on viga. Muudatus, mis ei ole tehtud läbi koodiredaktori, lähtestab selle eelmisesse seisundisse."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "Before"
+msgstr "Enne"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr "Pärast"
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
msgstr "Lisa värv"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "Nimetuid värvipalette ei kuvata."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Mitmel värvipaletil ei saa olla sama nimi."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "Selles värvipalettis on sama värv juba olemas."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Nimeta ümber"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Liiguta üles"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Liiguta alla"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Rakenda eelseadistus"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Kustuta"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Kopeeri kui XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Salvesta kui XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Suhteline"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Puudub path andmed"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Puuduvad punktid"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Seda kasutab ka"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr "Rakenda"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply all of this preset's defaults"
msgstr "Rakenda kõik selle eelseadistuse vaikeväärtused"
-#: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd:
-msgid "Reset to default"
-msgstr "Lähtesta vaikeväärtusele"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Kasutamata"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Lisa kiirklahv"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Vajuta klahve…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Redaktori vormindus"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Ekspordi vormindus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Määrab kuidas SVG atribuudid ja sisu näevad välja GodSVG kasutajaliideses."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Määrab kuidas SVG atribuudid ja sisu vormindatakse kui see failina salvestatakse."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Eelseadistus"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
-msgstr "Määrab koodi esiletöstja konfiguratsiooni vaikeväärtused."
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Remove comments"
+msgstr "Eemalda kommentaarid"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
-msgstr "Hoia kommentaarid alles"
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Lisa tühi rida lõppu"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Kasuta tag-i lühisüntaksit"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Lisa tühikuid tag-i lühisüntaksi kaldkriipsu juurde"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Kasuta ilusat vormindust"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Kasuta tühikuid tab-i asemel"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Indenteerimise tühikute arv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Numbrid"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Eemalda üleliigsed nullid numbritest"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Kasuta eksponentvormindust kui see on lühem"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Värvid"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Kasuta nimedega värve"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Esmane süntaks"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Kasuta heksadetsimaalnumbrites suurtähti"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Path andmed"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Tihenda numbrid"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Minimeeri vahed"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Eemalda tühikud omaduste (flags) järelt"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Eemalda järjestikused samasugused käsud"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Teisendused"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Eemalda ebavajalikud parameetrid"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr "Määrab vaikeoptimeerija sätted, mida kasutatakse kui käivitatakse \"{optimize}\" toiming."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes"
+msgstr "Teisenda kujundeid"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr "Lihtsusta path parameetreid"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr "Teema eelseadistus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr "Teema põhivärvid"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr "Põhivärv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr "Aktsentvärv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr "Fondid"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr "Põhifont"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr "Rasvane font"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr "Mono font"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "SVG teksti värvid"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr "Koodi esiletõstja eelseadistus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr "Määrab SVG koodi esiletõstja sätete vaikimisi väärtused."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Sümboli värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Elemendi värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Atribuudi värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Sõne värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Kommentaari värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Teksti värv"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "CDATA värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Errori värv"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr "Pidemed"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Seesmine värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Tavaline värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Esiletõstetud värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Valiku värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Esiletõstetud valiku värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr "Selection rectangle"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr "Kiirus"
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr "Kriipsu pikkus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr "Värv {index}"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Alusvärvid"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr "Lõuendi värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Ruudustiku värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Kehtiva värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Hoiatuse värv"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Sisend"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Sulge vahekaarte keskmise hiireklahviga"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Inverteeri suurendussuund"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Takistusteta vaate liigutamine"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr "Liikumise kiirus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Kasuta CTRL klahvi suurendamiseks"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr "Kuva"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Kasutajaliidese suurus"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "Määrab kasutajaliidese suuruse."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr "V-Sync"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr "Maksimaalne kaadrisagedus"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr "Piiramatu"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr "Määrab maksimaalse kaadrite arvu sekundis."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr "Hoia ekraan sisselülitatuna"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Mitmesugust"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Kasuta süsteemi failidialoogi"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Sünkrooni akna tiitel avatud faili nimega"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr "Sättel pole präeguses konfiguratsioonis mõju."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr "Sätet ei saa sellel platvormil muuta."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr "Vormindajad saavad muuta SVG sisu ja atribuutide vormindust. Need muudatused ei mõjuta selle struktuuri ega keerulisemate atribuutide, näiteks pathdata struktuuri. Vormindajaid saab konfigureerida SVG ilusamaks või kompaktsemaks muutmiseks."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr "Määrab koodi esiletöstja konfiguratsiooni vaikeväärtused."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr "Sisselülitamisel kasutab taane jaoks tühikuid tabelduse asemel."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr "Optimeerijad saavad muuta SVG sisu ja keerulisemate atribuutide, näiteks pathdata struktuuri. Need muudatused vähendavad SVG keerukust, tavaliselt vähendades nii selle faili suurust. Muudatused võivad olla destruktiivsed ja teha SVG redigeerimise keeruliseks."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "Teisenda kujundeid, kui neid saab identseks määratleda lühema koodiga."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "Teisenda või lihtsusta path parameetreid, kui neid saab identseks määratleda lühema koodiga."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr "Määrab vaikimisi väärtused teemaga seotud sättetele, sealhulgas koodi esiletõstja eelseadistusele."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the base color of VectorTouch's interface."
msgstr "Määrab VectorTouch kasutajaliidese põhivärvi."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Määrab VectorTouch kasutajaliideses valitud elementide jaoks kasutatava aktsentvärvi."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr "Sisselülitamisel sulgeb keskmise hiireklahviga kaardile vajutamine selle. Väljalülitamisel fokuseeriks see selle."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "Vahetab kerimissuunad suurendamiseks ja vähendamiseks ümber."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr "Määrab, kui palju vaade liigub kerimispõhiste liikumissisendite puhul."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr "Sisselülitamisel liigutab kerimine vaadet selle suurendamise asemel. Suurendamiseks hoia CTRL klahvi kerimise ajal."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "Määrab kasutajaliidese suuruse."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr "Sünkroniseerib graafika renderdamise ekraani värskendussagedusega, et vältida ekraani rebimise artefakte. Võib veidi suurendada sisestusviivitust."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr "Määrab maksimaalse kaadrite arvu sekundis."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr "Hoiab ekraani alati sisselülitatuna, et ekraanisäästja ei võtaks üle."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "Sisselülitamisel kasutab VectorTouch süsteemi vaikefailidialoogi sisseehitatud failidialoogi asemel."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr "Sisselülitamisel lisab hetkel avatud faili nime \"VectorTouch\" ette akna pealkirjas."
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Uus palett"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Uus palett XML-ist"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "Impordi XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "Kleebi XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Abi"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Puudub teisendus"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Rakenda maatriks"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Sisesta enne"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Uus teisendus"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch ei tunne seda atribuuti"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Järgnevad failid hüljati:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} hüljati."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Hüljatud failid"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Jätka"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "{file_name} ei saanud avada."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Kontrollige, kas fail asub veel valitud asukohas."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Jätka ülejäänud failide importimisega?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Jätka kõikide failide jaoks, mida ei saa avada"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "Salvesta fail?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Kas te soovite salvestada selle faili?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "Salvesta muudatused?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Muudatused lähevad kaotsi, kui need ei salvestata."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Ära salvesta"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
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."
+#: src/utils/FileUtils.gd
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
+msgstr "Kui te soovite eemaldada muudatused tehtud alates eelmise salvestamise hetkest, kasutage {reset_svg}-d."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Kas soovite salvestada {file_name} kallal tehtud muudatused?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "Salvesta SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "Salvesta SVG kui"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Sulge kaardid vasakul"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Sulge kaardid paremal"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Sulge teised kaardid"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Sulge tühjad kaardid"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Sulge salvestatud kaardid"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Uus vahekaart"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Vali järgmine vahekaart"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Vali eelmine vahekaart"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Optimeeri"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "Optimeeri SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Kopeeri terve tekst"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Kopeeri SVG tekst"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "Lähtesta SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Ava väliselt"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "Ava SVG väliselt"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Kuva failihalduris"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Kuva SVG failihalduris"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Võta tagasi"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Tee uuesti"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Kleebi"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Lõika"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr "Arvuta avaldis"
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Vali kõik"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Dubleeri"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Dubleeri valik"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Kustuta valik"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Liiguta üles"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Liiguta valik üles"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Liiguta alla"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Liiguta valik alla"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Leia"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Suurenda"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Vähenda"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Taasta suurendus"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Kuva ruudustik"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Kuva pidemeid"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Kuva rasterdatud SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Lülita joondamine sisse"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Lae võrdluspilt"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Kuva võrdluspilt"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Kata võrdluspildiga üle"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Kuva silumisinformatsioon"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View advanced debug information"
msgstr "Kuva silumisinformatsioon"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Seaded"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Ava seadete menüü"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Teave…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Ava teabe menüü"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Anneta…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Ava annetuste menüü"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "VectorTouch repositoorium"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Ava VectorTouch repositoorium"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "VectorTouch veebileht"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Ava VectorTouch veebileht"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Otsi uuendusi"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Sulge rakendus"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Täisekraan"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Liigu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Joon"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Horisontaalne joon"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Vertikaalne joon"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Sulge path"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Elliptiline kaar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Kvadratiline Bezier"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Lihtne kvadratiline Bezier"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Kuubiline Bezier"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Lihtne kuubiline Bezier"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Absoluutne"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Koodiredaktor"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "Inspektor"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Vaade"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr "Eelvaated"
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Ainult {extension_list} failid on toetatud selle tehingu jaoks."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Vali {format} faile"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Vali pilt"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+msgid "Select a font"
+msgstr "Valige font"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Vali {format} fail"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Salvesta {format} fail"
+#~ msgid "Keep comments"
+#~ msgstr "Hoia kommentaarid alles"
+
#~ msgid "Go to parent folder"
#~ msgstr "Mine taseme võrra üles"
diff --git a/translations/fr.po b/translations/fr.po
index 2d19f8a..b09bbae 100644
--- a/translations/fr.po
+++ b/translations/fr.po
@@ -17,1438 +17,1551 @@ msgstr ""
msgid "translation-credits"
msgstr "thatoddshade "
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "Quitter VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Voulez-vous quitter VectorTouch ?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Quitter"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Vérifier les mises à jour ?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
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:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "OK"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: 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'a pas été pas définie."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Voulez-vous poursuivre ?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Exporter le SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Exporter"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
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: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Alerte !"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Fermer l'onglet"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Restaurer"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Voir dans l'inspecteur"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Convertir en"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Insérer après"
-#: src/autoload/State.gd:
+#: 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 ?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Compact"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Élégant"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Toujours"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Sauf pour les conteneurs"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Jamais"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Quand plus court ou équivalent"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Quand plus court"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "Héxadécimal de 3 ou 6 chiffres"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "Héxadécimal de 6 chiffres"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr ""
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
#, fuzzy
msgid "Light"
msgstr "Hauteur"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr ""
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr ""
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Vide"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Non enregistré"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Commentaire"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Texte"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
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/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "Aucun attribut « id » défini."
-#: src/data_classes/ElementBaseGradient.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/ElementBaseGradient.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:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Ce groupe n'a aucun élément."
-#: src/data_classes/ElementG.gd:
+#: 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:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Ne décrit pas un SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Formatage incorrect."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Fermer"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Auteur·rices"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Donateur·rices"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Licence"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Fondatrice et gestionnaire du projet"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Développeur·ses"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Traducteur·rices"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Donateur·rices Or"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Donateur·rices Diamant"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "Sauvegarder le SVG sous…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Vue"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Taille d'aimantation"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Coller une image de référence"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
#, fuzzy
msgid "Clear reference image"
msgstr "Charger une image de référence"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Annuler"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Nouvel élément"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Dimensions"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "La taille de l'image de prévisualisation est limitée à {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Taille"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Exporter la configuration"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Format"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Sans perte"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Qualité"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Échelle"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Largeur"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Hauteur"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Copier"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Disposition"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Voir les données de sauvegarde"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Actualiser les fichiers"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Activer/Désactiver la visibilité des fichiers cachés"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Rechercher des fichiers"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
#, fuzzy
msgid "Go forward"
msgstr "Défiler en avant"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Enregistrer"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Sélectionner"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Remplacer"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Créer un nouveau dossier"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Nom invalide pour un dossier."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Un dossier avec ce nom existe déjà."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Échec de création de dossier."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Ouvrir"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Copier le chemin"
-#: src/ui_parts/good_file_dialog.gd:
+#: 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 !"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Erreur de syntaxe"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Importer des problèmes"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Importer"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Élément non reconnu"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Attribut non reconnu"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Importer des problèmes"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Importer"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Exclu(s)"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Glissez-déposez pour modifier la disposition"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Fichier"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Édition"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Outils"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Affichage"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Add new preview"
+msgstr "Couleur de texte"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Supprimer"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Réinitialiser par défaut"
+
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Clear all"
+msgstr "Vider le SVG"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Formatage"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+#, fuzzy
+msgid "Optimizer"
+msgstr "Optimiser"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Palettes"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Raccourcis"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Thèmes"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Barre d'onglets"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Autre"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Langue"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Rayure horizontale"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Rayure verticale"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Horizontal avec deux rangées"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Configurer le panneau de raccourcis"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Créer un nouvel onglet"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Défiler en arrière"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Défiler en avant"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Ce SVG n'est pas encore lié à un emplacement de fichier."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Réessayer"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Afficher les versions préliminaires"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Version actuelle"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Récupération d'informations en cours…"
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Échec de la vérification de mise à jour"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Voir toutes les versions"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch est à jour."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "De nouvelles versions sont disponibles !"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
#, fuzzy
msgid "Copy email"
msgstr "Copier le chemin"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Créer"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Modifier le nom de la couleur"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Supprimer la couleur"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Sans nom"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Rechercher la couleur"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Pipette"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Colorier les mots-clés"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Pipette"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Nouvelle forme"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+#, fuzzy
+msgid "Before"
+msgstr "Insérer avant"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
#, fuzzy
msgid "Add new color"
msgstr "Couleur de texte"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "Les palettes sans nom ne seront pas montrées."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Plusieurs palettes ne peuvent pas avoir le même nom."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "Cette palette a des couleurs définies identiquement."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Renommer"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Remonter"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Descendre"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Appliquer un préréglage"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Supprimer"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Copier en tant que XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Enregistrer en tant que XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Relatif"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Aucune donnée de chemin"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Aucun point"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Aussi utilisé par"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr ""
-#: src/ui_widgets/profile_frame.gd:
+#: 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éinitialiser par défaut"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Inutilisé"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Ajouter un raccourci"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Appuyez sur des touches…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Formatage de l'éditeur"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Formatage des fichiers exportés"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Détermine le facteur d'échelle de l'interface."
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Détermine le facteur d'échelle de l'interface."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Préréglage"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
-msgid "Determines the default values of the formatter configs."
-msgstr "Si le taux de rafraîchissement est limité, cette valeur déterminera le nombre maximum d'images par seconde."
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+msgid "Remove comments"
msgstr "Garder les commentaires"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Ajouter un saut de ligne final"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Utiliser la syntaxe de balise raccourcie"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Espacer le slash des balises raccourcies"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Utiliser le formatage élégant"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Utiliser des espaces plutôt que des tabulations"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Nombre d'espaces par indentation"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Nombres"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Retirer le zéro initial"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Noter en écriture scientifique si c'est plus court"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Couleurs"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Utiliser des couleurs nommées"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Syntaxe principale"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Mettre en majuscule les nombres héxadécimaux"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Données des chemins"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Compresser les nombres"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Minimiser l'espacement"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Retirer l'espacement après les marqueurs"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Retirer les commandes consécutives"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Transformer les listes"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Retirer les paramètres inutiles"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Convert shapes"
+msgstr "Convertir en"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Theme preset"
msgstr "Réinitialiser le zoom"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Primary theme colors"
msgstr "Désactiver la couleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Base color"
msgstr "Couleurs basiques"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Accent color"
msgstr "Couleur de texte"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "Couleurs de texte SVG"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Couleur de symbole"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Couleur d'élément"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Couleur d'attribut"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Couleur de chaîne de caractères"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Couleur de commentaire"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Couleur de texte"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "Couleur de CDATA"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Couleur d'erreur"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Handles"
msgstr "Taille des poignées"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Couleur d'intérieur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Couleur d'élément normal"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Couleur d'élément survolé"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Couleur d'élément selectionné"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Couleur d'élément selectionné survolé"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Selection rectangle"
msgstr "Sélectionnez une image"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr ""
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Color {index}"
msgstr "Pipette"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Couleurs basiques"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Canvas color"
msgstr "Couleur d'intérieur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Couleur de la grille"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Couleur valide"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Couleur d'avertissement"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Entrée"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Fermer les onglets avec la molette de la souris"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Inverser la direction du zoom"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Défilement bouclé"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Utiliser CTRL pour zoomer"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Échelle de l'interface"
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Maximum FPS"
msgstr "Valeur d'IPS maximale personnalisée"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Divers"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Utiliser le sélecteur de fichiers natif"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Synchroniser le titre de la fenêtre avec le nom du fichier"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines the default values of the formatter configs."
+msgstr "Si le taux de rafraîchissement est limité, cette valeur déterminera le nombre maximum d'images par seconde."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the base color of VectorTouch's interface."
msgstr "Détermine le facteur d'échelle de l'interface."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Détermine le facteur d'échelle de l'interface."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr "Si activé, défiler fera balayer la vue. Pour zoomer, maintenez CTRL en défilant."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "Détermine le facteur d'échelle de l'interface."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr ""
-#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "Si activé, utilise le sélecteur de fichiers système. Si désactivé, utilise la boîte de dialogue intégrée de VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr ""
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Nouvelle palette"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Nouvelle palette depuis du XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "Importer un fichier XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "Coller du XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Aide"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Aucune transformation"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Appliquer la matrice"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Insérer avant"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Nouvelle transformation"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch ne reconnaît pas cet attribut"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Les fichiers suivants ont été abandonnés :"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} a été abandonné."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Fichiers abandonnés"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Poursuivre"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "{file_name} n'a pas pu être ouvert."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Vérifiez si le fichier existe encore au chemin selectionné."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Poursuivre en important le reste des fichiers ?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Poursuivre pour chaque fichier ne pouvant être ouvert"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "Enregistrer le fichier ?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Voulez-vous sauvegarder ce fichier ?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "Sauvegarder les modifications ?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Vos changements seront perdus si vous ne les enregistrés pas."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Ne pas enregistrer"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "{file_path} est déjà en cours de modification dans VectorTouch."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+#, fuzzy
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
msgstr "Si vous voulez réinitialiser vos modifications au dernier enregistrement, utilisez {reset_svg}."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Voulez-vous enregistrer les modifications de {file_name} ?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "Sauvegarder le SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "Sauvegarder le SVG sous"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Fermer les onglets sur la gauche"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Fermer les onglets sur la droite"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Fermer les autres onglets"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Fermer les onglets vides"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Fermer les onglets enregistrés"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Créer un onglet"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Basculer à l'onglet suivant"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Basculer à l'onglet précédent"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Optimiser"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "Optimiser le SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Copier tout le texte"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Copier le texte SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "Réinitialiser le SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Ouvrir externement"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "Ouvrir le SVG externement"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Afficher dans l'explorateur de fichiers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Montrer le SVG dans l'explorateur de fichiers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Annuler"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Rétablir"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Coller"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Couper"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Tout sélectionner"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Dupliquer"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Dupliquer les éléments sélectionnés"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Supprimer les éléments sélectionnés"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Remonter"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Remonter les éléments sélectionnés"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Descendre"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Descendre les éléments sélectionnés"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Rechercher"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Zoom avant"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Zoom arrière"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Réinitialiser le zoom"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Afficher la grille"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Montrer les poignées"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Montrer le SVG rastérisé"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Activer/Désactiver l'aimantation"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Charger une image de référence"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Afficher l'image de référence"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Superposer l'image de référence"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Voir les informations de déboggage"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
#, fuzzy
msgid "View advanced debug information"
msgstr "Voir les informations de déboggage"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Paramètres"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Ouvrir le menu des paramètres"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "À propos…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Ouvrir le menu « À propos »"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Faire un don…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Ouvrir le menu « Faire un don »"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "Dépôt de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Ouvrir le dépôt de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "Site web de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Ouvrir le site web de VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Vérifier les mises à jour"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Quitter l'application"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Activer/Désactiver le mode plein écran"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Déplacer vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Ligne vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Ligne horizontale vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Ligne verticale vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Fermer le chemin"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Arc elliptique vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Courbe de Bézier quadratique vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Courbe de Bézier quadratique raccourcie vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Courbe de Bézier cubique vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Courbe de Bézier cubique raccourcie vers"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Absolu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Éditeur de code"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
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:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Zone d'affichage"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Seuls les fichiers {extension_list} sont supportés par cette opération."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Sélectionner des fichiers {format}"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Sélectionnez une image"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+#, fuzzy
+msgid "Select a font"
+msgstr "Tout sélectionner"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Sélectionner un fichier {format}"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Enregistrer le fichier {format}"
+#~ msgid "Keep comments"
+#~ msgstr "Garder les commentaires"
+
#~ msgid "Go to parent folder"
#~ msgstr "Aller au dossier parent"
@@ -1534,9 +1647,6 @@ msgstr "Enregistrer le fichier {format}"
#~ msgid "Clear saving path"
#~ msgstr "Vider le chemin d'enregistrement"
-#~ msgid "Clear SVG"
-#~ msgstr "Vider le SVG"
-
#, fuzzy
#~ msgid "Open SVG file"
#~ msgstr "Ouvrir le fichier"
diff --git a/translations/nl.po b/translations/nl.po
index 9d966e7..6760c96 100644
--- a/translations/nl.po
+++ b/translations/nl.po
@@ -17,1422 +17,1535 @@ msgstr ""
msgid "translation-credits"
msgstr "Racer911dash1, jas31415"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "VectorTouch afsluiten"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Wil je VectorTouch afsluiten?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Afluiten"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Voor updates controleren?"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "OK"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Wil je voortgaan?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Exporteer SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Exporteren"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
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: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Aandacht!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Tabblad sluiten"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Herstel"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Bekijk in Inspecteur"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Omzetten Naar"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Erna Invoegen"
-#: src/autoload/State.gd:
+#: 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?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Compact"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Mooi"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Altijd"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Alles behalve containers"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Nooit"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Als korter of gelijk"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Als korter"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "3-cijferig of 6-cijferige hex"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "6-cijferige hex"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr "Donker"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr "Helder"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr "Zwart (OLED)"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr "Standaard Donker"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr "Standaard Helder"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Leeg"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Niet opgeslagen"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Commentaar"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Tekst"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
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/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "Geen \"id\" attribuut gedefineerd."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "Geen elementen onder deze kleurovergang."
-#: src/data_classes/ElementBaseGradient.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:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Deze groep bevat geen elementen."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "Deze groep bevat maar één element."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Beschrijft geen SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Onjuiste nesting."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Afluiten"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Auteurs"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Donateurs"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Licentie"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Projectoprichter en Manager"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Ontwikkelaars"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Vertalers"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Gouden Donatuers"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Diamanten Donateurs"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "SVG opslaan als…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Visuelen"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Maat inknappen"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Referentiebeeld plakken"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
#, fuzzy
msgid "Clear reference image"
msgstr "Referentiebeeld inladen"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Koppelingen naar donatieplatformen"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Annuleren"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Nieuw element"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Afmetingen"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "Voorbeeldafbeelding maat is beperkt tot {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Maat"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Export Configuratie"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Formaat"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Verliesvrij"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Kwaliteit"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Schaal"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Breedte"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Hoogte"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Kopiëren"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Indeling"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Bekijk opslaggegevens"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Bestanden vernieuwen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "De zichtbaarheit van verborgen bestanden omschakelen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Bestanden zoeken"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
#, fuzzy
msgid "Go forward"
msgstr "Scroll vooruit"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Opslaan"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Selecteren"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Vervangen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Nieuwe map creëren"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Ongeldige naam voor een map."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Een map met deze naam bestaat al."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Aanmaken van een nieuwe map mislukt."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Openen"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Pad kopiëren"
-#: src/ui_parts/good_file_dialog.gd:
+#: 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!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Syntaxfout"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Importproblemen"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Importeren"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Onherkende element"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Onherkende attribuut"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Importproblemen"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Importeren"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Element toevoegen"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Uitgezonderd"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Sleep en laat los om de indeling te veranderen"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Bestand"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Bewerken"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Gereedschap"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Zicht"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Add new preview"
+msgstr "Voeg nieuwe kleur toe"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Reset naar standaard"
+
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Clear all"
+msgstr "SVG ontruimen"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Formattering"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+#, fuzzy
+msgid "Optimizer"
+msgstr "Optimaliseren"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Paletten"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Snelkoppelingen"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Thematiek"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Tabladbalk"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Overige"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Taal"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Horizontale lijn"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Vertikale lijn"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Horizontaal met twee rijen"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Configureer Snelkoppelingspaneel"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Een nieuw tabblad creëren"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Scroll achteruit"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Scroll vooruit"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Deze SVG is nog niet gebonden aan een bestandslocatie."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Opnieuw proberen"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Laat prereleases zien"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Huidige versie"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Informatie aan het ophalen..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Updatecontrole mislukt"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Bekijk alle releases"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch is up-to-date."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "Nieuwe versies beschikbaar!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr "E-mail kopiëren"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Creëren"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Kleurnaam bewerken"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Kleur verwijderen"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Onbenoemd"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Zoekkleur"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Kleurenplukker"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
-msgstr "Onbeperkt"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
+msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "kleur trefwoorden"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Druppelaar"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Nieuwe vorm"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+#, fuzzy
+msgid "Before"
+msgstr "Ervoor Bijvoegen"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
msgstr "Voeg nieuwe kleur toe"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "Onbenoemde paletten zullen niet laten zien worden."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Meerdere paletten kunnen niet dezelfde naam hebben."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "Dit palette heeft identiek gedefinieerde kleuren."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Hernoemen"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Naar Boven"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Naar Onder"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Voorinstelling toepassen"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Verwijderen"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Als XML kopiëren"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Als XML opslaan"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Relatief"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Geen padgegevens"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Geen punten"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Ook gebruikt door"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr "Toepassen"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply all of this preset's defaults"
msgstr "Pas alle standaardwaardes van deze voorinstelling toe"
-#: src/ui_widgets/setting_frame.gd: src/ui_widgets/setting_shortcut.gd:
-msgid "Reset to default"
-msgstr "Reset naar standaard"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Ongebruikt"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Snelkoppeling toevoegen"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Druk op toetsen…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Editor-formatter"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Exportformatter"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Bepaalt de maat-factor van de interface."
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Bepaalt de maat-factor van de interface."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Voorinstelling"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
-msgstr "Bepaalt de standaard waarde van de formatter-configuraties."
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Remove comments"
msgstr "Houdt commentaar bij"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Voeg achterliggende nieuwe regel toe"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Gebruik afgekorte tag syntax"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Scheidt de schuine streep af van afgekorte tags"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Gebruik mooie formattering"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Gebruik spaties in plaats van tabs"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Aantal inspringingsspaties"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Nummers"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Verwijder voorafgande nul"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Gebruik exponentieel als korter"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Kleuren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Gebruik genoemde kleuren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Primaire syntax"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Kapitaliseer hexadecimale letters"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Padgegevens"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Nummers samendrukken"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Minimaliseer afstand"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Verwijder afstand na vlaggen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Verwijder opeenvolgende opdrachten"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Transformeer lijsten"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Verwijder onnodige parameters"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Convert shapes"
+msgstr "Omzetten Naar"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr "Thema-preset"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr "Primaire thema-kleuren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr "Basiskleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr "Accentkleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "SVG tekstkleuren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr "Markeerder voorinstelling"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr "Bepaalt de standaardwaardes van SVG markeerder instellingen."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Symboolkleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Elementkleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Attribuutkleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Stringkleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Commentaarkleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Textkleur"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "CDATA-kleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Fout-kleur"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr "Hendels"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Binnenkantkleuren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Normale kleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Zweefde kleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Gekozen kleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Zweefde gekozen kleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr "Selectie-vierkant"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr "Snelheid"
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr "Stippelijn lengte"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr "Kleur {index}"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Basiskleuren"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr "Canvaskleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Raster kleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Geldige kleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Waarschuwingskleur"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Invoer"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Sluit tabbladen met de middelste muisknop"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "inzoomrichting tegenstellen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Omwikkeld rondkijken"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Gebruik CTRL om in te zoomen"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr "Weergave"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Gebruiksinterface maat"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "Bepaalt de maat-factor van de interface."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr "V-Sync"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr "Maximum FPS"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr "Onbeperkt"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr "Bepaalt de maximum aantal frames per seconde."
+
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Keep screen on"
msgstr "Scherm Aan Houden"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Overige"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Gebruik inheemse bestandendialoog"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Synchroniseer venstertitel naar bestandsnaam"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr "De instellingen heeft geen effect op de huidige configuratie."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr "De instelling kan niet verandert worden op dit platform."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr "Bepaalt de standaard waarde van de formatter-configuraties."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr "Wanneer ingeschakelt, gebruikt spaties in plaats van een tab voor inspringing."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr "Bepaalt de standaard waardes voor thema-instellingen, inclusief de markering voorinstelling."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the base color of VectorTouch's interface."
msgstr "Bepaalt de maat-factor van de interface."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Bepaalt de maat-factor van de interface."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr "Wanneer ingeschakeld, sluit een tabblad bij het klikken van de middeste muisknop in plaats van het simpelweg in focus te brengen."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "Verwisselt de scroll richtingen voor inzoomen en uitzoomen."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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 het kijkvenster gaat tijdens het rondkijken."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr "Wanneer ingeschakeld, zal scrollen het weergave verschuiven. Om te zoomen, houd CTRL ingedrukt tijdens het scrollen."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "Bepaalt de maat-factor van de interface."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr "Synchroniseert grapfische rendering met vernieuwingfrequentie om scherm-scheuring te voorkomen. Kan mogelijk invoer vertraging lichtjes verhogen."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr "Bepaalt de maximum aantal frames per seconde."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr "Houdt het scherm aan, zelfs na inactiviteit, zodat de screensaver niet overneemt."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "Waneer ingeschakeld, gebruikt jouw besturingssysteem's inheemse bestandendialoog in plaats van VectorTouch's ingebouwde bestandendialoog."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr "Wanneer ingeschakelt, voegt de huidige bestandsnaam voor de \"VectorTouch\" venstertitel."
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Nieuw palette"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Nieuwe palette uit XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "XML Importeren"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "XML Plakken"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Help"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Geen transformaties"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Matrix toepassen"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Ervoor Bijvoegen"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Nieuwe transformatie"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch herkent deze attribuut niet"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "De volgende bestanden zijn verworpen:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} is verworpen."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Verworpen bestanden"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Voortgaan"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "{file_name} kon niet worden geopend."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Kijk na of het bestand nog steeds bestaat in het gekozen bestandspad."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Voortgaan met het importeren van de overige bestanden?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Voortgaan voor alle bestanden die niet geopent kunnen worden"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "sla het bestand op?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Wil je dit bestand opslaan?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "sla de aanpassingen op?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Uw aanpassingen zullen verdwijnen als u ze niet opslaat."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Niet opslaan."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "{file_path} wordt al bewerkt in VectorTouch."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+#, fuzzy
+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}."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Wilt u de aanpassingen opslaan als {file_name}?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "SVG opslaan"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "SVG opslaan als"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Sluit linker tabbladen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Sluit rechter tabbladen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Kopiëer alle tekst"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Sluit lege tabbladen af"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Sluit opgeslagen tabbladen af"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Tabblad creëren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Selecteer het volgende tabblad"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Selecteer het vorige tabblad"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Optimaliseren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "SVG optimaliseren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Kopiëer alle tekst"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Kopiëer de SVG teksten"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "SVG Resetten"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Extern openen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "SVG extern openen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Laat zien in Bestandsenverkenner"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Laat SVG zien in Bestandsverkenner"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Ongedaan maken"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Opnieuw doen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Plakken"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Knippen"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Alles selecteren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Dupliceren"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Dupliceer de selectie"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Verwijder de selectie"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Omhoog verschuiven"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Beweeg de selectie omhoog"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Omlaag verschuiven"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Beweeg de selectie omlaag"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Vind"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Inzoomen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Uitzoomen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Zoom resetten"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Raster weergeven"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Hendels weergeven"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Gerasterd SVG weergeven"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Knappen omschakelen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Referentiebeeld inladen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Referentie afbeelding weergeven"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Referentie afbeelding overlappen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Bekijk debug informatie"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
#, fuzzy
msgid "View advanced debug information"
msgstr "Bekijk debug informatie"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Instellingen"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Open Instellingenmenu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Betreffende…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Open het Betreffende menu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Doneren…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Open Doneermenu"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "VectorTouch opslagplaats"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Open VectorTouch opslagplaats"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "VectorTouch website"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Open VectorTouch website"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Nakijken voor updates"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Applicatie afsluiten"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Schakel fullscreen om"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Verplaats naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Lijn naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Horizontale lijn naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Vertikale lijn naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Pad sluiten"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Elliptische Boog naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Kwadratische Bézier naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Afgekorte Kwadratische Bézier naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Kubieke Bézier naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Afgekorte Kubieke Bézier naar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Absoluut"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Code editor"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
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:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Kijkvenster"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Alleen {extension_list} bestanden zijn ondersteund voor deze operatie."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Kies {format} bestanden"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Kies een afbeedling"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+#, fuzzy
+msgid "Select a font"
+msgstr "Alles selecteren"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Kies een {format} bestand"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Bewaar het {format} bestand"
+#~ msgid "Keep comments"
+#~ msgstr "Houdt commentaar bij"
+
#~ msgid "Go to parent folder"
#~ msgstr "Ga naar bovenliggende map"
@@ -1514,9 +1627,6 @@ msgstr "Bewaar het {format} bestand"
#~ msgid "Clear saving path"
#~ msgstr "Ontruim opslagpad"
-#~ msgid "Clear SVG"
-#~ msgstr "SVG ontruimen"
-
#~ msgid "Open SVG file"
#~ msgstr "Open SVG bestand"
diff --git a/translations/pt_BR.po b/translations/pt_BR.po
index 50273ee..bd23c82 100644
--- a/translations/pt_BR.po
+++ b/translations/pt_BR.po
@@ -10,1444 +10,1527 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.6\n"
+"X-Generator: Poedit 3.8\n"
#. Translators (comma-separated): Name or alias, optionally followed by an email in angle brackets .
#. Used for credits. Adding yourself is optional. New entries go at the end. Don't remove or rearrange existing entries.
msgid "translation-credits"
msgstr "Felipe Sena Costa "
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "Sair do VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Você deseja sair do VectorTouch?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Sair"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Verificar atualizações?"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "OK"
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: 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."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Você deseja prosseguir?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Exportar SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Exportar"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
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: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Alerta!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Fechar aba"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Restaurar"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Ver no Inspetor"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Converter Para"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Inserir Após"
-#: src/autoload/State.gd:
+#: 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?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Compacto"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Bonito"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Sempre"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Tudo exceto containers"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Nunca"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Quando menor ou igual"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Quando menor"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "Hexadecimal de 3 dígitos ou 6 dígitos"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "Hexadecimal de 6 dígitos"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
-msgstr ""
+msgstr "Escuro"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
-#, fuzzy
+#: src/config_classes/SaveData.gd
msgid "Light"
-msgstr "Altura"
+msgstr "Claro"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
-msgstr ""
+msgstr "Preto (OLED)"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
-msgstr ""
+msgstr "Escuro padrão"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
-msgstr ""
+msgstr "Claro padrão"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Vazio"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Não salvo"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Comentário"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Texto"
# Needs to be tested in context
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr "{element} deve estar dentro de {allowed} para ter qualquer efeito."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "Nenhum atributo \"id\" definido."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "Nenhum elemento sob / abaixo este gradiente."
-#: src/data_classes/ElementBaseGradient.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:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Este grupo não possui elementos."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "Este grupo possui apenas um elemento."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Não descreve um SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Aninhamento inadequado."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Fechar"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Autores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Doadores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Licença"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Fundador e Gerente do Projeto"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Desenvolvedores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Tradutores"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Doadores ouro"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Doadores diamante"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "Salvar SVG como…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Visuais"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Tamanho de encaixe"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Carregar imagem de referência"
-#: src/ui_parts/display.gd:
-#, fuzzy
+#: src/ui_parts/display.gd
msgid "Clear reference image"
-msgstr "Carregar imagem de referência"
+msgstr "Limpar imagem de referência"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Links para plataforma de doação"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Cancelar"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Novo elemento"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Dimensões"
-#: src/ui_parts/export_menu.gd:
+#: 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}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Tamanho"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Configuração de exportação"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Formato"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Sem perdas"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Qualidade"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Escala"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Largura"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Altura"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Copiar"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Layout"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Ver dados salvos"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Atualizar arquivos"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Alternar a visibilidade de arquivos escondidos"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Procurar arquivos"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
-msgstr ""
+msgstr "Voltar"
-#: src/ui_parts/good_file_dialog.gd:
-#, fuzzy
+#: src/ui_parts/good_file_dialog.gd
msgid "Go forward"
-msgstr "Rolar para frente"
+msgstr "Ir para a frente"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Salvar"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Selecionar"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Substituir"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Criar nova pasta"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Nome inválido para uma pasta."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Uma pasta com esse nome já existe."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Falha ao criar uma pasta."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Abrir"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Copiar caminho"
-#: src/ui_parts/good_file_dialog.gd:
+#: 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!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Erro de sintaxe"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Problemas de Importação"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Importar"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Elemento não reconhecido"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Atributo não reconhecido"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Problemas de Importação"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Importar"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Adicionar elemento"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Excluídos"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Arraste e solte para modificar o layout"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Arquivo"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Editar"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Ferramenta"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Visualizar"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+msgid "Add new preview"
+msgstr "Adicionar nova prévia"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Excluir"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Redefinir para o padrão"
+
+#: src/ui_parts/previews.gd
+msgid "Clear all"
+msgstr "Limpar tudo"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr "Organizar"
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Formatação"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+msgid "Optimizer"
+msgstr "Otimizador"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Paletas"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Atalhos"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Temas"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Barra de guias"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Outro"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Idioma"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Faixa horizontal"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Faixa vertical"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Horizontal com duas linhas"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Configurar Painel de Atalhos"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Criar nova aba"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Rolar para trás"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Rolar para frente"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Esse SVG ainda não está vinculado a um local de arquivo."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Tentar novamente"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Incluir pré-lançamentos"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Versão Atual"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Pegando informação..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Verificação de atualização falhou"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Ver todos os lançamentos"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch está atualizado."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "Novas versões disponíveis!"
-#: src/ui_widgets/PanelGrid.gd:
-#, fuzzy
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
-msgstr "Copiar caminho"
+msgstr "Copiar email"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Criar"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Editar nome da cor"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Remover cor"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Sem nome"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Procurar cor"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Seletor de Cores"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
-msgstr ""
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
+msgstr "Nenhum caminho de arquivo"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Palavras-chave de cor"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Conta-gotas"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Nova forma"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr "Sem ID"
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
-msgstr ""
+msgstr "Esse SVG tem sintaxe inválida. Qualquer edição não feita pelo editor de código irá redefinir-lo."
-#: src/ui_widgets/palette_config.gd:
-#, fuzzy
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "Before"
+msgstr "Antes"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr "Depois"
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
-msgstr "Cor de texto"
+msgstr "Adicionar nova cor"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "Paletas sem nome não serão mostradas."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Várias paletas não podem ter o mesmo nome."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "Essa paleta tem cores definidas de forma idêntica."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Renomear"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Mover para acima"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Mover para abaixo"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Aplicar Predefinição"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Excluir"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Copiar como XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Salvar como XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Relativo"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Sem dados de caminho"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Sem pontos"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Também usado por"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
-msgstr ""
+msgstr "Aplicar"
-#: src/ui_widgets/profile_frame.gd:
+#: 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"
+msgstr "Aplicar todos os padrões dessa pré-definição"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Não utilizado"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Adicionar atalho"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Pressione as teclas…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Formatador do editor"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Formatador de exportação"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content appear in the VectorTouch interface."
+msgstr "Determina como atributos SVG e conteúdo aparecem na interface do VectorTouch."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Determina como atributos SVG e conteúdo são formatados quando o arquivo for salvo."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Predefinição"
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
-msgid "Determines the default values of the formatter configs."
-msgstr "Muda o fator de escala da interfaçe."
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Remove comments"
+msgstr "Remover comentários"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
-msgstr "Manter comentários"
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Adicionar nova linha à direita"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Utilizar sintaxe de tag abreviada"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Espaçar a barra de tags abreviadas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Utilizar formatação bonita"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Utilizar espaços ao invés de tabulações"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Número de espaços de identação"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Números"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Remover zero à esquerada"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Utilizar exponencial quando mais curto"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Cores"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Utilizar cores nomeadas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Sintaxe primária"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Letras de valores hexadecimais maiúsculas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Dados de caminho"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Comprimir números"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Minimizar espaçamento"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Remover espaçamento após sinalizadores"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Remover comandos consecutivos"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Transformar listas"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Remover parâmetros desnecessários"
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr "Determina as configurações para o otimizador padrão, usado quando manualmente executando a ação \"{optimize}\"."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes"
+msgstr "Converter formas"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr "Simplificar parâmetros de caminho"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
-msgstr "Redefinir zoom"
+msgstr "Predefinição de tema"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
-msgstr ""
+msgstr "Cores primárias do tema"
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
-msgstr "Cores básicas"
+msgstr "Cor base"
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
-msgstr "Cor de texto"
+msgstr "Cor de realce"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr "Fontes"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr "Fonte principal"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr "Fonte negrito"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr "Fonte monoespaçada"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "Cores de texto SVG"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
-msgstr ""
+msgstr "Predefinição de destaque"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
-msgstr ""
+msgstr "Determina os valores padrão das configurações do destacador SVG."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Cor de símbolo"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Cor de elemento"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Cor de atributo"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Cor de string"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Cor de comentário"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Cor de texto"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "Cor de CDATA"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Cor de erro"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
-msgstr "Tamanho de alça"
+msgstr "Alças"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Cor interna"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Cor normal"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Cor de pairado"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Cor de selecionado"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Cor de pairado e selecionado"
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
-msgstr "Selecionar uma imagem"
+msgstr "Retângulo de seleção"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
-msgstr ""
+msgstr "Velocidade"
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
-msgstr ""
+msgstr "Tamanho do traçado"
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
-msgstr "Seletor de Cores"
+msgstr "Cor {index}"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Cores básicas"
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
-msgstr "Cor interna"
+msgstr "Cor da tela"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Cor da grade"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Cor válida"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Cor de aviso"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Entrada"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Fechar guias com o botão do meio do mouse"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Inverter direção do zoom"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Movimentação envolvente"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
-msgstr ""
+msgstr "Velocidade de movimentação"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Utilizar CTRL para zoom"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
-msgstr ""
+msgstr "Display"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Escala da interface"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "Determina o fator de escala da interface."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
-msgstr ""
+msgstr "Sincronização vertical"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
-msgstr ""
+msgstr "Taxa de quadros por segundo máxima"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr "Ilimitado"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr "Determina a taxa máxima de quadros por segundo."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
-msgstr ""
+msgstr "Deixar tela ligada"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Variados"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Utilizar diálogo de arquivos nativo"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Sincronizar título de janela com o nome do arquivo"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
-msgstr ""
+msgstr "Essa configuração não possui efeito na configuração atual."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
-msgstr ""
+msgstr "Essa configuração não pode ser modificada nessa plataforma."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr "Formatadores podem mudar a formatação do conteúdo e dos atributos do SVG. Essas mudanças não afetam a sua estrutura ou a estrutura de atributos mais complexos, como o pathdata. Formatadores podem ser configurados para tornar o SVG mais bonito ou compacto."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr "Determina os valores padrão das configurações do formatador."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
-msgstr ""
+msgstr "Quando habilitado, utiliza espaços ao invés de uma tabulação para o recuo."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr "Otimizadores podem modificar a estrutura do SVG e os seus atributos complexos, como o pathdata. Essas mudanças podem reduzir a complexidade do SVG, geralmente levando a reduções no tamanho do arquivo, mas pode ser destrutivo e complicar edição futura, em comparação com a otimização manual do SVG."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "Converter formas em outras que possam ser definidas de forma idêntica, mas que tenham uma representação mais curta se possível."
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "Converter ou simplificar parâmetros de caminho em parâmetros que possam ser definidos de forma idêntica, mas que tenham uma representação mais curta se possível."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
-msgstr ""
+msgstr "Determina os valores padrão de configurações relacionadas a tematização, incluindo as pré-definições de realce."
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the base color of VectorTouch's interface."
-msgstr "Muda o fator de escala da interfaçe."
+msgstr "Determina a cor base da interface do VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
-msgstr "Muda o fator de escala da interfaçe."
+msgstr "Determina a cor de realce usada para elementos destacados na interface do VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
-msgstr "Se ligado, clicar em uma guia com o botão do meio do mouse fechará a guia. Se desligado, irá focar na guia."
+msgstr "Quando habilitado, clicar em uma guia com o botão do meio do mouse fechará a guia ao invés de focar nela."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.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_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
-msgstr ""
+msgstr "Determina o quanto a tela moverá com entradas de movimentação baseadas em rolagem."
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. 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_widgets/settings_content_generic.gd:
-#, fuzzy
-msgid "Determines the scale factor for the interface."
-msgstr "Muda o fator de escala da interfaçe."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
-msgstr ""
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr ""
+msgstr "Sincroniza a renderização de gráficos com a taxa de atualização de exibição para prevenir artefatos de rasgo de tela. Pode aumentar o atraso de input um pouco."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
-msgstr ""
+msgstr "Mantém a tela ligada mesmo após um período de inatividade, para que o protetor de tela não assuma o controle."
-#: src/ui_widgets/settings_content_generic.gd:
-#, fuzzy
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
-msgstr "Se habilitado, usa o diálogo de arquivo nativo do sistema operacional. Se desabilitado, usa o diálogo de arquivo embutido no VectorTouch."
+msgstr "Quando habilitado, usa o diálogo de arquivo nativo do sistema operacional ao invés do diálogo de arquivo embutido no VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
-msgstr ""
+msgstr "Quando habilitado, adiciona o nome do arquivo atual antes do título \"VectorTouch\" na janela."
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Nova paleta"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Nova paleta a partir de um XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "Importar XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "Colar XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Ajuda"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Sem transformações"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Aplicar matriz"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Inserir Antes"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Nova transformação"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "O VectorTouch não reconhece este atributo"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Os seguintes arquivos foram descartados:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} foi descartado."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Arquivos descartados"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Proceder"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "{file_name} não pode ser aberto."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Verificar se o arquivo ainda existe no local de arquivo selecionado."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Prosseguir com a importação do restante dos arquivos?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Prosseguir para todos os arquivos que não podem ser abertos"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "Salvar o arquivo?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Você deseja salvar este arquivo?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "Salvar as alterações?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Suas alterações serão perdidas se você não as salvar."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Não salvar"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "{file_path} já está sendo editado dentro do VectorTouch."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: 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}."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Você deseja salvar as alterações feitas em {file_name}?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "Salvar SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "Salvar SVG como"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Fechar abas à esquerda"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Fechar abas à direita"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Fechar todas as outras abas"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Fechar abas vazias"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Fechar abas salvas"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Criar aba"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Selecionar a próxima guia"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Selecionar a guia anterior"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Otimizar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "Otimizar SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Copiar todo texto"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Copiar todo texto do SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "Redefinir SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Abrir externalmente"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "Abrir SVG externalmente"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Mostrar no gerenciador de arquivos"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Mostrar SVG no Explorador de Arquivos"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Desfazer"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Refazer"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Colar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Cortar"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr "Avaliar"
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Selecionar tudo"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Duplicar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Duplicar a seleção"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Excluir a seleção"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Mover para acima"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Mover a seleção para cima"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Mover para abaixo"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Mover a seleção para baixo"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Encontrar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Aumentar zoom"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Diminuir zoom"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Redefinir zoom"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Mostrar grade"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Mostrar alças"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Mostrar SVG rasterizado"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Alternar ajuste"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Carregar imagem de referência"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Mostrar imagem de referência"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Sobrepor imagem de referência"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Visualizar informação de depuração"
-#: src/utils/TranslationUtils.gd:
-#, fuzzy
+#: src/utils/TranslationUtils.gd
msgid "View advanced debug information"
-msgstr "Visualizar informação de depuração"
+msgstr "Visualizar informação de depuração avançada"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Configurações"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Abrir o menu Configurações"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Sobre…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Abrir o menu Sobre"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Doar…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Abrir o menu Doar"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "Repositório do VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Abrir o repositório do VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "Website do VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Abrir website do VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Verificar atualizações"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Fechar programa"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Alternar tela cheia"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Mover para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Linha para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Linha Horizontal para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Linha Vertical para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Fechar Caminho"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Arco Elíptico para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Bézier Quadrático para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Bézier Quadrático Abreviado para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Bézier Cúbico"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Bézier Cúbico Abreviado para"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Absoluto"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Editor de código"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "Inspetor"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
-msgstr "Canvas"
+msgstr "Tela"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr "Prévias"
+
+#: 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."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Selecionar arquivos do tipo {format}"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Selecionar uma imagem"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+msgid "Select a font"
+msgstr "Selecionar uma fonte"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Selecionar um arquivo do tipo {format}"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Salvar o arquivo do tipo {format}"
+#~ msgid "Keep comments"
+#~ msgstr "Manter comentários"
+
#~ msgid "Go to parent folder"
#~ msgstr "Ir para pasta pai"
diff --git a/translations/ru.po b/translations/ru.po
index f71a4b2..40ab558 100644
--- a/translations/ru.po
+++ b/translations/ru.po
@@ -18,1417 +18,1530 @@ msgstr ""
msgid "translation-credits"
msgstr "volkov, Gallifreyan , freeducks-debug"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "Выйти из VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Вы хотите выйти из VectorTouch?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Выйти"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Проверить обновления?"
-#: src/autoload/HandlerGUI.gd:
+#: 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, чтобы сравнить номер версии. Никакие другие данные не собираются и не передаются."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "Хорошо"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its proportions are too extreme."
msgstr "Изображение можно экспортировать только как SVG, поскольку его пропорции слишком экстремальные."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its size is not defined."
msgstr "Изображение можно экспортировать только как SVG, поскольку его размеры не заданы."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Продолжить?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Экспортировать SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Экспортовать"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "The last edited state of this tab could not be found."
msgstr "Последнее редактированное состояние этой вкладки невозможно найти."
-#: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Внимание!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Закрыть вкладку"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Восстановить"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Просмотреть в инспектор"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Конвертировать в"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Вставить после"
-#: src/autoload/State.gd:
+#: 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 из этого пути?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Компактно"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Красиво"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Всегда"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Все кроме контейнеров"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Никогда"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Когда короче или равно"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Когда короче"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "3 или 6 цифровое шестандацитиричное значение"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "6 цифровое шестандцатяричное значение"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr "Темная"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr "Светлая"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr "Темная (OLED)"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr "Стандартная темная"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr "Стандартная светлая"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Пусто"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Не сохранено"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Комментарий"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Текст"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr "{element} должен быть внутри {allowed} чтобы это имело эффект."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "Атрибут \"id\" не задан."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "Нет элемента в этом градиенте."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr "Этот градиент описывает сплошной цвет."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "В этой групе нет элементов."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "В этой группе только один элемент."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Не является описанием SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Неправильное вложение."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Закрыть"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Авторы"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Благотворители"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Лицензия"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Основатель и руководитель проекта"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Разработчики"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Переводчики"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Золотые благотворители"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Алмазные благотворители"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "Сохранить SVG как…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Внешний вид"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Размер привязки"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Вставить референсое изображение"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Clear reference image"
msgstr "Обнулить референс"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Ссылки на платформы для пожертвований"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Отменить"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Новый элемент"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Размеры"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "Размер предварительного просмотра изображения ограничен до {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Размер"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Настройки экспорта"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Формат"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Без потерь"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Качество"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Масштаб"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Ширина"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Высота"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Скопировать"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Макет"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Просмотреть даные сохранения"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Обновить файлы"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Переключить видимость скрытых файлов"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Искать файлы"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
#, fuzzy
msgid "Go forward"
msgstr "Прокрутить вперед"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Сохранить"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Выбрать"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Заменить"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Создать новую папку"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Неправильное название для папки."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Папка с таким именем уже существует."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Не удалось создать папку."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Открыть"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Скопировать путь"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!"
msgstr "Файл с названием \"{file_name}\" уже существует. Его замена перезапишет его содержимое!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Синтаксическая ошибка"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Проблемы с импортированием"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Импортировать"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Неизвестный элемент"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Неизвестный атрибут"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Проблемы с импортированием"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Импортировать"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Добавить элемент"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Исключены"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Перетягивайте, чтобы изменить макет"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Файл"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Редактировать"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Инструмент"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Просмотр"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Add new preview"
+msgstr "Добавить новый цвет"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Удалить"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Восстановить значение по умолчанию"
+
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Clear all"
+msgstr "Выбрать все"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Форматирование"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+#, fuzzy
+msgid "Optimizer"
+msgstr "Оптимизировать"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Палитры"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Сочетания клавиш"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Тема"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Вкладки"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Другие"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Язык"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Горизонтальная полоса"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Вертикальная полоса"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Горизонтальная с двумя колонками"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Настроить в панели сочетаний клавиш"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Создать новую вкладку"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Прокрутить назад"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Прокрутить вперед"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Это SVG изображение еще не связано с расположением файла."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Попробовать еще раз"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Показывать тестовые сборки"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Текущая версия"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Загрузка информации..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Не удалось проверить обновления"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Показать все сборки"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "Установлена последняя версия VectorTouch."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "Доступна новая версия!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr "Скопировать электронную почту"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Создать"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Редактировать название цвета"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Удалить цвет"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Без названия"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Искать цвет"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Цветовая пипетка"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
-msgstr "Без ограничений"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
+msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Ключевые слова цвета"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Пипетка"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Новая привязка"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr "Этот файл SVG содержит неподдерживаемый синтакс. Любые изменения, не внесённые через редактор кода, обнулят его."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+#, fuzzy
+msgid "Before"
+msgstr "Вставить до"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
msgstr "Добавить новый цвет"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "Палитры без названия не будут отображаться."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Несколько палитр не могут иметь одно и тоже название."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "В этой палитре имеются цвета с идентичными названиями."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Переименовать"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Подвинуть вверх"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Подвинуть вниз"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Применить пресет"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Удалить"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Скопировать как XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Сохранить как XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Относительно"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Нет данных пути"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Нет точек"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Так же используется"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr "Применить"
-#: src/ui_widgets/profile_frame.gd:
+#: 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 "Восстановить значение по умолчанию"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Не используется"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Добавить сочетание клавиш"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Нажмите клавиши…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Форматер редактора"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Форматер экспорта"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Устанавливает основной цвет интерфейса GodSVG."
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Устанавливает основной цвет интерфейса GodSVG."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Пресет"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
-msgstr "Определяет стандартные значения для настроек форматера."
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Remove comments"
msgstr "Сохранять коментарии"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Добавлять новую строку в конце"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Использовать теги с сокращенным синтаксисом"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Ставить пробел после тега"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Использовать красивое форматирование"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Использовать пробелы вместо tab-ов"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Количество символов отступа"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Цифры"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Удалить начальный ноль"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Использовать экспоненту когда короче"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Цвета"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Использовать названия цветов"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Основной синтаксис"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Использовать заглавную букву для шестнадцатиричных букв"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Данные пути"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Сжать цифры"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Минимизировать интервалы"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Удалить интервалы после флагов"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Удалить последовательные команды"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Список трансформаций"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Удалить ненужные параметры"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Convert shapes"
+msgstr "Конвертировать в"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr "Пресет темы"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr "Главные цвета темы"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr "Базовый цвет"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr "Цвет акцента"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "Цвет SVG текста"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr "Пресет подсветки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr "Определяет стандартные значения настроек SVG подсветки."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Цвет символа"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Цвет элемента"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Цвет атрибута"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Цвет строки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Цвет комментария"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Цвет текста"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "Цвет CDATA"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Цвет ошибки"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr "Ручки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Внутренний цвет"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Обычный цвет"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Цвет наведенного"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Цвет выбранного"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Цвет выделенного-наведенного"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr "Прямоугольник выбора"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr "Скорость"
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr "Длина линии"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr "Цвет {index}"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Базовый цвет"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr "Цвет полотна"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Цвет сетки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Цвет валидности"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Цвет предупреждения"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Устройства ввода"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Закрывать вкладки средней клавишей мыши"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Инвертировать направление масштабирования"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Захват курсора при прокрутке"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr "Скорость прокрутки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Использовать CTRL для масштабирования"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr "Отображение"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Масштаб интерфейса"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "Определяет множитель масштабирования интерфейса."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr "Вертикальная синхронизация"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr "Максимальное количество кадров в секунду"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr "Без ограничений"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr "Определяет максимальное количество кадров в секунду."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr "Держать экран включенным"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Разное"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Использовать родной файловый диалог системы"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Синхронизировать заголовок окна с названием файла"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr "Эта опция не имеет эффекта на текущую конфигурацию."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr "Эту опцию нельзя изменить на текущей платформе."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr "Определяет стандартные значения для настроек форматера."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr "Когда активно, использует пробелы вместо одного tab-а для отступов."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr "Определяет стандартные значения связанные с настройками темы, включая пресет подсветки."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the base color of VectorTouch's interface."
msgstr "Устанавливает основной цвет интерфейса VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Устанавливает акцентный цвет для выделяемых элементов интерфейса VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr "Если включено - нажатие на вкладку средней кнопкой мыши закроет ее вместо переключения фокуса."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "Поменяет местами направление прокрутки при масштабировании."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning."
msgstr "Курсор будет телепортироваться от одного до противоположного края на границе окна просмотра."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr "Устанавливает насколько окно просмотра перемещается при использовании прокрутки."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr "Если включено - прокрутка будет перемещать окно просмотра. Чтобы масштабировать зажмите CTRL при прокручивании."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "Определяет множитель масштабирования интерфейса."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr "Синхронизирует отображение графики с частотой обновления экрана, чтобы избегать артефактам (вроде \"разрыва\" картинки). Может увеличить задержку нажатий кнопок мыши и клавиатуры."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr "Определяет максимальное количество кадров в секунду."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr "Будет удерживать экран активным, даже после бездействия, поэтому хранитель экрана не будет запускаться."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "Если включено, то будет использоваться родной файловый диалог вашей операционной системы для выбора файлов вместо встроенного в VectorTouch."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr "Когда активно, добавит текущий открытый файл перед \"VectorTouch\" в заголовке окна."
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Новая палитра"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Новая палитра из XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "Импортировать XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "Вставить XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Помощь"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Нет трансформаций"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Применить матрицу"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Вставить до"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Новая трансформация"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch не может распознать этот атрибут"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Следующие файлы были отклонены:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} был отклонен."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Отклоненные файлы"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Продолжить"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "Невозможно открыть {file_name} файл."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Проверьте, что файл все еще существует по выбранному пути."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Продолжить импортировать остальные файлы?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Продолжить для всех файлов, которые не могут быть открыты"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "Сохранить файл?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Вы хотите сохранить этот файл?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "Сохранить изменения?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Ваши изменения будут утеряны если вы их не сохраните."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Не сохранять"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "Файл {file_path} уже редактируется внутри VectorTouch."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+#, fuzzy
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
msgstr "Если вы хотите отменить внесенные после после сохранения изменения, воспользуйтесь {reset_svg}."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Сохранить изменения в {file_name}?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "Сохранить SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "Сохранить SVG как"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Закрыть вкладки слева"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Закрыть вкладки справа"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Закрыть все остальные вкладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Закрыть пустые вкладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Закрыть сохраненные вкладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Создать вкладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Выбрать следующую вкладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Выбрать предыдущую вкладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Оптимизировать"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "Оптимизировать SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Скопировать весь текст"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Скопировать SVG текст"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "Сбросить SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Открыть во внешней программе"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "Открыть SVG в внешней программе"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Показать в файловом менеджере"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Показать SVG в файловом менеджере"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Отменить"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Вернуть"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Вставить"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Вырезать"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Выбрать все"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Дублировать"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Дублировать выбранное"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Удалить все выбранные теги"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Подвинуть вверх"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Подвинуть выбранное вверх"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Подвинуть вниз"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Подвинуть выбранное вниз"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Найти"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Увеличить масштаб"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Уменьшить масштаб"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Сбросить масштаб"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Показать сетку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Показать ручки редактирования"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Показать растеризованный SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Переключить привязку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Загрузить референс"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Показать референс-изображение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Наложить референс-изображение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Просмотреть информацию для отладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View advanced debug information"
msgstr "Просмотреть информацию для отладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Настройки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Открыть меню настроек"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Про программу…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Открыть меню \"Про приложение\""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Сделать пожертвование…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Открыть меню благотворителей"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "Репозиторий VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Открыть репозиторий VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "Веб-сайт VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Открыть веб-сайт VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Проверить обновления"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Выйти из приложения"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Переключить полный экран"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Подвинуть до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Линия до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Горизонтальная линия до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Вертикальная линия до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Закрыть путь"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Эллиптическая дуга до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Квадратичная Безье до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Сокращенная квадратичная Безье до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Кубическая Безье до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Сокращенная кубическая Безье до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Абсолютно"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Редактор кода"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "Инспектор"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Окно просмотра"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Только файлы с расширениями {extension_list} поддерживаются для этой операции."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Выбрать {format} файлы"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Выбрать изображение"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+#, fuzzy
+msgid "Select a font"
+msgstr "Выбрать все"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Выбрать {format} файл"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Сохранить {format} файл"
+#~ msgid "Keep comments"
+#~ msgstr "Сохранять коментарии"
+
#~ msgid "Go to parent folder"
#~ msgstr "Перейти к родительской папке"
diff --git a/translations/uk.po b/translations/uk.po
index 9cca58e..e005890 100644
--- a/translations/uk.po
+++ b/translations/uk.po
@@ -17,1427 +17,1540 @@ msgstr ""
msgid "translation-credits"
msgstr "volkov, freeducks-debug"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "Вийти із VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "Ви дійсно бажаєте вийти із VectorTouch?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "Вийти"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "Перевірити оновлення?"
-#: src/autoload/HandlerGUI.gd:
+#: 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, щоб порівняти цифри версії. Жодна інша інформація не збирається і не передається."
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "Добре"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its proportions are too extreme."
msgstr "Це зображення може бути експортоване тільки як SVG, оскільки його пропорції занадто екстремальні."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its size is not defined."
msgstr "Це зображення може бути експортоване тільки як SVG, оскільки його розмір не завданий."
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "Ви дійсно бажаєте продовжити?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "Експортувати SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "Експортувати"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "The last edited state of this tab could not be found."
msgstr "Останній редагований стан цієї вкладки не може бути знайдено."
-#: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "Увага!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "Закрити вкладку"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "Відновити"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "Переглянути в інспекторі"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "Конвертувати в"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "Вставити після"
-#: src/autoload/State.gd:
+#: 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 з цього шляху?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "Компактно"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "Гарно"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "Завжди"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "Усі крім контейнерів"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "Ніколи"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "Коли коротше або дорівнює"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "Коли коротше"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "3 або 6 значне шістнадцятирічне число"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "6 значне шістнадцятирічне число"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr "Темна"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr "Світла"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr "Темна (OLED)"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr "Стандартна темна"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr "Стандартна світла"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "Порожньо"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "Не збережено"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "Коментар"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "Текст"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr "{element} повинен бути всередині {allowed} щоб зміни вступили в силу."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "Не вказано \"id\" атрибуту."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "Немає елементів під цим градієнтом."
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr "Цей градієнт це суцільний колір."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "Ця група не має елементів."
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "Ця група має тільки один елемент."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "Не є описом SVG."
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "Неправильне вкладення."
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "Закрити"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "Автори"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "Благодійники"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "Ліцензія"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "Засновник і керівник проекту"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "Розробники"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "Перекладачі"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "Золоті благодійники"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "Діамантові благодійники"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "Зберегти SVG як…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "Зовнішній вигляд"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "Розмір прилипання"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "Вставити еталонне зображення"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
#, fuzzy
msgid "Clear reference image"
msgstr "Завантажити еталонне зображення"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "Посилання на платформи для пожертв"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "Скасувати"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "Новий елемент"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "Розміри"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "Розмір попереднього перегляду зображення обмежено до {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "Розмір"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "Налаштування експорту"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "Формат"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "Без втрат"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "Якість"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "Масштаб"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "Ширина"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "Висота"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "Скопіювати"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "Макет"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "Переглянути дані збереження"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "Оновити файли"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "Перемикнути видимість прихованих файлів"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "Пошук файлів"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr ""
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
#, fuzzy
msgid "Go forward"
msgstr "Гортати вперед"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "Зберегти"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "Обрати"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "Замінити"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "Створити нову теку"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "Не правильна назва для теки."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "Тека з такою назвою вже існує."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "Не вдалося створити теку."
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "Відкрити"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "Скопіювати шлях"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!"
msgstr "Файл з назваою \"{file_name}\" вже існує. Його заміна призведе до перезапису його вмісту!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "Синтаксична помилка"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "Проблема з імпортуванням"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "Імпортувати"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "Невідомий елемент"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "Невідомий атрибут"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "Проблема з імпортуванням"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "Імпортувати"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "Додати елемент"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "Виключені"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "Перетягніть і опустіть, щоб змінити макет"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "Файл"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "Редагування"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "Інструмент"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "Перегляд"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Add new preview"
+msgstr "Колір акценту"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "Видалити"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "Скинути значення до замовчування"
+
+#: src/ui_parts/previews.gd
+#, fuzzy
+msgid "Clear all"
+msgstr "Обрати усе"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr ""
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "Форматування"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+#, fuzzy
+msgid "Optimizer"
+msgstr "Оптимізувати"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "Палітри"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "Клавіатурні скорочення"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "Тема"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "Вкладка"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "Інше"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "Мова"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "Горизонтальна смужка"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "Вертикальна смужка"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "Горизонтальна з двома рядками"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "Налаштувати у панелі клавіатурних скорочень"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
msgstr "Створити нову вкладку"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "Гортати назад"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "Гортати вперед"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "Це SVG зображення поки що не пов'язано з розташуванням файла."
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "Спробувати ще раз"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "Показати тестові версії"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "Поточна версія"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "Отримуємо інформацію..."
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "Не вдалося перевірити оновлення"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "Показати усі версії"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch оновлено до останньої версії."
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "Доступна нова версія!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr "Скопіювати електрону пошту"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "Створити"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "Редагувати назву кольору"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "Видалити колір"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "Без назви"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "Шукати колір"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "Кольорова піпетка"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
-msgstr "Без обмежень"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
+msgstr ""
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "Ключові слова кольорів"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "Піпетка"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "Нова форма"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr ""
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr ""
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+#, fuzzy
+msgid "Before"
+msgstr "Вставити до"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr ""
+
+#: src/ui_widgets/palette_config.gd
#, fuzzy
msgid "Add new color"
msgstr "Колір акценту"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "Палітри без назв не будуть відображатися."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "Декілька палітр не можуть мати однакові назви."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "Ця палітра має ідентичні кольори."
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "Перейменувати"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "Пересунути вгору"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "Пересунути вниз"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "Застосувати пресет"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "Видалити"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "Скопіювати як XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "Зберегти як XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "Відносно"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "Немає даних шляху"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "Немає точок"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "Також використовується"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr "Застосувати"
-#: src/ui_widgets/profile_frame.gd:
+#: 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 "Скинути значення до замовчування"
-
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "Не використовується"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "Додати клавіатурне скорочення"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "Натисніть кнопки…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
msgstr "Форматер редактору"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
msgstr "Форматер експорту"
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "Визначає множник масштабу інтерфейсу."
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "Визначає множник масштабу інтерфейсу."
+
# не знаю
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "Пресет"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
-msgstr "Визначає стандартні значення конфігурації форматера."
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Remove comments"
msgstr "Зберігати коментарі"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "Додавати нову строку в кінці"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "Використовувати теги зі скороченим синтаксисом"
# Шось...
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "Ставити пробіл перед скороченими тегами"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "Використовувати гарне форматування"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "Використовувати пробіли замість табуляції"
# Взяв ідею для перекладу з гновоського текстового редактора
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "Кількість пробілів на табуляцію"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "Цифри"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "Видалити початковий нуль"
# Ґа...
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "Використовувати експоненту коли коротше"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "Кольори"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "Використовувати назви кольорів"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "Основний синтаксис"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "Відображати шістнадцятирічні числа великими літери"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "Дані шляху"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "Стиснути цифри"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "Мінімізувати відстань"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "Видалити відстань після прапорців"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "Видалити послідовні команди"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "Список трансформацій"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "Видалити необов'язкові параметри"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+#, fuzzy
+msgid "Convert shapes"
+msgstr "Конвертувати в"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr "Тема додатку"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr "Головні кольори теми"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr "Базовий колір"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr "Колір акценту"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "Колір SVG тексту"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr "Тема підсвітки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr "Визначає стандартні значення підсвітки SVG."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "Колір символу"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "Колір елементу"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "Колір атрибуту"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "Колір строки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "Колір коментаря"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "Колір тексту"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "Колір CDATA"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "Колір помилки"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr "Ручки редагування"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "Внутрішній колір"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "Звичайний колір"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "Колір наведеного"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "Колір обраного"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "Колір наведено-виділеного"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr "Прямокутник вибору"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr "Швидкість"
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr "Довжина лінії"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr "Колір {index}"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "Базовий колір"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr "Колір полотна"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "Колір ґратки"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "Колір валідності"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "Колір попередження"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "Пристрої вводу"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "Закривати вкладки при натисканні середньої кнопки миші"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "Інвертувати напрямок масштабування"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "Захопити курсор при гортанні"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "Використовувати CTRL для масштабування"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr "Дисплей"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "Масштаб інтерфейсу"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "Визначає множник масштабу інтерфейсу."
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr "Вертикальна синхроназація"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr "Максимальна кількість кадрів на секунду"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr "Без обмежень"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr "Визначає максимальну кількість кадрів на секунду."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr "Тримати екран увімкненим"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "Різне"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "Використовувати рідний файловий діалог"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "Синхронізувати заголовок вікна з назвою поточного файлу"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr "Це опція не має ефекту на поточну конфігурацію."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr "Ця опція не може бути змінена на поточній платформі."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr "Визначає стандартні значення конфігурації форматера."
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr "Коли активно, використовує пробіли замість одного tab-у для відступів."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr ""
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr "Визначає стандартні значення для налаштувань теми, включаючи налаштування підсвітки."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the base color of VectorTouch's interface."
msgstr "Визначає множник масштабу інтерфейсу."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
#, fuzzy
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "Визначає множник масштабу інтерфейсу."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr "Якщо увімкнено - клацання на вкладку середньою кнопкою миші закриє її, замість того, щоб фокусуватися на ній."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "Міняє напрям гортання при масштабуванні."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning."
msgstr "Курсор буде телепортуватися від одного краю до протилежного при пересуванні вікна перегляду."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr ""
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr "Якщо увімкнено - гортання буде рухати вікно перегляду. Щоб масштабувати, затисніть CTRL доки гортаєте."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "Визначає множник масштабу інтерфейсу."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr "Синхронізує відображення графіки з частотою відновлення екрану, щоб запобігати артефактам відображення (на кшталт \"розриву\" екрана). Також може збільшити затримку натискань клавіатури або курсору."
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr "Визначає максимальну кількість кадрів на секунду."
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr "Відкладати присипляння системи та/або екрану навіть після бездіяльності, завдяки чому зберігач екрану не буде запускатися."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "Якщо увімкнено, то буде використовувати рідний файловий діалог вашої операційної системи для обирання файлів замість вбудованого."
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr "Коли активовано, додає назву поточного файлу перед \"VectorTouch\" у заголовку вікна."
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "Нова палітра"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "Нова палітра з XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "Імпортувати XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "Вставити XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "Допомога"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "Без трансформацій"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "Застосувати матрицю"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "Вставити до"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "Нова трансформація"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch не може розпізнати цей атрибут"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "Наступні файли були відкинуті:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "{file_name} було відкинуто."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "Відкинуті файли"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "Продовжити"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "Файл {file_name} неможливо відкрити."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "Перевірити, чи файл все щє існує по обраному шляху."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "Продовжити імпортуючи інші файли?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "Продовжити для усіх файлів, які неможливо відкрити"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "Зберегти файл?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "Ви бажаєте зберегти цей файл?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "Зберегти зміни?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "Ваші зміни буде втрачено, якщо ви не збережете їх."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "Не зберігати"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "Файл {file_path} вже редагується в VectorTouch."
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+#, fuzzy
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
msgstr "Якщо ви бажаєте повернути свої зміни з останнього збереження, використовуйте {reset_svg}."
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "Чи бажаєте зберегти зміни в {file_name}?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "Зберегти SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "Зберегти SVG як"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "Закрити усі вкладки зліва"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "Закрити усі вкладки справа"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "Закрити усі інші вкладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "Закрити порожні вкладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "Закрити збережені вкладки"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "Створити вкладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "Обрати наступну вкладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "Обрати попередню вкладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "Оптимізувати"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "Оптимізувати SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "Скопіювати весь текст"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "Скопіювати SVG текст"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "Скинути SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "Відкрити у зовнішній програмі"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "Відкрити SVG у зовнішній програмі"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "Показати у файловому менеджері"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "Показати SVG у файловому менеджері"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "Скасувати"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "Повернути"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "Вставити"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "Вирізати"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "Обрати усе"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "Дублювати"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "Продублювати обране"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "Видалити усі обрані теги"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "Пересунути вгору"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "Пересунути обране вгору"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "Пересунути вниз"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "Пересунути обране вниз"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "Знайти"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "Збільшити масштаб"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "Зменшити масштаб"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "Скинути масштаб"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "Показати ґратку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "Показати ручки редагування"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "Показати растеризуваний SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "Перемикнути прилипання"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "Завантажити еталонне зображення"
# Нехай "reference image" буде "еталонне зображення", мені так гугл сказав
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "Показати еталонне зображення"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "Накласти еталонне зображення"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "Переглянути інформацію про відладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
#, fuzzy
msgid "View advanced debug information"
msgstr "Переглянути інформацію про відладку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "Налаштування"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "Відкрити меню налаштувань"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "Про додаток…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "Відкрити меню \"Про додаток\""
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "Зробити пожертвування…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "Відкрити меню благодійників"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "Репозиторій VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "Відкрити репозиторій VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "Веб-сайт VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "Відкрити веб-сайт VectorTouch"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "Перевірити оновлення"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "Вийти із додатку"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "Перемикнути повноекранний режим"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "Пересунути до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "Лінія до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "Горизонтальна лінія до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "Вертикальна лінія до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "Закрити шлях"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "Еліптична дуга до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "Квадратичний Безьє до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "Скорочена квадратична Безьє"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "Кубічна Безьє до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "Скорочена кубічна Безьє до"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "Абсолютно"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "Редактор коду"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "Інспектор"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "Вікно перегляду"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr ""
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "Тільки файли з розширеннями {extension_list} підтримуються для цієї операції."
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "Обрати {format} файли"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "Обрати зображення"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+#, fuzzy
+msgid "Select a font"
+msgstr "Обрати усе"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "Обрати {format} файл"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "Зберегти {format} файл"
+#~ msgid "Keep comments"
+#~ msgstr "Зберігати коментарі"
+
#~ msgid "Go to parent folder"
#~ msgstr "Перейти до батьківської теки"
diff --git a/translations/zh_CN.po b/translations/zh_CN.po
index 60df734..7c9746e 100644
--- a/translations/zh_CN.po
+++ b/translations/zh_CN.po
@@ -10,1423 +10,1534 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.7\n"
+"X-Generator: Poedit 3.8\n"
#. Translators (comma-separated): Name or alias, optionally followed by an email in angle brackets .
#. Used for credits. Adding yourself is optional. New entries go at the end. Don't remove or rearrange existing entries.
msgid "translation-credits"
msgstr "Hamster5295 , Mike Lei , williamchange "
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit VectorTouch"
msgstr "退出 VectorTouch"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to quit VectorTouch?"
msgstr "您确定要退出 VectorTouch 吗?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Quit"
msgstr "退出"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Check for updates?"
msgstr "检查更新?"
-#: src/autoload/HandlerGUI.gd:
+#: 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 以比较版本号。没有其他信息会被收集或传送。"
-#: src/autoload/HandlerGUI.gd: src/ui_widgets/alert_dialog.gd:
+#: src/autoload/HandlerGUI.gd src/ui_widgets/alert_dialog.gd
msgid "OK"
msgstr "确定"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its proportions are too extreme."
msgstr "此图像只能以 SVG 格式导出,因为其大小过于极端。"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "The graphic can be exported only as SVG because its size is not defined."
msgstr "此图像只能以 SVG 格式导出,因为其大小未定义。"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Do you want to proceed?"
msgstr "您确定要继续吗?"
-#: src/autoload/HandlerGUI.gd:
+#: src/autoload/HandlerGUI.gd
msgid "Export SVG"
msgstr "导出 SVG"
-#: src/autoload/HandlerGUI.gd: src/ui_parts/export_menu.gd:
-#: src/utils/TranslationUtils.gd:
+#: src/autoload/HandlerGUI.gd src/ui_parts/export_menu.gd
+#: src/utils/TranslationUtils.gd
msgid "Export"
msgstr "导出"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "The last edited state of this tab could not be found."
msgstr "无法加载此分页的最后编辑状态。"
-#: src/autoload/State.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_widgets/alert_dialog.gd: src/utils/FileUtils.gd:
+#: src/autoload/State.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_widgets/alert_dialog.gd src/utils/FileUtils.gd
msgid "Alert!"
msgstr "警告!"
-#: src/autoload/State.gd: src/utils/TranslationUtils.gd:
+#: src/autoload/State.gd src/utils/TranslationUtils.gd
msgid "Close tab"
msgstr "关闭分页"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Restore"
msgstr "还原"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "View in Inspector"
msgstr "在检视器中查看"
-#: src/autoload/State.gd:
+#: src/autoload/State.gd
msgid "Convert To"
msgstr "转换为"
-#: src/autoload/State.gd: src/ui_widgets/transform_popup.gd:
+#: src/autoload/State.gd src/ui_widgets/transform_popup.gd
msgid "Insert After"
msgstr "在后方插入"
-#: src/autoload/State.gd:
+#: 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吗?"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Compact"
msgstr "压缩"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Pretty"
msgstr "美化"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Always"
msgstr "总是"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "All except containers"
msgstr "除容器外所有"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "Never"
msgstr "从不"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter or equal"
msgstr "当更短或相等时"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "When shorter"
msgstr "当更短时"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "3-digit or 6-digit hex"
msgstr "3 位或 6 位十六进制"
-#: src/config_classes/Formatter.gd:
+#: src/config_classes/Formatter.gd
msgid "6-digit hex"
msgstr "6 位十六进制"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Dark"
msgstr "深色"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Light"
msgstr "浅色"
#. Refers to a theme preset.
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Black (OLED)"
msgstr "纯黑 (OLED)"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Dark"
msgstr "默认深色"
-#: src/config_classes/SaveData.gd:
+#: src/config_classes/SaveData.gd
msgid "Default Light"
msgstr "默认浅色"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Empty"
msgstr "空白"
-#: src/config_classes/TabData.gd:
+#: src/config_classes/TabData.gd
msgid "Unsaved"
msgstr "未保存"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Comment"
msgstr "注释"
-#: src/data_classes/BasicXNode.gd:
+#: src/data_classes/BasicXNode.gd
msgid "Text"
msgstr "文本"
-#: src/data_classes/Element.gd:
+#: src/data_classes/Element.gd
msgid "{element} must be inside {allowed} to have any effect."
msgstr "{element} 必须在 {allowed} 内才能产生作用。"
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No \"id\" attribute defined."
msgstr "\"id\" 属性未定义。"
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "No elements under this gradient."
msgstr "此渐变下没有 元素。"
-#: src/data_classes/ElementBaseGradient.gd:
+#: src/data_classes/ElementBaseGradient.gd
msgid "This gradient is a solid color."
msgstr "此渐变为单一颜色。"
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has no elements."
msgstr "此组内没有元素。"
-#: src/data_classes/ElementG.gd:
+#: src/data_classes/ElementG.gd
msgid "This group has only one element."
msgstr "此组内只有一个元素。"
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Doesn’t describe an SVG."
msgstr "文本不是 SVG 格式。"
-#: src/data_classes/SVGParser.gd:
+#: src/data_classes/SVGParser.gd
msgid "Improper nesting."
msgstr "错误的嵌套。"
-#: src/ui_parts/about_menu.gd: src/ui_parts/good_file_dialog.gd:
-#: src/ui_parts/settings_menu.gd: src/ui_parts/shortcut_panel_config.gd:
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/about_menu.gd src/ui_parts/good_file_dialog.gd
+#: src/ui_parts/settings_menu.gd src/ui_parts/shortcut_panel_config.gd
+#: src/ui_parts/update_menu.gd
msgid "Close"
msgstr "关闭"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Authors"
msgstr "作者"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Donors"
msgstr "捐赠者"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "License"
msgstr "协议"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
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:
+#: src/ui_parts/about_menu.gd
msgid "Project Founder and Manager"
msgstr "项目创立者与管理者"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Developers"
msgstr "开发者"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Translators"
msgstr "翻译者"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Golden donors"
msgstr "金牌捐赠者"
-#: src/ui_parts/about_menu.gd:
+#: src/ui_parts/about_menu.gd
msgid "Diamond donors"
msgstr "钻石捐赠者"
-#: src/ui_parts/current_file_button.gd:
+#: src/ui_parts/current_file_button.gd
msgid "Save SVG as…"
msgstr "保存 SVG 为…"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Visuals"
msgstr "显示"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Snap size"
msgstr "吸附大小"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Paste reference image"
msgstr "粘贴参考图像"
-#: src/ui_parts/display.gd:
+#: src/ui_parts/display.gd
msgid "Clear reference image"
msgstr "清空参考图像"
-#: src/ui_parts/donate_menu.gd:
+#: src/ui_parts/donate_menu.gd
msgid "Links to donation platforms"
msgstr "捐赠平台"
-#: 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:
-#: src/ui_widgets/confirm_dialog.gd: src/ui_widgets/options_dialog.gd:
+#: 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
+#: src/ui_widgets/confirm_dialog.gd src/ui_widgets/options_dialog.gd
msgid "Cancel"
msgstr "取消"
-#: src/ui_parts/element_container.gd:
+#: src/ui_parts/element_container.gd
msgid "New element"
msgstr "新元素"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Dimensions"
msgstr "大小"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Preview image size is limited to {dimensions}"
msgstr "预览图像大小被限制到 {dimensions}"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Size"
msgstr "大小"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Export Configuration"
msgstr "导出设置"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Format"
msgstr "格式"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Lossless"
msgstr "无损"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Quality"
msgstr "质量"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Scale"
msgstr "缩放"
-#: src/ui_parts/export_menu.gd: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_parts/export_menu.gd src/ui_widgets/settings_content_generic.gd
msgid "Width"
msgstr "宽度"
-#: src/ui_parts/export_menu.gd:
+#: src/ui_parts/export_menu.gd
msgid "Height"
msgstr "高度"
-#: src/ui_parts/export_menu.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/export_menu.gd src/utils/TranslationUtils.gd
msgid "Copy"
msgstr "复制"
-#: src/ui_parts/global_actions.gd: src/ui_parts/layout_configuration.gd:
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/global_actions.gd src/ui_parts/layout_configuration.gd
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Layout"
msgstr "布局"
-#: src/ui_parts/global_actions.gd:
+#: src/ui_parts/global_actions.gd
msgid "View savedata"
msgstr "查看保存的数据"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Refresh files"
msgstr "刷新文件"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Toggle the visibility of hidden files"
msgstr "切换隐藏文件可见性"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Search files"
msgstr "搜索文件"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go back"
msgstr "返回"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Go forward"
msgstr "前进"
-#: src/ui_parts/good_file_dialog.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/good_file_dialog.gd src/utils/FileUtils.gd
msgid "Save"
msgstr "保存"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Select"
msgstr "选择"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Replace"
msgstr "替换"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Create new folder"
msgstr "新建文件夹"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Invalid name for a folder."
msgstr "无效的文件夹名。"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A folder with this name already exists."
msgstr "以此为名的文件夹已存在。"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Failed to create a folder."
msgstr "创建文件夹失败。"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Open"
msgstr "打开"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "Copy path"
msgstr "复制路径"
-#: src/ui_parts/good_file_dialog.gd:
+#: src/ui_parts/good_file_dialog.gd
msgid "A file named \"{file_name}\" already exists. Replacing will overwrite its contents!"
msgstr "文件 “{file_name}” 已经存在。替换操作将会覆写它的内容!"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Syntax error"
msgstr "语法错误"
-#: src/ui_parts/import_warning_menu.gd:
-msgid "Import Problems"
-msgstr "导入出错"
-
-#: src/ui_parts/import_warning_menu.gd: src/utils/TranslationUtils.gd:
-msgid "Import"
-msgstr "导入"
-
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized element"
msgstr "未知元素"
-#: src/ui_parts/import_warning_menu.gd:
+#: src/ui_parts/import_warning_menu.gd
msgid "Unrecognized attribute"
msgstr "未知属性"
-#: src/ui_parts/inspector.gd:
+#: src/ui_parts/import_warning_menu.gd
+msgid "Import Problems"
+msgstr "导入出错"
+
+#: src/ui_parts/import_warning_menu.gd src/utils/TranslationUtils.gd
+msgid "Import"
+msgstr "导入"
+
+#: src/ui_parts/inspector.gd
msgid "Add element"
msgstr "添加元素"
#. 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_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Excluded"
msgstr "未包含"
-#: src/ui_parts/layout_configuration.gd:
+#: src/ui_parts/layout_configuration.gd
msgid "Drag and drop to change the layout"
msgstr "拖拽以改变布局"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "File"
msgstr "文件"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_parts/previews.gd
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Edit"
msgstr "编辑"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "Tool"
msgstr "工具"
-#: src/ui_parts/mac_menu.gd: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_parts/mac_menu.gd src/ui_widgets/settings_content_shortcuts.gd
msgid "View"
msgstr "视图"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/previews.gd
+msgid "Add new preview"
+msgstr "添加新预览"
+
+#: src/ui_parts/previews.gd src/ui_widgets/palette_config.gd
+#: src/ui_widgets/setting_shortcut.gd src/ui_widgets/transform_popup.gd
+#: src/utils/TranslationUtils.gd
+msgid "Delete"
+msgstr "删除"
+
+#: src/ui_parts/previews.gd src/ui_widgets/setting_frame.gd
+#: src/ui_widgets/setting_shortcut.gd
+msgid "Reset to default"
+msgstr "恢复默认"
+
+#: src/ui_parts/previews.gd
+msgid "Clear all"
+msgstr "清除全部"
+
+#: src/ui_parts/previews.gd
+msgid "Sort"
+msgstr "排序"
+
+#: src/ui_parts/settings_menu.gd
msgid "Formatting"
msgstr "格式化"
-#: src/ui_parts/settings_menu.gd: src/ui_widgets/color_field_popup.gd:
+#: src/ui_parts/settings_menu.gd
+msgid "Optimizer"
+msgstr "优化器"
+
+#: src/ui_parts/settings_menu.gd src/ui_widgets/color_field_popup.gd
msgid "Palettes"
msgstr "调色盘"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Shortcuts"
msgstr "快捷键"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Theming"
msgstr "主题"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Tab bar"
msgstr "分页栏"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Other"
msgstr "其他"
-#: src/ui_parts/settings_menu.gd:
+#: src/ui_parts/settings_menu.gd
msgid "Language"
msgstr "语言"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal strip"
msgstr "横线"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Vertical strip"
msgstr "竖线"
-#: src/ui_parts/shortcut_panel.gd:
+#: src/ui_parts/shortcut_panel.gd
msgid "Horizontal with two rows"
msgstr "水平两列"
-#: src/ui_parts/shortcut_panel_config.gd:
+#: src/ui_parts/shortcut_panel_config.gd
msgid "Configure Shortcut Panel"
msgstr "设置捷径面板"
-#: src/ui_parts/tab_bar.gd: src/utils/TranslationUtils.gd:
+#: src/ui_parts/tab_bar.gd
+msgid "Close multiple"
+msgstr "关闭多个分页"
+
+#: src/ui_parts/tab_bar.gd src/utils/TranslationUtils.gd
msgid "Create a new tab"
-msgstr "新建分頁"
+msgstr "新建分页"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll backwards"
msgstr "向后滚动"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "Scroll forwards"
msgstr "向前滚动"
-#: src/ui_parts/tab_bar.gd:
+#: src/ui_parts/tab_bar.gd
msgid "This SVG is not bound to a file location yet."
msgstr "未设置路径。"
-#: src/ui_parts/update_menu.gd: src/utils/FileUtils.gd:
+#: src/ui_parts/update_menu.gd src/utils/FileUtils.gd
msgid "Retry"
msgstr "重试"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Show prereleases"
msgstr "包括预发布版本"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Current Version"
msgstr "当前版本"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Retrieving information..."
msgstr "正在获取信息…"
#. When checking for updates.
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "Update check failed"
msgstr "更新检查失败"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "View all releases"
msgstr "检视所有版本"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "VectorTouch is up-to-date."
msgstr "VectorTouch 是最新版本。"
-#: src/ui_parts/update_menu.gd:
+#: src/ui_parts/update_menu.gd
msgid "New versions available!"
msgstr "发现新版本!"
-#: src/ui_widgets/PanelGrid.gd:
+#: src/ui_widgets/PanelGrid.gd
msgid "Copy email"
msgstr "复制电邮"
-#: src/ui_widgets/choose_name_dialog.gd:
+#: src/ui_widgets/choose_name_dialog.gd
msgid "Create"
msgstr "创建"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Edit color name"
msgstr "编辑颜色名称"
-#: src/ui_widgets/color_configuration_popup.gd:
+#: src/ui_widgets/color_configuration_popup.gd
msgid "Delete color"
msgstr "删除颜色"
-#: src/ui_widgets/color_configuration_popup.gd:
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/color_configuration_popup.gd src/ui_widgets/palette_config.gd
msgid "Unnamed"
msgstr "未命名"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Search color"
msgstr "搜索颜色"
-#: src/ui_widgets/color_field_popup.gd:
+#: src/ui_widgets/color_field_popup.gd
msgid "Color Picker"
msgstr "取色器"
-#: src/ui_widgets/fps_limit_dropdown.gd: src/ui_widgets/setting_frame.gd:
-msgid "Unlimited"
-msgstr "无限制"
+#: src/ui_widgets/file_path_field.gd
+msgid "No file path"
+msgstr "无文件路经"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Color keywords"
msgstr "颜色关键字"
-#: src/ui_widgets/good_color_picker.gd:
+#: src/ui_widgets/good_color_picker.gd
msgid "Eyedropper"
msgstr "吸管工具"
-#: src/ui_widgets/handles_manager.gd:
+#: src/ui_widgets/handles_manager.gd
msgid "New shape"
msgstr "新形状"
-#: src/ui_widgets/invalid_syntax_warning.gd:
+#: src/ui_widgets/id_field.gd
+msgid "No ID"
+msgstr "无 ID"
+
+#: src/ui_widgets/invalid_syntax_warning.gd
msgid "The SVG has invalid syntax. Any edit not made through the code editor will reset it."
msgstr "无效语法,任何非代碼编辑器的修改将重置 SVG 文本。"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "Before"
+msgstr "前"
+
+#: src/ui_widgets/optimizer_setting_info.gd
+msgid "After"
+msgstr "后"
+
+#: src/ui_widgets/palette_config.gd
msgid "Add new color"
msgstr "添加新颜色"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Unnamed palettes won't be shown."
msgstr "未命名的调色盘不会被显示。"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Multiple palettes can't have the same name."
msgstr "多个调色盘不能使用同一个名称。"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "This palette has identically defined colors."
msgstr "此调色盘使用了完全相同的颜色定义。"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Rename"
msgstr "重命名"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Up"
msgstr "上移"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Move Down"
msgstr "下移"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Apply Preset"
msgstr "应用预设"
-#: src/ui_widgets/palette_config.gd: src/ui_widgets/setting_shortcut.gd:
-#: src/ui_widgets/transform_popup.gd: src/utils/TranslationUtils.gd:
-msgid "Delete"
-msgstr "删除"
-
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Copy as XML"
msgstr "复制为 XML"
-#: src/ui_widgets/palette_config.gd:
+#: src/ui_widgets/palette_config.gd
msgid "Save as XML"
msgstr "保存为 XML"
-#: src/ui_widgets/path_popup.gd: src/utils/TranslationUtils.gd:
+#: src/ui_widgets/path_popup.gd src/utils/TranslationUtils.gd
msgid "Relative"
msgstr "相对"
-#: src/ui_widgets/pathdata_field.gd:
+#: src/ui_widgets/pathdata_field.gd
msgid "No path data"
msgstr "没有路径数据"
-#: src/ui_widgets/points_field.gd:
+#: src/ui_widgets/points_field.gd
msgid "No points"
msgstr "没有点"
-#: src/ui_widgets/presented_shortcut.gd: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/presented_shortcut.gd src/ui_widgets/setting_shortcut.gd
msgid "Also used by"
msgstr "还用于"
-#: src/ui_widgets/profile_frame.gd:
+#: src/ui_widgets/profile_frame.gd
msgid "Apply"
msgstr "应用"
-#: src/ui_widgets/profile_frame.gd:
+#: 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 "恢复默认"
+#: src/ui_widgets/setting_frame.gd
+msgid "Clear"
+msgstr "清空"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Unused"
msgstr "未使用"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Add shortcut"
msgstr "添加快捷键"
-#: src/ui_widgets/setting_shortcut.gd:
+#: src/ui_widgets/setting_shortcut.gd
msgid "Press keys…"
msgstr "按下按键…"
#. Refers to the formatter used for VectorTouch's code editor.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Editor formatter"
-msgstr "编辑器格式"
+msgstr "编辑器格式化器"
#. Refers to the formatter used when exporting.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Export formatter"
-msgstr "导出格式"
+msgstr "导出格式化器"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content appear in the GodSVG interface."
+msgstr "改变 GodSVG 介面中SVG属性与内容的显示方式。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines how SVG attributes and content are formatted when saving the file."
+msgstr "改變保存文件时SVG属性和内容的格式化方式。"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Preset"
msgstr "预设"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the default values of the formatter configs."
-msgstr "改变默认格式设置。"
-
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Keep comments"
-msgstr "保留注释"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Remove comments"
+msgstr "移除注释"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Add trailing newline"
msgstr "在文件末尾添加"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use shorthand tag syntax"
msgstr "使用简写标签语法"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Space out the slash of shorthand tags"
msgstr "在简写标签斜线前添加空格"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use pretty formatting"
msgstr "使用美化格式"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use spaces instead of tabs"
msgstr "使用空格而不是 tab"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Number of indentation spaces"
msgstr "缩进空格数量"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Numbers"
msgstr "数字"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove leading zero"
msgstr "移除前面的 0"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use exponential when shorter"
msgstr "当更短时使用指数形式"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Colors"
msgstr "颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use named colors"
msgstr "使用颜色名"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary syntax"
msgstr "主语法"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Capitalize hexadecimal letters"
msgstr "大写十六进制字母"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Pathdata"
msgstr "路径数据"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Compress numbers"
msgstr "压缩数字"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Minimize spacing"
msgstr "最小化间距"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove spacing after flags"
msgstr "移除标志后的空格"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove consecutive commands"
msgstr "移除连续指令"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Transform lists"
msgstr "变换列表"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Remove unnecessary parameters"
msgstr "移除不必要的参数"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the settings for the default optimizer, used when manually running the \"{optimize}\" action."
+msgstr "改变手动执行 “{optimize}” 时默认优化器的设置。"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes"
+msgstr "转换形状"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Simplify path parameters"
+msgstr "简化 path 参数"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Theme preset"
msgstr "预设主题"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Primary theme colors"
msgstr "主题色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Base color"
msgstr "基准色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Accent color"
msgstr "强调色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Fonts"
+msgstr "字体"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Main font"
+msgstr "介面字体"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Bold font"
+msgstr "粗体字体"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Mono font"
+msgstr "等宽字体"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "SVG Text colors"
msgstr "SVG 文本颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Highlighter preset"
msgstr "高亮预设"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of SVG highlighter settings."
msgstr "改变默认SVG高亮设置。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Symbol color"
msgstr "符号颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Element color"
msgstr "元素颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Attribute color"
msgstr "属性颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "String color"
msgstr "字符串颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Comment color"
msgstr "注释颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Text color"
msgstr "文本颜色"
#. CDATA shouldn't be translated. It's a type of XML section.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "CDATA color"
msgstr "CDATA 颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Error color"
msgstr "错误颜色"
#. Refers to the draggable gizmos.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Handles"
msgstr "拖拽框"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Inside color"
msgstr "内部颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Normal color"
msgstr "普通颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered color"
msgstr "鼠标悬停颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selected color"
msgstr "选中颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Hovered selected color"
msgstr "悬停且选中颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Selection rectangle"
msgstr "选择矩形"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Speed"
msgstr "速度"
#. Refers to the selection rectangle's animated dashed stroke.
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Dash length"
msgstr "虚线长度"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Color {index}"
msgstr "颜色 {index}"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Basic colors"
msgstr "基本颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Canvas color"
msgstr "画布颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Grid color"
msgstr "网格颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Valid color"
msgstr "正常颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warning color"
msgstr "警告颜色"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Input"
msgstr "输入"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Close tabs with middle mouse button"
msgstr "鼠标中键关闭分页"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Invert zoom direction"
msgstr "反转缩放方向"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Wrap-around panning"
msgstr "持续平移"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Panning speed"
msgstr "平移速度"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use CTRL for zooming"
msgstr "使用 CTRL 键缩放"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Display"
msgstr "显示"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "UI scale"
msgstr "UI 缩放"
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the scale factor for the interface."
+msgstr "改变用户界面的缩放尺寸。"
+
#. Stands for "Vertical Synchronization".
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "V-Sync"
msgstr "垂直同步"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Maximum FPS"
msgstr "最大帧率"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Unlimited"
+msgstr "无限制"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the maximum number of frames per second."
+msgstr "改变最大帧率。"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keep screen on"
msgstr "保持屏幕常亮"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Miscellaneous"
msgstr "杂项"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Use native file dialog"
msgstr "使用系统自带文件选择窗口"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Sync window title to file name"
msgstr "同步窗口标题为文件名"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting has no effect in the current configuration."
msgstr "设置于当前配置下无效。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "The setting can't be changed on this platform."
msgstr "设置于当前平台下无法更改。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Formatters can change the formatting of the SVG's content and attributes. These changes don't affect its structure or the structure of more complex attributes, such as pathdata. Formatters can be configured to make the SVG prettier or more compact."
+msgstr "格式化器可更改SVG内容和属性的格式。这些更改不会影响其结构或更复杂属性(如路径数据)的结构。格式化器可配置为使SVG更美观或更紧凑。"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Determines the default values of the formatter configs."
+msgstr "改变默认格式设置。"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses spaces instead of a single tab for indentation."
msgstr "如果启用,將以空格而不是 Tab 進行縮排。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Optimizers can change the structure of the SVG and its complex attributes, such as pathdata. These changes reduce the SVG's complexity, usually leading to reductions in file size, but may be destructive and disrupt future editing, compared to optimizing the SVG manually."
+msgstr "优化器能改变SVG的结构及其复杂属性 (如路径数据)。这些修改能降低SVG的复杂度而缩减文件大小,但相较于手动优化,可能具有破坏性并干扰后续编辑。"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert shapes into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "在可能的情况下,将形狀转换成表达方式相同但更简短的定义。"
+
+#: src/ui_widgets/settings_content_generic.gd
+msgid "Convert or simplify path parameters into ones that can be defined identically, but have a shorter representation, if possible."
+msgstr "在可能的情况下,将 path 参数转换或简化成表达方式相同但更简短的定义。"
+
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the default values of theming-related settings, including the highlighter preset."
msgstr "改变与主题相关的设置,包括高亮预设。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the base color of VectorTouch's interface."
msgstr "改变 VectorTouch 介面的基准色。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines the accent color used for highlighted elements in VectorTouch's interface."
msgstr "改变 VectorTouch 介面中高亮元素的强调色。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, clicking on a tab with the middle mouse button closes it instead of simply focusing it."
msgstr "如果启用,滑鼠中键将关闭分页。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Swaps the scroll directions for zooming in and zooming out."
msgstr "互換放大和缩小的滚动方向。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Warps the cursor to the opposite side whenever it reaches a viewport boundary while panning."
msgstr "鼠标移至视图边缘時自动环绕至对则。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Determines how much the view moves for scroll-based panning inputs."
msgstr "改变滚动平移时视图移动的幅度。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, scrolling pans the view instead of zooming in. To zoom, hold CTRL while scrolling."
msgstr "如果启用,滚动鼠标滚轮将移动视图。按住 CTRL 并滚动滚轮以缩放。"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the scale factor for the interface."
-msgstr "改变用户界面的缩放尺寸。"
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Synchronizes graphics rendering with display refresh rate to prevent screen tearing artifacts. May increase input lag slightly."
msgstr "同步图形渲染与屏幕刷新率以减少画面撕裂。此将略微增加输入延迟。"
-#: src/ui_widgets/settings_content_generic.gd:
-msgid "Determines the maximum number of frames per second."
-msgstr "改变最大帧率。"
-
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "Keeps the screen on even after inactivity, so the screensaver does not take over."
msgstr "静置状态下依然保持屏幕常亮,以阻止屏幕保护程序的触发。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, uses your operating system's native file dialog instead of VectorTouch's built-in one."
msgstr "如果启用,将使用操作系统自带的文件选择窗口。反之,将使用 VectorTouch 内置的文件选择窗口。"
-#: src/ui_widgets/settings_content_generic.gd:
+#: src/ui_widgets/settings_content_generic.gd
msgid "When enabled, adds the current file name before the \"VectorTouch\" window title."
msgstr "如果启用,将窗口标题 \"VectorTouch\" 前加入当前文件名。"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette"
msgstr "新建调色盘"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "New palette from XML"
msgstr "从 XML 创建新调色盘"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Import XML"
msgstr "导入 XML"
-#: src/ui_widgets/settings_content_palettes.gd:
+#: src/ui_widgets/settings_content_palettes.gd
msgid "Paste XML"
msgstr "粘贴 XML"
-#: src/ui_widgets/settings_content_shortcuts.gd:
+#: src/ui_widgets/settings_content_shortcuts.gd
msgid "Help"
msgstr "帮助"
-#: src/ui_widgets/transform_field.gd:
+#: src/ui_widgets/transform_field.gd
msgid "No transforms"
msgstr "没有变换"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Apply the matrix"
msgstr "应用矩阵"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "Insert Before"
msgstr "在前方插入"
-#: src/ui_widgets/transform_popup.gd:
+#: src/ui_widgets/transform_popup.gd
msgid "New transform"
msgstr "新的变换"
-#: src/ui_widgets/unrecognized_field.gd:
+#: src/ui_widgets/unrecognized_field.gd
msgid "VectorTouch doesn’t recognize this attribute"
msgstr "VectorTouch 无法识别该属性"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "The following files were discarded:"
msgstr "以下文件已被丢弃:"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} was discarded."
msgstr "已丢弃 {file_name}。"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Discarded files"
msgstr "已丢弃文件"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed"
msgstr "继续"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_name} couldn't be opened."
msgstr "无法打开 {file_name}。"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Check if the file still exists in the selected file path."
msgstr "检查文件是否还存在于选中的路径。"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed with importing the rest of the files?"
msgstr "继续导入其他文件吗?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Proceed for all files that can't be opened"
msgstr "跳过所有无法打开的文件"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the file?"
msgstr "保存文件吗?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save this file?"
msgstr "你确定要保存此文件吗?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Save the changes?"
msgstr "保存更改?"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Your changes will be lost if you don't save them."
msgstr "你將失去未保存的更改。"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Don't save"
msgstr "不要保存"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "{file_path} is already being edited inside VectorTouch."
msgstr "VectorTouch 已正在编辑 {file_path}。"
-#: src/utils/FileUtils.gd:
-msgid "If you want to revert your edits since the last save, use {reset_svg}."
+#: src/utils/FileUtils.gd
+msgid "If you want to revert your edits since the last save, use \"{reset_svg}\"."
msgstr "如果你要撤消自上次的变更,请使用 {reset_svg}。"
-#: src/utils/FileUtils.gd:
+#: src/utils/FileUtils.gd
msgid "Do you want to save the changes made to {file_name}?"
msgstr "你要保存 {file_name} 的更改吗?"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG"
msgstr "保存 SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save SVG as"
msgstr "保存 SVG 为"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the left"
msgstr "关闭左侧分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close tabs to the right"
msgstr "关闭右侧分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close all other tabs"
msgstr "关闭其他分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close empty tabs"
msgstr "关闭空白分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close saved tabs"
msgstr "关闭已保存分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Create tab"
msgstr "创建分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the next tab"
msgstr "选择下一个分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select the previous tab"
msgstr "选择上一个分页"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize"
msgstr "优化"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Optimize SVG"
msgstr "优化 SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy all text"
msgstr "复制所有文本"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Copy the SVG text"
msgstr "复制 SVG 文本"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Reset SVG"
msgstr "重置 SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open externally"
msgstr "外部打开"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open SVG externally"
msgstr "外部打开 SVG 文件"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show in File Manager"
msgstr "在文件管理器中显示"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show SVG in File Manager"
msgstr "在文件管理器中显示 SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Undo"
msgstr "撤销"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Redo"
msgstr "恢复"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Paste"
msgstr "粘贴"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cut"
msgstr "剪切"
-#: src/utils/TranslationUtils.gd:
+#. Refers to evaluating an expression such as "sin(2*pi/5)".
+#: src/utils/TranslationUtils.gd
+msgid "Evaluate"
+msgstr "求值"
+
+#: src/utils/TranslationUtils.gd
msgid "Select all"
msgstr "选择全部"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate"
msgstr "克隆"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Duplicate the selection"
msgstr "克隆所选项"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Delete the selection"
msgstr "删除所选项"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move up"
msgstr "上移"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection up"
msgstr "将选中的元素上移"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move down"
msgstr "下移"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move the selection down"
msgstr "将选中的元素下移"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Find"
msgstr "查找"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom in"
msgstr "放大"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom out"
msgstr "缩小"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Zoom reset"
msgstr "重置缩放"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show grid"
msgstr "显示网格"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show handles"
msgstr "显示拖拽框"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show rasterized SVG"
msgstr "显示光栅化的 SVG"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle snapping"
msgstr "切换吸附"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Load reference image"
msgstr "加载参考图像"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Show reference image"
msgstr "显示参考图像"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Overlay reference image"
msgstr "置顶参考图像"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View debug information"
msgstr "查看调试信息"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "View advanced debug information"
msgstr "查看进阶调试信息"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Settings"
msgstr "设置"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Settings menu"
msgstr "打开设置菜单"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "About…"
msgstr "关于…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open About menu"
msgstr "打开关于菜单"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Donate…"
msgstr "捐赠…"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open Donate menu"
msgstr "打开捐赠菜单"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch repository"
msgstr "VectorTouch 代码仓库"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch repository"
msgstr "打开 VectorTouch 代码仓库"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "VectorTouch website"
msgstr "VectorTouch 网站"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Open VectorTouch website"
msgstr "打开 VectorTouch 网站"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Check for updates"
msgstr "检查更新"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quit the application"
msgstr "退出程序"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Toggle fullscreen"
msgstr "切换全屏模式"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Move to"
msgstr "移动到"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Line to"
msgstr "直线"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Horizontal Line to"
msgstr "横线"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Vertical Line to"
msgstr "竖线"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Close Path"
msgstr "闭合路径"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Elliptical Arc to"
msgstr "圆弧"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Quadratic Bezier to"
msgstr "双点二次贝塞尔曲线"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Quadratic Bezier to"
msgstr "单点二次贝塞尔曲线"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Cubic Bezier to"
msgstr "三点三次贝塞尔曲线"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Shorthand Cubic Bezier to"
msgstr "两点三次贝塞尔曲线"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Absolute"
msgstr "绝对"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Code editor"
msgstr "代码编辑器"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Inspector"
msgstr "检视器"
#. The viewport is the area where the graphic is displayed. In similar applications, it's often called the canvas.
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Viewport"
msgstr "视图"
-#: src/utils/TranslationUtils.gd:
+#. Refers to a part of the layout where icons are previewed at various sizes.
+#: src/utils/TranslationUtils.gd
+msgid "Previews"
+msgstr "预览"
+
+#: src/utils/TranslationUtils.gd
msgid "Only {extension_list} files are supported for this operation."
msgstr "只有 {extension_list} 内的文件支持此项操作。"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select {format} files"
msgstr "选择 {format} 文件"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Select an image"
msgstr "选择图像"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
+msgid "Select a font"
+msgstr "选择字体"
+
+#: src/utils/TranslationUtils.gd
msgid "Select an {format} file"
msgstr "选择 {format} 文件"
-#: src/utils/TranslationUtils.gd:
+#: src/utils/TranslationUtils.gd
msgid "Save the {format} file"
msgstr "保存 {format} 文件"
+#~ msgid "Keep comments"
+#~ msgstr "保留注释"
+
#~ msgid "Go to parent folder"
#~ msgstr "前往父文件夹"
@@ -1510,9 +1621,6 @@ msgstr "保存 {format} 文件"
#~ msgid "Clear saving path"
#~ msgstr "清除保存路径"
-#~ msgid "Clear SVG"
-#~ msgstr "清除 SVG"
-
#, fuzzy
#~ msgid "Open SVG file"
#~ msgstr "打开文件"