From fc695a038e0227347886ffb7c1eec5e093cf487b Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:08:43 +0300 Subject: [PATCH 01/47] Remove `Global.canvas` from the canvas' children --- src/UI/Canvas/CanvasCamera.gd | 6 +++--- src/UI/Canvas/Gizmos3D.gd | 8 +++++--- src/UI/Canvas/Measurements.gd | 12 +++++++----- src/UI/Canvas/OnionSkinning.gd | 6 +++--- src/UI/Canvas/Selection.gd | 12 ++++++------ src/UI/Canvas/TileMode.gd | 4 +++- src/UI/UI.tscn | 1 + 7 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/UI/Canvas/CanvasCamera.gd b/src/UI/Canvas/CanvasCamera.gd index fc6870611..c75e4a22b 100644 --- a/src/UI/Canvas/CanvasCamera.gd +++ b/src/UI/Canvas/CanvasCamera.gd @@ -57,8 +57,8 @@ func _ready() -> void: zoom_slider.value_changed.connect(_zoom_slider_value_changed) zoom_changed.connect(_zoom_changed) rotation_changed.connect(_rotation_changed) - viewport_container = get_parent().get_parent() - transparent_checker = get_parent().get_node("TransparentChecker") + viewport_container = get_viewport().get_parent() + transparent_checker = get_viewport().get_node("TransparentChecker") update_transparent_checker_offset() @@ -160,7 +160,7 @@ func fit_to_frame(size: Vector2) -> void: size.x = maxf(absf(a.x - d.x), absf(b.x - c.x)) size.y = maxf(absf(a.y - d.y), absf(b.y - c.y)) - viewport_container = get_parent().get_parent() + viewport_container = get_viewport().get_parent() var h_ratio := viewport_container.size.x / size.x var v_ratio := viewport_container.size.y / size.y var ratio := minf(h_ratio, v_ratio) diff --git a/src/UI/Canvas/Gizmos3D.gd b/src/UI/Canvas/Gizmos3D.gd index e6e2801c1..0106e4709 100644 --- a/src/UI/Canvas/Gizmos3D.gd +++ b/src/UI/Canvas/Gizmos3D.gd @@ -30,6 +30,8 @@ var gizmo_rot_x := PackedVector2Array() var gizmo_rot_y := PackedVector2Array() var gizmo_rot_z := PackedVector2Array() +@onready var canvas := get_parent() as Canvas + func _ready() -> void: set_process_input(false) @@ -188,13 +190,13 @@ func _draw() -> void: # Draw bounding box outline draw_multiline(points, selected_color, 0.5) if object.applying_gizmos == Cel3DObject.Gizmos.X_ROT: - draw_line(gizmos_origin, Global.canvas.current_pixel, Color.RED) + draw_line(gizmos_origin, canvas.current_pixel, Color.RED) continue elif object.applying_gizmos == Cel3DObject.Gizmos.Y_ROT: - draw_line(gizmos_origin, Global.canvas.current_pixel, Color.GREEN) + draw_line(gizmos_origin, canvas.current_pixel, Color.GREEN) continue elif object.applying_gizmos == Cel3DObject.Gizmos.Z_ROT: - draw_line(gizmos_origin, Global.canvas.current_pixel, Color.BLUE) + draw_line(gizmos_origin, canvas.current_pixel, Color.BLUE) continue draw_set_transform(gizmos_origin, 0, draw_scale) # Draw position arrows diff --git a/src/UI/Canvas/Measurements.gd b/src/UI/Canvas/Measurements.gd index ca8318859..86b7e43d9 100644 --- a/src/UI/Canvas/Measurements.gd +++ b/src/UI/Canvas/Measurements.gd @@ -8,6 +8,8 @@ var mode := Global.MeasurementMode.NONE var apparent_width: float = WIDTH var rect_bounds: Rect2i +@onready var canvas := get_parent() as Canvas + func _ready() -> void: font = Themes.get_font() @@ -34,10 +36,10 @@ func _input(_event: InputEvent) -> void: func _prepare_movement_rect() -> void: var project := Global.current_project if project.has_selection: - rect_bounds = Global.canvas.selection.preview_image.get_used_rect() - rect_bounds.position += Vector2i(Global.canvas.selection.big_bounding_rectangle.position) + rect_bounds = canvas.selection.preview_image.get_used_rect() + rect_bounds.position += Vector2i(canvas.selection.big_bounding_rectangle.position) if !rect_bounds.has_area(): - rect_bounds = Global.canvas.selection.big_bounding_rectangle + rect_bounds = canvas.selection.big_bounding_rectangle return if rect_bounds.has_area(): return @@ -65,7 +67,7 @@ func _prepare_movement_rect() -> void: else: rect_bounds = rect_bounds.merge(used_rect) if not rect_bounds.has_area(): - rect_bounds = Rect2(Vector2.ZERO, project.size) + rect_bounds = Rect2i(Vector2i.ZERO, project.size) func _draw_move_measurement() -> void: @@ -74,7 +76,7 @@ func _draw_move_measurement() -> void: dashed_color.a = 0.5 # Draw boundary var boundary := Rect2i(rect_bounds) - boundary.position += Global.canvas.move_preview_location + boundary.position += canvas.move_preview_location draw_rect(boundary, line_color, false, apparent_width) # calculate lines var top := Vector2(boundary.get_center().x, boundary.position.y) diff --git a/src/UI/Canvas/OnionSkinning.gd b/src/UI/Canvas/OnionSkinning.gd index 2f2409fa1..fec72a4ff 100644 --- a/src/UI/Canvas/OnionSkinning.gd +++ b/src/UI/Canvas/OnionSkinning.gd @@ -7,6 +7,8 @@ var opacity := 0.6 var blue_red_color := Color.BLUE var rate := Global.onion_skinning_past_rate +@onready var canvas := get_parent() as Canvas + func _draw() -> void: var project := Global.current_project @@ -36,9 +38,7 @@ func _draw() -> void: if not (layer.name.to_lower().ends_with("_io")): color.a = opacity / i if [change, layer_i] in project.selected_cels: - draw_texture( - cel.image_texture, Global.canvas.move_preview_location, color - ) + draw_texture(cel.image_texture, canvas.move_preview_location, color) else: draw_texture(cel.image_texture, Vector2.ZERO, color) layer_i += 1 diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd index a6f9a6b58..a540054ad 100644 --- a/src/UI/Canvas/Selection.gd +++ b/src/UI/Canvas/Selection.gd @@ -43,7 +43,7 @@ var content_pivot := Vector2.ZERO var mouse_pos_on_gizmo_drag := Vector2.ZERO var resize_keep_ratio := false -@onready var canvas: Canvas = get_parent() +@onready var canvas := get_parent() as Canvas @onready var marching_ants_outline: Sprite2D = $MarchingAntsOutline @@ -393,7 +393,7 @@ func resize_selection() -> void: ) Global.current_project.selection_map_changed() queue_redraw() - Global.canvas.queue_redraw() + canvas.queue_redraw() func _gizmo_rotate() -> void: @@ -461,7 +461,7 @@ func move_borders_end() -> void: else: Global.current_project.selection_map_changed() queue_redraw() - Global.canvas.queue_redraw() + canvas.queue_redraw() func transform_content_start() -> void: @@ -478,7 +478,7 @@ func transform_content_start() -> void: original_big_bounding_rectangle = big_bounding_rectangle original_offset = Global.current_project.selection_offset queue_redraw() - Global.canvas.queue_redraw() + canvas.queue_redraw() func move_content(move: Vector2) -> void: @@ -522,7 +522,7 @@ func transform_content_confirm() -> void: angle = 0.0 content_pivot = Vector2.ZERO queue_redraw() - Global.canvas.queue_redraw() + canvas.queue_redraw() func transform_content_cancel() -> void: @@ -555,7 +555,7 @@ func transform_content_cancel() -> void: angle = 0.0 content_pivot = Vector2.ZERO queue_redraw() - Global.canvas.queue_redraw() + canvas.queue_redraw() func commit_undo(action: String, undo_data_tmp: Dictionary) -> void: diff --git a/src/UI/Canvas/TileMode.gd b/src/UI/Canvas/TileMode.gd index 316f2eeca..641fde9b6 100644 --- a/src/UI/Canvas/TileMode.gd +++ b/src/UI/Canvas/TileMode.gd @@ -3,6 +3,8 @@ extends Node2D var tiles: Tiles var draw_center := false +@onready var canvas := get_parent() as Canvas + func _draw() -> void: var positions := get_tile_positions() @@ -16,7 +18,7 @@ func _draw() -> void: var modulate_color := Color( tilemode_opacity, tilemode_opacity, tilemode_opacity, tilemode_opacity ) # premultiply alpha blending is applied - var current_frame_texture: Texture2D = Global.canvas.currently_visible_frame.get_texture() + var current_frame_texture := canvas.currently_visible_frame.get_texture() for pos in positions: draw_texture(current_frame_texture, pos, modulate_color) diff --git a/src/UI/UI.tscn b/src/UI/UI.tscn index 33f01a452..1bb78eb62 100644 --- a/src/UI/UI.tscn +++ b/src/UI/UI.tscn @@ -205,6 +205,7 @@ hidden_tabs = { "Reference Images": true, "Second Canvas": true } +windows = {} save_on_change = false [sub_resource type="ShaderMaterial" id="2"] From b79ce0ae15d279970ff771bf7c15dd8cafc38c46 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:44:21 +0300 Subject: [PATCH 02/47] Add a new "CanvasCameras" node group for the canvas cameras --- project.godot | 4 +++ src/Autoload/Global.gd | 6 ---- src/Tools/UtilityTools/Pan.gd | 8 ++--- src/Tools/UtilityTools/Zoom.gd | 27 +++++++------- src/UI/Canvas/Canvas.gd | 2 +- src/UI/Canvas/CanvasCamera.gd | 35 +++++++------------ .../CanvasPreviewContainer.tscn | 5 ++- src/UI/UI.tscn | 4 +-- 8 files changed, 40 insertions(+), 51 deletions(-) diff --git a/project.godot b/project.godot index 35ca2ee8d..3737bddf8 100644 --- a/project.godot +++ b/project.godot @@ -61,6 +61,10 @@ window/per_pixel_transparency/allowed.web=false enabled=PackedStringArray("res://addons/aimg_io/plugin.cfg", "res://addons/dockable_container/plugin.cfg", "res://addons/keychain/plugin.cfg") +[global_group] + +CanvasCameras="" + [importer_defaults] texture={ diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 4f0ce33d0..5b8259fae 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -622,12 +622,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") ) ## Camera of the main canvas. @onready var camera: CanvasCamera = main_viewport.find_child("Camera2D") -## Camera of the second canvas preview. -@onready var camera2: CanvasCamera = second_viewport.find_child("Camera2D2") -## Camera of the canvas preview. -@onready var camera_preview: CanvasCamera = control.find_child("CameraPreview") -## Array of cameras used in Pixelorama. -@onready var cameras := [camera, camera2, camera_preview] ## Horizontal ruler of the main canvas. It has the [param HorizontalRuler.gd] script attached. @onready var horizontal_ruler: BaseButton = control.find_child("HorizontalRuler") ## Vertical ruler of the main canvas. It has the [param VerticalRuler.gd] script attached. diff --git a/src/Tools/UtilityTools/Pan.gd b/src/Tools/UtilityTools/Pan.gd index b6b5c7d89..5c9d0d652 100644 --- a/src/Tools/UtilityTools/Pan.gd +++ b/src/Tools/UtilityTools/Pan.gd @@ -3,8 +3,8 @@ extends BaseTool func draw_start(pos: Vector2i) -> void: super.draw_start(pos) - Global.camera.drag = true - Global.camera2.drag = true + for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"): + camera.drag = true func draw_move(pos: Vector2i) -> void: @@ -13,5 +13,5 @@ func draw_move(pos: Vector2i) -> void: func draw_end(pos: Vector2i) -> void: super.draw_end(pos) - Global.camera.drag = false - Global.camera2.drag = false + for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"): + camera.drag = false diff --git a/src/Tools/UtilityTools/Zoom.gd b/src/Tools/UtilityTools/Zoom.gd index 2fa158af3..0c2efbe0d 100644 --- a/src/Tools/UtilityTools/Zoom.gd +++ b/src/Tools/UtilityTools/Zoom.gd @@ -28,11 +28,13 @@ func _on_ModeOptions_item_selected(id: ZoomMode) -> void: func _on_FitToFrame_pressed() -> void: - Global.camera.fit_to_frame(Global.current_project.size) + for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"): + camera.fit_to_frame(Global.current_project.size) func _on_100_pressed() -> void: - Global.camera.zoom_100() + for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"): + camera.zoom_100() func get_config() -> Dictionary: @@ -50,20 +52,21 @@ func update_config() -> void: func draw_start(pos: Vector2i) -> void: super.draw_start(pos) var mouse_pos := get_global_mouse_position() - var viewport_rect := Rect2(Global.main_viewport.global_position, Global.main_viewport.size) - var viewport_rect_2 := Rect2( - Global.second_viewport.global_position, Global.second_viewport.size - ) - - if viewport_rect.has_point(mouse_pos): - Global.camera.zoom_camera(_zoom_mode * 2 - 1) - elif viewport_rect_2.has_point(mouse_pos): - Global.camera2.zoom_camera(_zoom_mode * 2 - 1) + for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"): + var viewport_container := camera.get_viewport().get_parent() as SubViewportContainer + var viewport_rect := Rect2(viewport_container.global_position, viewport_container.size) + if viewport_rect.has_point(mouse_pos): + camera.zoom_camera(_zoom_mode * 2 - 1) func draw_move(pos: Vector2i) -> void: super.draw_move(pos) - Global.camera.zoom_camera(-_relative.x / 3) + var mouse_pos := get_global_mouse_position() + for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"): + var viewport_container := camera.get_viewport().get_parent() as SubViewportContainer + var viewport_rect := Rect2(viewport_container.global_position, viewport_container.size) + if viewport_rect.has_point(mouse_pos): + camera.zoom_camera(-_relative.x / 3) func draw_end(pos: Vector2i) -> void: diff --git a/src/UI/Canvas/Canvas.gd b/src/UI/Canvas/Canvas.gd index 2f35195e0..35867c633 100644 --- a/src/UI/Canvas/Canvas.gd +++ b/src/UI/Canvas/Canvas.gd @@ -98,7 +98,7 @@ func _input(event: InputEvent) -> void: func camera_zoom() -> void: - for camera in Global.cameras: + for camera: CanvasCamera in get_tree().get_nodes_in_group("CanvasCameras"): camera.fit_to_frame(Global.current_project.size) Global.transparent_checker.update_rect() diff --git a/src/UI/Canvas/CanvasCamera.gd b/src/UI/Canvas/CanvasCamera.gd index c75e4a22b..19465324f 100644 --- a/src/UI/Canvas/CanvasCamera.gd +++ b/src/UI/Canvas/CanvasCamera.gd @@ -142,7 +142,13 @@ func zoom_100() -> void: func fit_to_frame(size: Vector2) -> void: - # temporarily disable integer zoom + viewport_container = get_viewport().get_parent() + var h_ratio := viewport_container.size.x / size.x + var v_ratio := viewport_container.size.y / size.y + var ratio := minf(h_ratio, v_ratio) + if ratio == 0 or !viewport_container.visible: + return + # Temporarily disable integer zoom. var reset_integer_zoom := Global.integer_zoom if reset_integer_zoom: Global.integer_zoom = !Global.integer_zoom @@ -150,33 +156,16 @@ func fit_to_frame(size: Vector2) -> void: # Adjust to the rotated size: if camera_angle != 0.0: - # Calculating the rotated corners of the frame to find its rotated size + # Calculating the rotated corners of the frame to find its rotated size. var a := Vector2.ZERO # Top left - var b := Vector2(size.x, 0).rotated(camera_angle) # Top right - var c := Vector2(0, size.y).rotated(camera_angle) # Bottom left - var d := Vector2(size.x, size.y).rotated(camera_angle) # Bottom right + var b := Vector2(size.x, 0).rotated(camera_angle) # Top right. + var c := Vector2(0, size.y).rotated(camera_angle) # Bottom left. + var d := Vector2(size.x, size.y).rotated(camera_angle) # Bottom right. - # Find how far apart each opposite point is on each axis, and take the longer one + # Find how far apart each opposite point is on each axis, and take the longer one. size.x = maxf(absf(a.x - d.x), absf(b.x - c.x)) size.y = maxf(absf(a.y - d.y), absf(b.y - c.y)) - viewport_container = get_viewport().get_parent() - var h_ratio := viewport_container.size.x / size.x - var v_ratio := viewport_container.size.y / size.y - var ratio := minf(h_ratio, v_ratio) - if ratio == 0 or !viewport_container.visible: - ratio = 0.1 # Set it to a non-zero value just in case - # If the ratio is 0, it means that the viewport container is hidden - # in that case, use the other viewport to get the ratio - if index == Cameras.MAIN: - h_ratio = Global.second_viewport.size.x / size.x - v_ratio = Global.second_viewport.size.y / size.y - ratio = minf(h_ratio, v_ratio) - elif index == Cameras.SECOND: - h_ratio = Global.main_viewport.size.x / size.x - v_ratio = Global.main_viewport.size.y / size.y - ratio = minf(h_ratio, v_ratio) - ratio = clampf(ratio, 0.1, ratio) zoom = Vector2(ratio, ratio) if reset_integer_zoom: diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn index 715a8e54e..097f0c53b 100644 --- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn +++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn @@ -77,7 +77,7 @@ anchors_preset = 0 [node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/SubViewport" instance=ExtResource("5")] unique_name_in_owner = true -[node name="CameraPreview" type="Node2D" parent="VBox/HBox/PreviewViewportContainer/SubViewport"] +[node name="CameraPreview" type="Node2D" parent="VBox/HBox/PreviewViewportContainer/SubViewport" groups=["CanvasCameras"]] unique_name_in_owner = true script = ExtResource("5_ge2km") index = 2 @@ -122,10 +122,9 @@ layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 clip_text = true -item_count = 2 selected = 0 +item_count = 2 popup/item_0/text = "All frames" -popup/item_0/id = 0 popup/item_1/text = "Current frame as spritesheet" popup/item_1/id = 1 diff --git a/src/UI/UI.tscn b/src/UI/UI.tscn index 1bb78eb62..c6b892717 100644 --- a/src/UI/UI.tscn +++ b/src/UI/UI.tscn @@ -325,7 +325,7 @@ anchors_preset = 0 [node name="Canvas" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" instance=ExtResource("19")] -[node name="Camera2D" type="Node2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"] +[node name="Camera2D" type="Node2D" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport" groups=["CanvasCameras"]] script = ExtResource("7") [node name="CanvasLayer" type="CanvasLayer" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler/SubViewportContainer/SubViewport"] @@ -361,7 +361,7 @@ anchors_preset = 0 [node name="CanvasPreview" parent="DockableContainer/Second Canvas/SubViewport" instance=ExtResource("2")] -[node name="Camera2D2" type="Node2D" parent="DockableContainer/Second Canvas/SubViewport"] +[node name="Camera2D2" type="Node2D" parent="DockableContainer/Second Canvas/SubViewport" groups=["CanvasCameras"]] script = ExtResource("7") index = 1 From d05787d6ef14c1fe640acc59561a9253f8b7a5c6 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:24:44 +0300 Subject: [PATCH 03/47] Add a new "CanvasPreviews" node group for the canvas previews --- project.godot | 1 + src/Autoload/Global.gd | 14 ++------------ .../CanvasPreviewContainer.tscn | 2 +- src/UI/Nodes/TransparentChecker.gd | 4 ++-- src/UI/UI.tscn | 2 +- 5 files changed, 7 insertions(+), 16 deletions(-) diff --git a/project.godot b/project.godot index 3737bddf8..12285e151 100644 --- a/project.godot +++ b/project.godot @@ -64,6 +64,7 @@ enabled=PackedStringArray("res://addons/aimg_io/plugin.cfg", "res://addons/docka [global_group] CanvasCameras="" +CanvasPreviews="" [importer_defaults] diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 5b8259fae..24ee555f7 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -608,18 +608,8 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") @onready var main_viewport: SubViewportContainer = control.find_child("SubViewportContainer") ## The main canvas node. It has the [param Canvas.gd] script attached. @onready var canvas: Canvas = main_viewport.find_child("Canvas") -## Contains viewport of the second canvas preview. -## It has the [param ViewportContainer.gd] script attached. -@onready var second_viewport: SubViewportContainer = control.find_child("Second Canvas") -## The panel container of the canvas preview. -## It has the [param CanvasPreviewContainer.gd] script attached. -@onready var canvas_preview_container: Container = control.find_child("Canvas Preview") ## The global tool options. It has the [param GlobalToolOptions.gd] script attached. @onready var global_tool_options: PanelContainer = control.find_child("Global Tool Options") -## Contains viewport of the canvas preview. -@onready var small_preview_viewport: SubViewportContainer = canvas_preview_container.find_child( - "PreviewViewportContainer" -) ## Camera of the main canvas. @onready var camera: CanvasCamera = main_viewport.find_child("Camera2D") ## Horizontal ruler of the main canvas. It has the [param HorizontalRuler.gd] script attached. @@ -956,8 +946,8 @@ func undo_or_redo( await RenderingServer.frame_post_draw canvas.queue_redraw() - second_viewport.get_child(0).get_node("CanvasPreview").queue_redraw() - canvas_preview_container.canvas_preview.queue_redraw() + for canvas_preview in get_tree().get_nodes_in_group("CanvasPreviews"): + canvas_preview.queue_redraw() if !project.has_changed: if project == current_project: get_window().title = get_window().title + "(*)" diff --git a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn index 097f0c53b..1bc02c895 100644 --- a/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn +++ b/src/UI/CanvasPreviewContainer/CanvasPreviewContainer.tscn @@ -74,7 +74,7 @@ render_target_update_mode = 4 material = SubResource("1") anchors_preset = 0 -[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/SubViewport" instance=ExtResource("5")] +[node name="CanvasPreview" parent="VBox/HBox/PreviewViewportContainer/SubViewport" groups=["CanvasPreviews"] instance=ExtResource("5")] unique_name_in_owner = true [node name="CameraPreview" type="Node2D" parent="VBox/HBox/PreviewViewportContainer/SubViewport" groups=["CanvasCameras"]] diff --git a/src/UI/Nodes/TransparentChecker.gd b/src/UI/Nodes/TransparentChecker.gd index a1d39cb8a..f01d2250f 100644 --- a/src/UI/Nodes/TransparentChecker.gd +++ b/src/UI/Nodes/TransparentChecker.gd @@ -11,8 +11,8 @@ func update_rect() -> void: set_bounds(Global.current_project.size) if self == Global.transparent_checker: fit_rect(Global.current_project.tiles.get_bounding_rect()) - Global.second_viewport.get_node("SubViewport/TransparentChecker").update_rect() - Global.small_preview_viewport.get_node("SubViewport/TransparentChecker").update_rect() + for canvas_preview in get_tree().get_nodes_in_group("CanvasPreviews"): + canvas_preview.get_viewport().get_node("TransparentChecker").update_rect() material.set_shader_parameter("size", Global.checker_size) material.set_shader_parameter("color1", Global.checker_color_1) material.set_shader_parameter("color2", Global.checker_color_2) diff --git a/src/UI/UI.tscn b/src/UI/UI.tscn index c6b892717..c4406b0c2 100644 --- a/src/UI/UI.tscn +++ b/src/UI/UI.tscn @@ -359,7 +359,7 @@ render_target_update_mode = 0 material = SubResource("3") anchors_preset = 0 -[node name="CanvasPreview" parent="DockableContainer/Second Canvas/SubViewport" instance=ExtResource("2")] +[node name="CanvasPreview" parent="DockableContainer/Second Canvas/SubViewport" groups=["CanvasPreviews"] instance=ExtResource("2")] [node name="Camera2D2" type="Node2D" parent="DockableContainer/Second Canvas/SubViewport" groups=["CanvasCameras"]] script = ExtResource("7") From dddcfed3c48004f3b411b42e92da6bbac1742550 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:31:18 +0300 Subject: [PATCH 04/47] Add a new "CanvasRulers" node group for the canvas rulers --- src/Autoload/Global.gd | 9 ++++----- src/UI/Canvas/Rulers/HorizontalRuler.gd | 4 +++- src/UI/TopMenuContainer/TopMenuContainer.gd | 2 -- src/UI/UI.tscn | 4 ++-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 24ee555f7..2e504068d 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -561,7 +561,10 @@ var draw_grid := false ## If [code]true[/code], the pixel grid is visible. var draw_pixel_grid := false ## If [code]true[/code], the rulers are visible. -var show_rulers := true +var show_rulers := true: + set(value): + show_rulers = value + get_tree().set_group(&"CanvasRulers", "visible", value) ## If [code]true[/code], the guides are visible. var show_guides := true ## If [code]true[/code], the mouse guides are visible. @@ -612,10 +615,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") @onready var global_tool_options: PanelContainer = control.find_child("Global Tool Options") ## Camera of the main canvas. @onready var camera: CanvasCamera = main_viewport.find_child("Camera2D") -## Horizontal ruler of the main canvas. It has the [param HorizontalRuler.gd] script attached. -@onready var horizontal_ruler: BaseButton = control.find_child("HorizontalRuler") -## Vertical ruler of the main canvas. It has the [param VerticalRuler.gd] script attached. -@onready var vertical_ruler: BaseButton = control.find_child("VerticalRuler") ## Transparent checker of the main canvas. It has the [param TransparentChecker.gd] script attached. @onready var transparent_checker: ColorRect = control.find_child("TransparentChecker") diff --git a/src/UI/Canvas/Rulers/HorizontalRuler.gd b/src/UI/Canvas/Rulers/HorizontalRuler.gd index e08ef25d2..b60ca19aa 100644 --- a/src/UI/Canvas/Rulers/HorizontalRuler.gd +++ b/src/UI/Canvas/Rulers/HorizontalRuler.gd @@ -8,6 +8,8 @@ var minor_subdivision := 4 var first: Vector2 var last: Vector2 +@onready var vertical_ruler := $"../ViewportandVerticalRuler/VerticalRuler" as Button + func _ready() -> void: Global.project_switched.connect(queue_redraw) @@ -120,7 +122,7 @@ func create_guide() -> void: return var mouse_pos := get_local_mouse_position() if mouse_pos.x < RULER_WIDTH: # For double guides - Global.vertical_ruler.create_guide() + vertical_ruler.create_guide() var guide := Guide.new() if absf(Global.camera.rotation_degrees) < 45 or absf(Global.camera.rotation_degrees) > 135: guide.type = guide.Types.HORIZONTAL diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index cb5d0dd17..9b3c6534a 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -735,8 +735,6 @@ func _toggle_show_pixel_grid() -> void: func _toggle_show_rulers() -> void: Global.show_rulers = !Global.show_rulers view_menu.set_item_checked(Global.ViewMenu.SHOW_RULERS, Global.show_rulers) - Global.horizontal_ruler.visible = Global.show_rulers - Global.vertical_ruler.visible = Global.show_rulers func _toggle_show_guides() -> void: diff --git a/src/UI/UI.tscn b/src/UI/UI.tscn index c4406b0c2..1700b0868 100644 --- a/src/UI/UI.tscn +++ b/src/UI/UI.tscn @@ -275,7 +275,7 @@ tab_close_display_policy = 2 drag_to_rearrange_enabled = true script = ExtResource("3") -[node name="HorizontalRuler" type="Button" parent="DockableContainer/Main Canvas"] +[node name="HorizontalRuler" type="Button" parent="DockableContainer/Main Canvas" groups=["CanvasRulers"]] clip_contents = true custom_minimum_size = Vector2(0, 16) layout_mode = 2 @@ -291,7 +291,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 theme_override_constants/separation = 0 -[node name="VerticalRuler" type="Button" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler"] +[node name="VerticalRuler" type="Button" parent="DockableContainer/Main Canvas/ViewportandVerticalRuler" groups=["CanvasRulers"]] clip_contents = true custom_minimum_size = Vector2(16, 0) layout_mode = 2 From b9bf8290b0c3216abdd6b2ae8c026cbf823e5029 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:38:35 +0300 Subject: [PATCH 05/47] Remove `Global.animation_timer` --- src/Autoload/Global.gd | 2 -- src/Tools/BaseDraw.gd | 4 +-- src/Tools/DesignTools/Bucket.gd | 4 +-- src/Tools/UtilityTools/Move.gd | 4 +-- src/UI/Timeline/AnimationTimeline.gd | 39 +++++++++++++--------------- 5 files changed, 24 insertions(+), 29 deletions(-) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 2e504068d..bb8dcd207 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -626,8 +626,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") @onready var cursor_position_label: Label = top_menu_container.find_child("CursorPosition") ## The animation timeline. It has the [param AnimationTimeline.gd] script attached. @onready var animation_timeline: Panel = control.find_child("Animation Timeline") -## The timer used by the animation timeline. -@onready var animation_timer: Timer = animation_timeline.find_child("AnimationTimer") ## The container of frame buttons @onready var frame_hbox: HBoxContainer = animation_timeline.find_child("FrameHBox") ## The container of layer buttons diff --git a/src/Tools/BaseDraw.gd b/src/Tools/BaseDraw.gd index 295ca9dfa..83ff42273 100644 --- a/src/Tools/BaseDraw.gd +++ b/src/Tools/BaseDraw.gd @@ -238,7 +238,7 @@ func commit_undo() -> void: var project := Global.current_project var frame := -1 var layer := -1 - if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1: + if Global.animation_timeline.animation_timer.is_stopped() and project.selected_cels.size() == 1: frame = project.current_frame layer = project.current_layer @@ -694,7 +694,7 @@ func _get_undo_data() -> Dictionary: var data := {} var project := Global.current_project var cels: Array[BaseCel] = [] - if Global.animation_timer.is_stopped(): + if Global.animation_timeline.animation_timer.is_stopped(): for cel_index in project.selected_cels: cels.append(project.frames[cel_index[0]].cels[cel_index[1]]) else: diff --git a/src/Tools/DesignTools/Bucket.gd b/src/Tools/DesignTools/Bucket.gd index 1862f256c..794ed5422 100644 --- a/src/Tools/DesignTools/Bucket.gd +++ b/src/Tools/DesignTools/Bucket.gd @@ -487,7 +487,7 @@ func commit_undo() -> void: var project := Global.current_project var frame := -1 var layer := -1 - if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1: + if Global.animation_timeline.animation_timer.is_stopped() and project.selected_cels.size() == 1: frame = project.current_frame layer = project.current_layer @@ -502,7 +502,7 @@ func commit_undo() -> void: func _get_undo_data() -> Dictionary: var data := {} - if Global.animation_timer.is_stopped(): + if Global.animation_timeline.animation_timer.is_stopped(): var images := _get_selected_draw_images() for image in images: data[image] = image.data diff --git a/src/Tools/UtilityTools/Move.gd b/src/Tools/UtilityTools/Move.gd index dcca36e9f..0520dcc6c 100644 --- a/src/Tools/UtilityTools/Move.gd +++ b/src/Tools/UtilityTools/Move.gd @@ -128,7 +128,7 @@ func _commit_undo(action: String) -> void: var project := Global.current_project var frame := -1 var layer := -1 - if Global.animation_timer.is_stopped() and project.selected_cels.size() == 1: + if Global.animation_timeline.animation_timer.is_stopped() and project.selected_cels.size() == 1: frame = project.current_frame layer = project.current_layer @@ -145,7 +145,7 @@ func _get_undo_data() -> Dictionary: var data := {} var project := Global.current_project var cels: Array[BaseCel] = [] - if Global.animation_timer.is_stopped(): + if Global.animation_timeline.animation_timer.is_stopped(): for cel_index in project.selected_cels: cels.append(project.frames[cel_index[0]].cels[cel_index[1]]) else: diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index e16cc793c..d495a2522 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -28,6 +28,7 @@ var global_layer_visibility := true var global_layer_lock := false var global_layer_expand := true +@onready var animation_timer := $AnimationTimer as Timer @onready var old_scroll := 0 ## The previous scroll state of $ScrollContainer. @onready var tag_spacer := %TagSpacer as Control @onready var layer_settings_container := %LayerSettingsContainer as VBoxContainer @@ -69,7 +70,7 @@ func _ready() -> void: cel_size_slider.value = cel_size add_layer_list.get_popup().id_pressed.connect(add_layer) frame_scroll_bar.value_changed.connect(_frame_scroll_changed) - Global.animation_timer.wait_time = 1 / Global.current_project.fps + animation_timer.wait_time = 1 / Global.current_project.fps fps_spinbox.value = Global.current_project.fps _fill_blend_modes_option_button() # Config loading. @@ -651,7 +652,7 @@ func _on_AnimationTimer_timeout() -> void: if first_frame == last_frame: play_forward.button_pressed = false play_backwards.button_pressed = false - Global.animation_timer.stop() + animation_timer.stop() return Global.canvas.selection.transform_content_confirm() @@ -661,25 +662,23 @@ func _on_AnimationTimer_timeout() -> void: if project.current_frame < last_frame: project.selected_cels.clear() project.change_cel(project.current_frame + 1, -1) - Global.animation_timer.wait_time = ( - project.frames[project.current_frame].duration * (1 / fps) - ) - Global.animation_timer.start() # Change the frame, change the wait time and start a cycle + animation_timer.wait_time = project.frames[project.current_frame].duration * (1.0 / fps) + animation_timer.start() # Change the frame, change the wait time and start a cycle else: match animation_loop: 0: # No loop play_forward.button_pressed = false play_backwards.button_pressed = false - Global.animation_timer.stop() + animation_timer.stop() animation_finished.emit() is_animation_running = false 1: # Cycle loop project.selected_cels.clear() project.change_cel(first_frame, -1) - Global.animation_timer.wait_time = ( + animation_timer.wait_time = ( project.frames[project.current_frame].duration * (1 / fps) ) - Global.animation_timer.start() + animation_timer.start() 2: # Ping pong loop animation_forward = false _on_AnimationTimer_timeout() @@ -688,25 +687,23 @@ func _on_AnimationTimer_timeout() -> void: if project.current_frame > first_frame: project.selected_cels.clear() project.change_cel(project.current_frame - 1, -1) - Global.animation_timer.wait_time = ( - project.frames[project.current_frame].duration * (1 / fps) - ) - Global.animation_timer.start() + animation_timer.wait_time = project.frames[project.current_frame].duration * (1.0 / fps) + animation_timer.start() else: match animation_loop: 0: # No loop play_backwards.button_pressed = false play_forward.button_pressed = false - Global.animation_timer.stop() + animation_timer.stop() animation_finished.emit() is_animation_running = false 1: # Cycle loop project.selected_cels.clear() project.change_cel(last_frame, -1) - Global.animation_timer.wait_time = ( + animation_timer.wait_time = ( project.frames[project.current_frame].duration * (1 / fps) ) - Global.animation_timer.start() + animation_timer.start() 2: # Ping pong loop animation_forward = true _on_AnimationTimer_timeout() @@ -746,16 +743,16 @@ func play_animation(play: bool, forward_dir: bool) -> void: play_forward.toggled.connect(_on_PlayForward_toggled) if play: - Global.animation_timer.set_one_shot(true) # wait_time can't change correctly if it's playing + animation_timer.set_one_shot(true) # wait_time can't change correctly if it's playing var duration: float = ( Global.current_project.frames[Global.current_project.current_frame].duration ) - Global.animation_timer.wait_time = duration * (1 / Global.current_project.fps) - Global.animation_timer.start() + animation_timer.wait_time = duration * (1 / Global.current_project.fps) + animation_timer.start() animation_forward = forward_dir animation_started.emit(forward_dir) else: - Global.animation_timer.stop() + animation_timer.stop() animation_finished.emit() is_animation_running = play @@ -791,7 +788,7 @@ func _on_FirstFrame_pressed() -> void: func _on_FPSValue_value_changed(value: float) -> void: Global.current_project.fps = value - Global.animation_timer.wait_time = 1 / Global.current_project.fps + animation_timer.wait_time = 1 / Global.current_project.fps func _on_PastOnionSkinning_value_changed(value: float) -> void: From ed5449bb66a176bc695c6fd987a0239a1e737576 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:42:11 +0300 Subject: [PATCH 06/47] Use an enum for the loop types in the timeline I should have done that years ago. Literally. I don't know what took so long. --- src/UI/Timeline/AnimationTimeline.gd | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index d495a2522..5c591495f 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -3,11 +3,13 @@ extends Panel signal animation_started(forward: bool) signal animation_finished +enum LoopType {NO, CYCLE, PINGPONG} + const FRAME_BUTTON_TSCN := preload("res://src/UI/Timeline/FrameButton.tscn") const LAYER_FX_SCENE_PATH := "res://src/UI/Timeline/LayerEffects/LayerEffectsSettings.tscn" var is_animation_running := false -var animation_loop := 1 ## 0 is no loop, 1 is cycle loop, 2 is ping-pong loop. +var animation_loop := LoopType.CYCLE var animation_forward := true var first_frame := 0 var last_frame := 0 @@ -617,16 +619,16 @@ func _on_timeline_settings_button_pressed() -> void: func _on_LoopAnim_pressed() -> void: var texture_button: TextureRect = loop_animation_button.get_child(0) match animation_loop: - 0: # Make it loop - animation_loop = 1 + LoopType.NO: + animation_loop = LoopType.CYCLE Global.change_button_texturerect(texture_button, "loop.png") loop_animation_button.tooltip_text = "Cycle loop" - 1: # Make it ping-pong - animation_loop = 2 + LoopType.CYCLE: + animation_loop = LoopType.PINGPONG Global.change_button_texturerect(texture_button, "loop_pingpong.png") loop_animation_button.tooltip_text = "Ping-pong loop" - 2: # Make it stop - animation_loop = 0 + LoopType.PINGPONG: + animation_loop = LoopType.NO Global.change_button_texturerect(texture_button, "loop_none.png") loop_animation_button.tooltip_text = "No loop" @@ -666,20 +668,20 @@ func _on_AnimationTimer_timeout() -> void: animation_timer.start() # Change the frame, change the wait time and start a cycle else: match animation_loop: - 0: # No loop + LoopType.NO: play_forward.button_pressed = false play_backwards.button_pressed = false animation_timer.stop() animation_finished.emit() is_animation_running = false - 1: # Cycle loop + LoopType.CYCLE: project.selected_cels.clear() project.change_cel(first_frame, -1) animation_timer.wait_time = ( project.frames[project.current_frame].duration * (1 / fps) ) animation_timer.start() - 2: # Ping pong loop + LoopType.PINGPONG: animation_forward = false _on_AnimationTimer_timeout() @@ -691,20 +693,20 @@ func _on_AnimationTimer_timeout() -> void: animation_timer.start() else: match animation_loop: - 0: # No loop + LoopType.NO: play_backwards.button_pressed = false play_forward.button_pressed = false animation_timer.stop() animation_finished.emit() is_animation_running = false - 1: # Cycle loop + LoopType.CYCLE: project.selected_cels.clear() project.change_cel(last_frame, -1) animation_timer.wait_time = ( project.frames[project.current_frame].duration * (1 / fps) ) animation_timer.start() - 2: # Ping pong loop + LoopType.PINGPONG: animation_forward = true _on_AnimationTimer_timeout() frame_scroll_container.ensure_control_visible( From dcd93b4366e4952acf7a5052ae66419a4451f6f5 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:12:55 +0300 Subject: [PATCH 07/47] Remove `Global.open_sprites_dialog` and `Global.save_sprites_dialog`. --- src/Autoload/Global.gd | 4 ---- src/Autoload/OpenSave.gd | 1 - src/Classes/Project.gd | 3 --- src/Main.gd | 14 ++++++++++++-- src/UI/Timeline/AnimationTimeline.gd | 2 +- src/UI/TopMenuContainer/TopMenuContainer.gd | 2 +- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index bb8dcd207..98444e866 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -641,10 +641,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") ## The patterns popup dialog used to display patterns ## It has the [param PatternsPopup.gd] script attached. @onready var patterns_popup: Popup = control.find_child("PatternsPopup") -## Dialog used to navigate and open images and projects. -@onready var open_sprites_dialog: FileDialog = control.find_child("OpenSprite") -## Dialog used to save (.pxo) projects. -@onready var save_sprites_dialog: FileDialog = control.find_child("SaveSprite") ## Dialog used to export images. It has the [param ExportDialog.gd] script attached. @onready var export_dialog: AcceptDialog = control.find_child("ExportDialog") ## An error dialog to show errors. diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index 037fe503c..466c9275e 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -276,7 +276,6 @@ func open_pxo_file(path: String, is_backup := false, replace_empty := true) -> v # Loading a backup should not change window title and save path new_project.save_path = path get_window().title = new_project.name + " - Pixelorama " + Global.current_version - Global.save_sprites_dialog.current_path = path # Set last opened project path and save Global.config_cache.set_value("data", "current_dir", path.get_base_dir()) Global.config_cache.set_value("data", "last_project_path", path) diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index bb75514e3..fbfee1362 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -203,9 +203,6 @@ func change_project() -> void: Global.get_window().title = "%s - Pixelorama %s" % [name, Global.current_version] if has_changed: Global.get_window().title = Global.get_window().title + "(*)" - if export_directory_path != "": - Global.open_sprites_dialog.current_path = export_directory_path - Global.save_sprites_dialog.current_path = export_directory_path selection_map_changed() diff --git a/src/Main.gd b/src/Main.gd index 982e197df..521bbde1f 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -18,6 +18,9 @@ var splash_dialog: AcceptDialog: @onready var main_ui := $MenuAndUI/UI/DockableContainer as DockableContainer @onready var backup_confirmation: ConfirmationDialog = $Dialogs/BackupConfirmation +## Dialog used to open images and project (.pxo) files. +@onready var open_sprite_dialog := $Dialogs/OpenSprite as FileDialog +## Dialog used to save project (.pxo) files. @onready var save_sprite_dialog := $Dialogs/SaveSprite as FileDialog @onready var save_sprite_html5: ConfirmationDialog = $Dialogs/SaveSpriteHTML5 @onready var tile_mode_offsets_dialog: ConfirmationDialog = $Dialogs/TileModeOffsetsDialog @@ -157,6 +160,7 @@ some useful [SYSTEM OPTIONS] are: func _init() -> void: + Global.project_switched.connect(_project_switched) if not DirAccess.dir_exists_absolute("user://backups"): DirAccess.make_dir_recursive_absolute("user://backups") Global.shrink = _get_auto_display_scale() @@ -177,7 +181,7 @@ func _ready() -> void: quit_and_save_dialog.add_button("Exit without saving", false, "ExitWithoutSaving") - Global.open_sprites_dialog.current_dir = Global.config_cache.get_value( + open_sprite_dialog.current_dir = Global.config_cache.get_value( "data", "current_dir", OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP) ) save_sprite_dialog.current_dir = Global.config_cache.get_value( @@ -203,6 +207,12 @@ func _input(event: InputEvent) -> void: get_viewport().gui_get_focus_owner().release_focus() +func _project_switched() -> void: + if Global.current_project.export_directory_path != "": + open_sprite_dialog.current_path = Global.current_project.export_directory_path + save_sprite_dialog.current_path = Global.current_project.export_directory_path + + # Taken from https://github.com/godotengine/godot/blob/3.x/editor/editor_settings.cpp#L1474 func _get_auto_display_scale() -> float: if OS.get_name() == "macOS": @@ -462,7 +472,7 @@ func save_project(path: String) -> void: ] var success := OpenSave.save_pxo_file(path, false, include_blended, project_to_save) if success: - Global.open_sprites_dialog.current_dir = path.get_base_dir() + open_sprite_dialog.current_dir = path.get_base_dir() if is_quitting_on_save: changed_projects_on_quit.pop_front() _save_on_quit_confirmation() diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index 5c591495f..a26b9acaa 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -3,7 +3,7 @@ extends Panel signal animation_started(forward: bool) signal animation_finished -enum LoopType {NO, CYCLE, PINGPONG} +enum LoopType { NO, CYCLE, PINGPONG } const FRAME_BUTTON_TSCN := preload("res://src/UI/Timeline/FrameButton.tscn") const LAYER_FX_SCENE_PATH := "res://src/UI/Timeline/LayerEffects/LayerEffectsSettings.tscn" diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index 9b3c6534a..f27505ef1 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -535,7 +535,7 @@ func _open_project_file() -> void: if OS.get_name() == "Web": Html5FileExchange.load_image() else: - _popup_dialog(Global.open_sprites_dialog) + _popup_dialog(Global.control.open_sprite_dialog) Global.control.opensprite_file_selected = false From 970b24ec407060bce80f2159fc69cd4a4ad26d0f Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sat, 12 Oct 2024 00:52:18 +0300 Subject: [PATCH 08/47] Fix 3DShapeEdit option values not updating when selecting 3D objects --- src/Tools/3DTools/3DShapeEdit.gd | 2 +- src/Tools/3DTools/3DShapeEdit.tscn | 17 +++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/Tools/3DTools/3DShapeEdit.gd b/src/Tools/3DTools/3DShapeEdit.gd index 29d841614..b68a99e9c 100644 --- a/src/Tools/3DTools/3DShapeEdit.gd +++ b/src/Tools/3DTools/3DShapeEdit.gd @@ -359,7 +359,7 @@ func _set_node_values(to_edit: Object, properties: Dictionary) -> void: if property_path.ends_with("v2"): property_path = property_path.replace("v2", "") var value = to_edit.get_indexed(property_path) - if not is_instance_valid(value): + if value == null: continue if "scale" in prop: value *= 100 diff --git a/src/Tools/3DTools/3DShapeEdit.tscn b/src/Tools/3DTools/3DShapeEdit.tscn index 01cc9c90f..564f56fe4 100644 --- a/src/Tools/3DTools/3DShapeEdit.tscn +++ b/src/Tools/3DTools/3DShapeEdit.tscn @@ -6,7 +6,7 @@ [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="4"] [ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="5"] [ext_resource type="Script" path="res://src/UI/Nodes/CollapsibleContainer.gd" id="6"] -[ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV3.tscn" id="7"] +[ext_resource type="PackedScene" uid="uid://dpoteid430evf" path="res://src/UI/Nodes/ValueSliderV3.tscn" id="7"] [sub_resource type="InputEventAction" id="InputEventAction_8sqgw"] action = &"delete" @@ -31,10 +31,9 @@ unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 -item_count = 1 selected = 0 +item_count = 1 popup/item_0/text = "None" -popup/item_0/id = 0 [node name="NewObjectMenuButton" type="MenuButton" parent="HandleObjects" index="2"] unique_name_in_owner = true @@ -80,10 +79,9 @@ unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 -item_count = 3 selected = 0 +item_count = 3 popup/item_0/text = "Perspective" -popup/item_0/id = 0 popup/item_1/text = "Orthogonal" popup/item_1/id = 1 popup/item_2/text = "Frustum" @@ -552,7 +550,7 @@ focus_mode = 2 mouse_default_cursor_shape = 2 theme_type_variation = &"ValueSlider" min_value = 1.0 -max_value = 10.0 +max_value = 128.0 value = 1.0 allow_greater = true nine_patch_stretch = true @@ -561,6 +559,7 @@ stretch_margin_top = 3 stretch_margin_right = 3 stretch_margin_bottom = 3 script = ExtResource("5") +snap_step = 2.0 [node name="MeshOffsetLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"] layout_mode = 2 @@ -614,10 +613,9 @@ unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 -item_count = 3 selected = 0 +item_count = 3 popup/item_0/text = "Left" -popup/item_0/id = 0 popup/item_1/text = "Center" popup/item_1/id = 1 popup/item_2/text = "Right" @@ -634,10 +632,9 @@ unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 -item_count = 3 selected = 0 +item_count = 3 popup/item_0/text = "Top" -popup/item_0/id = 0 popup/item_1/text = "Center" popup/item_1/id = 1 popup/item_2/text = "Bottom" From bbf0ae80408de7441d8ace9031763f8dc46c873a Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sat, 12 Oct 2024 01:14:37 +0300 Subject: [PATCH 09/47] Add a 3D text depth option --- Translations/Translations.pot | 7 +++++ src/Classes/Cel3DObject.gd | 2 ++ src/Tools/3DTools/3DShapeEdit.gd | 3 +- src/Tools/3DTools/3DShapeEdit.tscn | 44 ++++++++++++++++++++++++------ 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index c1e88df21..027ebe2d4 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -3035,6 +3035,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3046,6 +3050,9 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" diff --git a/src/Classes/Cel3DObject.gd b/src/Classes/Cel3DObject.gd index b03f07ee0..615dc65c5 100644 --- a/src/Classes/Cel3DObject.gd +++ b/src/Classes/Cel3DObject.gd @@ -96,6 +96,7 @@ func serialize() -> Dictionary: dict["mesh_text"] = mesh.text dict["mesh_pixel_size"] = mesh.pixel_size dict["mesh_font_size"] = mesh.font_size + dict["mesh_depth"] = mesh.depth dict["mesh_offset"] = mesh.offset dict["mesh_curve_step"] = mesh.curve_step dict["mesh_horizontal_alignment"] = mesh.horizontal_alignment @@ -157,6 +158,7 @@ func deserialize(dict: Dictionary) -> void: mesh.text = dict["mesh_text"] mesh.pixel_size = dict["mesh_pixel_size"] mesh.font_size = dict["mesh_font_size"] + mesh.depth = dict["mesh_depth"] mesh.offset = dict["mesh_offset"] mesh.curve_step = dict["mesh_curve_step"] mesh.horizontal_alignment = dict["mesh_horizontal_alignment"] diff --git a/src/Tools/3DTools/3DShapeEdit.gd b/src/Tools/3DTools/3DShapeEdit.gd index b68a99e9c..41f1ead52 100644 --- a/src/Tools/3DTools/3DShapeEdit.gd +++ b/src/Tools/3DTools/3DShapeEdit.gd @@ -58,9 +58,10 @@ var _object_names := { "node3d_type:mesh:top_radius": $"%MeshTopRadius", "node3d_type:mesh:bottom_radius": $"%MeshBottomRadius", "node3d_type:mesh:text": $"%MeshText", - "node3d_type:mesh:offset": $"%MeshOffsetV2", "node3d_type:mesh:pixel_size": $"%MeshPixelSize", "node3d_type:mesh:font_size": $"%MeshFontSize", + "node3d_type:mesh:offset": $"%MeshOffsetV2", + "node3d_type:mesh:depth": $"%MeshDepth", "node3d_type:mesh:curve_step": $"%MeshCurveStep", "node3d_type:mesh:horizontal_alignment": $"%MeshHorizontalAlignment", "node3d_type:mesh:vertical_alignment": $"%MeshVerticalAlignment", diff --git a/src/Tools/3DTools/3DShapeEdit.tscn b/src/Tools/3DTools/3DShapeEdit.tscn index 564f56fe4..7108be2c0 100644 --- a/src/Tools/3DTools/3DShapeEdit.tscn +++ b/src/Tools/3DTools/3DShapeEdit.tscn @@ -561,13 +561,37 @@ stretch_margin_bottom = 3 script = ExtResource("5") snap_step = 2.0 -[node name="MeshOffsetLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"] +[node name="MeshDepthLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Depth:" +clip_text = true + +[node name="MeshDepth" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="27"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" +step = 0.001 +value = 0.05 +allow_greater = true +nine_patch_stretch = true +stretch_margin_left = 3 +stretch_margin_top = 3 +stretch_margin_right = 3 +stretch_margin_bottom = 3 +script = ExtResource("5") +snap_step = 2.0 + +[node name="MeshOffsetLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"] layout_mode = 2 size_flags_horizontal = 3 text = "Offset:" clip_text = true -[node name="MeshOffsetV2" parent="ObjectOptions/MeshOptions/GridContainer" index="27" instance=ExtResource("3")] +[node name="MeshOffsetV2" parent="ObjectOptions/MeshOptions/GridContainer" index="29" instance=ExtResource("3")] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -577,13 +601,13 @@ allow_lesser = true show_ratio = true snap_step = 0.01 -[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"] +[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="30"] layout_mode = 2 size_flags_horizontal = 3 text = "Curve step:" clip_text = true -[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="29"] +[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="31"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -602,32 +626,34 @@ stretch_margin_right = 3 stretch_margin_bottom = 3 script = ExtResource("5") -[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="30"] +[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="32"] layout_mode = 2 size_flags_horizontal = 3 text = "Horizontal alignment:" clip_text = true -[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="31"] +[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="33"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 selected = 0 -item_count = 3 +item_count = 4 popup/item_0/text = "Left" popup/item_1/text = "Center" popup/item_1/id = 1 popup/item_2/text = "Right" popup/item_2/id = 2 +popup/item_3/text = "Fill" +popup/item_3/id = 3 -[node name="MeshVerticalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="32"] +[node name="MeshVerticalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="34"] layout_mode = 2 size_flags_horizontal = 3 text = "Vertical alignment:" clip_text = true -[node name="MeshVerticalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="33"] +[node name="MeshVerticalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="35"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 From 9fcb06aa72e6788f331ba9f9080d85b270f26d80 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sat, 12 Oct 2024 14:31:15 +0300 Subject: [PATCH 10/47] Add a 3D text line spacing option --- Translations/Translations.pot | 4 ++++ src/Classes/Cel3DObject.gd | 2 ++ src/Tools/3DTools/3DShapeEdit.gd | 3 ++- src/Tools/3DTools/3DShapeEdit.tscn | 25 +++++++++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index 027ebe2d4..8afcb498e 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -3059,6 +3059,10 @@ msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/src/Classes/Cel3DObject.gd b/src/Classes/Cel3DObject.gd index 615dc65c5..e1bd67455 100644 --- a/src/Classes/Cel3DObject.gd +++ b/src/Classes/Cel3DObject.gd @@ -101,6 +101,7 @@ func serialize() -> Dictionary: dict["mesh_curve_step"] = mesh.curve_step dict["mesh_horizontal_alignment"] = mesh.horizontal_alignment dict["mesh_vertical_alignment"] = mesh.vertical_alignment + dict["mesh_line_spacing"] = mesh.line_spacing else: dict["light_color"] = node3d_type.light_color dict["light_energy"] = node3d_type.light_energy @@ -163,6 +164,7 @@ func deserialize(dict: Dictionary) -> void: mesh.curve_step = dict["mesh_curve_step"] mesh.horizontal_alignment = dict["mesh_horizontal_alignment"] mesh.vertical_alignment = dict["mesh_vertical_alignment"] + mesh.line_spacing = dict["mesh_line_spacing"] else: node3d_type.light_color = dict["light_color"] node3d_type.light_energy = dict["light_energy"] diff --git a/src/Tools/3DTools/3DShapeEdit.gd b/src/Tools/3DTools/3DShapeEdit.gd index 41f1ead52..939dcd637 100644 --- a/src/Tools/3DTools/3DShapeEdit.gd +++ b/src/Tools/3DTools/3DShapeEdit.gd @@ -65,6 +65,7 @@ var _object_names := { "node3d_type:mesh:curve_step": $"%MeshCurveStep", "node3d_type:mesh:horizontal_alignment": $"%MeshHorizontalAlignment", "node3d_type:mesh:vertical_alignment": $"%MeshVerticalAlignment", + "node3d_type:mesh:line_spacing": $"%MeshLineSpacing", "node3d_type:light_color": $"%LightColor", "node3d_type:light_energy": $"%LightEnergy", "node3d_type:light_negative": $"%LightNegative", @@ -75,7 +76,7 @@ var _object_names := { } -func sprite_changed_this_frame(): +func sprite_changed_this_frame() -> void: _checker_update_qued = true _old_cel_image = _cel.get_image() Global.canvas.sprite_changed_this_frame = true diff --git a/src/Tools/3DTools/3DShapeEdit.tscn b/src/Tools/3DTools/3DShapeEdit.tscn index 7108be2c0..c2bbda60a 100644 --- a/src/Tools/3DTools/3DShapeEdit.tscn +++ b/src/Tools/3DTools/3DShapeEdit.tscn @@ -666,6 +666,31 @@ popup/item_1/id = 1 popup/item_2/text = "Bottom" popup/item_2/id = 2 +[node name="MeshLineSpacingLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="36"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Line spacing:" +clip_text = true + +[node name="MeshLineSpacing" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="37"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +focus_mode = 2 +mouse_default_cursor_shape = 2 +theme_type_variation = &"ValueSlider" +min_value = -10.0 +max_value = 10.0 +step = 0.001 +allow_greater = true +allow_lesser = true +nine_patch_stretch = true +stretch_margin_left = 3 +stretch_margin_top = 3 +stretch_margin_right = 3 +stretch_margin_bottom = 3 +script = ExtResource("5") + [node name="LightOptions" type="VBoxContainer" parent="ObjectOptions" index="3"] unique_name_in_owner = true layout_mode = 2 From be7d45205ecdd2f6540a87b30bf97ee6fee23892 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sat, 12 Oct 2024 15:36:46 +0300 Subject: [PATCH 11/47] Remove Roboto-Italic Pixelorama now takes ~100KB less space --- assets/fonts/Roboto-Italic.ttf | Bin 173932 -> 0 bytes assets/fonts/Roboto-Italic.ttf.import | 34 -------------------------- src/UI/Dialogs/AboutDialog.tscn | 11 ++++++--- 3 files changed, 8 insertions(+), 37 deletions(-) delete mode 100644 assets/fonts/Roboto-Italic.ttf delete mode 100644 assets/fonts/Roboto-Italic.ttf.import diff --git a/assets/fonts/Roboto-Italic.ttf b/assets/fonts/Roboto-Italic.ttf deleted file mode 100644 index 6a1cee5b2948dbddf8fe6bb050a5cdca1c206dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173932 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

O45a4+oe9hWMgy~f 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

-xU>*^F=BPK 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 lQ}rTFGDc@=;e7F1K0Nz~x Date: Sat, 12 Oct 2024 15:44:06 +0300 Subject: [PATCH 12/47] Fix some text in the About dialog not having the text color of the theme --- src/UI/Dialogs/AboutDialog.gd | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/UI/Dialogs/AboutDialog.gd b/src/UI/Dialogs/AboutDialog.gd index e610bbbb3..a5a4ffade 100644 --- a/src/UI/Dialogs/AboutDialog.gd +++ b/src/UI/Dialogs/AboutDialog.gd @@ -224,15 +224,20 @@ const DONORS: PackedStringArray = [ @onready var donors_container := $AboutUI/Credits/Donors as VBoxContainer @onready var translators_container := $AboutUI/Credits/Translators as VBoxContainer @onready var licenses_container := $AboutUI/Credits/Licenses as VBoxContainer - @onready var authors := $AboutUI/Credits/Authors/AuthorTree as Tree @onready var donors := $AboutUI/Credits/Donors/DonorTree as Tree @onready var translators := $AboutUI/Credits/Translators/TranslatorTree as Tree @onready var license_tabs := $AboutUI/Credits/Licenses/LicenseTabs as TabBar @onready var license_text := $AboutUI/Credits/Licenses/LicenseText as TextEdit +@onready var pixelorama_slogan := ( + $AboutUI/IconsButtons/SloganAndLinks/VBoxContainer/PixeloramaSlogan as Label +) +@onready var copyright_label := $AboutUI/Copyright as Label func _ready() -> void: + pixelorama_slogan.label_settings.font_color = get_theme_color(&"font_color", &"Label") + copyright_label.label_settings.font_color = get_theme_color(&"font_color", &"Label") create_donors() license_tabs.add_tab("Pixelorama") license_tabs.add_tab("Godot") @@ -249,6 +254,14 @@ func _ready() -> void: license_text.text = licenses[0] +func _notification(what: int) -> void: + if not is_instance_valid(pixelorama_slogan): + return + if what == NOTIFICATION_THEME_CHANGED: + pixelorama_slogan.label_settings.font_color = get_theme_color(&"font_color", &"Label") + copyright_label.label_settings.font_color = get_theme_color(&"font_color", &"Label") + + func _on_AboutDialog_about_to_show() -> void: title = tr("About Pixelorama") + " " + Global.current_version From 1ed52903b38e5eeb925d1529d2b3d4370b77b404 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:30:16 +0300 Subject: [PATCH 13/47] Implement the ability to change the font of a 3D text This code will also be useful for the text tool --- Translations/Translations.pot | 4 +++ src/Autoload/Global.gd | 32 +++++++++++++++++++-- src/Classes/Cel3DObject.gd | 2 ++ src/Tools/3DTools/3DShapeEdit.gd | 15 ++++++++++ src/Tools/3DTools/3DShapeEdit.tscn | 45 +++++++++++++++++++----------- 5 files changed, 79 insertions(+), 19 deletions(-) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index 8afcb498e..bc63b953c 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -828,6 +828,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 98444e866..46f430172 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -163,6 +163,9 @@ var default_layouts: Array[DockableLayout] = [ preload("res://assets/layouts/Tallscreen.tres"), ] var layouts: Array[DockableLayout] = [] +var loaded_fonts: Array[Font] = [ + ThemeDB.fallback_font, preload("res://assets/fonts/Roboto-Regular.ttf") +] # Canvas related stuff ## Tells if the user allowed to draw on the canvas. Usually it is temporarily set to @@ -604,7 +607,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") ## The control node (aka Main node). It has the [param Main.gd] script attached. @onready var control := get_tree().current_scene as Control - ## The project tabs bar. It has the [param Tabs.gd] script attached. @onready var tabs: TabBar = control.find_child("TabBar") ## Contains viewport of the main canvas. It has the [param ViewportContainer.gd] script attached. @@ -617,7 +619,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") @onready var camera: CanvasCamera = main_viewport.find_child("Camera2D") ## Transparent checker of the main canvas. It has the [param TransparentChecker.gd] script attached. @onready var transparent_checker: ColorRect = control.find_child("TransparentChecker") - ## The perspective editor. It has the [param PerspectiveEditor.gd] script attached. @onready var perspective_editor := control.find_child("Perspective Editor") ## The top menu container. It has the [param TopMenuContainer.gd] script attached. @@ -634,7 +635,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") @onready var cel_vbox: VBoxContainer = animation_timeline.find_child("CelVBox") ## The container of animation tags. @onready var tag_container: Control = animation_timeline.find_child("TagContainer") - ## The brushes popup dialog used to display brushes. ## It has the [param BrushesPopup.gd] script attached. @onready var brushes_popup: Popup = control.find_child("BrushesPopup") @@ -1028,6 +1028,32 @@ func find_nearest_locale(locale: String) -> String: return closest_locale +func get_available_font_names() -> PackedStringArray: + var font_names := PackedStringArray() + for font in loaded_fonts: + var font_name := font.get_font_name() + if font_name in font_names: + continue + font_names.append(font_name) + for system_font_name in OS.get_system_fonts(): + if system_font_name in font_names: + continue + font_names.append(system_font_name) + return font_names + + +func find_font_from_name(font_name: String) -> Font: + for font in loaded_fonts: + if font.get_font_name() == font_name: + return font + for system_font_name in OS.get_system_fonts(): + if system_font_name == font_name: + var system_font := SystemFont.new() + system_font.font_names = [font_name] + return system_font + return ThemeDB.fallback_font + + ## Used by undo/redo operations to store compressed images in memory. ## [param redo_data] and [param undo_data] are Dictionaries, ## with keys of type [Image] and [Dictionary] values, coming from [member Image.data]. diff --git a/src/Classes/Cel3DObject.gd b/src/Classes/Cel3DObject.gd index e1bd67455..b988d51ec 100644 --- a/src/Classes/Cel3DObject.gd +++ b/src/Classes/Cel3DObject.gd @@ -93,6 +93,7 @@ func serialize() -> Dictionary: dict["mesh_ring_segments"] = mesh.ring_segments dict["mesh_rings"] = mesh.rings Type.TEXT: + dict["mesh_font_name"] = mesh.font.get_font_name() dict["mesh_text"] = mesh.text dict["mesh_pixel_size"] = mesh.pixel_size dict["mesh_font_size"] = mesh.font_size @@ -156,6 +157,7 @@ func deserialize(dict: Dictionary) -> void: mesh.ring_segments = dict["mesh_ring_segments"] mesh.rings = dict["mesh_rings"] Type.TEXT: + mesh.font = Global.find_font_from_name(dict["mesh_font_name"]) mesh.text = dict["mesh_text"] mesh.pixel_size = dict["mesh_pixel_size"] mesh.font_size = dict["mesh_font_size"] diff --git a/src/Tools/3DTools/3DShapeEdit.gd b/src/Tools/3DTools/3DShapeEdit.gd index 939dcd637..8e3c8a348 100644 --- a/src/Tools/3DTools/3DShapeEdit.gd +++ b/src/Tools/3DTools/3DShapeEdit.gd @@ -58,6 +58,7 @@ var _object_names := { "node3d_type:mesh:top_radius": $"%MeshTopRadius", "node3d_type:mesh:bottom_radius": $"%MeshBottomRadius", "node3d_type:mesh:text": $"%MeshText", + "node3d_type:mesh:font": $"%MeshFont", "node3d_type:mesh:pixel_size": $"%MeshPixelSize", "node3d_type:mesh:font_size": $"%MeshFontSize", "node3d_type:mesh:offset": $"%MeshOffsetV2", @@ -98,6 +99,10 @@ func _ready() -> void: for object in _object_names: new_object_popup.add_item(_object_names[object], object) new_object_popup.id_pressed.connect(_new_object_popup_id_pressed) + # Load font names + for font_name in Global.get_available_font_names(): + $"%MeshFont".add_item(font_name) + # Connect the signals of the cel property nodes for prop in cel_properties: var node: Control = cel_properties[prop] if node is ValueSliderV3: @@ -108,6 +113,7 @@ func _ready() -> void: node.item_selected.connect(_cel_property_item_selected.bind(prop)) elif node is ColorPickerButton: node.color_changed.connect(_cel_property_color_changed.bind(prop)) + # Connect the signals of the object property nodes for prop in object_properties: var node: Control = object_properties[prop] if node is ValueSliderV3: @@ -365,6 +371,13 @@ func _set_node_values(to_edit: Object, properties: Dictionary) -> void: continue if "scale" in prop: value *= 100 + if value is Font: + var font_name: String = value.get_font_name() + value = 0 + for i in %MeshFont.item_count: + var item_name: String = %MeshFont.get_item_text(i) + if font_name == item_name: + value = i var node: Control = properties[prop] if node is Range or node is ValueSliderV3 or node is ValueSliderV2: if typeof(node.value) != typeof(value) and typeof(value) != TYPE_INT: @@ -393,6 +406,8 @@ func _set_value_from_node(to_edit: Object, value, prop: String) -> void: to_edit = to_edit.node3d_type.mesh if "scale" in prop: value /= 100 + if "font" in prop and not "font_" in prop: + value = Global.find_font_from_name(%MeshFont.get_item_text(value)) to_edit.set_indexed(prop, value) diff --git a/src/Tools/3DTools/3DShapeEdit.tscn b/src/Tools/3DTools/3DShapeEdit.tscn index c2bbda60a..8902c834c 100644 --- a/src/Tools/3DTools/3DShapeEdit.tscn +++ b/src/Tools/3DTools/3DShapeEdit.tscn @@ -510,13 +510,26 @@ custom_minimum_size = Vector2(150, 50) layout_mode = 2 size_flags_horizontal = 3 -[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"] +[node name="MeshFontLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="22"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Font:" +clip_text = true + +[node name="MeshFont" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="23"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 +selected = 0 + +[node name="MeshPixelSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"] layout_mode = 2 size_flags_horizontal = 3 text = "Pixel size:" clip_text = true -[node name="MeshPixelSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="23"] +[node name="MeshPixelSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="25"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -536,13 +549,13 @@ stretch_margin_bottom = 3 script = ExtResource("5") snap_step = 0.01 -[node name="MeshFontSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="24"] +[node name="MeshFontSizeLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"] layout_mode = 2 size_flags_horizontal = 3 text = "Font size:" clip_text = true -[node name="MeshFontSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="25"] +[node name="MeshFontSize" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="27"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -561,13 +574,13 @@ stretch_margin_bottom = 3 script = ExtResource("5") snap_step = 2.0 -[node name="MeshDepthLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="26"] +[node name="MeshDepthLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"] layout_mode = 2 size_flags_horizontal = 3 text = "Depth:" clip_text = true -[node name="MeshDepth" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="27"] +[node name="MeshDepth" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="29"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -585,13 +598,13 @@ stretch_margin_bottom = 3 script = ExtResource("5") snap_step = 2.0 -[node name="MeshOffsetLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="28"] +[node name="MeshOffsetLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="30"] layout_mode = 2 size_flags_horizontal = 3 text = "Offset:" clip_text = true -[node name="MeshOffsetV2" parent="ObjectOptions/MeshOptions/GridContainer" index="29" instance=ExtResource("3")] +[node name="MeshOffsetV2" parent="ObjectOptions/MeshOptions/GridContainer" index="31" instance=ExtResource("3")] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -601,13 +614,13 @@ allow_lesser = true show_ratio = true snap_step = 0.01 -[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="30"] +[node name="MeshCurveStepLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="32"] layout_mode = 2 size_flags_horizontal = 3 text = "Curve step:" clip_text = true -[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="31"] +[node name="MeshCurveStep" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="33"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -626,13 +639,13 @@ stretch_margin_right = 3 stretch_margin_bottom = 3 script = ExtResource("5") -[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="32"] +[node name="MeshHorizontalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="34"] layout_mode = 2 size_flags_horizontal = 3 text = "Horizontal alignment:" clip_text = true -[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="33"] +[node name="MeshHorizontalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="35"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -647,13 +660,13 @@ popup/item_2/id = 2 popup/item_3/text = "Fill" popup/item_3/id = 3 -[node name="MeshVerticalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="34"] +[node name="MeshVerticalAlignmentLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="36"] layout_mode = 2 size_flags_horizontal = 3 text = "Vertical alignment:" clip_text = true -[node name="MeshVerticalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="35"] +[node name="MeshVerticalAlignment" type="OptionButton" parent="ObjectOptions/MeshOptions/GridContainer" index="37"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 @@ -666,13 +679,13 @@ popup/item_1/id = 1 popup/item_2/text = "Bottom" popup/item_2/id = 2 -[node name="MeshLineSpacingLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="36"] +[node name="MeshLineSpacingLabel" type="Label" parent="ObjectOptions/MeshOptions/GridContainer" index="38"] layout_mode = 2 size_flags_horizontal = 3 text = "Line spacing:" clip_text = true -[node name="MeshLineSpacing" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="37"] +[node name="MeshLineSpacing" type="TextureProgressBar" parent="ObjectOptions/MeshOptions/GridContainer" index="39"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 From c21e089e5829ecb0ee3df36401c2766b6980d485 Mon Sep 17 00:00:00 2001 From: Variable <77773850+Variable-ind@users.noreply.github.com> Date: Sun, 13 Oct 2024 03:57:10 +0500 Subject: [PATCH 14/47] Add alpha erase blend mode (#1117) * Add alpha erase blend mode * implemented suggestions --- src/Classes/Layers/BaseLayer.gd | 1 + src/Shaders/BlendLayers.gdshader | 48 ++++++++++++++++------------ src/UI/Timeline/AnimationTimeline.gd | 1 + src/UI/Timeline/LayerProperties.gd | 1 + 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/Classes/Layers/BaseLayer.gd b/src/Classes/Layers/BaseLayer.gd index d45ba7333..bd67c1d50 100644 --- a/src/Classes/Layers/BaseLayer.gd +++ b/src/Classes/Layers/BaseLayer.gd @@ -12,6 +12,7 @@ signal visibility_changed ## Emits when [member visible] is changed. enum BlendModes { PASS_THROUGH = -2, ## Only for group layers. Ignores group blending, like it doesn't exist. NORMAL = 0, ## The blend layer colors are simply placed on top of the base colors. + ERASE, ## Subtracts the numerical value of alpha from the base alpha. DARKEN, ## Keeps the darker colors between the blend and the base layers. MULTIPLY, ## Multiplies the numerical values of the two colors, giving a darker result. COLOR_BURN, ## Darkens by increasing the contrast between the blend and base colors. diff --git a/src/Shaders/BlendLayers.gdshader b/src/Shaders/BlendLayers.gdshader index 974394e3f..5db7d8f32 100644 --- a/src/Shaders/BlendLayers.gdshader +++ b/src/Shaders/BlendLayers.gdshader @@ -61,68 +61,74 @@ vec4 blend(int blend_type, vec4 current_color, vec4 prev_color, float opacity) { return prev_color; } vec4 result; + bool should_blend_alpha = true; switch(blend_type) { - case 1: // Darken + case 1: // Erase + result = prev_color; + result.a -= current_color.a; // clamping will be done at the end so not doing it here. + should_blend_alpha = false; + break; + case 2: // Darken result.rgb = min(prev_color.rgb, current_color.rgb); break; - case 2: // Multiply + case 3: // Multiply result.rgb = prev_color.rgb * current_color.rgb; break; - case 3: // Color burn + case 4: // Color burn result.rgb = 1.0 - (1.0 - prev_color.rgb) / current_color.rgb; break; - case 4: // Linear burn + case 5: // Linear burn result.rgb = prev_color.rgb + current_color.rgb - 1.0; break; - case 5: // Lighten + case 6: // Lighten result.rgb = max(prev_color.rgb, current_color.rgb); break; - case 6: // Screen + case 7: // Screen result.rgb = 1.0 - (1.0 - prev_color.rgb) * (1.0 - current_color.rgb); break; - case 7: // Color dodge + case 8: // Color dodge result.rgb = prev_color.rgb / (1.0 - current_color.rgb); break; - case 8: // Add (linear dodge) + case 9: // Add (linear dodge) result.rgb = prev_color.rgb + current_color.rgb; break; - case 9: // Overlay + case 10: // Overlay result.rgb = mix(2.0 * prev_color.rgb * current_color.rgb, 1.0 - 2.0 * (1.0 - current_color.rgb) * (1.0 - prev_color.rgb), round(prev_color.rgb)); break; - case 10: // Soft light + case 11: // Soft light result.rgb = mix(2.0 * prev_color.rgb * current_color.rgb + prev_color.rgb * prev_color.rgb * (1.0 - 2.0 * current_color.rgb), sqrt(prev_color.rgb) * (2.0 * current_color.rgb - 1.0) + (2.0 * prev_color.rgb) * (1.0 - current_color.rgb), round(prev_color.rgb)); break; - case 11: // Hard light + case 12: // Hard light result.rgb = mix(2.0 * prev_color.rgb * current_color.rgb, 1.0 - 2.0 * (1.0 - current_color.rgb) * (1.0 - prev_color.rgb), round(current_color.rgb)); break; - case 12: // Difference + case 13: // Difference result.rgb = abs(prev_color.rgb - current_color.rgb); break; - case 13: // Exclusion + case 14: // Exclusion result.rgb = prev_color.rgb + current_color.rgb - 2.0 * prev_color.rgb * current_color.rgb; break; - case 14: // Subtract + case 15: // Subtract result.rgb = prev_color.rgb - current_color.rgb; break; - case 15: // Divide + case 16: // Divide result.rgb = prev_color.rgb / current_color.rgb; break; - case 16: // Hue + case 17: // Hue vec3 current_hsl = rgb_to_hsl(current_color.rgb); vec3 prev_hsl = rgb_to_hsl(prev_color.rgb); result.rgb = hsl_to_rgb(vec3(current_hsl.r, prev_hsl.g, prev_hsl.b)); break; - case 17: // Saturation + case 18: // Saturation vec3 current_hsl = rgb_to_hsl(current_color.rgb); vec3 prev_hsl = rgb_to_hsl(prev_color.rgb); result.rgb = hsl_to_rgb(vec3(prev_hsl.r, current_hsl.g, prev_hsl.b)); break; - case 18: // Color + case 19: // Color vec3 current_hsl = rgb_to_hsl(current_color.rgb); vec3 prev_hsl = rgb_to_hsl(prev_color.rgb); result.rgb = hsl_to_rgb(vec3(current_hsl.r, current_hsl.g, prev_hsl.b)); break; - case 19: // Luminosity + case 20: // Luminosity vec3 current_hsl = rgb_to_hsl(current_color.rgb); vec3 prev_hsl = rgb_to_hsl(prev_color.rgb); result.rgb = hsl_to_rgb(vec3(prev_hsl.r, prev_hsl.g, current_hsl.b)); @@ -132,7 +138,9 @@ vec4 blend(int blend_type, vec4 current_color, vec4 prev_color, float opacity) { break; } result.rgb = mix(prev_color.rgb, result.rgb, current_color.a); - result.a = prev_color.a * (1.0 - current_color.a) + current_color.a; + if (should_blend_alpha){ + result.a = prev_color.a * (1.0 - current_color.a) + current_color.a; + } result = clamp(result, 0.0, 1.0); return mix(current_color, result, prev_color.a); } diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index a26b9acaa..2b126738d 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -239,6 +239,7 @@ func _fill_blend_modes_option_button() -> void: # Special blend mode that appears only when group layers are selected blend_modes_button.add_item("Pass through", BaseLayer.BlendModes.PASS_THROUGH) blend_modes_button.add_item("Normal", BaseLayer.BlendModes.NORMAL) + blend_modes_button.add_item("Erase", BaseLayer.BlendModes.ERASE) blend_modes_button.add_separator("Darken") blend_modes_button.add_item("Darken", BaseLayer.BlendModes.DARKEN) blend_modes_button.add_item("Multiply", BaseLayer.BlendModes.MULTIPLY) diff --git a/src/UI/Timeline/LayerProperties.gd b/src/UI/Timeline/LayerProperties.gd index eb58bdff9..f8753ac85 100644 --- a/src/UI/Timeline/LayerProperties.gd +++ b/src/UI/Timeline/LayerProperties.gd @@ -39,6 +39,7 @@ func _fill_blend_modes_option_button() -> void: # Special blend mode that appears only when group layers are selected blend_modes_button.add_item("Pass through", BaseLayer.BlendModes.PASS_THROUGH) blend_modes_button.add_item("Normal", BaseLayer.BlendModes.NORMAL) + blend_modes_button.add_item("Erase", BaseLayer.BlendModes.ERASE) blend_modes_button.add_item("Darken", BaseLayer.BlendModes.DARKEN) blend_modes_button.add_item("Multiply", BaseLayer.BlendModes.MULTIPLY) blend_modes_button.add_item("Color burn", BaseLayer.BlendModes.COLOR_BURN) From 084bdcccb14d4870a18437e814fb0bff13fb01e6 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sun, 13 Oct 2024 02:06:24 +0300 Subject: [PATCH 15/47] Use gdtoolkit's GitHub Action --- .github/workflows/static-checks.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/static-checks.yml b/.github/workflows/static-checks.yml index 7bf2fb610..4f386ff2b 100644 --- a/.github/workflows/static-checks.yml +++ b/.github/workflows/static-checks.yml @@ -19,8 +19,7 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Install gdtoolkit - run: pip3 install "gdtoolkit==4.*" + - uses: Scony/godot-gdscript-toolkit@master - name: Formatting checks run: gdformat --diff . - name: Linting checks From a2e5d165cb2e67845434cbd1d19abfa0b8f80b2d Mon Sep 17 00:00:00 2001 From: HuanWuCode Date: Sun, 13 Oct 2024 04:03:52 -0700 Subject: [PATCH 16/47] [skip ci] Update PerspectiveEditor.gd (#1119) --- src/UI/PerspectiveEditor/PerspectiveEditor.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/UI/PerspectiveEditor/PerspectiveEditor.gd b/src/UI/PerspectiveEditor/PerspectiveEditor.gd index 8db7402d5..bc0eae541 100644 --- a/src/UI/PerspectiveEditor/PerspectiveEditor.gd +++ b/src/UI/PerspectiveEditor/PerspectiveEditor.gd @@ -2,7 +2,7 @@ extends PanelContainer var axes: Node2D var do_pool := [] ## A pool that stores data of points removed by undo -var delete_pool := [] ## A pool that containing deleted data and their index +var delete_pool := [] ## A pool that contains deleted data and their index ## The vanishing point UI resource var vanishing_point_res := preload("res://src/UI/PerspectiveEditor/VanishingPoint.tscn") ## Option to show/hide tracker guides. (guides whose end points follow the mouse) @@ -73,7 +73,7 @@ func _update_points() -> void: # Delete old vanishing points for c in vanishing_point_container.get_children(): c.queue_free() - # Add the "updated" vanising points from the current_project + # Add the "updated" vanishing points from the current_project for idx in Global.current_project.vanishing_points.size(): # Create the point var vanishing_point := vanishing_point_res.instantiate() From 98997340906089abcc0ebba8a7e73a9e851ecdc0 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:22:01 +0300 Subject: [PATCH 17/47] Ensure that the preview clears when switching to a different tool --- src/Tools/BaseTool.gd | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Tools/BaseTool.gd b/src/Tools/BaseTool.gd index c022e0437..519f5aa49 100644 --- a/src/Tools/BaseTool.gd +++ b/src/Tools/BaseTool.gd @@ -374,3 +374,4 @@ func _add_polylines_segment(lines: Array, start: Vector2i, end: Vector2i) -> voi func _exit_tree() -> void: if is_moving: draw_end(Global.canvas.current_pixel.floor()) + Global.canvas.previews_sprite.texture = null From 37f48e3372b5a3886d471340df421dfa38059c70 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:42:41 +0300 Subject: [PATCH 18/47] [skip ci] Update CHANGELOG.md --- CHANGELOG.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05fe9a413..a8dd8fe71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,13 +11,23 @@ Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind)) Built using Godot 4.3 ### Added +- It is now possible to make panels into floating windows. This allows for any panel in the user interface to be its own window, and if single window mode is disabled, you can move these windows anywhere you want. This is especially useful for multi-monitor setups. +- Added a new "color replace" mode to the Shading tool, that uses the colors of the palette to apply shading. [#1107](https://github.com/Orama-Interactive/Pixelorama/pull/1107) +- Added a new Erase blend mode. [#1117](https://github.com/Orama-Interactive/Pixelorama/pull/1117) +- It is now possible to change the font, depth and line spacing of 3D text. - Clipping to selecting during export is now possible. [#1113](https://github.com/Orama-Interactive/Pixelorama/pull/1113) -- Added hotkeys to switch between tabs. [#1109](https://github.com/Orama-Interactive/Pixelorama/pull/1109) +- Added hotkeys to switch between tabs. Control+Tab to go to the next project tab, and Control+Shift+Tab to go to the previous. [#1109](https://github.com/Orama-Interactive/Pixelorama/pull/1109) +- Added menus next to each of the two mirroring buttons in the Global Tool Options, that allow users to automatically move the symmetry guides to the center of the canvas, or the view center. +- A new Reset category has been added to the Preferences that lets users easily restore certain options. ### Fixed - The move tool preview is now properly aligned to the pixel grid. - Camera zoom is now being preserved when switching between projects. - Projects are no longer being saved with the wrong name in the Web version. +- Fixed 3D Shape Edit tool option values not updating when switching between 3D objects. +- Tool previews are now being properly cleared when switching to other tools before finishing the action being performed by the previous tool. +- Fixed icons not being set to the correct color when launching Pixelorama with the dark theme. +- Fixed some text in the About dialog not having the text color of the theme. - The dynamics dialog is now set to its correct size when something is made visible or invisible. [#1104](https://github.com/Orama-Interactive/Pixelorama/pull/1104) - The color picker values no longer change when using RAW mode. [#1108](https://github.com/Orama-Interactive/Pixelorama/pull/1108) - Fixed some icon stretch and expand modes in the UI. [#1103](https://github.com/Orama-Interactive/Pixelorama/pull/1103) From fe5ced80854e972d4215df4e1704461990c50c02 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:55:48 +0300 Subject: [PATCH 19/47] Set the backup confirmation dialog's `popup_window` to false --- src/Main.tscn | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Main.tscn b/src/Main.tscn index ba4c1a8d4..1dfb9224e 100644 --- a/src/Main.tscn +++ b/src/Main.tscn @@ -74,7 +74,6 @@ dialog_text = "This is an error message!" [node name="BackupConfirmation" type="ConfirmationDialog" parent="Dialogs"] size = Vector2i(320, 200) -popup_window = true dialog_text = "Autosaved project(s) from a crashed session were found. Do you want to recover the data?" dialog_autowrap = true From 4561c1fee4deed80d79149a9ec54e2ab45cb7107 Mon Sep 17 00:00:00 2001 From: Variable <77773850+Variable-ind@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:08:10 +0500 Subject: [PATCH 20/47] improved rotate/flip brush UI (#1105) * Update BaseDraw.tscn * Update BaseDraw.gd * Implemented proposed changed, Also added a VFlowContainer for Rotate options --- src/Tools/BaseDraw.gd | 10 +++---- src/Tools/BaseDraw.tscn | 65 ++++++++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/Tools/BaseDraw.gd b/src/Tools/BaseDraw.gd index 83ff42273..bfcadbe3c 100644 --- a/src/Tools/BaseDraw.gd +++ b/src/Tools/BaseDraw.gd @@ -130,11 +130,11 @@ func set_config(config: Dictionary) -> void: func update_config() -> void: $Brush/BrushSize.value = _brush_size $ColorInterpolation.value = _brush_interpolate - $RotationOptions/Flip/FlipX.button_pressed = _brush_flip_x - $RotationOptions/Flip/FlipY.button_pressed = _brush_flip_y - $RotationOptions/Rotate/Rotate90.button_pressed = _brush_rotate_90 - $RotationOptions/Rotate/Rotate180.button_pressed = _brush_rotate_180 - $RotationOptions/Rotate/Rotate270.button_pressed = _brush_rotate_270 + %FlipX.button_pressed = _brush_flip_x + %FlipY.button_pressed = _brush_flip_y + %Rotate90.button_pressed = _brush_rotate_90 + %Rotate180.button_pressed = _brush_rotate_180 + %Rotate270.button_pressed = _brush_rotate_270 update_brush() diff --git a/src/Tools/BaseDraw.tscn b/src/Tools/BaseDraw.tscn index 69eedb916..fc6872696 100644 --- a/src/Tools/BaseDraw.tscn +++ b/src/Tools/BaseDraw.tscn @@ -9,7 +9,7 @@ resource_name = "rotate" allow_unpress = true -[sub_resource type="StyleBoxFlat" id="1"] +[sub_resource type="StyleBoxFlat" id="2"] bg_color = Color(1, 1, 1, 1) border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 @@ -18,7 +18,7 @@ corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[sub_resource type="StyleBoxFlat" id="2"] +[sub_resource type="StyleBoxFlat" id="1"] bg_color = Color(1, 1, 1, 1) border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 @@ -38,44 +38,63 @@ script = ExtResource("3_76bek") text = "Rotation options" flat = true -[node name="Flip" type="HBoxContainer" parent="RotationOptions" index="1"] +[node name="GridContainer" type="GridContainer" parent="RotationOptions" index="1"] visible = false layout_mode = 2 +columns = 2 -[node name="FlipX" type="CheckBox" parent="RotationOptions/Flip" index="0"] +[node name="FlipLabel" type="Label" parent="RotationOptions/GridContainer" index="0"] +layout_mode = 2 +text = "Flip:" + +[node name="Flip" type="HBoxContainer" parent="RotationOptions/GridContainer" index="1"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="FlipX" type="CheckBox" parent="RotationOptions/GridContainer/Flip" index="0"] +unique_name_in_owner = true layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Flip X" +text = "X" -[node name="FlipY" type="CheckBox" parent="RotationOptions/Flip" index="1"] +[node name="FlipY" type="CheckBox" parent="RotationOptions/GridContainer/Flip" index="1"] +unique_name_in_owner = true layout_mode = 2 mouse_default_cursor_shape = 2 -text = "Flip Y" +text = "Y" -[node name="Rotate" type="HBoxContainer" parent="RotationOptions" index="2"] -visible = false +[node name="RotateLabel" type="Label" parent="RotationOptions/GridContainer" index="2"] layout_mode = 2 +size_flags_vertical = 0 +text = "Rotate:" -[node name="Rotate90" type="CheckBox" parent="RotationOptions/Rotate" index="0"] +[node name="Rotate" type="HFlowContainer" parent="RotationOptions/GridContainer" index="3"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="Rotate90" type="CheckBox" parent="RotationOptions/GridContainer/Rotate" index="0"] +unique_name_in_owner = true layout_mode = 2 tooltip_text = "rotate the brush 90 degrees" mouse_default_cursor_shape = 2 button_group = SubResource("ButtonGroup_7u3x0") -text = "R 90" +text = "90°" -[node name="Rotate180" type="CheckBox" parent="RotationOptions/Rotate" index="1"] +[node name="Rotate180" type="CheckBox" parent="RotationOptions/GridContainer/Rotate" index="1"] +unique_name_in_owner = true layout_mode = 2 tooltip_text = "rotate the brush 180 degrees" mouse_default_cursor_shape = 2 button_group = SubResource("ButtonGroup_7u3x0") -text = "R 180" +text = "180°" -[node name="Rotate270" type="CheckBox" parent="RotationOptions/Rotate" index="2"] +[node name="Rotate270" type="CheckBox" parent="RotationOptions/GridContainer/Rotate" index="2"] +unique_name_in_owner = true layout_mode = 2 tooltip_text = "rotate the brush 270 degrees" mouse_default_cursor_shape = 2 button_group = SubResource("ButtonGroup_7u3x0") -text = "R 270" +text = "270°" [node name="Brush" type="HBoxContainer" parent="." index="3"] layout_mode = 2 @@ -87,11 +106,11 @@ layout_mode = 2 size_flags_horizontal = 0 tooltip_text = "Select a brush" mouse_default_cursor_shape = 2 -theme_override_styles/normal = SubResource("1") +theme_override_styles/focus = SubResource("2") +theme_override_styles/disabled = SubResource("2") theme_override_styles/hover = SubResource("1") theme_override_styles/pressed = SubResource("1") -theme_override_styles/disabled = SubResource("2") -theme_override_styles/focus = SubResource("2") +theme_override_styles/normal = SubResource("1") [node name="Texture" type="TextureRect" parent="Brush/Type" index="0"] layout_mode = 0 @@ -117,11 +136,11 @@ layout_mode = 2 tooltip_text = "0: Color from the brush itself, 100: the currently selected color" prefix = "Brush color from:" -[connection signal="toggled" from="RotationOptions/Flip/FlipX" to="." method="_on_flip_x_toggled"] -[connection signal="toggled" from="RotationOptions/Flip/FlipY" to="." method="_on_flip_y_toggled"] -[connection signal="toggled" from="RotationOptions/Rotate/Rotate90" to="." method="_on_rotate_90_toggled"] -[connection signal="toggled" from="RotationOptions/Rotate/Rotate180" to="." method="_on_rotate_180_toggled"] -[connection signal="toggled" from="RotationOptions/Rotate/Rotate270" to="." method="_on_rotate_270_toggled"] +[connection signal="toggled" from="RotationOptions/GridContainer/Flip/FlipX" to="." method="_on_flip_x_toggled"] +[connection signal="toggled" from="RotationOptions/GridContainer/Flip/FlipY" to="." method="_on_flip_y_toggled"] +[connection signal="toggled" from="RotationOptions/GridContainer/Rotate/Rotate90" to="." method="_on_rotate_90_toggled"] +[connection signal="toggled" from="RotationOptions/GridContainer/Rotate/Rotate180" to="." method="_on_rotate_180_toggled"] +[connection signal="toggled" from="RotationOptions/GridContainer/Rotate/Rotate270" to="." method="_on_rotate_270_toggled"] [connection signal="pressed" from="Brush/Type" to="." method="_on_BrushType_pressed"] [connection signal="value_changed" from="Brush/BrushSize" to="." method="_on_BrushSize_value_changed"] [connection signal="value_changed" from="ColorInterpolation" to="." method="_on_InterpolateFactor_value_changed"] From 1ae34bf57abd1688eb46d43ee027266585c91cf5 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:31:04 +0300 Subject: [PATCH 21/47] Use an anchor and offset preset for the CollapsibleContainer's texture rect --- src/UI/Nodes/CollapsibleContainer.gd | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/UI/Nodes/CollapsibleContainer.gd b/src/UI/Nodes/CollapsibleContainer.gd index 61bf7dc96..d311e8b0c 100644 --- a/src/UI/Nodes/CollapsibleContainer.gd +++ b/src/UI/Nodes/CollapsibleContainer.gd @@ -33,12 +33,9 @@ func _ready() -> void: _button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND _button.toggled.connect(set_visible_children) add_child(_button, false, Node.INTERNAL_MODE_FRONT) - _texture_rect.anchor_top = 0.5 - _texture_rect.anchor_bottom = 0.5 - _texture_rect.offset_left = 2 - _texture_rect.offset_top = -6 - _texture_rect.offset_right = 14 - _texture_rect.offset_bottom = 6 + _texture_rect.set_anchors_and_offsets_preset( + Control.PRESET_CENTER_LEFT, Control.PRESET_MODE_MINSIZE + ) _texture_rect.rotation_degrees = -90 _texture_rect.pivot_offset = Vector2(6, 6) _texture_rect.add_to_group("UIButtons") From 3863cbaee7303d13f8ed5300c78b60b4fca42352 Mon Sep 17 00:00:00 2001 From: Variable <77773850+Variable-ind@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:00:20 +0500 Subject: [PATCH 22/47] Add a preference to share options between tools (#1120) * Add share config button * fill parameter now saves with curve tool * rename _fill to _fill_inside for sync consistency (fill in pencil and shape tools basically represent the same thing) * add icon * Move the option to the preferences * Add string to Translations.pot * Re-introduce `is_syncing` --------- Co-authored-by: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> --- Translations/Translations.pot | 4 ++ src/Autoload/Global.gd | 4 ++ src/Autoload/Tools.gd | 40 ++++++++++++ src/Preferences/PreferencesDialog.gd | 10 ++- src/Preferences/PreferencesDialog.tscn | 63 +++++++++++++------ src/Tools/BaseDraw.gd | 30 ++++++--- src/Tools/BaseShapeDrawer.gd | 12 ++-- src/Tools/BaseTool.gd | 3 + src/Tools/DesignTools/CurveTool.gd | 9 ++- src/Tools/DesignTools/Pencil.gd | 5 +- .../GlobalToolOptions/GlobalToolOptions.tscn | 2 + 11 files changed, 141 insertions(+), 41 deletions(-) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index bc63b953c..561aae0a7 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -898,6 +898,10 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + msgid "Left tool color:" msgstr "" diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 46f430172..5d89cdb28 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -276,6 +276,10 @@ var tool_button_size := ButtonSize.SMALL: return tool_button_size = value Tools.set_button_size(tool_button_size) +var share_options_between_tools := false: + set(value): + share_options_between_tools = value + Tools.attempt_config_share(MOUSE_BUTTON_LEFT) ## Found in Preferences. The left tool color. var left_tool_color := Color("0086cf"): set(value): diff --git a/src/Autoload/Tools.gd b/src/Autoload/Tools.gd index 3615c2cad..b236f3d7a 100644 --- a/src/Autoload/Tools.gd +++ b/src/Autoload/Tools.gd @@ -2,6 +2,8 @@ extends Node signal color_changed(color: Color, button: int) +signal config_changed(slot_idx: int, config: Dictionary) +@warning_ignore("unused_signal") signal flip_rotated(flip_x, flip_y, rotate_90, rotate_180, rotate_270) signal options_reset @@ -373,6 +375,34 @@ func _ready() -> void: _show_relevant_tools(layer_type) +## Syncs the other tool using the config of tool located at [param from_idx].[br] +## NOTE: For optimization, if there is already a ready made config available, then we will use that +## instead of re-calculating the config, else we have no choice but to re-generate it +func attempt_config_share(from_idx: int, config: Dictionary = {}) -> void: + if not Global.share_options_between_tools: + return + if _slots.is_empty(): + return + if config.is_empty() and _slots[from_idx]: + var from_slot: Slot = _slots.get(from_idx, null) + if from_slot: + var from_tool = from_slot.tool_node + if from_tool.has_method("get_config"): + config = from_tool.get_config() + var target_slot: Slot = _slots.get(MOUSE_BUTTON_LEFT, null) + if from_idx == MOUSE_BUTTON_LEFT: + target_slot = _slots.get(MOUSE_BUTTON_RIGHT, null) + if is_instance_valid(target_slot): + if ( + target_slot.tool_node.has_method("set_config") + and target_slot.tool_node.has_method("update_config") + ): + target_slot.tool_node.set("is_syncing", true) + target_slot.tool_node.set_config(config) + target_slot.tool_node.update_config() + target_slot.tool_node.set("is_syncing", false) + + func reset_options() -> void: default_color() assign_tool(get_tool(MOUSE_BUTTON_LEFT).tool_node.name, MOUSE_BUTTON_LEFT, true) @@ -401,9 +431,13 @@ func remove_tool(t: Tool) -> void: func set_tool(tool_name: String, button: int) -> void: + # To prevent any unintentional syncing, we will temporarily disconnect the signal + if config_changed.is_connected(attempt_config_share): + config_changed.disconnect(attempt_config_share) var slot: Slot = _slots[button] var panel: Node = _panels[button] var node: Node = tools[tool_name].instantiate_scene() + var config_slot := MOUSE_BUTTON_LEFT if button == MOUSE_BUTTON_RIGHT else MOUSE_BUTTON_RIGHT if button == MOUSE_BUTTON_LEFT: # As guides are only moved with left mouse if tool_name == "Pan": # tool you want to give more access at guides Global.move_guides_on_canvas = true @@ -422,6 +456,12 @@ func set_tool(tool_name: String, button: int) -> void: elif button == MOUSE_BUTTON_RIGHT: _right_tools_per_layer_type[_curr_layer_type] = tool_name + # Wait for config to get loaded, then re-connect and sync + await get_tree().process_frame + if not config_changed.is_connected(attempt_config_share): + config_changed.connect(attempt_config_share) + attempt_config_share(config_slot) # Sync it with the other tool + func get_tool(button: int) -> Slot: return _slots[button] diff --git a/src/Preferences/PreferencesDialog.gd b/src/Preferences/PreferencesDialog.gd index 1d96dcdee..074cdc7b6 100644 --- a/src/Preferences/PreferencesDialog.gd +++ b/src/Preferences/PreferencesDialog.gd @@ -36,10 +36,16 @@ var preferences: Array[Preference] = [ "custom_icon_color", "Interface/ButtonOptions/IconColorButton", "color", Color.GRAY ), Preference.new( - "left_tool_color", "Interface/ButtonOptions/LeftToolColorButton", "color", Color("0086cf") + "share_options_between_tools", + "Tools/ToolOptions/ShareOptionsCheckBox", + "button_pressed", + false ), Preference.new( - "right_tool_color", "Interface/ButtonOptions/RightToolColorButton", "color", Color("fd6d14") + "left_tool_color", "Tools/ToolOptions/LeftToolColorButton", "color", Color("0086cf") + ), + Preference.new( + "right_tool_color", "Tools/ToolOptions/RightToolColorButton", "color", Color("fd6d14") ), Preference.new( "tool_button_size", diff --git a/src/Preferences/PreferencesDialog.tscn b/src/Preferences/PreferencesDialog.tscn index d7092aae4..f252a4533 100644 --- a/src/Preferences/PreferencesDialog.tscn +++ b/src/Preferences/PreferencesDialog.tscn @@ -324,26 +324,6 @@ layout_mode = 2 mouse_default_cursor_shape = 2 color = Color(0.75, 0.75, 0.75, 1) -[node name="Label4" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -layout_mode = 2 -text = "Left tool color:" - -[node name="LeftToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -custom_minimum_size = Vector2(64, 20) -layout_mode = 2 -mouse_default_cursor_shape = 2 -color = Color(0, 0.52549, 0.811765, 1) - -[node name="Label5" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -layout_mode = 2 -text = "Right tool color:" - -[node name="RightToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/ButtonOptions"] -custom_minimum_size = Vector2(64, 20) -layout_mode = 2 -mouse_default_cursor_shape = 2 -color = Color(0.992157, 0.427451, 0.0784314, 1) - [node name="Canvas" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false layout_mode = 2 @@ -875,6 +855,49 @@ layout_mode = 2 mouse_default_cursor_shape = 2 color = Color(0, 0, 1, 1) +[node name="Tools" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] +visible = false +layout_mode = 2 + +[node name="ToolOptions" type="GridContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools"] +layout_mode = 2 +columns = 3 + +[node name="ShareOptionsLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Share options between the left and the right tools" + +[node name="ShareOptionsCheckBox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 +text = "On" + +[node name="LeftToolColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Left tool color:" + +[node name="LeftToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 +size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 +color = Color(0, 0.52549, 0.811765, 1) + +[node name="RightToolColorLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Right tool color:" + +[node name="RightToolColorButton" type="ColorPickerButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] +custom_minimum_size = Vector2(64, 20) +layout_mode = 2 +size_flags_horizontal = 3 +mouse_default_cursor_shape = 2 +color = Color(0.992157, 0.427451, 0.0784314, 1) + [node name="Selection" type="VBoxContainer" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide"] visible = false layout_mode = 2 diff --git a/src/Tools/BaseDraw.gd b/src/Tools/BaseDraw.gd index bfcadbe3c..be429d31a 100644 --- a/src/Tools/BaseDraw.gd +++ b/src/Tools/BaseDraw.gd @@ -71,14 +71,13 @@ func _on_Brush_selected(brush: Brushes.Brush) -> void: func _on_BrushSize_value_changed(value: float) -> void: - if _brush_size != int(value): - _brush_size = int(value) - _brush_size_dynamics = _brush_size - if Tools.dynamics_size != Tools.Dynamics.NONE: - _brush_size_dynamics = Tools.brush_size_min - _cache_limit = (_brush_size * _brush_size) * 3 # This equation seems the best match - update_config() - save_config() + _brush_size = int(value) + _brush_size_dynamics = _brush_size + if Tools.dynamics_size != Tools.Dynamics.NONE: + _brush_size_dynamics = Tools.brush_size_min + _cache_limit = (_brush_size * _brush_size) * 3 # This equation seems the best match + update_config() + save_config() func _reset_dynamics() -> void: @@ -113,6 +112,11 @@ func get_config() -> Dictionary: "brush_index": _brush.index, "brush_size": _brush_size, "brush_interpolate": _brush_interpolate, + "brush_flip_x": _brush_flip_x, + "brush_flip_y": _brush_flip_y, + "brush_rotate_90": _brush_rotate_90, + "brush_rotate_180": _brush_rotate_180, + "brush_rotate_270": _brush_rotate_270, } @@ -125,6 +129,11 @@ func set_config(config: Dictionary) -> void: if Tools.dynamics_size != Tools.Dynamics.NONE: _brush_size_dynamics = Tools.brush_size_min _brush_interpolate = config.get("brush_interpolate", _brush_interpolate) + _brush_flip_x = config.get("brush_flip_x", _brush_flip_x) + _brush_flip_y = config.get("brush_flip_y", _brush_flip_y) + _brush_rotate_90 = config.get("brush_rotate_90", _brush_rotate_90) + _brush_rotate_180 = config.get("brush_rotate_180", _brush_rotate_180) + _brush_rotate_270 = config.get("brush_rotate_270", _brush_rotate_270) func update_config() -> void: @@ -743,23 +752,28 @@ func _pick_color(pos: Vector2i) -> void: func _on_flip_x_toggled(button_pressed: bool) -> void: _brush_flip_x = button_pressed update_brush() + save_config() func _on_flip_y_toggled(button_pressed: bool) -> void: _brush_flip_y = button_pressed update_brush() + save_config() func _on_rotate_90_toggled(button_pressed: bool) -> void: _brush_rotate_90 = button_pressed update_brush() + save_config() func _on_rotate_180_toggled(button_pressed: bool) -> void: _brush_rotate_180 = button_pressed update_brush() + save_config() func _on_rotate_270_toggled(button_pressed: bool) -> void: _brush_rotate_270 = button_pressed update_brush() + save_config() diff --git a/src/Tools/BaseShapeDrawer.gd b/src/Tools/BaseShapeDrawer.gd index 54369d670..9544c7438 100644 --- a/src/Tools/BaseShapeDrawer.gd +++ b/src/Tools/BaseShapeDrawer.gd @@ -3,7 +3,7 @@ extends "res://src/Tools/BaseDraw.gd" var _start := Vector2i.ZERO var _offset := Vector2i.ZERO var _dest := Vector2i.ZERO -var _fill := false +var _fill_inside := false var _drawing := false var _displace_origin := false var _thickness := 1 @@ -41,27 +41,27 @@ func update_indicator() -> void: func _on_FillCheckbox_toggled(button_pressed: bool) -> void: - _fill = button_pressed + _fill_inside = button_pressed update_config() save_config() func get_config() -> Dictionary: var config := super.get_config() - config["fill"] = _fill + config["fill_inside"] = _fill_inside config["thickness"] = _thickness return config func set_config(config: Dictionary) -> void: super.set_config(config) - _fill = config.get("fill", _fill) + _fill_inside = config.get("fill_inside", _fill_inside) _thickness = config.get("thickness", _thickness) func update_config() -> void: super.update_config() - $FillCheckbox.button_pressed = _fill + $FillCheckbox.button_pressed = _fill_inside $ThicknessSlider.value = _thickness @@ -237,7 +237,7 @@ func _get_result_rect(origin: Vector2i, dest: Vector2i) -> Rect2i: func _get_points(shape_size: Vector2i) -> Array[Vector2i]: - return _get_shape_points_filled(shape_size) if _fill else _get_shape_points(shape_size) + return _get_shape_points_filled(shape_size) if _fill_inside else _get_shape_points(shape_size) func _set_cursor_text(rect: Rect2i) -> void: diff --git a/src/Tools/BaseTool.gd b/src/Tools/BaseTool.gd index 519f5aa49..23326db37 100644 --- a/src/Tools/BaseTool.gd +++ b/src/Tools/BaseTool.gd @@ -2,6 +2,7 @@ class_name BaseTool extends VBoxContainer var is_moving := false +var is_syncing := false var kname: String var tool_slot: Tools.Slot = null var cursor_text := "" @@ -34,6 +35,8 @@ func _ready() -> void: func save_config() -> void: var config := get_config() Global.config_cache.set_value(tool_slot.kname, kname, config) + if not is_syncing: # If the tool isn't busy syncing with another tool. + Tools.config_changed.emit(tool_slot.button, config) func load_config() -> void: diff --git a/src/Tools/DesignTools/CurveTool.gd b/src/Tools/DesignTools/CurveTool.gd index 80a1d3b81..9219c2bbc 100644 --- a/src/Tools/DesignTools/CurveTool.gd +++ b/src/Tools/DesignTools/CurveTool.gd @@ -2,7 +2,7 @@ extends "res://src/Tools/BaseDraw.gd" var _curve := Curve2D.new() ## The [Curve2D] responsible for the shape of the curve being drawn. var _drawing := false ## Set to true when a curve is being drawn. -var _fill := false ## When true, the inside area of the curve gets filled. +var _fill_inside := false ## When true, the inside area of the curve gets filled. var _fill_inside_rect := Rect2i() ## The bounding box that surrounds the area that gets filled. var _editing_bezier := false ## Needed to determine when to show the control points preview line. var _editing_out_control_point := false ## True when controlling the out control point only. @@ -29,7 +29,7 @@ func _on_thickness_value_changed(value: int) -> void: func _on_fill_checkbox_toggled(toggled_on: bool) -> void: - _fill = toggled_on + _fill_inside = toggled_on update_config() save_config() @@ -44,17 +44,20 @@ func update_indicator() -> void: func get_config() -> Dictionary: var config := super.get_config() + config["fill_inside"] = _fill_inside config["thickness"] = _thickness return config func set_config(config: Dictionary) -> void: super.set_config(config) + _fill_inside = config.get("fill_inside", _fill_inside) _thickness = config.get("thickness", _thickness) func update_config() -> void: super.update_config() + $FillCheckbox.button_pressed = _fill_inside $ThicknessSlider.value = _thickness @@ -188,7 +191,7 @@ func _draw_shape() -> void: _fill_inside_rect = _fill_inside_rect.expand(point) # Draw each point offsetted based on the shape's thickness _draw_pixel(point, images) - if _fill: + if _fill_inside: var v := Vector2i() for x in _fill_inside_rect.size.x: v.x = x + _fill_inside_rect.position.x diff --git a/src/Tools/DesignTools/Pencil.gd b/src/Tools/DesignTools/Pencil.gd index 5e80f654a..d4b7f0d76 100644 --- a/src/Tools/DesignTools/Pencil.gd +++ b/src/Tools/DesignTools/Pencil.gd @@ -50,6 +50,7 @@ func _on_SpacingMode_toggled(button_pressed: bool) -> void: func _on_Spacing_value_changed(value: Vector2) -> void: _spacing = value + save_config() func _input(event: InputEvent) -> void: @@ -58,10 +59,10 @@ func _input(event: InputEvent) -> void: if event.is_action_pressed("change_tool_mode"): _prev_mode = overwrite_button.button_pressed if event.is_action("change_tool_mode"): - overwrite_button.button_pressed = !_prev_mode + overwrite_button.set_pressed_no_signal(!_prev_mode) _overwrite = overwrite_button.button_pressed if event.is_action_released("change_tool_mode"): - overwrite_button.button_pressed = _prev_mode + overwrite_button.set_pressed_no_signal(_prev_mode) _overwrite = overwrite_button.button_pressed diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn index 9abe461b1..ba988ab9e 100644 --- a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn +++ b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn @@ -105,6 +105,8 @@ anchor_bottom = 0.5 offset_left = -22.0 offset_top = -10.0 offset_bottom = 10.0 +grow_horizontal = 0 +grow_vertical = 2 mouse_default_cursor_shape = 2 item_count = 2 popup/item_0/text = "Move to canvas center" From d894e9db860ddad9f82011baa9babcb2d8e3e267 Mon Sep 17 00:00:00 2001 From: Variable <77773850+Variable-ind@users.noreply.github.com> Date: Wed, 16 Oct 2024 18:30:30 +0500 Subject: [PATCH 23/47] Added Centre Canvas Option (#1123) * add a centre frame option * moved code to view menu * restore left over stuff * fix typo --- project.godot | 5 +++++ src/Autoload/Global.gd | 2 ++ src/UI/TopMenuContainer/TopMenuContainer.gd | 5 +++++ 3 files changed, 12 insertions(+) diff --git a/project.godot b/project.godot index 12285e151..dfbc256ed 100644 --- a/project.godot +++ b/project.godot @@ -903,6 +903,11 @@ previous_project={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +centre_canvas={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":67,"location":0,"echo":false,"script":null) +] +} [input_devices] diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 5d89cdb28..b4b14b1bc 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -27,6 +27,7 @@ enum FileMenu { NEW, OPEN, OPEN_LAST_PROJECT, RECENT, SAVE, SAVE_AS, EXPORT, EXP enum EditMenu { UNDO, REDO, COPY, CUT, PASTE, PASTE_IN_PLACE, DELETE, NEW_BRUSH, PREFERENCES } ## Enumeration of items present in the View Menu. enum ViewMenu { + CENTRE_CANVAS, TILE_MODE, TILE_MODE_OFFSETS, GREYSCALE_VIEW, @@ -750,6 +751,7 @@ func _initialize_keychain() -> void: &"palettize": Keychain.InputAction.new("", "Effects menu", true), &"pixelize": Keychain.InputAction.new("", "Effects menu", true), &"posterize": Keychain.InputAction.new("", "Effects menu", true), + &"centre_canvas": Keychain.InputAction.new("", "View menu", true), &"mirror_view": Keychain.InputAction.new("", "View menu", true), &"show_grid": Keychain.InputAction.new("", "View menu", true), &"show_pixel_grid": Keychain.InputAction.new("", "View menu", true), diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index f27505ef1..00cf248d7 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -206,6 +206,7 @@ func _setup_edit_menu() -> void: func _setup_view_menu() -> void: # Order as in Global.ViewMenu enum var view_menu_items := { + "Centre Canvas": "centre_canvas", "Tile Mode": "", "Tile Mode Offsets": "", "Grayscale View": "", @@ -226,6 +227,8 @@ func _setup_view_menu() -> void: _setup_snap_to_submenu(item) elif item == "Tile Mode Offsets": view_menu.add_item(item, i) + elif item == "Centre Canvas": + _set_menu_shortcut(view_menu_items[item], view_menu, i, item) else: _set_menu_shortcut(view_menu_items[item], view_menu, i, item, true) view_menu.set_item_checked(Global.ViewMenu.SHOW_RULERS, true) @@ -599,6 +602,8 @@ func edit_menu_id_pressed(id: int) -> void: func view_menu_id_pressed(id: int) -> void: match id: + Global.ViewMenu.CENTRE_CANVAS: + Global.camera.offset = Global.current_project.size / 2 Global.ViewMenu.TILE_MODE_OFFSETS: _popup_dialog(get_tree().current_scene.tile_mode_offsets_dialog) Global.ViewMenu.GREYSCALE_VIEW: From 4dc55e538e86a25a73d2b041d45f56165c2d070d Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 02:34:27 +0300 Subject: [PATCH 24/47] Fix issues when picking color with the bucket tool 1) The bucket tool now picks colors from the top-most layer, like the rest of the drawing tools. 2) Using the tool while moving the cursor and also holding the color picker shortcut (Alt by default), now picks colors instead of using the bucket tool. --- src/Tools/BaseDraw.gd | 29 ----------------------------- src/Tools/BaseTool.gd | 24 ++++++++++++++++++++++++ src/Tools/DesignTools/Bucket.gd | 30 +++++++++--------------------- 3 files changed, 33 insertions(+), 50 deletions(-) diff --git a/src/Tools/BaseDraw.gd b/src/Tools/BaseDraw.gd index be429d31a..5544679a4 100644 --- a/src/Tools/BaseDraw.gd +++ b/src/Tools/BaseDraw.gd @@ -720,35 +720,6 @@ func _get_undo_data() -> Dictionary: return data -func _pick_color(pos: Vector2i) -> void: - var project := Global.current_project - pos = project.tiles.get_canon_position(pos) - - if pos.x < 0 or pos.y < 0: - return - - var image := Image.new() - image.copy_from(_get_draw_image()) - if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1: - return - - var color := Color(0, 0, 0, 0) - var curr_frame: Frame = project.frames[project.current_frame] - for layer in project.layers.size(): - var idx := (project.layers.size() - 1) - layer - if project.layers[idx].is_visible_in_hierarchy(): - image = curr_frame.cels[idx].get_image() - color = image.get_pixelv(pos) - if not is_zero_approx(color.a): - break - var button := ( - MOUSE_BUTTON_LEFT - if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self - else MOUSE_BUTTON_RIGHT - ) - Tools.assign_color(color, button, false) - - func _on_flip_x_toggled(button_pressed: bool) -> void: _brush_flip_x = button_pressed update_brush() diff --git a/src/Tools/BaseTool.gd b/src/Tools/BaseTool.gd index 23326db37..c3d43aabb 100644 --- a/src/Tools/BaseTool.gd +++ b/src/Tools/BaseTool.gd @@ -315,6 +315,30 @@ func _get_selected_draw_images() -> Array[Image]: return images +func _pick_color(pos: Vector2i) -> void: + var project := Global.current_project + pos = project.tiles.get_canon_position(pos) + + if pos.x < 0 or pos.y < 0: + return + + var image := Image.new() + image.copy_from(_get_draw_image()) + if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1: + return + + var color := Color(0, 0, 0, 0) + var curr_frame: Frame = project.frames[project.current_frame] + for layer in project.layers.size(): + var idx := (project.layers.size() - 1) - layer + if project.layers[idx].is_visible_in_hierarchy(): + image = curr_frame.cels[idx].get_image() + color = image.get_pixelv(pos) + if not is_zero_approx(color.a): + break + Tools.assign_color(color, tool_slot.button, false) + + func _flip_rect(rect: Rect2, rect_size: Vector2, horiz: bool, vert: bool) -> Rect2: var result := rect if horiz: diff --git a/src/Tools/DesignTools/Bucket.gd b/src/Tools/DesignTools/Bucket.gd index 794ed5422..2635ab356 100644 --- a/src/Tools/DesignTools/Bucket.gd +++ b/src/Tools/DesignTools/Bucket.gd @@ -7,6 +7,7 @@ const COLOR_REPLACE_SHADER := preload("res://src/Shaders/ColorReplace.gdshader") const PATTERN_FILL_SHADER := preload("res://src/Shaders/PatternFill.gdshader") var _undo_data := {} +var _picking_color := false var _prev_mode := 0 var _pattern: Patterns.Pattern var _tolerance := 0.003 @@ -152,8 +153,10 @@ func update_pattern() -> void: func draw_start(pos: Vector2i) -> void: super.draw_start(pos) if Input.is_action_pressed(&"draw_color_picker", true): + _picking_color = true _pick_color(pos) return + _picking_color = false _undo_data = _get_undo_data() if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): return @@ -164,6 +167,10 @@ func draw_start(pos: Vector2i) -> void: func draw_move(pos: Vector2i) -> void: super.draw_move(pos) + if _picking_color: # Still return even if we released Alt + if Input.is_action_pressed(&"draw_color_picker", true): + _pick_color(pos) + return Global.canvas.selection.transform_content_confirm() if !Global.current_project.layers[Global.current_project.current_layer].can_layer_get_drawn(): return @@ -174,6 +181,8 @@ func draw_move(pos: Vector2i) -> void: func draw_end(pos: Vector2i) -> void: super.draw_end(pos) + if _picking_color: + return commit_undo() @@ -514,24 +523,3 @@ func _get_undo_data() -> Dictionary: var image := cel.get_image() data[image] = image.data return data - - -func _pick_color(pos: Vector2i) -> void: - var project := Global.current_project - pos = project.tiles.get_canon_position(pos) - - if pos.x < 0 or pos.y < 0: - return - - var image := Image.new() - image.copy_from(_get_draw_image()) - if pos.x > image.get_width() - 1 or pos.y > image.get_height() - 1: - return - - var color := image.get_pixelv(pos) - var button := ( - MOUSE_BUTTON_LEFT - if Tools._slots[MOUSE_BUTTON_LEFT].tool_node == self - else MOUSE_BUTTON_RIGHT - ) - Tools.assign_color(color, button, false) From 263e19f17a65e26fabe307c55f20957efe58e8e3 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 13:06:53 +0300 Subject: [PATCH 25/47] Add a tooltip of the "Share options between the left and the right tools" preference --- Translations/Translations.pot | 5 +++++ src/Preferences/PreferencesDialog.tscn | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index 561aae0a7..8457f6bdf 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -902,6 +902,11 @@ msgstr "" msgid "Share options between the left and the right tools" msgstr "" +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" diff --git a/src/Preferences/PreferencesDialog.tscn b/src/Preferences/PreferencesDialog.tscn index f252a4533..5f939baf4 100644 --- a/src/Preferences/PreferencesDialog.tscn +++ b/src/Preferences/PreferencesDialog.tscn @@ -866,11 +866,16 @@ columns = 3 [node name="ShareOptionsLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "If this is enabled, options will be synced between the left and the right tool. +For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +mouse_filter = 1 text = "Share options between the left and the right tools" [node name="ShareOptionsCheckBox" type="CheckBox" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Tools/ToolOptions"] layout_mode = 2 size_flags_horizontal = 3 +tooltip_text = "If this is enabled, options will be synced between the left and the right tool. +For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." mouse_default_cursor_shape = 2 text = "On" From c83680183b92a0541e985797ae4efa9adade1494 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 13:08:43 +0300 Subject: [PATCH 26/47] Minor changes in Shading.tscn --- src/Tools/DesignTools/Shading.tscn | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Tools/DesignTools/Shading.tscn b/src/Tools/DesignTools/Shading.tscn index b78e383a1..2a8bc4fff 100644 --- a/src/Tools/DesignTools/Shading.tscn +++ b/src/Tools/DesignTools/Shading.tscn @@ -4,21 +4,21 @@ [ext_resource type="Script" path="res://src/Tools/DesignTools/Shading.gd" id="2"] [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[sub_resource type="ButtonGroup" id="ButtonGroup_se02m"] +[sub_resource type="ButtonGroup" id="ButtonGroup_lvcwb"] resource_name = "rotate" allow_unpress = true [node name="ToolOptions" instance=ExtResource("1")] script = ExtResource("2") -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_se02m") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_lvcwb") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_se02m") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_lvcwb") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_se02m") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_lvcwb") [node name="LightenDarken" type="OptionButton" parent="." index="5"] custom_minimum_size = Vector2(92, 0) @@ -83,7 +83,7 @@ layout_mode = 2 layout_mode = 2 max_value = 10.0 allow_greater = true -prefix = "Colors Right" +prefix = "Colors right" [node name="HBoxContainer" type="HBoxContainer" parent="ColorReplaceOptions/Settings" index="1"] layout_mode = 2 @@ -107,7 +107,7 @@ layout_mode = 2 [node name="Label" type="Label" parent="ColorReplaceOptions" index="1"] custom_minimum_size = Vector2(0, 75) layout_mode = 2 -text = "Please Select a color from the palette." +text = "Please select a color from the palette." horizontal_alignment = 1 autowrap_mode = 3 From 120bd9a7df2040cf370ea5ab75aa0f86c77df390 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 13:46:18 +0300 Subject: [PATCH 27/47] Use American English spelling for "Center Canvas" to make it more consistent with the rest of the application --- Translations/Translations.pot | 4 ++++ project.godot | 2 +- src/Autoload/Global.gd | 4 ++-- src/UI/TopMenuContainer/TopMenuContainer.gd | 6 +++--- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index 8457f6bdf..b9042f22f 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -220,6 +220,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" diff --git a/project.godot b/project.godot index dfbc256ed..78920d2f8 100644 --- a/project.godot +++ b/project.godot @@ -903,7 +903,7 @@ previous_project={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } -centre_canvas={ +center_canvas={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":67,"physical_keycode":0,"key_label":0,"unicode":67,"location":0,"echo":false,"script":null) ] diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index b4b14b1bc..79b7567ba 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -27,7 +27,7 @@ enum FileMenu { NEW, OPEN, OPEN_LAST_PROJECT, RECENT, SAVE, SAVE_AS, EXPORT, EXP enum EditMenu { UNDO, REDO, COPY, CUT, PASTE, PASTE_IN_PLACE, DELETE, NEW_BRUSH, PREFERENCES } ## Enumeration of items present in the View Menu. enum ViewMenu { - CENTRE_CANVAS, + CENTER_CANVAS, TILE_MODE, TILE_MODE_OFFSETS, GREYSCALE_VIEW, @@ -751,7 +751,7 @@ func _initialize_keychain() -> void: &"palettize": Keychain.InputAction.new("", "Effects menu", true), &"pixelize": Keychain.InputAction.new("", "Effects menu", true), &"posterize": Keychain.InputAction.new("", "Effects menu", true), - &"centre_canvas": Keychain.InputAction.new("", "View menu", true), + &"center_canvas": Keychain.InputAction.new("", "View menu", true), &"mirror_view": Keychain.InputAction.new("", "View menu", true), &"show_grid": Keychain.InputAction.new("", "View menu", true), &"show_pixel_grid": Keychain.InputAction.new("", "View menu", true), diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index 00cf248d7..8a49839e0 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -206,7 +206,7 @@ func _setup_edit_menu() -> void: func _setup_view_menu() -> void: # Order as in Global.ViewMenu enum var view_menu_items := { - "Centre Canvas": "centre_canvas", + "Center Canvas": "center_canvas", "Tile Mode": "", "Tile Mode Offsets": "", "Grayscale View": "", @@ -227,7 +227,7 @@ func _setup_view_menu() -> void: _setup_snap_to_submenu(item) elif item == "Tile Mode Offsets": view_menu.add_item(item, i) - elif item == "Centre Canvas": + elif item == "Center Canvas": _set_menu_shortcut(view_menu_items[item], view_menu, i, item) else: _set_menu_shortcut(view_menu_items[item], view_menu, i, item, true) @@ -602,7 +602,7 @@ func edit_menu_id_pressed(id: int) -> void: func view_menu_id_pressed(id: int) -> void: match id: - Global.ViewMenu.CENTRE_CANVAS: + Global.ViewMenu.CENTER_CANVAS: Global.camera.offset = Global.current_project.size / 2 Global.ViewMenu.TILE_MODE_OFFSETS: _popup_dialog(get_tree().current_scene.tile_mode_offsets_dialog) From 91f0b26245b875a77773bb52378bcaa37a12b61d Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 14:41:43 +0300 Subject: [PATCH 28/47] Change the font of the interface from the properties --- src/Autoload/Global.gd | 15 +++++++++++++++ src/Autoload/Themes.gd | 2 ++ src/Preferences/PreferencesDialog.gd | 5 +++++ src/Preferences/PreferencesDialog.tscn | 9 +++++++++ 4 files changed, 31 insertions(+) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 79b7567ba..72a8ae827 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -210,6 +210,20 @@ var integer_zoom := false: ## Found in Preferences. The scale of the interface. var shrink := 1.0 +var theme_font := loaded_fonts[theme_font_index]: + set(value): + theme_font = value + if is_instance_valid(control) and is_instance_valid(control.theme): + control.theme.default_font = theme_font +## Found in Preferences. The index of the font used by the interface. +var theme_font_index := 1: + set(value): + theme_font_index = value + if theme_font_index < loaded_fonts.size(): + theme_font = loaded_fonts[theme_font_index] + else: + var font_name := get_available_font_names()[theme_font_index] + theme_font = find_font_from_name(font_name) ## Found in Preferences. The font size used by the interface. var font_size := 16 ## Found in Preferences. If [code]true[/code], the interface dims on popups. @@ -277,6 +291,7 @@ var tool_button_size := ButtonSize.SMALL: return tool_button_size = value Tools.set_button_size(tool_button_size) +## Found in Preferences. var share_options_between_tools := false: set(value): share_options_between_tools = value diff --git a/src/Autoload/Themes.gd b/src/Autoload/Themes.gd index 4db8c8340..b9d47076b 100644 --- a/src/Autoload/Themes.gd +++ b/src/Autoload/Themes.gd @@ -43,6 +43,8 @@ func remove_theme(theme: Theme) -> void: func change_theme(id: int) -> void: theme_index = id var theme := themes[id] + if theme.default_font != Global.theme_font: + theme.default_font = Global.theme_font theme.default_font_size = Global.font_size theme.set_font_size("font_size", "HeaderSmall", Global.font_size + 2) var icon_color := theme.get_color("modulate_color", "Icons") diff --git a/src/Preferences/PreferencesDialog.gd b/src/Preferences/PreferencesDialog.gd index 074cdc7b6..c662950d4 100644 --- a/src/Preferences/PreferencesDialog.gd +++ b/src/Preferences/PreferencesDialog.gd @@ -9,6 +9,7 @@ var preferences: Array[Preference] = [ ), Preference.new("ffmpeg_path", "Startup/StartupContainer/FFMPEGPath", "text", ""), Preference.new("shrink", "%ShrinkSlider", "value", 1.0), + Preference.new("theme_font_index", "%FontOptionButton", "selected", 1), Preference.new("font_size", "%FontSizeSlider", "value", 16), Preference.new( "dim_on_popup", "Interface/InterfaceOptions/DimCheckBox", "button_pressed", true @@ -292,6 +293,10 @@ func _ready() -> void: language.add_child(button) button.pressed.connect(_on_language_pressed.bind(button.get_index())) + # Add fonts to the font option button + for font_name in Global.get_available_font_names(): + %FontOptionButton.add_item(font_name) + for pref in preferences: if not right_side.has_node(pref.node_path): continue diff --git a/src/Preferences/PreferencesDialog.tscn b/src/Preferences/PreferencesDialog.tscn index 5f939baf4..411e305ad 100644 --- a/src/Preferences/PreferencesDialog.tscn +++ b/src/Preferences/PreferencesDialog.tscn @@ -205,6 +205,15 @@ layout_mode = 2 mouse_default_cursor_shape = 2 text = "Apply" +[node name="FontLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Font:" + +[node name="FontOptionButton" type="OptionButton" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] +unique_name_in_owner = true +layout_mode = 2 + [node name="DimLabel" type="Label" parent="HSplitContainer/VBoxContainer/ScrollContainer/RightSide/Interface/InterfaceOptions"] layout_mode = 2 size_flags_horizontal = 3 From fd714d04dff2547fec6236a8b9103e31829065ba Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:52:42 +0300 Subject: [PATCH 29/47] Update the ExtensionsAPI to handle fonts --- project.godot | 2 +- src/Autoload/ExtensionsApi.gd | 23 +++++++++++++++++++++++ src/Autoload/Global.gd | 1 + src/Preferences/PreferencesDialog.gd | 13 ++++++++++--- 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/project.godot b/project.godot index 78920d2f8..e5ac05993 100644 --- a/project.godot +++ b/project.godot @@ -24,7 +24,7 @@ boot_splash/use_filter=false config/icon="res://assets/graphics/icons/icon.png" config/macos_native_icon="res://assets/graphics/icons/icon.icns" config/windows_native_icon="res://assets/graphics/icons/icon.ico" -config/ExtensionsAPI_Version=4 +config/ExtensionsAPI_Version=5 config/Pxo_Version=3 [audio] diff --git a/src/Autoload/ExtensionsApi.gd b/src/Autoload/ExtensionsApi.gd index 6c4259e63..3b4faaaba 100644 --- a/src/Autoload/ExtensionsApi.gd +++ b/src/Autoload/ExtensionsApi.gd @@ -409,6 +409,29 @@ class ThemeAPI: Themes.remove_theme(theme) ExtensionsApi.remove_action("ThemeAPI", "add_theme") + ## Adds a new font. + func add_font(font: Font) -> void: + Global.loaded_fonts.append(font) + Global.font_loaded.emit() + + ## Removes a loaded font. + ## If that font is the current one of the interface, set it back to Roboto. + func remove_font(font: Font) -> void: + var font_index := Global.loaded_fonts.find(font) + if font_index == -1: + return + if Global.theme_font_index == font_index: + Global.theme_font_index = 1 + Global.loaded_fonts.remove_at(font_index) + Global.font_loaded.emit() + + ## Sets a font as the current one for the interface. The font must have been + ## added beforehand by [method add_font]. + func set_font(font: Font) -> void: + var font_index := Global.loaded_fonts.find(font) + if font_index > -1: + Global.theme_font_index = font_index + ## Gives ability to add/remove tools. class ToolAPI: diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 72a8ae827..1d6e7ed22 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -12,6 +12,7 @@ signal project_about_to_switch ## Emitted before a project is about to be switc signal project_switched ## Emitted whenever you switch to some other project tab. signal cel_switched ## Emitted whenever you select a different cel. signal project_data_changed(project: Project) ## Emitted when project data is modified. +signal font_loaded ## Emitted when a new font has been loaded, or an old one gets unloaded. enum LayerTypes { PIXEL, GROUP, THREE_D } enum GridTypes { CARTESIAN, ISOMETRIC, ALL } diff --git a/src/Preferences/PreferencesDialog.gd b/src/Preferences/PreferencesDialog.gd index c662950d4..3d6bcf42f 100644 --- a/src/Preferences/PreferencesDialog.gd +++ b/src/Preferences/PreferencesDialog.gd @@ -241,6 +241,7 @@ class Preference: func _ready() -> void: + Global.font_loaded.connect(_add_fonts) # Replace OK since preference changes are being applied immediately, not after OK confirmation get_ok_button().text = "Close" get_ok_button().size_flags_horizontal = Control.SIZE_EXPAND_FILL @@ -293,9 +294,7 @@ func _ready() -> void: language.add_child(button) button.pressed.connect(_on_language_pressed.bind(button.get_index())) - # Add fonts to the font option button - for font_name in Global.get_available_font_names(): - %FontOptionButton.add_item(font_name) + _add_fonts() for pref in preferences: if not right_side.has_node(pref.node_path): @@ -363,6 +362,14 @@ func _on_Preference_value_changed(value, pref: Preference, button: RestoreDefaul disable_restore_default_button(button, disable) +## Add fonts to the font option button. +func _add_fonts() -> void: + %FontOptionButton.clear() + for font_name in Global.get_available_font_names(): + %FontOptionButton.add_item(font_name) + %FontOptionButton.select(Global.theme_font_index) + + func preference_update(require_restart := false) -> void: if require_restart: must_restart.visible = true From 203340b3a10214d7747f64545dfcc89c4bc03eb2 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 16:58:15 +0300 Subject: [PATCH 30/47] If the selected font index is out of bounds, fall back to Roboto --- src/Autoload/Global.gd | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 1d6e7ed22..314b0b012 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -223,8 +223,12 @@ var theme_font_index := 1: if theme_font_index < loaded_fonts.size(): theme_font = loaded_fonts[theme_font_index] else: - var font_name := get_available_font_names()[theme_font_index] - theme_font = find_font_from_name(font_name) + var available_font_names := get_available_font_names() + if theme_font_index < available_font_names.size(): + var font_name := available_font_names[theme_font_index] + theme_font = find_font_from_name(font_name) + else: + theme_font = loaded_fonts[1] # Fall back to Roboto if out of bounds ## Found in Preferences. The font size used by the interface. var font_size := 16 ## Found in Preferences. If [code]true[/code], the interface dims on popups. From a64f5f34293d3fa9bdf865c565d10e0a5199fa8a Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:16:17 +0300 Subject: [PATCH 31/47] Make ExtensionsAPI version 5 backwards compatible with version 4 This means that extensions that use version 4 can work in version 5, but not necessarily vice versa. Therefore we don't need to show a warning message when loading version 4 extensions. TODO: Find a better way to determine which API versions have backwards compatibility with each other. --- src/HandleExtensions.gd | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/HandleExtensions.gd b/src/HandleExtensions.gd index 4e115f751..a0857ba31 100644 --- a/src/HandleExtensions.gd +++ b/src/HandleExtensions.gd @@ -159,6 +159,12 @@ func _load_extension(extension_file_or_folder_name: StringName, internal := fals var supported_api_versions = extension_json["supported_api_versions"] if typeof(supported_api_versions) == TYPE_ARRAY: supported_api_versions = PackedInt32Array(supported_api_versions) + # Extensions that support API version 4 are backwards compatible with version 5. + # Version 5 only adds new methods and does not break compatibility. + # TODO: Find a better way to determine which API versions + # have backwards compatibility with each other. + if 4 in supported_api_versions and not 5 in supported_api_versions: + supported_api_versions.append(5) if not ExtensionsApi.get_api_version() in supported_api_versions: var err_text := ( "The extension %s will not work on this version of Pixelorama \n" From 2cb29ab2746c2c85780ce7d02f70ccbe8484105e Mon Sep 17 00:00:00 2001 From: Variable <77773850+Variable-ind@users.noreply.github.com> Date: Thu, 17 Oct 2024 21:51:45 +0500 Subject: [PATCH 32/47] somewhat fix transparency for floating window (#1116) * somewhat fix transparency * some formatting --- src/UI/Dialogs/WindowOpacityDialog.gd | 16 ++++++++++++---- src/UI/UI.gd | 22 +++++++++++++++++++--- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/UI/Dialogs/WindowOpacityDialog.gd b/src/UI/Dialogs/WindowOpacityDialog.gd index e8f0524a3..8ab8230cf 100644 --- a/src/UI/Dialogs/WindowOpacityDialog.gd +++ b/src/UI/Dialogs/WindowOpacityDialog.gd @@ -1,18 +1,22 @@ extends AcceptDialog +var main_canvas := Global.control.find_child("Main Canvas", true, false) + @onready var slider := $VBoxContainer/ValueSlider as ValueSlider @onready var fullscreen_warning := $VBoxContainer/FullscreenWarning as Label -@onready var main_canvas := Global.control.find_child("Main Canvas") as Control func _ready() -> void: + if main_canvas is FloatingWindow: ## If it's shifted to a window then get the content + main_canvas = main_canvas.window_content await get_tree().process_frame Global.control.main_ui.sort_children.connect(_recalculate_opacity) func _on_WindowOpacityDialog_about_to_show() -> void: - get_tree().root.transparent = true - get_tree().root.transparent_bg = true + var canvas_window = main_canvas.get_window() + canvas_window.transparent = true + canvas_window.transparent_bg = true slider.editable = not is_fullscreen() fullscreen_warning.visible = not slider.editable @@ -31,7 +35,11 @@ func set_window_opacity(value: float) -> void: if container is TabContainer: var center := container.get_rect().get_center() if main_canvas.get_rect().has_point(center): - container.self_modulate.a = value + if main_canvas.get_window() != get_tree().root: + ## In case we converted to window while trransparency was active + container.self_modulate.a = 1.0 + else: + container.self_modulate.a = value Global.transparent_checker.update_transparency(value) diff --git a/src/UI/UI.gd b/src/UI/UI.gd index 3cbc532b0..105e46511 100644 --- a/src/UI/UI.gd +++ b/src/UI/UI.gd @@ -1,12 +1,28 @@ extends Panel +var shader_disabled := false +var transparency_material: ShaderMaterial + @onready var main_canvas_container := find_child("Main Canvas") as Container func _ready() -> void: + transparency_material = material + main_canvas_container.property_list_changed.connect(_re_configure_shader) update_transparent_shader() +func _re_configure_shader(): + await get_tree().process_frame + if get_window() != main_canvas_container.get_window(): + material = null + shader_disabled = true + else: + if shader_disabled: + material = transparency_material + shader_disabled = false + + func _on_main_canvas_item_rect_changed() -> void: update_transparent_shader() @@ -20,6 +36,6 @@ func update_transparent_shader() -> void: return # Works independently of the transparency feature var canvas_size: Vector2 = (main_canvas_container.size - Vector2.DOWN * 2) * Global.shrink - material.set_shader_parameter("screen_resolution", get_viewport().size) - material.set_shader_parameter("position", main_canvas_container.global_position * Global.shrink) - material.set_shader_parameter("size", canvas_size) + transparency_material.set_shader_parameter("screen_resolution", get_viewport().size) + transparency_material.set_shader_parameter("position", main_canvas_container.global_position * Global.shrink) + transparency_material.set_shader_parameter("size", canvas_size) From 370ae7525a1acbd7418f2b7ee8a51ae1f55480f2 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 18 Oct 2024 00:01:27 +0300 Subject: [PATCH 33/47] Fix formatting and make unused docstrings to comments of the previous commit --- src/UI/Dialogs/WindowOpacityDialog.gd | 6 +++--- src/UI/UI.gd | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/UI/Dialogs/WindowOpacityDialog.gd b/src/UI/Dialogs/WindowOpacityDialog.gd index 8ab8230cf..1aa4f83db 100644 --- a/src/UI/Dialogs/WindowOpacityDialog.gd +++ b/src/UI/Dialogs/WindowOpacityDialog.gd @@ -7,7 +7,7 @@ var main_canvas := Global.control.find_child("Main Canvas", true, false) func _ready() -> void: - if main_canvas is FloatingWindow: ## If it's shifted to a window then get the content + if main_canvas is FloatingWindow: # If it's shifted to a window then get the content. main_canvas = main_canvas.window_content await get_tree().process_frame Global.control.main_ui.sort_children.connect(_recalculate_opacity) @@ -30,13 +30,13 @@ func set_window_opacity(value: float) -> void: value = 100.0 slider.value = value value = value / 100.0 - # Find the TabContainer that has the Main Canvas panel + # Find the TabContainer that has the Main Canvas panel. for container: Control in Global.control.main_ui._panel_container.get_children(): if container is TabContainer: var center := container.get_rect().get_center() if main_canvas.get_rect().has_point(center): if main_canvas.get_window() != get_tree().root: - ## In case we converted to window while trransparency was active + # In case we converted to window while trransparency was active. container.self_modulate.a = 1.0 else: container.self_modulate.a = value diff --git a/src/UI/UI.gd b/src/UI/UI.gd index 105e46511..c95234f6d 100644 --- a/src/UI/UI.gd +++ b/src/UI/UI.gd @@ -37,5 +37,7 @@ func update_transparent_shader() -> void: # Works independently of the transparency feature var canvas_size: Vector2 = (main_canvas_container.size - Vector2.DOWN * 2) * Global.shrink transparency_material.set_shader_parameter("screen_resolution", get_viewport().size) - transparency_material.set_shader_parameter("position", main_canvas_container.global_position * Global.shrink) + transparency_material.set_shader_parameter( + "position", main_canvas_container.global_position * Global.shrink + ) transparency_material.set_shader_parameter("size", canvas_size) From f0307a77441cb57804bc2071eb13760059f2478f Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 18 Oct 2024 19:54:00 +0300 Subject: [PATCH 34/47] Bump version to v1.0.4-rc1 --- project.godot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.godot b/project.godot index e5ac05993..7979e0032 100644 --- a/project.godot +++ b/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="Pixelorama" config/description="Unleash your creativity with Pixelorama, a powerful and accessible open-source pixel art multitool. Whether you want to create sprites, tiles, animations, or just express yourself in the language of pixel art, this software will realize your pixel-perfect dreams with a vast toolbox of features." -config/version="v1.0.4-dev" +config/version="v1.0.4-rc1" run/main_scene="res://src/Main.tscn" config/use_custom_user_dir=true config/custom_user_dir_name="pixelorama" From 66f150122af7949da9db8cf052ae18b41131c522 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sat, 19 Oct 2024 00:14:39 +0300 Subject: [PATCH 35/47] [skip ci] Update CHANGELOG.md --- CHANGELOG.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a8dd8fe71..c0f8fe9b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,19 +15,29 @@ Built using Godot 4.3 - Added a new "color replace" mode to the Shading tool, that uses the colors of the palette to apply shading. [#1107](https://github.com/Orama-Interactive/Pixelorama/pull/1107) - Added a new Erase blend mode. [#1117](https://github.com/Orama-Interactive/Pixelorama/pull/1117) - It is now possible to change the font, depth and line spacing of 3D text. -- Clipping to selecting during export is now possible. [#1113](https://github.com/Orama-Interactive/Pixelorama/pull/1113) +- Implemented the ability to change the font of the interface from the properties. +- Clipping to selection during export is now possible. [#1113](https://github.com/Orama-Interactive/Pixelorama/pull/1113) +- Added a preference to share options between tools. [#1120](https://github.com/Orama-Interactive/Pixelorama/pull/1120) +- Added an option to quickly center the canvas in the View menu. [#1123](https://github.com/Orama-Interactive/Pixelorama/pull/1123) - Added hotkeys to switch between tabs. Control+Tab to go to the next project tab, and Control+Shift+Tab to go to the previous. [#1109](https://github.com/Orama-Interactive/Pixelorama/pull/1109) - Added menus next to each of the two mirroring buttons in the Global Tool Options, that allow users to automatically move the symmetry guides to the center of the canvas, or the view center. - A new Reset category has been added to the Preferences that lets users easily restore certain options. +### Changed +- Bumped extensions API version to 5. +- Made some UI improvements to the rotate/flip image brush options. [#1105](https://github.com/Orama-Interactive/Pixelorama/pull/1105) +- The bucket tool now picks colors from the top-most layer, like the rest of the drawing tools. + ### Fixed - The move tool preview is now properly aligned to the pixel grid. - Camera zoom is now being preserved when switching between projects. - Projects are no longer being saved with the wrong name in the Web version. - Fixed 3D Shape Edit tool option values not updating when switching between 3D objects. +- Using the bucket tool while moving the cursor and also holding the color picker shortcut (Alt by default), now picks colors instead of actually using the tool. - Tool previews are now being properly cleared when switching to other tools before finishing the action being performed by the previous tool. - Fixed icons not being set to the correct color when launching Pixelorama with the dark theme. - Fixed some text in the About dialog not having the text color of the theme. +- Fixed the backup confirmation dialog closing when clicking outside of it when single window mode is disabled. - The dynamics dialog is now set to its correct size when something is made visible or invisible. [#1104](https://github.com/Orama-Interactive/Pixelorama/pull/1104) - The color picker values no longer change when using RAW mode. [#1108](https://github.com/Orama-Interactive/Pixelorama/pull/1108) - Fixed some icon stretch and expand modes in the UI. [#1103](https://github.com/Orama-Interactive/Pixelorama/pull/1103) From e2b54f70f7b060f28a3e93f1ecb8ac8e8289d3fb Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:39:30 +0300 Subject: [PATCH 36/47] Bump pxo file version to 4 to fix blend mode compatibility with older pxo files The addition of the erase blend mode from #1117 resulted in loading pxo files from v1.0-v1.0.3 to have incorrect blend modes in their layers, if they are set to anything below normal, because the values of the `BaseLayer.BlendModes` enumerator changed. --- project.godot | 2 +- src/Classes/Project.gd | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/project.godot b/project.godot index 7979e0032..b10078036 100644 --- a/project.godot +++ b/project.godot @@ -25,7 +25,7 @@ config/icon="res://assets/graphics/icons/icon.png" config/macos_native_icon="res://assets/graphics/icons/icon.icns" config/windows_native_icon="res://assets/graphics/icons/icon.ico" config/ExtensionsAPI_Version=5 -config/Pxo_Version=3 +config/Pxo_Version=4 [audio] diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index fbfee1362..3016ad133 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -278,6 +278,9 @@ func serialize() -> Dictionary: func deserialize(dict: Dictionary, zip_reader: ZIPReader = null, file: FileAccess = null) -> void: about_to_deserialize.emit(dict) + var pxo_version = dict.get( + "pxo_version", ProjectSettings.get_setting("application/config/Pxo_Version") + ) if dict.has("size_x") and dict.has("size_y"): size.x = dict.size_x size.y = dict.size_y @@ -327,8 +330,7 @@ func deserialize(dict: Dictionary, zip_reader: ZIPReader = null, file: FileAcces # Don't do anything with it, just read it so that the file can move on file.get_buffer(size.x * size.y * 4) cels.append(Cel3D.new(size, true)) - if dict.has("pxo_version"): - cel["pxo_version"] = dict["pxo_version"] + cel["pxo_version"] = pxo_version cels[cel_i].deserialize(cel) _deserialize_metadata(cels[cel_i], cel) cel_i += 1 @@ -348,7 +350,15 @@ func deserialize(dict: Dictionary, zip_reader: ZIPReader = null, file: FileAcces # a layer, so loop again after creating them: for layer_i in dict.layers.size(): layers[layer_i].index = layer_i - layers[layer_i].deserialize(dict.layers[layer_i]) + var layer_dict: Dictionary = dict.layers[layer_i] + # Ensure that loaded pxo files from v1.0-v1.0.3 have the correct + # blend mode, after the addition of the Erase mode in v1.0.4. + if pxo_version < 4 and layer_dict.has("blend_mode"): + var blend_mode: int = layer_dict.get("blend_mode") + if blend_mode >= BaseLayer.BlendModes.ERASE: + blend_mode += 1 + layer_dict["blend_mode"] = blend_mode + layers[layer_i].deserialize(layer_dict) _deserialize_metadata(layers[layer_i], dict.layers[layer_i]) if dict.has("tags"): for tag in dict.tags: From 17d56bb432090d2d13808da4c1645c13ed4e1c01 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:43:07 +0300 Subject: [PATCH 37/47] Update tool child scenes to reflect the changes of #1105 Just to fix some warnings --- src/Tools/BaseShapeDrawer.tscn | 14 +++++++------- src/Tools/DesignTools/Bucket.tscn | 16 +++++++--------- src/Tools/DesignTools/CurveTool.tscn | 14 +++++++------- src/Tools/DesignTools/EllipseTool.tscn | 14 +++++++------- src/Tools/DesignTools/Eraser.tscn | 14 +++++++------- src/Tools/DesignTools/LineTool.tscn | 14 +++++++------- src/Tools/DesignTools/Pencil.tscn | 14 +++++++------- src/Tools/DesignTools/RectangleTool.tscn | 14 +++++++------- 8 files changed, 56 insertions(+), 58 deletions(-) diff --git a/src/Tools/BaseShapeDrawer.tscn b/src/Tools/BaseShapeDrawer.tscn index 243e93646..a5badf2ae 100644 --- a/src/Tools/BaseShapeDrawer.tscn +++ b/src/Tools/BaseShapeDrawer.tscn @@ -4,7 +4,7 @@ [ext_resource type="PackedScene" uid="uid://ubyatap3sylf" path="res://src/Tools/BaseDraw.tscn" id="2"] [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[sub_resource type="ButtonGroup" id="ButtonGroup_mvrqm"] +[sub_resource type="ButtonGroup" id="ButtonGroup_7w1wt"] resource_name = "rotate" allow_unpress = true @@ -26,14 +26,14 @@ tooltip_text = "Fills the drawn shape with color, instead of drawing a hollow sh mouse_default_cursor_shape = 2 text = "Fill Shape" -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_mvrqm") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_7w1wt") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_mvrqm") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_7w1wt") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_mvrqm") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_7w1wt") [node name="Brush" parent="." index="5"] visible = false diff --git a/src/Tools/DesignTools/Bucket.tscn b/src/Tools/DesignTools/Bucket.tscn index 871cac243..d24b67424 100644 --- a/src/Tools/DesignTools/Bucket.tscn +++ b/src/Tools/DesignTools/Bucket.tscn @@ -5,7 +5,7 @@ [ext_resource type="Script" path="res://src/Tools/DesignTools/Bucket.gd" id="3"] [ext_resource type="Script" path="res://src/UI/Nodes/ValueSlider.gd" id="4_1pngp"] -[sub_resource type="StyleBoxFlat" id="1"] +[sub_resource type="StyleBoxFlat" id="2"] bg_color = Color(1, 1, 1, 1) border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 @@ -14,7 +14,7 @@ corner_radius_bottom_right = 5 corner_radius_bottom_left = 5 anti_aliasing = false -[sub_resource type="StyleBoxFlat" id="2"] +[sub_resource type="StyleBoxFlat" id="1"] bg_color = Color(1, 1, 1, 1) border_color = Color(1, 1, 1, 1) corner_radius_top_left = 5 @@ -38,10 +38,9 @@ text = "Fill area:" layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 -item_count = 3 selected = 0 +item_count = 3 popup/item_0/text = "Similar area" -popup/item_0/id = 0 popup/item_1/text = "Similar colors" popup/item_1/id = 1 popup/item_2/text = "Whole selection" @@ -71,10 +70,9 @@ text = "Fill with:" layout_mode = 2 size_flags_horizontal = 3 mouse_default_cursor_shape = 2 -item_count = 2 selected = 0 +item_count = 2 popup/item_0/text = "Selected color" -popup/item_0/id = 0 popup/item_1/text = "Pattern" popup/item_1/id = 1 @@ -89,11 +87,11 @@ layout_mode = 2 size_flags_horizontal = 0 tooltip_text = "Select a brush" mouse_default_cursor_shape = 2 -theme_override_styles/normal = SubResource("1") +theme_override_styles/focus = SubResource("2") +theme_override_styles/disabled = SubResource("2") theme_override_styles/hover = SubResource("1") theme_override_styles/pressed = SubResource("1") -theme_override_styles/disabled = SubResource("2") -theme_override_styles/focus = SubResource("2") +theme_override_styles/normal = SubResource("1") [node name="Texture2D" type="TextureRect" parent="FillPattern/Type" index="0"] layout_mode = 0 diff --git a/src/Tools/DesignTools/CurveTool.tscn b/src/Tools/DesignTools/CurveTool.tscn index 354b58a1b..094ad3e83 100644 --- a/src/Tools/DesignTools/CurveTool.tscn +++ b/src/Tools/DesignTools/CurveTool.tscn @@ -4,7 +4,7 @@ [ext_resource type="Script" path="res://src/Tools/DesignTools/CurveTool.gd" id="2_tjnp6"] [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3_g0nav"] -[sub_resource type="ButtonGroup" id="ButtonGroup_ko8wf"] +[sub_resource type="ButtonGroup" id="ButtonGroup_drx24"] resource_name = "rotate" allow_unpress = true @@ -26,14 +26,14 @@ tooltip_text = "Fills the drawn shape with color, instead of drawing a hollow sh mouse_default_cursor_shape = 2 text = "Fill Shape" -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_ko8wf") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_drx24") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_ko8wf") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_drx24") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_ko8wf") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_drx24") [node name="Brush" parent="." index="5"] visible = false diff --git a/src/Tools/DesignTools/EllipseTool.tscn b/src/Tools/DesignTools/EllipseTool.tscn index 59f20adee..65826128a 100644 --- a/src/Tools/DesignTools/EllipseTool.tscn +++ b/src/Tools/DesignTools/EllipseTool.tscn @@ -3,18 +3,18 @@ [ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/BaseShapeDrawer.tscn" id="1"] [ext_resource type="Script" path="res://src/Tools/DesignTools/EllipseTool.gd" id="2"] -[sub_resource type="ButtonGroup" id="ButtonGroup_q7ttl"] +[sub_resource type="ButtonGroup" id="ButtonGroup_nq4ym"] resource_name = "rotate" allow_unpress = true [node name="ToolOptions" instance=ExtResource("1")] script = ExtResource("2") -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_q7ttl") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_nq4ym") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_q7ttl") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_nq4ym") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_q7ttl") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_nq4ym") diff --git a/src/Tools/DesignTools/Eraser.tscn b/src/Tools/DesignTools/Eraser.tscn index f161245e0..edb437339 100644 --- a/src/Tools/DesignTools/Eraser.tscn +++ b/src/Tools/DesignTools/Eraser.tscn @@ -4,21 +4,21 @@ [ext_resource type="Script" path="res://src/Tools/DesignTools/Eraser.gd" id="2"] [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[sub_resource type="ButtonGroup" id="ButtonGroup_kkavr"] +[sub_resource type="ButtonGroup" id="ButtonGroup_7k1sb"] resource_name = "rotate" allow_unpress = true [node name="ToolOptions" instance=ExtResource("1")] script = ExtResource("2") -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_kkavr") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_7k1sb") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_kkavr") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_7k1sb") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_kkavr") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_7k1sb") [node name="OpacitySlider" parent="." index="5" instance=ExtResource("3")] layout_mode = 2 diff --git a/src/Tools/DesignTools/LineTool.tscn b/src/Tools/DesignTools/LineTool.tscn index 08777f19c..62a9e900e 100644 --- a/src/Tools/DesignTools/LineTool.tscn +++ b/src/Tools/DesignTools/LineTool.tscn @@ -4,7 +4,7 @@ [ext_resource type="Script" path="res://src/Tools/DesignTools/LineTool.gd" id="2"] [ext_resource type="PackedScene" uid="uid://yjhp0ssng2mp" path="res://src/UI/Nodes/ValueSlider.tscn" id="3"] -[sub_resource type="ButtonGroup" id="ButtonGroup_ko8wf"] +[sub_resource type="ButtonGroup" id="ButtonGroup_o5212"] resource_name = "rotate" allow_unpress = true @@ -20,14 +20,14 @@ suffix = "px" global_increment_action = "brush_size_increment" global_decrement_action = "brush_size_decrement" -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_ko8wf") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_o5212") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_ko8wf") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_o5212") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_ko8wf") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_o5212") [node name="Brush" parent="." index="4"] visible = false diff --git a/src/Tools/DesignTools/Pencil.tscn b/src/Tools/DesignTools/Pencil.tscn index af81dc0a4..2ac7774f6 100644 --- a/src/Tools/DesignTools/Pencil.tscn +++ b/src/Tools/DesignTools/Pencil.tscn @@ -4,21 +4,21 @@ [ext_resource type="PackedScene" path="res://src/UI/Nodes/ValueSliderV2.tscn" id="2"] [ext_resource type="Script" path="res://src/Tools/DesignTools/Pencil.gd" id="3"] -[sub_resource type="ButtonGroup" id="ButtonGroup_clato"] +[sub_resource type="ButtonGroup" id="ButtonGroup_e3rs3"] resource_name = "rotate" allow_unpress = true [node name="ToolOptions" instance=ExtResource("1")] script = ExtResource("3") -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_clato") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_e3rs3") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_clato") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_e3rs3") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_clato") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_e3rs3") [node name="Overwrite" type="CheckBox" parent="." index="5"] layout_mode = 2 diff --git a/src/Tools/DesignTools/RectangleTool.tscn b/src/Tools/DesignTools/RectangleTool.tscn index 461bc8e09..5c0f91b34 100644 --- a/src/Tools/DesignTools/RectangleTool.tscn +++ b/src/Tools/DesignTools/RectangleTool.tscn @@ -3,18 +3,18 @@ [ext_resource type="PackedScene" uid="uid://n40lhf8hm7o1" path="res://src/Tools/BaseShapeDrawer.tscn" id="1"] [ext_resource type="Script" path="res://src/Tools/DesignTools/RectangleTool.gd" id="2"] -[sub_resource type="ButtonGroup" id="ButtonGroup_cyxrj"] +[sub_resource type="ButtonGroup" id="ButtonGroup_vkkkg"] resource_name = "rotate" allow_unpress = true [node name="ToolOptions" instance=ExtResource("1")] script = ExtResource("2") -[node name="Rotate90" parent="RotationOptions/Rotate" index="0"] -button_group = SubResource("ButtonGroup_cyxrj") +[node name="Rotate90" parent="RotationOptions/GridContainer/Rotate" index="0"] +button_group = SubResource("ButtonGroup_vkkkg") -[node name="Rotate180" parent="RotationOptions/Rotate" index="1"] -button_group = SubResource("ButtonGroup_cyxrj") +[node name="Rotate180" parent="RotationOptions/GridContainer/Rotate" index="1"] +button_group = SubResource("ButtonGroup_vkkkg") -[node name="Rotate270" parent="RotationOptions/Rotate" index="2"] -button_group = SubResource("ButtonGroup_cyxrj") +[node name="Rotate270" parent="RotationOptions/GridContainer/Rotate" index="2"] +button_group = SubResource("ButtonGroup_vkkkg") From dd8d217dc362b472f8c4690d68fd1102a2af5e61 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:54:59 +0300 Subject: [PATCH 38/47] Changes in formatting due to gdtoolkit's new update https://github.com/Scony/godot-gdscript-toolkit/releases/tag/4.3.2 --- .gdlintrc | 1 - src/Classes/ShaderLoader.gd | 11 ++++++----- src/UI/Canvas/Canvas.gd | 6 +++++- src/UI/Dialogs/ManageLayouts.gd | 5 ++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.gdlintrc b/.gdlintrc index d0a139df2..1818289c4 100644 --- a/.gdlintrc +++ b/.gdlintrc @@ -2,6 +2,5 @@ disable: - no-elif-return - no-else-return - max-returns - - private-method-call max-file-lines: 2000 diff --git a/src/Classes/ShaderLoader.gd b/src/Classes/ShaderLoader.gd index 1db9d732f..e2f7a8a62 100644 --- a/src/Classes/ShaderLoader.gd +++ b/src/Classes/ShaderLoader.gd @@ -267,11 +267,12 @@ static func create_ui_for_shader_uniforms( var mod_button := Button.new() mod_button.text = "Modify" mod_button.pressed.connect( - func(): _modify_texture_resource( - _get_loaded_texture(params, u_name), - u_name, - _shader_update_texture.bind(value_changed, u_name) - ) + func(): + _modify_texture_resource( + _get_loaded_texture(params, u_name), + u_name, + _shader_update_texture.bind(value_changed, u_name) + ) ) mod_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL mod_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND diff --git a/src/UI/Canvas/Canvas.gd b/src/UI/Canvas/Canvas.gd index 35867c633..cae059c73 100644 --- a/src/UI/Canvas/Canvas.gd +++ b/src/UI/Canvas/Canvas.gd @@ -33,7 +33,11 @@ var layer_metadata_texture := ImageTexture.new() func _ready() -> void: material.set_shader_parameter("layers", layer_texture_array) material.set_shader_parameter("metadata", layer_metadata_texture) - Global.project_switched.connect(func(): project_changed = true ; queue_redraw()) + Global.project_switched.connect( + func(): + project_changed = true + queue_redraw() + ) onion_past.type = onion_past.PAST onion_past.blue_red_color = Global.onion_skinning_past_color onion_future.type = onion_future.FUTURE diff --git a/src/UI/Dialogs/ManageLayouts.gd b/src/UI/Dialogs/ManageLayouts.gd index 27edd6949..30ed0bd83 100644 --- a/src/UI/Dialogs/ManageLayouts.gd +++ b/src/UI/Dialogs/ManageLayouts.gd @@ -97,9 +97,8 @@ func _on_LayoutSettings_confirmed() -> void: Global.control.main_ui.layout = layout layout_list.add_item(layout_name.text) Global.layouts.sort_custom( - func(a: DockableLayout, b: DockableLayout): return ( - a.resource_path.get_file() < b.resource_path.get_file() - ) + func(a: DockableLayout, b: DockableLayout): + return a.resource_path.get_file() < b.resource_path.get_file() ) var layout_index := Global.layouts.find(layout) Global.top_menu_container.populate_layouts_submenu() From f42d361a428f21e75da5d5c9a0a03d19b8f3f90e Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Wed, 23 Oct 2024 12:00:19 +0300 Subject: [PATCH 39/47] Minor UI improvements for the mirroring buttons --- .../GlobalToolOptions/GlobalToolOptions.tscn | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn index ba988ab9e..012f227e5 100644 --- a/src/UI/GlobalToolOptions/GlobalToolOptions.tscn +++ b/src/UI/GlobalToolOptions/GlobalToolOptions.tscn @@ -74,7 +74,7 @@ size_flags_vertical = 0 columns = 5 [node name="Horizontal" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] -custom_minimum_size = Vector2(44, 32) +custom_minimum_size = Vector2(46, 32) layout_mode = 2 tooltip_text = "Enable horizontal mirrored drawing" mouse_default_cursor_shape = 2 @@ -95,14 +95,14 @@ texture = ExtResource("1") [node name="HorizontalMirrorOptions" type="MenuButton" parent="ScrollContainer/CenterContainer/GridContainer/Horizontal"] unique_name_in_owner = true -custom_minimum_size = Vector2(22, 0) +custom_minimum_size = Vector2(20, 0) layout_mode = 1 anchors_preset = 6 anchor_left = 1.0 anchor_top = 0.5 anchor_right = 1.0 anchor_bottom = 0.5 -offset_left = -22.0 +offset_left = -20.0 offset_top = -10.0 offset_bottom = 10.0 grow_horizontal = 0 @@ -114,7 +114,8 @@ popup/item_1/text = "Move to view center" popup/item_1/id = 1 [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Horizontal/HorizontalMirrorOptions"] -layout_mode = 0 +layout_mode = 1 +anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 @@ -123,10 +124,13 @@ offset_left = -6.0 offset_top = -6.0 offset_right = 6.0 offset_bottom = 6.0 +grow_horizontal = 2 +grow_vertical = 2 texture = ExtResource("3_faalk") +stretch_mode = 3 [node name="Vertical" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] -custom_minimum_size = Vector2(44, 32) +custom_minimum_size = Vector2(46, 32) layout_mode = 2 tooltip_text = "Enable vertical mirrored drawing" mouse_default_cursor_shape = 2 @@ -147,14 +151,14 @@ texture = ExtResource("2") [node name="VerticalMirrorOptions" type="MenuButton" parent="ScrollContainer/CenterContainer/GridContainer/Vertical"] unique_name_in_owner = true -custom_minimum_size = Vector2(22, 0) +custom_minimum_size = Vector2(20, 0) layout_mode = 1 anchors_preset = 6 anchor_left = 1.0 anchor_top = 0.5 anchor_right = 1.0 anchor_bottom = 0.5 -offset_left = -22.0 +offset_left = -20.0 offset_top = -10.0 offset_bottom = 10.0 grow_horizontal = 0 @@ -166,16 +170,14 @@ popup/item_1/text = "Move to view center" popup/item_1/id = 1 [node name="TextureRect" type="TextureRect" parent="ScrollContainer/CenterContainer/GridContainer/Vertical/VerticalMirrorOptions"] -layout_mode = 0 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -6.0 -offset_top = -6.0 -offset_right = 6.0 -offset_bottom = 6.0 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 texture = ExtResource("3_faalk") +stretch_mode = 3 [node name="PixelPerfect" type="Button" parent="ScrollContainer/CenterContainer/GridContainer" groups=["UIButtons"]] custom_minimum_size = Vector2(32, 32) From 2d7d7e7c062435a07dcf0b41b85fffc339686baa Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Wed, 23 Oct 2024 12:02:19 +0300 Subject: [PATCH 40/47] Allow greater values in the resize slider of the export dialog --- src/UI/Dialogs/ExportDialog.tscn | 1 + 1 file changed, 1 insertion(+) diff --git a/src/UI/Dialogs/ExportDialog.tscn b/src/UI/Dialogs/ExportDialog.tscn index f81fb8c87..0efa1bc9b 100644 --- a/src/UI/Dialogs/ExportDialog.tscn +++ b/src/UI/Dialogs/ExportDialog.tscn @@ -163,6 +163,7 @@ min_value = 50.0 max_value = 1000.0 step = 50.0 value = 100.0 +allow_greater = true nine_patch_stretch = true stretch_margin_left = 3 stretch_margin_top = 3 From 0e714183b9cae87781906ea1affcffd10b03abc8 Mon Sep 17 00:00:00 2001 From: Mariano Semelman Date: Thu, 24 Oct 2024 01:32:19 +0200 Subject: [PATCH 41/47] Fix: Allow device to sleep (#1125) Updated project.godot to set window/energy_saving/keep_screen_on to false (by default is true) --- project.godot | 1 + 1 file changed, 1 insertion(+) diff --git a/project.godot b/project.godot index b10078036..de228fe3e 100644 --- a/project.godot +++ b/project.godot @@ -54,6 +54,7 @@ gdscript/warnings/narrowing_conversion=false window/size/viewport_width=1280 window/size/viewport_height=720 +window/energy_saving/keep_screen_on=false window/per_pixel_transparency/allowed.android=false window/per_pixel_transparency/allowed.web=false From ebf84e9ea9e1e6ab66d4611c1cbcee6d9ff9e43d Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 25 Oct 2024 01:24:55 +0300 Subject: [PATCH 42/47] [skip ci] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0f8fe9b7..849995aa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ Built using Godot 4.3 ### Changed - Bumped extensions API version to 5. +- The screen no longer remains on when idle, avoiding unnecessary power consumption. [#1125](https://github.com/Orama-Interactive/Pixelorama/pull/1125) +- The export dialog's resize slider now allows for values greater than 1000. - Made some UI improvements to the rotate/flip image brush options. [#1105](https://github.com/Orama-Interactive/Pixelorama/pull/1105) - The bucket tool now picks colors from the top-most layer, like the rest of the drawing tools. From 9338b2e6bb43970404238448f51416459393d455 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 25 Oct 2024 11:46:29 +0300 Subject: [PATCH 43/47] New Crowdin updates (#1106) --- Translations/af_ZA.po | 72 +++++++++++++++++- Translations/ar_SA.po | 74 +++++++++++++++++-- Translations/be_BY.po | 72 +++++++++++++++++- Translations/bg_BG.po | 72 +++++++++++++++++- Translations/ca_ES.po | 74 +++++++++++++++++-- Translations/cs_CZ.po | 78 ++++++++++++++++++-- Translations/cy_GB.po | 72 +++++++++++++++++- Translations/da_DK.po | 74 +++++++++++++++++-- Translations/de_DE.po | 78 ++++++++++++++++++-- Translations/el_GR.po | 79 ++++++++++++++++++-- Translations/en_PT.po | 72 +++++++++++++++++- Translations/eo_UY.po | 74 +++++++++++++++++-- Translations/es_ES.po | 95 ++++++++++++++++++++---- Translations/et_EE.po | 72 +++++++++++++++++- Translations/fi_FI.po | 72 +++++++++++++++++- Translations/fil_PH.po | 72 +++++++++++++++++- Translations/fr_FR.po | 164 +++++++++++++++++++++++++++++------------ Translations/ga_IE.po | 72 +++++++++++++++++- Translations/grc.po | 72 +++++++++++++++++- Translations/he_IL.po | 74 +++++++++++++++++-- Translations/hi_IN.po | 72 +++++++++++++++++- Translations/hr_HR.po | 72 +++++++++++++++++- Translations/hu_HU.po | 74 +++++++++++++++++-- Translations/id_ID.po | 87 +++++++++++++++++++--- Translations/is_IS.po | 72 +++++++++++++++++- Translations/it_IT.po | 79 ++++++++++++++++++-- Translations/ja_JP.po | 89 +++++++++++++++++++--- Translations/ko_KR.po | 74 +++++++++++++++++-- Translations/la_LA.po | 72 +++++++++++++++++- Translations/lt_LT.po | 72 +++++++++++++++++- Translations/lv_LV.po | 74 +++++++++++++++++-- Translations/mk_MK.po | 72 +++++++++++++++++- Translations/ml_IN.po | 72 +++++++++++++++++- Translations/mr_IN.po | 72 +++++++++++++++++- Translations/ms_MY.po | 72 +++++++++++++++++- Translations/nb_NO.po | 74 +++++++++++++++++-- Translations/nl_NL.po | 72 +++++++++++++++++- Translations/pl_PL.po | 78 ++++++++++++++++++-- Translations/pt_BR.po | 92 +++++++++++++++++++---- Translations/pt_PT.po | 74 +++++++++++++++++-- Translations/ro_RO.po | 79 ++++++++++++++++++-- Translations/ru_RU.po | 74 +++++++++++++++++-- Translations/si_LK.po | 72 +++++++++++++++++- Translations/sk_SK.po | 72 +++++++++++++++++- Translations/sl_SI.po | 72 +++++++++++++++++- Translations/sq_AL.po | 72 +++++++++++++++++- Translations/sr_SP.po | 72 +++++++++++++++++- Translations/sv_SE.po | 74 +++++++++++++++++-- Translations/sw_KE.po | 72 +++++++++++++++++- Translations/ta_IN.po | 72 +++++++++++++++++- Translations/th_TH.po | 72 +++++++++++++++++- Translations/tlh_AA.po | 72 +++++++++++++++++- Translations/tr_TR.po | 78 ++++++++++++++++++-- Translations/uk_UA.po | 74 +++++++++++++++++-- Translations/vi_VN.po | 72 +++++++++++++++++- Translations/zh_CN.po | 92 +++++++++++++++++++---- Translations/zh_TW.po | 74 +++++++++++++++++-- installer/po/ru-RU.po | 4 +- 58 files changed, 4012 insertions(+), 356 deletions(-) diff --git a/Translations/af_ZA.po b/Translations/af_ZA.po index 318c0f2cb..7014ffff3 100644 --- a/Translations/af_ZA.po +++ b/Translations/af_ZA.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Afrikaans\n" "Language: af_ZA\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "Goed" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/ar_SA.po b/Translations/ar_SA.po index c3f6c24b6..58a6cebb9 100644 --- a/Translations/ar_SA.po +++ b/Translations/ar_SA.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Arabic\n" "Language: ar_SA\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "حسنا" @@ -231,6 +231,10 @@ msgstr "التدوير بشكل عمودي" msgid "Preferences" msgstr "خيارات" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "وضع البلاط" @@ -841,6 +845,10 @@ msgstr "لغة النظام" msgid "Display scale:" msgstr "مقياس العرض:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "حجم الخط:" @@ -907,6 +915,15 @@ msgstr "لون الخلفية من:" msgid "Background color:" msgstr "لون الخلفية" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "لون الأداة اليسري:" @@ -1983,11 +2000,19 @@ msgstr "أفقي" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "رأسي" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" -msgstr "رأسي" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "الإطار الحالي:" @@ -2004,10 +2029,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2508,6 +2533,26 @@ msgstr "لون الملء الافتراضي:" msgid "A default background color of a new image" msgstr "لون الخلفية الافتراضي للصور الجديدة" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2683,6 +2728,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "إغلاق" @@ -3025,6 +3078,10 @@ msgstr "" msgid "Text:" msgstr "النص:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3036,12 +3093,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "يسار" msgid "Right" msgstr "يمين" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "الطاقة:" diff --git a/Translations/be_BY.po b/Translations/be_BY.po index 016deec5f..cd0c86bd9 100644 --- a/Translations/be_BY.po +++ b/Translations/be_BY.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Belarusian\n" "Language: be_BY\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Адлюстраваць па вертыкалі" msgid "Preferences" msgstr "Налады" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Бясшоўны рэжым" @@ -840,6 +844,10 @@ msgstr "Мова сістэмы" msgid "Display scale:" msgstr "Экранны маштаб:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -906,6 +914,15 @@ msgstr "Колер фона з:" msgid "Background color:" msgstr "Колер фона:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Колер левага інструмента:" @@ -1978,10 +1995,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1999,10 +2024,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2503,6 +2528,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2678,6 +2723,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3020,6 +3073,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3031,12 +3088,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/bg_BG.po b/Translations/bg_BG.po index fedff4db7..b192500e2 100644 --- a/Translations/bg_BG.po +++ b/Translations/bg_BG.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/ca_ES.po b/Translations/ca_ES.po index 2c36d8787..fb2518698 100644 --- a/Translations/ca_ES.po +++ b/Translations/ca_ES.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Catalan\n" "Language: ca_ES\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "D'acord" @@ -231,6 +231,10 @@ msgstr "Voltejar verticalment" msgid "Preferences" msgstr "Preferències" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Mode Tile" @@ -841,6 +845,10 @@ msgstr "Idioma del sistema" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -907,6 +915,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -2017,11 +2034,19 @@ msgstr "Horitzontal" msgid "Enable horizontal mirrored drawing" msgstr "Activa el dibuix emmirallat horitzontalment" +msgid "Vertical" +msgstr "Vertical" + msgid "Enable vertical mirrored drawing" msgstr "Activa el dibuix emmirallat verticalment" -msgid "Vertical" -msgstr "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Fotograma actual:" @@ -2038,10 +2063,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2543,6 +2568,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2718,6 +2763,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Tancar" @@ -3060,6 +3113,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3071,12 +3128,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/cs_CZ.po b/Translations/cs_CZ.po index 863e16968..6c5ffce4f 100644 --- a/Translations/cs_CZ.po +++ b/Translations/cs_CZ.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Czech\n" "Language: cs_CZ\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Převrátit svisle" msgid "Preferences" msgstr "Nastavení" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Dlaždicový režim" @@ -842,6 +846,10 @@ msgstr "Systémový jazyk" msgid "Display scale:" msgstr "Škála zobrazení:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Velikost písma:" @@ -908,6 +916,15 @@ msgstr "Barva pozadí z:" msgid "Background color:" msgstr "Barva pozadí:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Barva levého nástroje:" @@ -2029,11 +2046,19 @@ msgstr "Vodorovně" msgid "Enable horizontal mirrored drawing" msgstr "Povolit kreslení ve vodorovném zrcadlení" +msgid "Vertical" +msgstr "Svisle" + msgid "Enable vertical mirrored drawing" msgstr "Povolit kreslení ve svislém zrcadlení" -msgid "Vertical" -msgstr "Svisle" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Aktuální snímek:" @@ -2050,11 +2075,11 @@ msgstr "Přeskočit na první snímek" msgid "Go to the previous frame" msgstr "Přejít na předchozí snímek" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Přehrát animaci pozpátku (od konce do začátku)" +msgid "Play the animation backwards" +msgstr "" -msgid "Play the animation forward (from beginning to end)" -msgstr "Přehrát animaci vpřed (od začátku do konce)" +msgid "Play the animation forward" +msgstr "" msgid "Go to the next frame" msgstr "Přejít na další snímek" @@ -2557,6 +2582,26 @@ msgstr "Výchozí barva výplně:" msgid "A default background color of a new image" msgstr "Výchozí barva pozadí nového obrázku" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Uzamknout poměr stran" @@ -2732,6 +2777,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Zavřít" @@ -3078,6 +3131,10 @@ msgstr "Dolní poloměr:" msgid "Text:" msgstr "Text:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Velikost pixelu:" @@ -3089,12 +3146,19 @@ msgstr "Krok křivky:" msgid "Horizontal alignment:" msgstr "Vodorovné zarovnání:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "Vlevo" msgid "Right" msgstr "Vpravo" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Energie:" diff --git a/Translations/cy_GB.po b/Translations/cy_GB.po index 013c3b49f..2c2c92bed 100644 --- a/Translations/cy_GB.po +++ b/Translations/cy_GB.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Welsh\n" "Language: cy_GB\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/da_DK.po b/Translations/da_DK.po index 52a13a61c..135cee427 100644 --- a/Translations/da_DK.po +++ b/Translations/da_DK.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Danish\n" "Language: da_DK\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Spejlvend vertikalt" msgid "Preferences" msgstr "Præferencer" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Felt-tilstand" @@ -841,6 +845,10 @@ msgstr "Systemsprog" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -907,6 +915,15 @@ msgstr "Baggrundsfarve fra:" msgid "Background color:" msgstr "Baggrundsfarve:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Venstre værktøjsfarve:" @@ -2016,11 +2033,19 @@ msgstr "Horisontal" msgid "Enable horizontal mirrored drawing" msgstr "Aktivér horisontal spejltegning" +msgid "Vertical" +msgstr "Vertikal" + msgid "Enable vertical mirrored drawing" msgstr "Aktivér vertikal spejltegning" -msgid "Vertical" -msgstr "Vertikal" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Nuværende ramme:" @@ -2037,10 +2062,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2541,6 +2566,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2716,6 +2761,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Luk" @@ -3058,6 +3111,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3069,12 +3126,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/de_DE.po b/Translations/de_DE.po index 089272df7..2badc72c8 100644 --- a/Translations/de_DE.po +++ b/Translations/de_DE.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: German\n" "Language: de_DE\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "OK" @@ -233,6 +233,10 @@ msgstr "Vertikal spiegeln" msgid "Preferences" msgstr "Einstellungen" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Kachelmodus" @@ -843,6 +847,10 @@ msgstr "Systemsprache" msgid "Display scale:" msgstr "Bildschirmmaße:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Schriftgröße:" @@ -909,6 +917,15 @@ msgstr "Hintergrundfarbe von:" msgid "Background color:" msgstr "Hintergrundfarbe:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Farbe des linken Werkzeugs:" @@ -2029,11 +2046,19 @@ msgstr "Horizontal spiegeln" msgid "Enable horizontal mirrored drawing" msgstr "Aktiviere horizontal gespiegelte Zeichnung" +msgid "Vertical" +msgstr "Vertikal" + msgid "Enable vertical mirrored drawing" msgstr "Aktiviere vertikal gespiegelte Zeichnung" -msgid "Vertical" -msgstr "Vertikal" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Aktueller Frame" @@ -2050,11 +2075,11 @@ msgstr "Zum ersten Frame springen" msgid "Go to the previous frame" msgstr "Zum vorherigen Frame gehen" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Spiele die Animation rückwärts ab (vom Ende bis zum Anfang)" +msgid "Play the animation backwards" +msgstr "" -msgid "Play the animation forward (from beginning to end)" -msgstr "Spiele die Animation vorwärts ab (vom Anfang bis zum Ende)" +msgid "Play the animation forward" +msgstr "" msgid "Go to the next frame" msgstr "Gehe zum nächsten Frame" @@ -2557,6 +2582,26 @@ msgstr "Standardfüllfarbe:" msgid "A default background color of a new image" msgstr "Eine Standard-Hintergrundfarbe eines neuen Bildes" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Seitenverhältnis sperren" @@ -2732,6 +2777,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Schließen" @@ -3077,6 +3130,10 @@ msgstr "Unterer Radius:" msgid "Text:" msgstr "Text:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Pixelgröße:" @@ -3088,12 +3145,19 @@ msgstr "Kurvenschritt:" msgid "Horizontal alignment:" msgstr "Horizontale Ausrichtung:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "Links" msgid "Right" msgstr "Rechts" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Energie:" diff --git a/Translations/el_GR.po b/Translations/el_GR.po index 4c1bee570..f09a9f4fb 100644 --- a/Translations/el_GR.po +++ b/Translations/el_GR.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Greek\n" "Language: el_GR\n" -"PO-Revision-Date: 2024-09-12 14:53\n" +"PO-Revision-Date: 2024-10-17 17:12\n" msgid "OK" msgstr "Εντάξει" @@ -233,6 +233,10 @@ msgstr "Κάθετη αναστροφή" msgid "Preferences" msgstr "Προτιμήσεις" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "Κεντράρισμα Καμβά" + msgid "Tile Mode" msgstr "Λειτουργία μοτίβου" @@ -844,6 +848,10 @@ msgstr "Γλώσσα Συστήματος" msgid "Display scale:" msgstr "Κλίμακα εμφάνισης:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "Γραμματοσειρά:" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Μέγεθος γραμματοσειράς:" @@ -910,6 +918,16 @@ msgstr "Χρώμα υποβάθρου από:" msgid "Background color:" msgstr "Χρώμα υποβάθρου:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "Κοινή χρήση επιλογών μεταξύ αριστερών και δεξιών εργαλείων" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "Αν αυτό είναι ενεργοποιημένο, οι επιλογές θα συγχρονίζονται μεταξύ του αριστερού και του δεξιού εργαλείου.\n" +"Για παράδειγμα, και τα δύο εργαλεία θα μοιράζονται το ίδιο μέγεθος βούρτσας, και η αλλαγή του σε ένα εργαλείο θα αλλάξει αμέσως και το άλλο." + msgid "Left tool color:" msgstr "Χρώμα αριστερού εργαλείου:" @@ -2030,11 +2048,19 @@ msgstr "Οριζόντια" msgid "Enable horizontal mirrored drawing" msgstr "Ενεργοποίηση ζωγραφικής με οριζόντιο κατοπτρισμό" +msgid "Vertical" +msgstr "Κάθετα" + msgid "Enable vertical mirrored drawing" msgstr "Ενεργοποίηση ζωγραφικής με κάθετο κατοπτρισμό" -msgid "Vertical" -msgstr "Κάθετα" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "Μετακίνηση στο κέντρο του καμβά" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "Μετακίνηση στο κέντρο της προβολής" msgid "Current frame:" msgstr "Τρέχον καρέ:" @@ -2051,11 +2077,11 @@ msgstr "Μετάβαση στο πρώτο καρέ" msgid "Go to the previous frame" msgstr "Μετάβαση στο προηγούμενο καρέ" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Αναπαραγωγή της κίνησης ανάποδα (από το τέλος προς την αρχή)" +msgid "Play the animation backwards" +msgstr "Αναπαραγωγή της κίνησης προς τα πίσω" -msgid "Play the animation forward (from beginning to end)" -msgstr "Αναπαραγωγή της κίνησης κανονικά (από την αρχή προς το τέλος)" +msgid "Play the animation forward" +msgstr "Αναπαραγωγή της κίνησης προς τα εμπρός" msgid "Go to the next frame" msgstr "Μετάβαση στο επόμενο καρέ" @@ -2558,6 +2584,26 @@ msgstr "Προεπιλεγμένο γέμισμα με χρώμα:" msgid "A default background color of a new image" msgstr "Το προεπιλεγμένο χρώμα των καινούριων εικόνων" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "Επαναφορά όλων των επιλογών που βρίσκονται στις προτιμήσεις" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "Επαναφορά επιλογών χρονοδιαγράμματος" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "Επαναφορά όλων των επιλογών εργαλείων" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "Διαγραφή όλων των επεκτάσεων" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "Εκκαθάριση της λίστας αρχείων που ανοίχθηκαν πρόσφατα" + msgid "Lock aspect ratio" msgstr "Κλείδωμα αναλογίας διαστάσεων" @@ -2733,6 +2779,14 @@ msgstr "Περικοπή εικόνων" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "Περικοπή των εξαγόμενων εικόνων στο ορατό τμήμα τους, θεωρώντας κάθε pixel με ένα μη μηδενικό alpha κανάλι ως ορατό." +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "Αποκοπή περιεχομένου εικόνας στην επιλογή" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "Εξαγωγή μόνο περιεχομένου που βρίσκεται εντός των ορίων μιας επιλεγμένης περιοχής." + msgid "Close" msgstr "Κλείσιμο" @@ -3078,6 +3132,10 @@ msgstr "Κάτω ακτίνα:" msgid "Text:" msgstr "Κείμενο:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "Βάθος:" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Μέγεθος εικονοστοιχείου:" @@ -3089,12 +3147,19 @@ msgstr "Βήμα καμπυλότητας:" msgid "Horizontal alignment:" msgstr "Οριζόντια στοίχιση:" +msgid "Vertical alignment:" +msgstr "Κάθετη στοίχιση:" + msgid "Left" msgstr "Αριστερά" msgid "Right" msgstr "Δεξιά" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "Διάστιχο γραμμών:" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Ενέργεια:" diff --git a/Translations/en_PT.po b/Translations/en_PT.po index 848dee25e..c8872f15b 100644 --- a/Translations/en_PT.po +++ b/Translations/en_PT.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Pirate English\n" "Language: en_PT\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/eo_UY.po b/Translations/eo_UY.po index 95f52d3e7..393cc4da0 100644 --- a/Translations/eo_UY.po +++ b/Translations/eo_UY.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Esperanto\n" "Language: eo_UY\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Bone" @@ -231,6 +231,10 @@ msgstr "Speguli vertikale" msgid "Preferences" msgstr "Agordoj" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Kahela reĝimo" @@ -841,6 +845,10 @@ msgstr "Sistema lingvo" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -907,6 +915,15 @@ msgstr "Koloro de la fono el:" msgid "Background color:" msgstr "Koloro de la fono:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Koloro de la maldekstra ilo:" @@ -1969,11 +1986,19 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "Vertikala" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" -msgstr "Vertikala" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Aktuala filmero:" @@ -1990,10 +2015,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2494,6 +2519,26 @@ msgstr "Defaŭlta plenigkoloro:" msgid "A default background color of a new image" msgstr "Defaŭlta fona koloro de nova bildo" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2669,6 +2714,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Fermi" @@ -3011,6 +3064,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3022,12 +3079,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/es_ES.po b/Translations/es_ES.po index 82d2a07d0..8882421fb 100644 --- a/Translations/es_ES.po +++ b/Translations/es_ES.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Spanish\n" "Language: es_ES\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-19 18:46\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Voltear verticalmente" msgid "Preferences" msgstr "Preferencias" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "Centrar el lienzo" + msgid "Tile Mode" msgstr "Modo mosaico" @@ -559,7 +563,7 @@ msgstr "Redimensionar:" #. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file. msgid "Quality:" -msgstr "" +msgstr "Calidad:" msgid "Cancel Export" msgstr "Cancelar exportación" @@ -841,6 +845,10 @@ msgstr "Idioma del sistema" msgid "Display scale:" msgstr "Escala de la interfaz:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "Fuente:" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Tamaño de la fuente:" @@ -907,6 +915,16 @@ msgstr "Color del fondo:" msgid "Background color:" msgstr "Color de fondo:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "Sincronizar opciones entre las herramientas izquierda y derecha" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "Si está activado, se sincronizarán las opciones entre las herramientas izquierda y derecha.\n" +"Por ejemplo, ambas herramientas compartirán el mismo tamaño de pincel, y cambiarlo en una herramienta lo cambiará instantáneamente en la otra." + msgid "Left tool color:" msgstr "Color de la herramienta izquierda:" @@ -978,23 +996,23 @@ msgstr "Color de la sombra:" #. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur msgid "Gaussian Blur" -msgstr "" +msgstr "Desenfoque gaussiano" #. The type of the Gaussian blur, an image effect. msgid "Blur type:" -msgstr "" +msgstr "Tipo de desenfoque:" #. The applied amount of Gaussian blur, an image effect. msgid "Blur amount:" -msgstr "" +msgstr "Nivel de desenfoque:" #. The applied radius of Gaussian blur, an image effect. msgid "Blur radius:" -msgstr "" +msgstr "Radio de desenfoque:" #. The applied direction of Gaussian blur, an image effect. msgid "Blur direction:" -msgstr "" +msgstr "Dirección de desenfoque:" msgid "Gradient" msgstr "Degradado" @@ -2025,11 +2043,19 @@ msgstr "Horizontal" msgid "Enable horizontal mirrored drawing" msgstr "Activar dibujo de espejo horizontal" +msgid "Vertical" +msgstr "Vertical" + msgid "Enable vertical mirrored drawing" msgstr "Activar dibujo de espejo vertical" -msgid "Vertical" -msgstr "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "Mover al centro del lienzo" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "Mover al centro de la vista" msgid "Current frame:" msgstr "Fotograma actual:" @@ -2046,11 +2072,11 @@ msgstr "Saltar al primer fotograma" msgid "Go to the previous frame" msgstr "Ir al fotograma anterior" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Reproduce la animación hacia atrás (desde el final hasta el principio)" +msgid "Play the animation backwards" +msgstr "Reproducir la animación hacia atrás" -msgid "Play the animation forward (from beginning to end)" -msgstr "Reproducir la animación hacia adelante (de principio a fin)" +msgid "Play the animation forward" +msgstr "Reproducir la animación hacia adelante" msgid "Go to the next frame" msgstr "Ir al fotograma siguiente" @@ -2553,6 +2579,26 @@ msgstr "Color de relleno predeterminado:" msgid "A default background color of a new image" msgstr "Un color de fondo predeterminado de una nueva imagen" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "Reestablecer todas las opciones disponibles en Preferencias" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "Reestablecer opciones de línea de tiempo" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "Reestablecer todas las opciones de herramienta" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "Eliminar todas las extensiones" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "Limpiar la lista de archivos abiertos recientemente" + msgid "Lock aspect ratio" msgstr "Bloquear relación de aspecto" @@ -2722,11 +2768,19 @@ msgstr "El(los) carácter(es) que separan Él nombre del archivo y Él número d #. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images. msgid "Trim images" -msgstr "" +msgstr "Recortar imágenes" #. Found in the export dialog. Tooltip of the "trim images" option. msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." -msgstr "" +msgstr "Recorta las imágenes exportadas a su porción visible, considerando cada píxel con un canal de alfa diferente a cero como visible." + +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "Recortar contenido de la imagen a la selección" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "Solo exportar contenido que está dentro de los los límites de un área seleccionada." msgid "Close" msgstr "Cerrar" @@ -3074,6 +3128,10 @@ msgstr "Radio inferior:" msgid "Text:" msgstr "Texto:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "Profundidad:" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Tamaño del píxel:" @@ -3085,12 +3143,19 @@ msgstr "Nivel de curva:" msgid "Horizontal alignment:" msgstr "Alineación horizontal:" +msgid "Vertical alignment:" +msgstr "Alineación vertical:" + msgid "Left" msgstr "Izquierda" msgid "Right" msgstr "Derecha" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "Interlineado:" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Energía:" diff --git a/Translations/et_EE.po b/Translations/et_EE.po index b48ae8683..6bd1f01fe 100644 --- a/Translations/et_EE.po +++ b/Translations/et_EE.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Estonian\n" "Language: et_EE\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/fi_FI.po b/Translations/fi_FI.po index 69da4c8a9..f22d8ce7d 100644 --- a/Translations/fi_FI.po +++ b/Translations/fi_FI.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Finnish\n" "Language: fi_FI\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/fil_PH.po b/Translations/fil_PH.po index 9e96fb069..6b926d30c 100644 --- a/Translations/fil_PH.po +++ b/Translations/fil_PH.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Filipino\n" "Language: fil_PH\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/fr_FR.po b/Translations/fr_FR.po index 04572e476..d67fc09c7 100644 --- a/Translations/fr_FR.po +++ b/Translations/fr_FR.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: French\n" "Language: fr_FR\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-24 18:36\n" msgid "OK" msgstr "OK" @@ -101,7 +101,8 @@ msgstr "Inclure les images fusionnées" msgid "If enabled, the final blended images are also being stored in the pxo, for each frame.\n" "This makes the pxo file larger and is useful for importing by third-party software\n" "or CLI exporting. Loading pxo files in Pixelorama does not need this option to be enabled." -msgstr "" +msgstr "Si activée, les rendus finals mélangés sont aussi stockés dans le pxo, pour chaque Frame.\n" +"Cela rend le fichier pxo plus volumineux et est utile pour les importations par un logiciel tiers ou les exportations en ligne de commande. Le chargement de fichiers pxo dans Pixelorama ne nécessite pas que cette option soit activée." msgid "Import" msgstr "Importer" @@ -179,7 +180,7 @@ msgid "Resize Canvas" msgstr "Redimensionner le canevas" msgid "Offset Image" -msgstr "" +msgstr "Décalage de l'image" msgid "Offset:" msgstr "Décalage :" @@ -231,6 +232,10 @@ msgstr "Miroir vertical" msgid "Preferences" msgstr "Préférences" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "Centrer le Canevas" + msgid "Tile Mode" msgstr "Mode tuile" @@ -452,7 +457,7 @@ msgstr "" #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Merge is an adjective, it refers to the distance where images get merged. msgid "Merge distance:" -msgstr "" +msgstr "Distance de fusion :" #. Found in the preview image dialog, which appears when importing an image file. This option appears when the image is being imported as a spritesheet, if "smart slice" is enabled. Hint tooltip of the "Merge distance" value slider. msgid "Images which crossed the threshold will get merged into a larger image, if they are within this distance" @@ -560,7 +565,7 @@ msgstr "Redimensionner :" #. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file. msgid "Quality:" -msgstr "" +msgstr "Qualité :" msgid "Cancel Export" msgstr "Annuler l'exportation" @@ -641,25 +646,25 @@ msgid "Export dimensions:" msgstr "Dimensions d'export :" msgid "Save a File" -msgstr "" +msgstr "Enregistrer un fichier" msgid "Go to previous folder." -msgstr "" +msgstr "Aller au dossier précédent." msgid "Go to next folder." -msgstr "" +msgstr "Aller au dossier suivant." msgid "Go to parent folder." -msgstr "" +msgstr "Aller au dossier parent." msgid "Path:" msgstr "Chemin :" msgid "Refresh files." -msgstr "" +msgstr "Rafraîchir les fichiers." msgid "Toggle the visibility of hidden files." -msgstr "" +msgstr "Activer/désactiver la visibilité des fichiers cachés." msgid "Directories & Files:" msgstr "Répertoires et fichiers :" @@ -842,6 +847,10 @@ msgstr "Langue système" msgid "Display scale:" msgstr "Taille d'Affichage:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "Police:" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Taille de police :" @@ -908,6 +917,15 @@ msgstr "Couleur d'arrière-plan à partir de :" msgid "Background color:" msgstr "Couleur d'arrière-plan :" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Couleur de l'outil gauche:" @@ -979,23 +997,23 @@ msgstr "Couleur d'ombre :" #. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur msgid "Gaussian Blur" -msgstr "" +msgstr "Flou gaussien" #. The type of the Gaussian blur, an image effect. msgid "Blur type:" -msgstr "" +msgstr "Type de flou :" #. The applied amount of Gaussian blur, an image effect. msgid "Blur amount:" -msgstr "" +msgstr "Taux de flou :" #. The applied radius of Gaussian blur, an image effect. msgid "Blur radius:" -msgstr "" +msgstr "Rayon du flou :" #. The applied direction of Gaussian blur, an image effect. msgid "Blur direction:" -msgstr "" +msgstr "Direction du flou :" msgid "Gradient" msgstr "Dégradé" @@ -1079,7 +1097,7 @@ msgstr "Valeur :" #. An image effect. Adjusts the brightness and contrast of the colors of an image. msgid "Adjust Brightness/Contrast" -msgstr "" +msgstr "Ajuster la luminosité / le contraste" #. Refers to the brightness of the colors of an image. msgid "Brightness:" @@ -1091,23 +1109,23 @@ msgstr "Contraste :" #. Refers to the red value of the colors of an image. msgid "Red value:" -msgstr "" +msgstr "Valeur rouge :" #. Refers to the green value of the colors of an image. msgid "Green value:" -msgstr "" +msgstr "Valeur verte :" #. Refers to the blue value of the colors of an image. msgid "Blue value:" -msgstr "" +msgstr "Valeur bleue :" #. Refers to a color that tints an image. msgid "Tint color:" -msgstr "" +msgstr "Couleur de teinte :" #. Refers to the factor (how much) a color tints an image. msgid "Tint effect factor:" -msgstr "" +msgstr "Facteur d'effet de teinte :" msgid "Apply" msgstr "Appliquer" @@ -1158,7 +1176,7 @@ msgstr "Suivi des problèmes" #. Found under the Help menu. When selected, it opens the folder where the application's data are being saved. msgid "Open Editor Data Folder" -msgstr "" +msgstr "Ouvrir le dossier des données de l'éditeur" msgid "Changelog" msgstr "Journal des modifications" @@ -1420,7 +1438,8 @@ msgstr "Pipette\n\n" msgid "Crop\n\n" "Resize the canvas" -msgstr "" +msgstr "Rogner\n\n" +"Redimensionner le canevas" msgid "Pencil\n\n" "%s for left mouse button\n" @@ -1520,7 +1539,7 @@ msgstr "Inverser les couleurs de gauche et droite." #. Tooltip of the average color button, found in the color picker panel. Shows the average color between the two selected. msgid "Average Color:" -msgstr "" +msgstr "Couleur moyenne :" msgid "Reset the colors to their default state (black for left, white for right)" msgstr "Réinitialise les couleurs à leur état initial (noir pour l'outil gauche, blanc pour l'outil droit)" @@ -1531,7 +1550,7 @@ msgstr "Récupérer une couleur sur l'écran." #. Tooltip of the color text field found in the color picker panel that lets users change the color by hex code or english name ("red" cannot be translated). msgid "Enter a hex code (\"#ff0000\") or named color (\"red\")." -msgstr "" +msgstr "Entrer le code hexadécimal (\"#ff0000\") ou le nom de la couleur (\"rouge\")." #. Tooltip of the button found in the color picker panel that lets users change the shape of the color picker. msgid "Select a picker shape." @@ -1539,11 +1558,11 @@ msgstr "Sélectionner une forme de Pipette." #. Refers to color-related options such as sliders that set color channel values like R, G, B and A. msgid "Color options" -msgstr "" +msgstr "Options de couleur" #. Tooltip of the button with three dots found under color options in the color picker panel that lets users change the mode of the color picker/sliders. msgid "Select a picker mode." -msgstr "" +msgstr "Sélectionnez un mode de pipette." #. Checkbox found in the menu of the button with three dots found under color options in the color picker panel. msgid "Colorized Sliders" @@ -1555,7 +1574,7 @@ msgstr "" #. Found under color options in the color picker panel. msgid "Recent Colors" -msgstr "" +msgstr "Couleurs récentes" msgid "Left tool" msgstr "Outil gauche" @@ -1740,7 +1759,7 @@ msgstr "Définit la limite d'images par seconde de l'application. Plus le nombre #. Found in the Preferences, under the Performance section. Changes the value of the maximum undo steps projects can use. msgid "Max undo steps:" -msgstr "" +msgstr "Étapes max d'annulation :" #. An option found in the preferences, under the Performance section. msgid "Pause application when it loses focus" @@ -1752,11 +1771,11 @@ msgstr "Si activé, l'application est mise en pause quand le focus est perdu. Ce #. An option found in the preferences, under the Performance section. Refers to the screen being updated (redrawn) continuously. msgid "Update continuously" -msgstr "" +msgstr "Mettre à jour en continu" #. Found in the preferences, hint of the "Update continuously" option. msgid "If this is toggled on, the application will redraw the screen continuously, even while it's not used. Turning this off helps lower CPU and GPU usage when idle." -msgstr "" +msgstr "Si cette option est activée, l'application redessine l'écran en permanence, même si elle n'est pas utilisée. Désactiver cette option permet de réduire l'utilisation du processeur et du GPU en cas d'inactivité." #. An option found in the preferences, under the Performance section. msgid "Enable window transparency" @@ -1800,7 +1819,7 @@ msgstr "Ouvrir le dossier" #. Found in the Preferences, under Extensions. It is a button that, when clicked, opens up the extension explorer which allows users to download extensions from the Internet. msgid "Explore Online" -msgstr "" +msgstr "Explorer en ligne" #. Found in the Preferences, under Extensions. This is the text of a confirmation dialog that appears when the user attempts to enable an extension. msgid "Are you sure you want to enable this extension? Make sure to only enable extensions from sources that you trust." @@ -1887,7 +1906,7 @@ msgstr "Pixel Perfect\n" #. A button found in the global tool options. When enabled, the alpha value of the pixels being drawn is locked, meaning that the user can only draw on non-transparent pixels. msgid "Lock alpha" -msgstr "" +msgstr "Verrouiller l'alpha" msgid "Fill inside" msgstr "Remplir à l’intérieur" @@ -2019,11 +2038,19 @@ msgstr "Horizontal" msgid "Enable horizontal mirrored drawing" msgstr "Dessine avec un miroir horizontal" +msgid "Vertical" +msgstr "Vertical" + msgid "Enable vertical mirrored drawing" msgstr "Dessine avec un miroir vertical" -msgid "Vertical" -msgstr "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "Déplacer vers le centre du canevas" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Frame actuelle :" @@ -2035,22 +2062,22 @@ msgid "Current frame as spritesheet" msgstr "Frame actuelle en spritesheet" msgid "Jump to the first frame" -msgstr "" +msgstr "Aller à la première image" msgid "Go to the previous frame" -msgstr "" +msgstr "Aller à l'image précédente" -msgid "Play the animation backwards (from end to beginning)" -msgstr "" +msgid "Play the animation backwards" +msgstr "Jouer l'animation à l'envers" -msgid "Play the animation forward (from beginning to end)" -msgstr "" +msgid "Play the animation forward" +msgstr "Jouer l'animation à l'endroit" msgid "Go to the next frame" -msgstr "" +msgstr "Aller à l'image suivante" msgid "Jump to the last frame" -msgstr "" +msgstr "Aller à la dernière frame" msgid "Timeline settings" msgstr "" @@ -2115,7 +2142,7 @@ msgstr "Si sélectionné, l'animation ne joue que sur les frames partageant le m #. Found in the timeline, inside the timeline settings. It's a slider that sets the size of the cel buttons in the timeline. msgid "Cel size:" -msgstr "" +msgstr "Taille de la cellule :" #. Found in the timeline, inside the timeline settings. If this is enabled, the past and future frames will have appear tinted. msgid "Color mode" @@ -2240,7 +2267,7 @@ msgstr "Mode de fusion :" #. Found in the layer's section of the timeline, as a blend mode option, only available for group layers. If enabled, group blending is disabled and the group simply acts as a way to organize layers instead of affecting blending. msgid "Pass through" -msgstr "" +msgstr "Passer à travers" #. Adjective, refers to something usual/regular, such as the normal blend mode. msgid "Normal" @@ -2547,6 +2574,26 @@ msgstr "Couleur de remplissage par défaut:" msgid "A default background color of a new image" msgstr "Une couleur de fond par défaut d'une nouvelle image" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "Enlever toutes les extensions" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Verrouiller les proportions" @@ -2722,6 +2769,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Fermer" @@ -3068,6 +3123,10 @@ msgstr "Rayon inférieur :" msgid "Text:" msgstr "Texte :" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "Profondeur:" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Taille des Pixels:" @@ -3079,12 +3138,19 @@ msgstr "Étape de Courbe:" msgid "Horizontal alignment:" msgstr "Alignement horizontal :" +msgid "Vertical alignment:" +msgstr "Alignement vertical:" + msgid "Left" msgstr "Gauche" msgid "Right" msgstr "Droite" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "Interligne:" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Énergie :" @@ -3203,11 +3269,11 @@ msgstr "Supprimer" #. A tooltip to tell users to hold the Shift key while clicking the remove button msgid "Hold Shift while pressing to instantly remove." -msgstr "" +msgstr "Maintenez Maj enfoncé tout en appuyant pour supprimer instantanément." #. Shown in the confirmation dialog for removing a reference image. msgid "Are you sure you want to remove this reference image? It will not be deleted from your file system." -msgstr "" +msgstr "Êtes-vous sûr de vouloir supprimer cette image de référence ? Elle ne sera pas supprimée de vos fichiers locaux." #. Moves the reference image up in the list msgid "Move the selected reference image to the right" @@ -3235,7 +3301,7 @@ msgstr "Redimensionner l'image de référence sélectionnée" #. Button to select no reference images in the Reference Images panel. msgid "none" -msgstr "" +msgstr "aucun" #. Resets the Transform of the selected reference image on the canvas. msgid "Reset Transform" diff --git a/Translations/ga_IE.po b/Translations/ga_IE.po index 8baec4a68..dafdaee40 100644 --- a/Translations/ga_IE.po +++ b/Translations/ga_IE.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Irish\n" "Language: ga_IE\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/grc.po b/Translations/grc.po index 6ff8c94bc..19f15aca5 100644 --- a/Translations/grc.po +++ b/Translations/grc.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Ancient Greek\n" "Language: grc\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Ἐντάξει" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/he_IL.po b/Translations/he_IL.po index 099aa696e..6712b003c 100644 --- a/Translations/he_IL.po +++ b/Translations/he_IL.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Hebrew\n" "Language: he_IL\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "אישור" @@ -231,6 +231,10 @@ msgstr "הפוך אנכית" msgid "Preferences" msgstr "העדפות" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "מצב אריח" @@ -840,6 +844,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -906,6 +914,15 @@ msgstr "צבע רקע מ:" msgid "Background color:" msgstr "צבע רקע:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "צבע כלי שמאלי:" @@ -1972,11 +1989,19 @@ msgstr "אופקי" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "אנכי" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" -msgstr "אנכי" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "פריים נוכחי:" @@ -1993,10 +2018,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2498,6 +2523,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2673,6 +2718,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3015,6 +3068,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3026,12 +3083,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/hi_IN.po b/Translations/hi_IN.po index 744bf6757..e597d46bd 100644 --- a/Translations/hi_IN.po +++ b/Translations/hi_IN.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Hindi\n" "Language: hi_IN\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "ठीक है" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/hr_HR.po b/Translations/hr_HR.po index 19b2b4a4d..f310d09fc 100644 --- a/Translations/hr_HR.po +++ b/Translations/hr_HR.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Croatian\n" "Language: hr_HR\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/hu_HU.po b/Translations/hu_HU.po index a36113ffa..115423159 100644 --- a/Translations/hu_HU.po +++ b/Translations/hu_HU.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Hungarian\n" "Language: hu_HU\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "Ok" @@ -231,6 +231,10 @@ msgstr "Függőleges tükrözés" msgid "Preferences" msgstr "Beállítások" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Csempe mód" @@ -840,6 +844,10 @@ msgstr "Rendszer nyelv" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -906,6 +914,15 @@ msgstr "" msgid "Background color:" msgstr "Háttér színe:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1978,11 +1995,19 @@ msgstr "Vízszintes" msgid "Enable horizontal mirrored drawing" msgstr "Vízszintesen tükrözött rajzolás engedélyezése" +msgid "Vertical" +msgstr "Függőleges" + msgid "Enable vertical mirrored drawing" msgstr "Függőlegesen tükrözött rajzolás engedélyezése" -msgid "Vertical" -msgstr "Függőleges" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Jelenlegi képkocka:" @@ -1999,10 +2024,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2505,6 +2530,26 @@ msgstr "Alapértelmezett kitöltő szín:" msgid "A default background color of a new image" msgstr "Alapértelmezett háttérszíne az új képnek" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Méretarány lezárása" @@ -2680,6 +2725,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Bezárás" @@ -3022,6 +3075,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3033,12 +3090,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/id_ID.po b/Translations/id_ID.po index dae1e7d8d..847e5b216 100644 --- a/Translations/id_ID.po +++ b/Translations/id_ID.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Indonesian\n" "Language: id_ID\n" -"PO-Revision-Date: 2024-09-12 03:49\n" +"PO-Revision-Date: 2024-10-18 20:11\n" msgid "OK" msgstr "Oke" @@ -213,7 +213,7 @@ msgid "Initial angle:" msgstr "Sudut inisial:" msgid "Clear" -msgstr "Lepas" +msgstr "Kosongkan" msgid "Invert" msgstr "Terbalikkan" @@ -233,6 +233,10 @@ msgstr "Dibalik Menegak" msgid "Preferences" msgstr "Preferensi" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "Tengahkan Kanvas" + msgid "Tile Mode" msgstr "Mode Petak" @@ -844,6 +848,10 @@ msgstr "Bahasa Sistem" msgid "Display scale:" msgstr "Skala tampilan:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "Font:" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Ukuran font:" @@ -910,6 +918,16 @@ msgstr "Warna latar belakang dari:" msgid "Background color:" msgstr "Warna latar belakang:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "Berbagi opsi antara alat di kiri dan di kanan" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "Jika ini diaktifkan, opsi alat di kiri dan di kanan akan disinkronkan.\n" +"Contoh, ada dua alat berbagi ukuran kuas, jika mengubah opsi di salah satu alat maka yang satunya juga berubah." + msgid "Left tool color:" msgstr "Warna alat di kiri:" @@ -1485,7 +1503,7 @@ msgstr "Garis Lengkung\n\n" "Menggaris lengkung Bezier\n" "Tekan %s/%s untuk menambah titik\n" "Tekan dan seret untuk melengkungkan\n" -"Tekan %s untuk melepas titik tadi" +"Tekan %s untuk menghapus titik tadi" msgid "Rectangle Tool\n\n" "%s for left mouse button\n" @@ -2030,11 +2048,19 @@ msgstr "Mendatar" msgid "Enable horizontal mirrored drawing" msgstr "Aktifkan gambar dicerminkan mendatar" +msgid "Vertical" +msgstr "Menegak" + msgid "Enable vertical mirrored drawing" msgstr "Aktifkan gambar dicerminkan menegak" -msgid "Vertical" -msgstr "Menegak" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "Ke tengah kanvas" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "Ke tengah tampilan" msgid "Current frame:" msgstr "Bingkai saat ini:" @@ -2051,11 +2077,11 @@ msgstr "Lompat ke bingkai pertama" msgid "Go to the previous frame" msgstr "Ke bingkai sebelumnya" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Putar animasi secara mundur (dari akhir sampai awal)" +msgid "Play the animation backwards" +msgstr "Putar mundur animasi" -msgid "Play the animation forward (from beginning to end)" -msgstr "Putar animasi secara normal (dari awal sampai akhir)" +msgid "Play the animation forward" +msgstr "Putar maju animasi" msgid "Go to the next frame" msgstr "Ke bingkai selanjutnya" @@ -2212,7 +2238,7 @@ msgstr "Lapisan" #. Found in the layer menu which appears when right clicking on a layer button in the timeline. When enabled, the layer becomes a clipping mask. msgid "Clipping mask" -msgstr "Cuplikkan mask" +msgstr "Cuplik mask" #. Hint tooltip of the create new layer button, found on the left side of the timeline. msgid "Create a new layer" @@ -2558,6 +2584,26 @@ msgstr "Warna isi bawaan:" msgid "A default background color of a new image" msgstr "Warna latar belakang bawaan pada gambar baru" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "Atur ulang semua opsi yang di Preferensi" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "Atur ulang opsi garis waktu" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "Atur ulang opsi alat-alat" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "Hapus semua ekstensi" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "Kosongkan daftar berkas yang dibuka" + msgid "Lock aspect ratio" msgstr "Kuncikan nisbah aspek" @@ -2733,6 +2779,14 @@ msgstr "Pangkas gambar" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "Memangkas gambar terekspor ke bagian terlihat, piksel apa pun bersaluran alfa bukan nol akan dianggap terlihat." +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "Cuplik isi gambar ke seleksi" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "Hanya mengekspor isi area yang diseleksi." + msgid "Close" msgstr "Tutup" @@ -2997,7 +3051,7 @@ msgid "Add new object" msgstr "Tambah objek baru" msgid "Remove object" -msgstr "Hilangkan Objek" +msgstr "Hapus objek" msgid "Camera" msgstr "Kamera" @@ -3079,6 +3133,10 @@ msgstr "Jari-jari bawah:" msgid "Text:" msgstr "Teks:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "Kedalaman:" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Ukuran piksel:" @@ -3090,12 +3148,19 @@ msgstr "Step lengkung:" msgid "Horizontal alignment:" msgstr "Penjajaran mendatar:" +msgid "Vertical alignment:" +msgstr "Penjajaran menegak:" + msgid "Left" msgstr "Kiri" msgid "Right" msgstr "Kanan" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "Jarak baris:" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Tenaga:" diff --git a/Translations/is_IS.po b/Translations/is_IS.po index 128ea343d..89622d1d4 100644 --- a/Translations/is_IS.po +++ b/Translations/is_IS.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Icelandic\n" "Language: is_IS\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/it_IT.po b/Translations/it_IT.po index c4ec5e10c..9ec08d994 100644 --- a/Translations/it_IT.po +++ b/Translations/it_IT.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Italian\n" "Language: it_IT\n" -"PO-Revision-Date: 2024-09-12 16:19\n" +"PO-Revision-Date: 2024-10-17 15:11\n" msgid "OK" msgstr "OK" @@ -233,6 +233,10 @@ msgstr "Rifletti verticalmente" msgid "Preferences" msgstr "Preferenze" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "Centra tela" + msgid "Tile Mode" msgstr "Modalità Tile" @@ -844,6 +848,10 @@ msgstr "Lingua di sistema" msgid "Display scale:" msgstr "Scala di visualizzazione:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "Font:" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Dimensione carattere:" @@ -910,6 +918,16 @@ msgstr "Colore di sfondo da:" msgid "Background color:" msgstr "Colore dello sfondo:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "Condividi le opzioni tra gli strumenti sinistro e destro" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "Se abilitata, le opzioni saranno sincronizzate tra sinistra e destra.\n" +"Ad esempio, entrambi gli strumenti condivideranno la stessa dimensione del pennello e cambieranno istantaneamente su uno strumento l'altro." + msgid "Left tool color:" msgstr "Colore strumento sinistra:" @@ -2030,11 +2048,19 @@ msgstr "Orizzontale" msgid "Enable horizontal mirrored drawing" msgstr "Abilita disegno orizzontale a specchio" +msgid "Vertical" +msgstr "Verticale" + msgid "Enable vertical mirrored drawing" msgstr "Abilita disegno verticale a specchio" -msgid "Vertical" -msgstr "Verticale" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "Sposta nel centro della superficie" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "Sposta nel centro della vista" msgid "Current frame:" msgstr "Frame corrente:" @@ -2051,11 +2077,11 @@ msgstr "Vai al primo fotogramma" msgid "Go to the previous frame" msgstr "Vai al fotogramma precedente" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Riproduci l'animazione al contrario (da fine a inizio)" +msgid "Play the animation backwards" +msgstr "Riproduce l'animazione all'indietro" -msgid "Play the animation forward (from beginning to end)" -msgstr "Riproduce l'animazione in avanti (dall'inizio alla fine)" +msgid "Play the animation forward" +msgstr "Riproduce l'animazione in avanti" msgid "Go to the next frame" msgstr "Vai al prossimo fotogramma" @@ -2558,6 +2584,26 @@ msgstr "Colore di riempimento predefinito:" msgid "A default background color of a new image" msgstr "Un colore di sfondo predefinito di una nuova immagine" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "Reimposta tutte le opzioni disponibili nelle Preferenze" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "Reimposta opzioni timeline" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "Reimposta tutte le opzioni dello strumento" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "Rimuovi tutte le estensioni" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "Pulisce l'elenco dei file aperti di recente" + msgid "Lock aspect ratio" msgstr "Blocca proporzioni" @@ -2733,6 +2779,14 @@ msgstr "Ritaglia immagini" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "Ritaglia le immagini esportate nella loro porzione visibile, considerando ogni pixel con un canale alfa diverso da zero come visibile." +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "Ritaglia il contenuto dell'immagine alla selezione" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "Esporta solo contenuti che rientrano nei limiti di un'area selezionata." + msgid "Close" msgstr "Chiudi" @@ -3078,6 +3132,10 @@ msgstr "Raggio inferiore:" msgid "Text:" msgstr "Testo:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "Profondità:" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Dimensione pixel:" @@ -3089,12 +3147,19 @@ msgstr "Passaggio curva:" msgid "Horizontal alignment:" msgstr "Allineamento orizzontale:" +msgid "Vertical alignment:" +msgstr "Allineamento verticale:" + msgid "Left" msgstr "Sinistra" msgid "Right" msgstr "Destra" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "Spaziatura linea:" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Energia:" diff --git a/Translations/ja_JP.po b/Translations/ja_JP.po index 3cba3d4b4..efdc005ad 100644 --- a/Translations/ja_JP.po +++ b/Translations/ja_JP.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Japanese\n" "Language: ja_JP\n" -"PO-Revision-Date: 2024-09-11 17:12\n" +"PO-Revision-Date: 2024-10-17 16:15\n" msgid "OK" msgstr "OK" @@ -233,6 +233,10 @@ msgstr "垂直方向に反転" msgid "Preferences" msgstr "設定" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "キャンバスを中央へ" + msgid "Tile Mode" msgstr "タイルモード" @@ -844,6 +848,10 @@ msgstr "システム言語" msgid "Display scale:" msgstr "表示スケール:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "フォント:" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "フォントサイズ:" @@ -910,6 +918,16 @@ msgstr "背景色の参照元:" msgid "Background color:" msgstr "背景色:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "左と右のツール間でオプションを共有" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "これを有効にすると、オプションは左側と右側のツール間で同期されます。\n" +"例えば、両方のツールが同じブラシサイズを共有し、一方のツールでそれを変更すると、他のツールで即座に変更されます。" + msgid "Left tool color:" msgstr "左ツールの色:" @@ -981,23 +999,23 @@ msgstr "影の色:" #. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur msgid "Gaussian Blur" -msgstr "" +msgstr "ガウスぼかし" #. The type of the Gaussian blur, an image effect. msgid "Blur type:" -msgstr "" +msgstr "ぼかしタイプ:" #. The applied amount of Gaussian blur, an image effect. msgid "Blur amount:" -msgstr "" +msgstr "ぼかしの量:" #. The applied radius of Gaussian blur, an image effect. msgid "Blur radius:" -msgstr "" +msgstr "ぼかし半径:" #. The applied direction of Gaussian blur, an image effect. msgid "Blur direction:" -msgstr "" +msgstr "ぼかし方向:" msgid "Gradient" msgstr "グラディエーション" @@ -2030,11 +2048,19 @@ msgstr "水平" msgid "Enable horizontal mirrored drawing" msgstr "左右対称描画を有効化" +msgid "Vertical" +msgstr "垂直方向" + msgid "Enable vertical mirrored drawing" msgstr "上下対称描画を有効化" -msgid "Vertical" -msgstr "垂直方向" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "キャンバスの中央に移動" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "ビューの中心に移動" msgid "Current frame:" msgstr "現在のフレーム:" @@ -2051,11 +2077,11 @@ msgstr "最初のフレームにジャンプ" msgid "Go to the previous frame" msgstr "前のフレームへ移動" -msgid "Play the animation backwards (from end to beginning)" -msgstr "アニメーションを逆方向に再生 (終了から開始まで)" +msgid "Play the animation backwards" +msgstr "アニメーションを逆再生" -msgid "Play the animation forward (from beginning to end)" -msgstr "アニメーションを順方向に再生する (開始から終了まで)" +msgid "Play the animation forward" +msgstr "アニメーションを再生" msgid "Go to the next frame" msgstr "次のフレームへ移動" @@ -2558,6 +2584,26 @@ msgstr "既定の塗りつぶしの色:" msgid "A default background color of a new image" msgstr "新しい画像の既定の背景色" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "設定で利用可能なすべてのオプションをリセット" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "タイムラインオプションをリセット" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "すべてのツールオプションをリセット" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "すべての拡張機能を削除" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "最近開いたファイルリストをクリア" + msgid "Lock aspect ratio" msgstr "アスペクト比をロック" @@ -2733,6 +2779,14 @@ msgstr "画像をトリム" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "エクスポートされた画像を可視部分にトリミングします。各ピクセルをゼロではないアルファチャンネルを可視とします。" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "選択範囲に画像コンテンツをクリップ" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "選択領域の範囲内にあるコンテンツのみエクスポートします。" + msgid "Close" msgstr "閉じる" @@ -3079,6 +3133,10 @@ msgstr "下部半径:" msgid "Text:" msgstr "テキスト:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "ピクセルサイズ:" @@ -3090,12 +3148,19 @@ msgstr "カーブステップ:" msgid "Horizontal alignment:" msgstr "水平方向:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "左" msgid "Right" msgstr "右" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "行間隔:" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "エネルギー:" diff --git a/Translations/ko_KR.po b/Translations/ko_KR.po index 268822dfa..404ea975d 100644 --- a/Translations/ko_KR.po +++ b/Translations/ko_KR.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Korean\n" "Language: ko_KR\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "예" @@ -231,6 +231,10 @@ msgstr "상하 대칭" msgid "Preferences" msgstr "환경설정" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "타일 모드" @@ -841,6 +845,10 @@ msgstr "시스템 언어" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -907,6 +915,15 @@ msgstr "" msgid "Background color:" msgstr "배경 색상:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "왼쪽 도구 색상" @@ -2015,11 +2032,19 @@ msgstr "수평" msgid "Enable horizontal mirrored drawing" msgstr "수평 대칭 그리기 활성화" +msgid "Vertical" +msgstr "수직" + msgid "Enable vertical mirrored drawing" msgstr "수직 대칭 그리기 활성화" -msgid "Vertical" -msgstr "수직" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "현재 프레임:" @@ -2036,10 +2061,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2542,6 +2567,26 @@ msgstr "기본 채우기 색:" msgid "A default background color of a new image" msgstr "새 이미지의 기본 배경 색" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "비율 고정" @@ -2717,6 +2762,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "닫기" @@ -3059,6 +3112,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3070,12 +3127,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/la_LA.po b/Translations/la_LA.po index 70f9aed95..d3e699b4b 100644 --- a/Translations/la_LA.po +++ b/Translations/la_LA.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Latin\n" "Language: la_LA\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/lt_LT.po b/Translations/lt_LT.po index 382cb56ec..1a747aff2 100644 --- a/Translations/lt_LT.po +++ b/Translations/lt_LT.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:10\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/lv_LV.po b/Translations/lv_LV.po index 0d99ab710..0b87a1653 100644 --- a/Translations/lv_LV.po +++ b/Translations/lv_LV.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Latvian\n" "Language: lv_LV\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Labi" @@ -231,6 +231,10 @@ msgstr "Apmest vertikāli" msgid "Preferences" msgstr "Iestatījumi" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Flīžu režīms" @@ -840,6 +844,10 @@ msgstr "Systēmas valoda" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -906,6 +914,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1976,11 +1993,19 @@ msgstr "Horizontāli" msgid "Enable horizontal mirrored drawing" msgstr "IIeslēgt horizontālo spoguļskata zīmēšanu" +msgid "Vertical" +msgstr "Vertikāls" + msgid "Enable vertical mirrored drawing" msgstr "Ieslēgt vertikālo spoguļskata zīmēšanu" -msgid "Vertical" -msgstr "Vertikāls" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Patreizējais kadrs:" @@ -1997,10 +2022,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2502,6 +2527,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2677,6 +2722,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3019,6 +3072,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3030,12 +3087,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/mk_MK.po b/Translations/mk_MK.po index 42ed9542f..c01bd4e78 100644 --- a/Translations/mk_MK.po +++ b/Translations/mk_MK.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Macedonian\n" "Language: mk_MK\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/ml_IN.po b/Translations/ml_IN.po index 9c2f90948..d3d2f5876 100644 --- a/Translations/ml_IN.po +++ b/Translations/ml_IN.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Malayalam\n" "Language: ml_IN\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "ഓക്കേ" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/mr_IN.po b/Translations/mr_IN.po index dc2f2394b..e6bd9894e 100644 --- a/Translations/mr_IN.po +++ b/Translations/mr_IN.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Marathi\n" "Language: mr_IN\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/ms_MY.po b/Translations/ms_MY.po index ceebd503c..296dc1cdc 100644 --- a/Translations/ms_MY.po +++ b/Translations/ms_MY.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Malay\n" "Language: ms_MY\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/nb_NO.po b/Translations/nb_NO.po index ca7a3a640..706577ce7 100644 --- a/Translations/nb_NO.po +++ b/Translations/nb_NO.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Norwegian Bokmal\n" "Language: nb_NO\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Speilvend Vertikalt" msgid "Preferences" msgstr "Preferanser" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Flismodus" @@ -840,6 +844,10 @@ msgstr "Systemspråk" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -906,6 +914,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -2014,11 +2031,19 @@ msgstr "Horisontal" msgid "Enable horizontal mirrored drawing" msgstr "Aktivér horisontaltspeilet tegning" +msgid "Vertical" +msgstr "Vertikal" + msgid "Enable vertical mirrored drawing" msgstr "Aktivér vertikaltspeilet tegning" -msgid "Vertical" -msgstr "Vertikal" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Gjeldende bilde:" @@ -2035,10 +2060,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2541,6 +2566,26 @@ msgstr "Standard fyllfarge:" msgid "A default background color of a new image" msgstr "En standard bakgrunnsfarge for et nytt bilde" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Lås størrelsesforhold" @@ -2716,6 +2761,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Lukk" @@ -3059,6 +3112,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3070,12 +3127,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/nl_NL.po b/Translations/nl_NL.po index a78e3853f..ecc1ddf3b 100644 --- a/Translations/nl_NL.po +++ b/Translations/nl_NL.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Dutch\n" "Language: nl_NL\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Oké" @@ -231,6 +231,10 @@ msgstr "Verticaal spiegelen" msgid "Preferences" msgstr "Instellingen" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Tegelmodus" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/pl_PL.po b/Translations/pl_PL.po index 38276ec12..e1f71cc43 100644 --- a/Translations/pl_PL.po +++ b/Translations/pl_PL.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Polish\n" "Language: pl_PL\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "OK" @@ -233,6 +233,10 @@ msgstr "Odbij w pionie" msgid "Preferences" msgstr "Ustawienia" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Tryb kafelkowy" @@ -843,6 +847,10 @@ msgstr "Język systemowy" msgid "Display scale:" msgstr "Pokaż Skalę:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Rozmiar czcionki:" @@ -909,6 +917,15 @@ msgstr "Kolor tła z:" msgid "Background color:" msgstr "Kolor tła:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Kolor lewego narzędzia:" @@ -2028,11 +2045,19 @@ msgstr "Poziome" msgid "Enable horizontal mirrored drawing" msgstr "Włącza lustrzane odbicie w poziomie podczas rysowania" +msgid "Vertical" +msgstr "Pionowe" + msgid "Enable vertical mirrored drawing" msgstr "Włącza lustrzane odbicie w pionie podczas rysowania" -msgid "Vertical" -msgstr "Pionowe" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Obecna klatka:" @@ -2049,11 +2074,11 @@ msgstr "Skocz do pierwszej klatki" msgid "Go to the previous frame" msgstr "Idć do poprzedniej klatki" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Odtwórz animację wstecz" +msgid "Play the animation backwards" +msgstr "" -msgid "Play the animation forward (from beginning to end)" -msgstr "Odtwórz animację do przodu" +msgid "Play the animation forward" +msgstr "" msgid "Go to the next frame" msgstr "Idź do następnej klatki" @@ -2556,6 +2581,26 @@ msgstr "Domyślny kolor wypełnienia:" msgid "A default background color of a new image" msgstr "Domyślny kolor tła dla nowego obrazu" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Wymuś współczynnik proporcji" @@ -2731,6 +2776,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Zamknij" @@ -3077,6 +3130,10 @@ msgstr "Dolny promień:" msgid "Text:" msgstr "Tekst:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Rozmiar piksela:" @@ -3088,12 +3145,19 @@ msgstr "Krok krzywej:" msgid "Horizontal alignment:" msgstr "Poziome wyrównanie:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "Lewo" msgid "Right" msgstr "Prawo" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Siła:" diff --git a/Translations/pt_BR.po b/Translations/pt_BR.po index 9cc39f303..27b6e3baf 100644 --- a/Translations/pt_BR.po +++ b/Translations/pt_BR.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "OK" @@ -233,6 +233,10 @@ msgstr "Inverter Verticalmente" msgid "Preferences" msgstr "Preferências" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Modo de Tile" @@ -562,7 +566,7 @@ msgstr "Redimensionar:" #. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file. msgid "Quality:" -msgstr "" +msgstr "Qualidade:" msgid "Cancel Export" msgstr "Cancelar exportação" @@ -844,6 +848,10 @@ msgstr "Linguagem do Sistema" msgid "Display scale:" msgstr "Mostrar escala:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Tamanho da fonte:" @@ -910,6 +918,15 @@ msgstr "Cor de fundo de:" msgid "Background color:" msgstr "Cor de fundo:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Cor da ferramenta esquerda:" @@ -981,23 +998,23 @@ msgstr "Cor da sombra:" #. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur msgid "Gaussian Blur" -msgstr "" +msgstr "Desfoque gaussiano" #. The type of the Gaussian blur, an image effect. msgid "Blur type:" -msgstr "" +msgstr "Tipo de desfoque:" #. The applied amount of Gaussian blur, an image effect. msgid "Blur amount:" -msgstr "" +msgstr "Quantidade de desfoque:" #. The applied radius of Gaussian blur, an image effect. msgid "Blur radius:" -msgstr "" +msgstr "Raio de desfocagem:" #. The applied direction of Gaussian blur, an image effect. msgid "Blur direction:" -msgstr "" +msgstr "Direção do desfoque:" msgid "Gradient" msgstr "Gradiente" @@ -2030,11 +2047,19 @@ msgstr "Horizontal" msgid "Enable horizontal mirrored drawing" msgstr "Ativar desenho com espelhamento horizontal" +msgid "Vertical" +msgstr "Vertical" + msgid "Enable vertical mirrored drawing" msgstr "Ativar desenho com espelhamento vertical" -msgid "Vertical" -msgstr "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Quadro atual:" @@ -2051,11 +2076,11 @@ msgstr "Pular para o primeiro quadro" msgid "Go to the previous frame" msgstr "Ir para o quadro anterior" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Reproduzir animação de trás para frente (do fim ao início)" +msgid "Play the animation backwards" +msgstr "" -msgid "Play the animation forward (from beginning to end)" -msgstr "Reproduzir animação (do início ao fim)" +msgid "Play the animation forward" +msgstr "" msgid "Go to the next frame" msgstr "Ir para o próximo quadro" @@ -2558,6 +2583,26 @@ msgstr "Cor de preenchimento padrão:" msgid "A default background color of a new image" msgstr "Cor de fundo padrão de uma nova imagem" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Fixar proporção" @@ -2727,10 +2772,18 @@ msgstr "O(s) caractere(s) que separam o nome do arquivo e o número do quadro" #. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images. msgid "Trim images" -msgstr "" +msgstr "Cortar imagens" #. Found in the export dialog. Tooltip of the "trim images" option. msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." +msgstr "Corta as imagens exportadas para sua parte visível, considerando cada pixel com um canal alfa diferente de zero como visível." + +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." msgstr "" msgid "Close" @@ -3078,6 +3131,10 @@ msgstr "Raio inferior:" msgid "Text:" msgstr "Texto:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Tamanho do pixel:" @@ -3089,12 +3146,19 @@ msgstr "Passo da curva:" msgid "Horizontal alignment:" msgstr "Alinhamento horizontal:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "Esquerda" msgid "Right" msgstr "Direita" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Energia:" diff --git a/Translations/pt_PT.po b/Translations/pt_PT.po index 55b34e40b..3cd609b54 100644 --- a/Translations/pt_PT.po +++ b/Translations/pt_PT.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Portuguese\n" "Language: pt_PT\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Virar Verticalmente" msgid "Preferences" msgstr "Preferencias" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Modo de Azuleijo" @@ -840,6 +844,10 @@ msgstr "Linguagem de Sistema" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -906,6 +914,15 @@ msgstr "Cor de fundo de:" msgid "Background color:" msgstr "Cor de fundo:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Cor da ferramenta esquerda:" @@ -2009,11 +2026,19 @@ msgstr "Horizontal" msgid "Enable horizontal mirrored drawing" msgstr "Habilitar o desenho espelhado horizontalmente" +msgid "Vertical" +msgstr "Vertical" + msgid "Enable vertical mirrored drawing" msgstr "Habilitar o desenho espelhado verticalmente" -msgid "Vertical" -msgstr "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Fotograma atual:" @@ -2030,10 +2055,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2537,6 +2562,26 @@ msgstr "Cor de preenchimento padrão" msgid "A default background color of a new image" msgstr "Cor de fundo de uma nova imagem" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Trancar resolução" @@ -2712,6 +2757,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Fechar" @@ -3055,6 +3108,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3066,12 +3123,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/ro_RO.po b/Translations/ro_RO.po index 673ab37ab..ebe51d9c2 100644 --- a/Translations/ro_RO.po +++ b/Translations/ro_RO.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Romanian\n" "Language: ro_RO\n" -"PO-Revision-Date: 2024-09-11 18:44\n" +"PO-Revision-Date: 2024-10-22 10:34\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Răsturnare verticală" msgid "Preferences" msgstr "Preferințe" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "Centrare pânză" + msgid "Tile Mode" msgstr "Mod mozaic" @@ -842,6 +846,10 @@ msgstr "Limba sistemului" msgid "Display scale:" msgstr "Scară de afișare:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "Font:" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Dimensiunea fontului:" @@ -908,6 +916,16 @@ msgstr "Culoare de fundal din:" msgid "Background color:" msgstr "Culoare de fundal:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "Sincronizează opțiunile între instrumentele din stânga și cele din dreapta" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "Dacă această setare este activată, opțiunile vor fi sincronizate între instrumentul din stânga și cel din dreapta.\n" +"De exemplu, ambele instrumente vor folosi o pensulă de aceeași mărime, iar modificarea setării pentru un instrument se va aplica instantaneu și pentru cealaltă." + msgid "Left tool color:" msgstr "Culoarea instrumentului din stânga:" @@ -2028,11 +2046,19 @@ msgstr "Orizontal" msgid "Enable horizontal mirrored drawing" msgstr "Activează desenul oglindit orizontal" +msgid "Vertical" +msgstr "Vertical" + msgid "Enable vertical mirrored drawing" msgstr "Activează desenul oglindit vertical" -msgid "Vertical" -msgstr "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "Mutare în centrul pânzei" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "Mutare în centrul de vizualizare" msgid "Current frame:" msgstr "Cadrul actual:" @@ -2049,11 +2075,11 @@ msgstr "Sari la primul cadru" msgid "Go to the previous frame" msgstr "Deplasează-te la cadrul anterior" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Redă animația înapoi (de la sfârșit până la început)" +msgid "Play the animation backwards" +msgstr "" -msgid "Play the animation forward (from beginning to end)" -msgstr "Redă animația înainte (de la început până la sfârșit)" +msgid "Play the animation forward" +msgstr "" msgid "Go to the next frame" msgstr "Deplasează-te la cadrul următor" @@ -2556,6 +2582,26 @@ msgstr "Culoare implicită de umplere:" msgid "A default background color of a new image" msgstr "Culoarea implicită de fundal a unei imagini noi" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "Resetează toate opțiunile disponibile în Preferințe" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "Resetează opțiunile de cronologie" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "Resetați toate opțiunile de instrumente" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "Elimină toate extensiile" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "Șterge lista de fișiere recent deschisă" + msgid "Lock aspect ratio" msgstr "Blocare raport aspect" @@ -2731,6 +2777,14 @@ msgstr "Trunchiere imagini" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "Trunchiază imaginile exportate până la porțiunea lor vizibilă, considerând fiecare pixel cu un canal alfa non-zero ca fiind vizibil." +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "Decupează conținutul imaginii la selecție" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "Exportă doar conținut care se află în limitele unei zone selectate." + msgid "Close" msgstr "Închide" @@ -3077,6 +3131,10 @@ msgstr "Rază inferioară:" msgid "Text:" msgstr "Text:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "Adâncime:" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Dimensiune pixeli:" @@ -3088,12 +3146,19 @@ msgstr "Pasul curbei:" msgid "Horizontal alignment:" msgstr "Aliniere orizontală:" +msgid "Vertical alignment:" +msgstr "Aliniere verticală:" + msgid "Left" msgstr "Stânga" msgid "Right" msgstr "Dreapta" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "Spațiere între linii:" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Energie:" diff --git a/Translations/ru_RU.po b/Translations/ru_RU.po index cc0d0e557..b3e16a3f1 100644 --- a/Translations/ru_RU.po +++ b/Translations/ru_RU.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Russian\n" "Language: ru_RU\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "Отразить по вертикали" msgid "Preferences" msgstr "Настройки" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Режим тайла" @@ -842,6 +846,10 @@ msgstr "Системный язык" msgid "Display scale:" msgstr "Масштаб интерфейса:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Размер шрифта:" @@ -908,6 +916,15 @@ msgstr "Источник цвета фона:" msgid "Background color:" msgstr "Цвет фона:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Цвет левого инструмента:" @@ -2025,11 +2042,19 @@ msgstr "Горизонально" msgid "Enable horizontal mirrored drawing" msgstr "Режим рисования с горизонтальным зеркалированием" +msgid "Vertical" +msgstr "Вертикально" + msgid "Enable vertical mirrored drawing" msgstr "Режим рисования с вертикальным зеркалированием" -msgid "Vertical" -msgstr "Вертикально" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Текущий кадр:" @@ -2046,10 +2071,10 @@ msgstr "Перейти к первому кадру" msgid "Go to the previous frame" msgstr "На предыдущий кадр" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2553,6 +2578,26 @@ msgstr "Цвет заливки по умолчанию:" msgid "A default background color of a new image" msgstr "Цвет фона по умолчанию для нового изображения" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Заблокировать соотношение сторон" @@ -2728,6 +2773,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Закрыть" @@ -3073,6 +3126,10 @@ msgstr "Нижний радиус:" msgid "Text:" msgstr "Текст:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Размер пикселя:" @@ -3084,12 +3141,19 @@ msgstr "Шаг кривой:" msgid "Horizontal alignment:" msgstr "Горизонтальное выравнивание:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "Слева" msgid "Right" msgstr "Справа" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Энергия:" diff --git a/Translations/si_LK.po b/Translations/si_LK.po index 6d84d7be6..178dd210c 100644 --- a/Translations/si_LK.po +++ b/Translations/si_LK.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Sinhala\n" "Language: si_LK\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "හරි" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "පද්ධතියේ භාෂාව" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/sk_SK.po b/Translations/sk_SK.po index 0dd21bca4..1b0b2de66 100644 --- a/Translations/sk_SK.po +++ b/Translations/sk_SK.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Slovak\n" "Language: sk_SK\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/sl_SI.po b/Translations/sl_SI.po index 27ef2b48e..d93252fb0 100644 --- a/Translations/sl_SI.po +++ b/Translations/sl_SI.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Slovenian\n" "Language: sl_SI\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/sq_AL.po b/Translations/sq_AL.po index aa1dc151c..7596b659a 100644 --- a/Translations/sq_AL.po +++ b/Translations/sq_AL.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Albanian\n" "Language: sq_AL\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Ne rregull" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/sr_SP.po b/Translations/sr_SP.po index cc8d676ff..f084e0976 100644 --- a/Translations/sr_SP.po +++ b/Translations/sr_SP.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Serbian (Cyrillic)\n" "Language: sr_SP\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "ОК" @@ -231,6 +231,10 @@ msgstr "Обрни вертикално" msgid "Preferences" msgstr "Подешавања" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Бешавни режим" @@ -839,6 +843,10 @@ msgstr "Системски језик" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/sv_SE.po b/Translations/sv_SE.po index 2c099e0dc..f876ca01c 100644 --- a/Translations/sv_SE.po +++ b/Translations/sv_SE.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Swedish\n" "Language: sv_SE\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Okej" @@ -231,6 +231,10 @@ msgstr "Vänd Lodrätt" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,11 +1984,19 @@ msgstr "Horisontell" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "Vertikal" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" -msgstr "Vertikal" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Stäng" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/sw_KE.po b/Translations/sw_KE.po index 0c0d6b5ec..b148c7051 100644 --- a/Translations/sw_KE.po +++ b/Translations/sw_KE.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Swahili\n" "Language: sw_KE\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/ta_IN.po b/Translations/ta_IN.po index fe6a48d0f..4880f4fd9 100644 --- a/Translations/ta_IN.po +++ b/Translations/ta_IN.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Tamil\n" "Language: ta_IN\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/th_TH.po b/Translations/th_TH.po index c99954ebc..c0b81d2f0 100644 --- a/Translations/th_TH.po +++ b/Translations/th_TH.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Thai\n" "Language: th_TH\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/tlh_AA.po b/Translations/tlh_AA.po index 947b176d0..fa6e14540 100644 --- a/Translations/tlh_AA.po +++ b/Translations/tlh_AA.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Klingon\n" "Language: tlh_AA\n" -"PO-Revision-Date: 2024-09-11 15:45\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/tr_TR.po b/Translations/tr_TR.po index 30053f92e..849b69329 100644 --- a/Translations/tr_TR.po +++ b/Translations/tr_TR.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Turkish\n" "Language: tr_TR\n" -"PO-Revision-Date: 2024-09-11 20:00\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Tamam" @@ -233,6 +233,10 @@ msgstr "Dikey Döndür" msgid "Preferences" msgstr "Tercihler" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Döşeme Kipi" @@ -844,6 +848,10 @@ msgstr "Sistem Dili" msgid "Display scale:" msgstr "Ekran ölçeği:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "Yazı tipi boyutu:" @@ -910,6 +918,15 @@ msgstr "Şuradan arkaplan rengi:" msgid "Background color:" msgstr "Arkaplan rengi:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Sol araç rengi:" @@ -2030,11 +2047,19 @@ msgstr "Yatay" msgid "Enable horizontal mirrored drawing" msgstr "Çizim için yatay aynamalamayı etkinleştir" +msgid "Vertical" +msgstr "Dikey" + msgid "Enable vertical mirrored drawing" msgstr "Çizim için dikey aynamalamayı etkinleştir" -msgid "Vertical" -msgstr "Dikey" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "Tuval merkezine taşı" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "Görünüm merkezine taşı" msgid "Current frame:" msgstr "Geçerli kare:" @@ -2051,11 +2076,11 @@ msgstr "İlk kareye atla" msgid "Go to the previous frame" msgstr "Önceki kareye git" -msgid "Play the animation backwards (from end to beginning)" -msgstr "Animasyonu tersten oynat (sondan başa)" +msgid "Play the animation backwards" +msgstr "Canlandırmayı geri oynat" -msgid "Play the animation forward (from beginning to end)" -msgstr "Animasyonu ileri oynat (baştan sonra)" +msgid "Play the animation forward" +msgstr "Canlandırmayı ileri oynat" msgid "Go to the next frame" msgstr "Sonraki kareye git" @@ -2558,6 +2583,26 @@ msgstr "Varsayılan dolgu rengi:" msgid "A default background color of a new image" msgstr "Yeni resmin varsayılan arkaplan rengi" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "Tercihler'deki tüm seçenekleri sıfırla" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "Zaman çizelgesi seçeneklerini sıfırla" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "Tüm araç seçeneklerini sıfırla" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "Tüm uzantıları kaldır" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "Geçerli seçilmiş dosya listesini temizle" + msgid "Lock aspect ratio" msgstr "En boy oranını kilitle" @@ -2733,6 +2778,14 @@ msgstr "Görüntüleri kırp" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "Dışa aktarılan görüntüleri görünür kısımlarına kırpar, sıfır olmayan alfa kanalına sahip her piksel görünür kabul edilir." +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Kapat" @@ -3079,6 +3132,10 @@ msgstr "Alt yarıçap:" msgid "Text:" msgstr "Metin:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Piksel boyutu:" @@ -3090,12 +3147,19 @@ msgstr "Eğri adımı:" msgid "Horizontal alignment:" msgstr "Yatay hizalama:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "Sol" msgid "Right" msgstr "Sağ" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Enerji:" diff --git a/Translations/uk_UA.po b/Translations/uk_UA.po index 56dd51228..60e4f530e 100644 --- a/Translations/uk_UA.po +++ b/Translations/uk_UA.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "Гаразд" @@ -233,6 +233,10 @@ msgstr "Віддзеркалити по вертикалі" msgid "Preferences" msgstr "Налаштування" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "Безшовний режим" @@ -844,6 +848,10 @@ msgstr "Мова системи" msgid "Display scale:" msgstr "Масштаб екрану:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -910,6 +918,15 @@ msgstr "Колір фону з:" msgid "Background color:" msgstr "Колір фону:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "Колір лівого інструменту:" @@ -2021,11 +2038,19 @@ msgstr "Горизонтально" msgid "Enable horizontal mirrored drawing" msgstr "Увімкнути горизонтальне віддзеркалення для малювання" +msgid "Vertical" +msgstr "Вертикально" + msgid "Enable vertical mirrored drawing" msgstr "Увімкнути вертикальне віддзеркалення для малювання" -msgid "Vertical" -msgstr "Вертикально" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "Поточний кадр:" @@ -2042,10 +2067,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2549,6 +2574,26 @@ msgstr "Стандартний колір заливки:" msgid "A default background color of a new image" msgstr "Стандартний фоновий колір нового зображення" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "Зафіксувати співвідношення сторін" @@ -2724,6 +2769,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "Закрити" @@ -3069,6 +3122,10 @@ msgstr "Нижній радіус:" msgid "Text:" msgstr "Текст:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "Розмір пікселя:" @@ -3080,12 +3137,19 @@ msgstr "Крок кривої:" msgid "Horizontal alignment:" msgstr "Горизонтальне вирівнювання:" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "Вліво" msgid "Right" msgstr "Вправо" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "Енергія:" diff --git a/Translations/vi_VN.po b/Translations/vi_VN.po index 1af207637..03222f24f 100644 --- a/Translations/vi_VN.po +++ b/Translations/vi_VN.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "OK" @@ -231,6 +231,10 @@ msgstr "" msgid "Preferences" msgstr "" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "" @@ -839,6 +843,10 @@ msgstr "" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1967,10 +1984,18 @@ msgstr "" msgid "Enable horizontal mirrored drawing" msgstr "" +msgid "Vertical" +msgstr "" + msgid "Enable vertical mirrored drawing" msgstr "" -msgid "Vertical" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" msgstr "" msgid "Current frame:" @@ -1988,10 +2013,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2492,6 +2517,26 @@ msgstr "" msgid "A default background color of a new image" msgstr "" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2667,6 +2712,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "" @@ -3009,6 +3062,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3020,12 +3077,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/Translations/zh_CN.po b/Translations/zh_CN.po index 090460c10..8093e4f3e 100644 --- a/Translations/zh_CN.po +++ b/Translations/zh_CN.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "确定" @@ -233,6 +233,10 @@ msgstr "垂直翻转" msgid "Preferences" msgstr "首选项" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "平铺模式" @@ -562,7 +566,7 @@ msgstr "调整大小:" #. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file. msgid "Quality:" -msgstr "" +msgstr "质量:" msgid "Cancel Export" msgstr "取消导出" @@ -844,6 +848,10 @@ msgstr "系统语言" msgid "Display scale:" msgstr "显示比例:" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "字体大小:" @@ -910,6 +918,15 @@ msgstr "背景颜色从:" msgid "Background color:" msgstr "背景颜色:" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "左侧工具颜色:" @@ -981,23 +998,23 @@ msgstr "阴影颜色:" #. An image effect. https://en.wikipedia.org/wiki/Gaussian_blur msgid "Gaussian Blur" -msgstr "" +msgstr "高斯模糊" #. The type of the Gaussian blur, an image effect. msgid "Blur type:" -msgstr "" +msgstr "模糊类型:" #. The applied amount of Gaussian blur, an image effect. msgid "Blur amount:" -msgstr "" +msgstr "模糊数量:" #. The applied radius of Gaussian blur, an image effect. msgid "Blur radius:" -msgstr "" +msgstr "模糊半径:" #. The applied direction of Gaussian blur, an image effect. msgid "Blur direction:" -msgstr "" +msgstr "模糊方向:" msgid "Gradient" msgstr "渐变" @@ -2029,11 +2046,19 @@ msgstr "水平" msgid "Enable horizontal mirrored drawing" msgstr "启用水平镜像绘图" +msgid "Vertical" +msgstr "垂直" + msgid "Enable vertical mirrored drawing" msgstr "启用垂直镜像绘图" -msgid "Vertical" -msgstr "垂直" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "当前帧:" @@ -2050,11 +2075,11 @@ msgstr "跳转到第一帧" msgid "Go to the previous frame" msgstr "转到上一帧" -msgid "Play the animation backwards (from end to beginning)" -msgstr "向后播放动画(从结尾到开头)" +msgid "Play the animation backwards" +msgstr "" -msgid "Play the animation forward (from beginning to end)" -msgstr "向前播放动画(从头到尾)" +msgid "Play the animation forward" +msgstr "" msgid "Go to the next frame" msgstr "转到下一帧" @@ -2557,6 +2582,26 @@ msgstr "默认填充颜色:" msgid "A default background color of a new image" msgstr "设置新建图像的背景颜色" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "锁定长宽比" @@ -2726,10 +2771,18 @@ msgstr "分隔文件名称和帧编号的字符(秒)" #. Found in the export dialog. It is an option that removes the transparent area around non-transparent pixels of the exported images. msgid "Trim images" -msgstr "" +msgstr "裁剪图像" #. Found in the export dialog. Tooltip of the "trim images" option. msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." +msgstr "将导出的图像变为可见部分,考虑到非零透明通道的每个像素。" + +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." msgstr "" msgid "Close" @@ -3077,6 +3130,10 @@ msgstr "下半径:" msgid "Text:" msgstr "文本:" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "像素大小:" @@ -3088,12 +3145,19 @@ msgstr "曲线步骤:" msgid "Horizontal alignment:" msgstr "水平对齐" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "左" msgid "Right" msgstr "右" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "能量:" diff --git a/Translations/zh_TW.po b/Translations/zh_TW.po index 0ca2b814d..3a0c17970 100644 --- a/Translations/zh_TW.po +++ b/Translations/zh_TW.po @@ -10,7 +10,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" -"PO-Revision-Date: 2024-09-11 15:44\n" +"PO-Revision-Date: 2024-10-17 14:11\n" msgid "OK" msgstr "確定" @@ -231,6 +231,10 @@ msgstr "垂直翻轉" msgid "Preferences" msgstr "偏好設定" +#. An option in the View menu. When selected, the canvas is being placed on the center of the screen. +msgid "Center Canvas" +msgstr "" + msgid "Tile Mode" msgstr "拼圖模式" @@ -839,6 +843,10 @@ msgstr "系統語言" msgid "Display scale:" msgstr "" +#. Refers to the font of a text. +msgid "Font:" +msgstr "" + #. Found in the preferences, under the interface section. Allows users to set the size of the font, ie the text. msgid "Font size:" msgstr "" @@ -905,6 +913,15 @@ msgstr "" msgid "Background color:" msgstr "" +#. Found in the preferences, under the Tools category. +msgid "Share options between the left and the right tools" +msgstr "" + +#. Found in the preferences, under the Tools category. Tooltip of the "Share options between the left and the right tools" preference. +msgid "If this is enabled, options will be synced between the left and the right tool.\n" +"For example, both tools will share the same brush size, and changing it on one tool will instantly change on the other." +msgstr "" + msgid "Left tool color:" msgstr "" @@ -1977,11 +1994,19 @@ msgstr "水平" msgid "Enable horizontal mirrored drawing" msgstr "開啟水平鏡像" +msgid "Vertical" +msgstr "垂直" + msgid "Enable vertical mirrored drawing" msgstr "開啟垂直鏡像" -msgid "Vertical" -msgstr "垂直" +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to canvas center" +msgstr "" + +#. Found in the global tool options, in the menu that appears next to each mirror button. It affects the position of a symmetry guide. +msgid "Move to view center" +msgstr "" msgid "Current frame:" msgstr "目前影格:" @@ -1998,10 +2023,10 @@ msgstr "" msgid "Go to the previous frame" msgstr "" -msgid "Play the animation backwards (from end to beginning)" +msgid "Play the animation backwards" msgstr "" -msgid "Play the animation forward (from beginning to end)" +msgid "Play the animation forward" msgstr "" msgid "Go to the next frame" @@ -2503,6 +2528,26 @@ msgstr "預設背景顏色:" msgid "A default background color of a new image" msgstr "新檔案的預設背景顏色" +#. Found in the preferences, under the Reset category. +msgid "Reset all options available in the Preferences" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset timeline options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Reset all tool options" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Remove all extensions" +msgstr "" + +#. Found in the preferences, under the Reset category. +msgid "Clear the recently opened file list" +msgstr "" + msgid "Lock aspect ratio" msgstr "" @@ -2678,6 +2723,14 @@ msgstr "" msgid "Trims the exported images to their visible portion, considering each pixel with a non-zero alpha channel as visible." msgstr "" +#. Found in the export dialog. It is an option that allows users to only export the portions of the images that are within the selected area. +msgid "Clip image content to selection" +msgstr "" + +#. Found in the export dialog. Tooltip of the "clip image content to selection" option. +msgid "Only export content that is within the bounds of a selected area." +msgstr "" + msgid "Close" msgstr "關閉" @@ -3020,6 +3073,10 @@ msgstr "" msgid "Text:" msgstr "" +#. Refers to the depth of something, such as the depth of a 3D object. +msgid "Depth:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Mesh category if a Text object is selected. Refers to the size of one pixel's width on the text to scale it in 3D. msgid "Pixel size:" msgstr "" @@ -3031,12 +3088,19 @@ msgstr "" msgid "Horizontal alignment:" msgstr "" +msgid "Vertical alignment:" +msgstr "" + msgid "Left" msgstr "" msgid "Right" msgstr "" +#. Refers to the vertical space between lines in a text. +msgid "Line spacing:" +msgstr "" + #. Found in the tool options of the 3D Shape Edit tool, under the Light category if a light is selected. Refers to the energy of the light. The more energy, the brighter it shines. msgid "Energy:" msgstr "" diff --git a/installer/po/ru-RU.po b/installer/po/ru-RU.po index f8ff896e0..7461602d7 100644 --- a/installer/po/ru-RU.po +++ b/installer/po/ru-RU.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: pixelorama\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-05-07 04:44\n" -"PO-Revision-Date: 2021-05-21 17:41\n" +"PO-Revision-Date: 2024-10-20 12:52\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -65,5 +65,5 @@ msgstr "Удаляет ${APPNAME} ${APPVERSION} и удаляет все ярл #. DESC_un.SecConfig #: ..\pixelorama.nsi:204 msgid "Removes configuration files for ${APPNAME}." -msgstr "Удаляет файлы конфигурации для ${APPNAME}." +msgstr "Удаление файлов конфигурации для ${APPNAME}." From 638130c5c8b446472d42f85a7017ed7cb9ac7fd6 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 25 Oct 2024 12:02:26 +0300 Subject: [PATCH 44/47] [skip ci] Update AboutDialog.gd --- src/UI/Dialogs/AboutDialog.gd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/UI/Dialogs/AboutDialog.gd b/src/UI/Dialogs/AboutDialog.gd index a5a4ffade..a7864e078 100644 --- a/src/UI/Dialogs/AboutDialog.gd +++ b/src/UI/Dialogs/AboutDialog.gd @@ -41,6 +41,7 @@ const AUTHORS: PackedStringArray = [ "kleonc", "Laurenz Reinthaler (Schweini07)", "Marco Galli (Gaarco)", + "Mariano Semelman (msemelman)", "Marquis Kurt (alicerunsonfedora)", "Martin Novák (novhack)", "Martin Zabinski (Martin1991zab)", @@ -80,6 +81,8 @@ const TRANSLATORS_DICTIONARY := { "Nicolas.C (nico57c)": ["French"], "EGuillemot": ["French"], "Roroto Sic (Roroto_Sic)": ["French"], + "ninjdai": ["French"], + "celeste tollec (celeste73-t)": ["French"], "Schweini07": ["German"], "Martin Zabinski (Martin1991zab)": ["German"], "Manuel (DrMoebyus)": ["German"], @@ -109,13 +112,14 @@ const TRANSLATORS_DICTIONARY := { "Geraldo PMJ (geraldopmj)": ["Brazilian Portuguese"], "snorring_parrot": ["Brazilian Portuguese"], "iLeonardito (iLeoww)": ["Brazilian Portuguese"], + "Heliana Moreira (helimoreira)": ["Brazilian Portuguese"], "Andreev Andrei": ["Russian"], "ax trifonov (ax34)": ["Russian"], "Artem (blinovartem)": ["Russian"], "Иван Соколов (SokoL1337)": ["Russian"], "Daniil Belyakov (ermegil)": ["Russian"], - "pincetgore": ["Russian"], "Elijah Fronzak (pincetgore)": ["Russian"], + "toxidcheckery": ["Russian"], "stomleny_cmok": ["Russian", "Ukrainian"], "Bohdan Matviiv (BodaMat)": ["Ukrainian"], "Ruslan Hryschuk (kifflow)": ["Ukrainian"], From 6c31708e35c0aa388fc7fd2fe95f978ccaf9b8bc Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 25 Oct 2024 15:48:59 +0300 Subject: [PATCH 45/47] Release v1.0.4 --- .github/workflows/release.yml | 2 +- CHANGELOG.md | 6 +++--- Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml | 1 + installer/pixelorama.nsi | 2 +- project.godot | 2 +- src/UI/TopMenuContainer/TopMenuContainer.gd | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 33bab292e..88dc1ea45 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ on: env: GODOT_VERSION: 4.3 EXPORT_NAME: Pixelorama - TAG: v1.0.3 + TAG: v1.0.4 BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} jobs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 849995aa0..620fa510c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). All the dates are in YYYY-MM-DD format.

-## [v1.0.4] - Unreleased +## [v1.0.4] - 2024-10-25 This update has been brought to you by the contributions of: -Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind)) +Fayez Akhtar ([@Variable-ind](https://github.com/Variable-ind)), Mariano Semelman ([@msemelman](https://github.com/msemelman)) Built using Godot 4.3 @@ -18,7 +18,7 @@ Built using Godot 4.3 - Implemented the ability to change the font of the interface from the properties. - Clipping to selection during export is now possible. [#1113](https://github.com/Orama-Interactive/Pixelorama/pull/1113) - Added a preference to share options between tools. [#1120](https://github.com/Orama-Interactive/Pixelorama/pull/1120) -- Added an option to quickly center the canvas in the View menu. [#1123](https://github.com/Orama-Interactive/Pixelorama/pull/1123) +- Added an option to quickly center the canvas in the View menu. Mapped to Control + C by default. [#1123](https://github.com/Orama-Interactive/Pixelorama/pull/1123) - Added hotkeys to switch between tabs. Control+Tab to go to the next project tab, and Control+Shift+Tab to go to the previous. [#1109](https://github.com/Orama-Interactive/Pixelorama/pull/1109) - Added menus next to each of the two mirroring buttons in the Global Tool Options, that allow users to automatically move the symmetry guides to the center of the canvas, or the view center. - A new Reset category has been added to the Preferences that lets users easily restore certain options. diff --git a/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml b/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml index 121c2e5c7..22a999f26 100644 --- a/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml +++ b/Misc/Linux/com.orama_interactive.Pixelorama.appdata.xml @@ -44,6 +44,7 @@ + diff --git a/installer/pixelorama.nsi b/installer/pixelorama.nsi index cb23da9c9..3f030ebc0 100644 --- a/installer/pixelorama.nsi +++ b/installer/pixelorama.nsi @@ -6,7 +6,7 @@ ; Helper variables so that we don't change 20 instances of the version for every update !define APPNAME "Pixelorama" - !define APPVERSION "v1.0.3" + !define APPVERSION "v1.0.4" !define COMPANYNAME "Orama Interactive" diff --git a/project.godot b/project.godot index de228fe3e..e62a0444d 100644 --- a/project.godot +++ b/project.godot @@ -12,7 +12,7 @@ config_version=5 config/name="Pixelorama" config/description="Unleash your creativity with Pixelorama, a powerful and accessible open-source pixel art multitool. Whether you want to create sprites, tiles, animations, or just express yourself in the language of pixel art, this software will realize your pixel-perfect dreams with a vast toolbox of features." -config/version="v1.0.4-rc1" +config/version="v1.0.4-stable" run/main_scene="res://src/Main.tscn" config/use_custom_user_dir=true config/custom_user_dir_name="pixelorama" diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index 8a49839e0..b2342a657 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -4,7 +4,7 @@ const DOCS_URL := "https://www.oramainteractive.com/Pixelorama-Docs/" const ISSUES_URL := "https://github.com/Orama-Interactive/Pixelorama/issues" const SUPPORT_URL := "https://www.patreon.com/OramaInteractive" # gdlint: ignore=max-line-length -const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v103---2024-09-13" +const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v104---2024-10-25" const EXTERNAL_LINK_ICON := preload("res://assets/graphics/misc/external_link.svg") const PIXELORAMA_ICON := preload("res://assets/graphics/icons/icon_16x16.png") const HEART_ICON := preload("res://assets/graphics/misc/heart.svg") From aa59f73e654a2f6bab25f046641aadb4eb0138fb Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 25 Oct 2024 21:32:22 +0300 Subject: [PATCH 46/47] [skip ci] Update CHANGELOG.md --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 620fa510c..bc5500d0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,10 +15,10 @@ Built using Godot 4.3 - Added a new "color replace" mode to the Shading tool, that uses the colors of the palette to apply shading. [#1107](https://github.com/Orama-Interactive/Pixelorama/pull/1107) - Added a new Erase blend mode. [#1117](https://github.com/Orama-Interactive/Pixelorama/pull/1117) - It is now possible to change the font, depth and line spacing of 3D text. -- Implemented the ability to change the font of the interface from the properties. +- Implemented the ability to change the font of the interface from the preferences. - Clipping to selection during export is now possible. [#1113](https://github.com/Orama-Interactive/Pixelorama/pull/1113) - Added a preference to share options between tools. [#1120](https://github.com/Orama-Interactive/Pixelorama/pull/1120) -- Added an option to quickly center the canvas in the View menu. Mapped to Control + C by default. [#1123](https://github.com/Orama-Interactive/Pixelorama/pull/1123) +- Added an option to quickly center the canvas in the View menu. Mapped to Shift + C by default. [#1123](https://github.com/Orama-Interactive/Pixelorama/pull/1123) - Added hotkeys to switch between tabs. Control+Tab to go to the next project tab, and Control+Shift+Tab to go to the previous. [#1109](https://github.com/Orama-Interactive/Pixelorama/pull/1109) - Added menus next to each of the two mirroring buttons in the Global Tool Options, that allow users to automatically move the symmetry guides to the center of the canvas, or the view center. - A new Reset category has been added to the Preferences that lets users easily restore certain options. From 2d9a582f21672a199a0e39e67765403bdd21b9c3 Mon Sep 17 00:00:00 2001 From: Variable <77773850+Variable-ind@users.noreply.github.com> Date: Sat, 26 Oct 2024 03:31:52 +0500 Subject: [PATCH 47/47] Added an OKHSL Lightness sorting in palette (#1126) * added a lightness sort system * static check * lightness * formatting * more formatting * more formatting --- src/Autoload/Palettes.gd | 2 +- src/Palette/Palette.gd | 32 ++++++++++++++++++++++++++++++++ src/Palette/PalettePanel.gd | 2 ++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Autoload/Palettes.gd b/src/Autoload/Palettes.gd index aee7ff6b2..4aa1c8588 100644 --- a/src/Autoload/Palettes.gd +++ b/src/Autoload/Palettes.gd @@ -4,7 +4,7 @@ signal palette_selected(palette_name: String) signal new_palette_created signal new_palette_imported -enum SortOptions { NEW_PALETTE, REVERSE, HUE, SATURATION, VALUE, RED, GREEN, BLUE, ALPHA } +enum SortOptions {NEW_PALETTE, REVERSE, HUE, SATURATION, VALUE, LIGHTNESS, RED, GREEN, BLUE, ALPHA} ## Presets for creating a new palette enum NewPalettePresetType {EMPTY, FROM_CURRENT_PALETTE, FROM_CURRENT_SPRITE, FROM_CURRENT_SELECTION} ## Color options when user creates a new palette from current sprite or selection diff --git a/src/Palette/Palette.gd b/src/Palette/Palette.gd index 3fda63a60..e2f480f78 100644 --- a/src/Palette/Palette.gd +++ b/src/Palette/Palette.gd @@ -287,6 +287,38 @@ func sort(option: Palettes.SortOptions) -> void: sort_method = func(a: PaletteColor, b: PaletteColor): return a.color.s < b.color.s Palettes.SortOptions.VALUE: sort_method = func(a: PaletteColor, b: PaletteColor): return a.color.v < b.color.v + Palettes.SortOptions.LIGHTNESS: + # Code inspired from: + # gdlint: ignore=max-line-length + # https://github.com/bottosson/bottosson.github.io/blob/master/misc/colorpicker/colorconversion.js#L519 + sort_method = func(a: PaletteColor, b: PaletteColor): + # function that returns OKHSL lightness + var lum: Callable = func(c: Color): + var l = 0.4122214708 * (c.r) + 0.5363325363 * (c.g) + 0.0514459929 * (c.b) + var m = 0.2119034982 * (c.r) + 0.6806995451 * (c.g) + 0.1073969566 * (c.b) + var s = 0.0883024619 * (c.r) + 0.2817188376 * (c.g) + 0.6299787005 * (c.b) + var l_cr = pow(l, 1 / 3.0) + var m_cr = pow(m, 1 / 3.0) + var s_cr = pow(s, 1 / 3.0) + var oklab_l = 0.2104542553 * l_cr + 0.7936177850 * m_cr - 0.0040720468 * s_cr + # calculating toe + var k_1 = 0.206 + var k_2 = 0.03 + var k_3 = (1 + k_1) / (1 + k_2) + return ( + 0.5 + * ( + k_3 * oklab_l + - k_1 + + sqrt( + ( + (k_3 * oklab_l - k_1) * (k_3 * oklab_l - k_1) + + 4 * k_2 * k_3 * oklab_l + ) + ) + ) + ) + return lum.call(a.color.srgb_to_linear()) < lum.call(b.color.srgb_to_linear()) Palettes.SortOptions.RED: sort_method = func(a: PaletteColor, b: PaletteColor): return a.color.r < b.color.r Palettes.SortOptions.GREEN: diff --git a/src/Palette/PalettePanel.gd b/src/Palette/PalettePanel.gd index 50ee1a9e5..7cc64c42d 100644 --- a/src/Palette/PalettePanel.gd +++ b/src/Palette/PalettePanel.gd @@ -49,6 +49,8 @@ func _ready() -> void: sort_button_popup.add_item("Sort by saturation", Palettes.SortOptions.SATURATION) sort_button_popup.add_item("Sort by value", Palettes.SortOptions.VALUE) sort_button_popup.add_separator() + sort_button_popup.add_item("Sort by lightness", Palettes.SortOptions.LIGHTNESS) + sort_button_popup.add_separator() sort_button_popup.add_item("Sort by red", Palettes.SortOptions.RED) sort_button_popup.add_item("Sort by green", Palettes.SortOptions.GREEN) sort_button_popup.add_item("Sort by blue", Palettes.SortOptions.BLUE)