From 20f28ff49234726a79ce7e7d17e7a19b6837c47f Mon Sep 17 00:00:00 2001 From: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com> Date: Mon, 13 Jul 2020 21:17:08 +0300 Subject: [PATCH] Import project brushes from an image file --- CHANGELOG.md | 1 + Translations/Translations.pot | 18 ++++++++++++++ src/UI/Dialogs/PreviewDialog.gd | 32 ++++++++++++++++++------ src/UI/Dialogs/PreviewDialog.tscn | 41 +++++++++++++++++++++++-------- 4 files changed, 74 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f35261c13..934b7adce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ Darshan Phaldesai (luiq54), Igor Santarek (jegor377), rob-a-bolton, Kinwailo - You can import image files as brushes, patterns and palettes. - Added "Copy", "Paste" and "Delete" options in the Edit menu. ([#281](https://github.com/Orama-Interactive/Pixelorama/pull/281)) - Selection region and size are now being shown when making a selection on the top, next to the position label. ([#281](https://github.com/Orama-Interactive/Pixelorama/pull/281)) +- Added color overwrite option for the Pencil tool. ([#282](https://github.com/Orama-Interactive/Pixelorama/pull/282)) ### Changed - Drawing is no longer limited by the canvas boundaries. This means that, if you have a brush largen than 1px, you can draw on the edges of the canvas. All pixels that are being drawn outside of the canvas will still have no effect. diff --git a/Translations/Translations.pot b/Translations/Translations.pot index b813106ef..93b6db2e6 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -193,6 +193,18 @@ msgstr "" msgid "Vertical frames:" msgstr "" +msgid "Brush type:" +msgstr "" + +msgid "File brush" +msgstr "" + +msgid "Project brush" +msgstr "" + +msgid "Random brush" +msgstr "" + msgid "Save Sprite as .pxo" msgstr "" @@ -705,6 +717,12 @@ msgstr "" msgid "Brush size:" msgstr "" +msgid "Overwrite" +msgstr "" + +msgid "Pixel Perfect" +msgstr "" + msgid "Brush color from" msgstr "" diff --git a/src/UI/Dialogs/PreviewDialog.gd b/src/UI/Dialogs/PreviewDialog.gd index ac3c21533..21d3ba4e0 100644 --- a/src/UI/Dialogs/PreviewDialog.gd +++ b/src/UI/Dialogs/PreviewDialog.gd @@ -2,6 +2,7 @@ extends ConfirmationDialog enum ImageImportOptions {NEW_TAB, SPRITESHEET, NEW_FRAME, NEW_LAYER, PALETTE, BRUSH, PATTERN} +enum BrushTypes {FILE, PROJECT, RANDOM} var path : String var image : Image @@ -15,6 +16,7 @@ onready var frame_size_label : Label = $VBoxContainer/SizeContainer/FrameSizeLab onready var spritesheet_options = $VBoxContainer/HBoxContainer/SpritesheetOptions onready var new_frame_options = $VBoxContainer/HBoxContainer/NewFrameOptions onready var new_layer_options = $VBoxContainer/HBoxContainer/NewLayerOptions +onready var new_brush_options = $VBoxContainer/HBoxContainer/NewBrushOptions func _on_PreviewDialog_about_to_show() -> void: @@ -55,14 +57,8 @@ func _on_PreviewDialog_confirmed() -> void: Global.palette_container.import_image_palette(path, image) elif current_import_option == ImageImportOptions.BRUSH: - var file_name : String = path.get_basename().get_file() - image.convert(Image.FORMAT_RGBA8) - Brushes.add_file_brush([image], file_name) - - # Copy the image file into the "pixelorama/Brushes" directory - var location := "Brushes".plus_file(path.get_file()) - var dir = Directory.new() - dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location)) + var brush_type_option : int = new_brush_options.get_node("BrushTypeOption").selected + add_brush(brush_type_option) elif current_import_option == ImageImportOptions.PATTERN: var file_name : String = path.get_basename().get_file() @@ -81,6 +77,7 @@ func _on_ImportOption_item_selected(id : int) -> void: spritesheet_options.visible = false new_frame_options.visible = false new_layer_options.visible = false + new_brush_options.visible = false texture_rect.get_child(0).visible = false texture_rect.get_child(1).visible = false @@ -98,6 +95,9 @@ func _on_ImportOption_item_selected(id : int) -> void: new_layer_options.visible = true new_layer_options.get_node("AtFrameSpinbox").max_value = Global.current_project.frames.size() + elif id == ImageImportOptions.BRUSH: + new_brush_options.visible = true + func _on_HorizontalFrames_value_changed(value : int) -> void: spritesheet_horizontal = value @@ -151,3 +151,19 @@ func spritesheet_frame_value_changed(value : int, vertical : bool) -> void: var frame_width = floor(image.get_size().x / spritesheet_horizontal) var frame_height = floor(image.get_size().y / spritesheet_vertical) frame_size_label.text = tr("Frame Size") + ": " + str(frame_width) + "×" + str(frame_height) + + +func add_brush(type : int) -> void: + var file_name : String = path.get_basename().get_file() + image.convert(Image.FORMAT_RGBA8) + if type == BrushTypes.FILE: + Brushes.add_file_brush([image], file_name) + + # Copy the image file into the "pixelorama/Brushes" directory + var location := "Brushes".plus_file(path.get_file()) + var dir = Directory.new() + dir.copy(path, Global.directory_module.xdg_data_home.plus_file(location)) + + elif type == BrushTypes.PROJECT: + Global.current_project.brushes.append(image) + Brushes.add_project_brush(image) diff --git a/src/UI/Dialogs/PreviewDialog.tscn b/src/UI/Dialogs/PreviewDialog.tscn index 4195fe952..27296d0c3 100644 --- a/src/UI/Dialogs/PreviewDialog.tscn +++ b/src/UI/Dialogs/PreviewDialog.tscn @@ -26,15 +26,15 @@ __meta__ = { } [node name="CenterContainer" type="CenterContainer" parent="VBoxContainer"] -margin_right = 534.0 +margin_right = 706.0 margin_bottom = 300.0 __meta__ = { "_edit_use_anchors_": false } [node name="TextureRect" type="TextureRect" parent="VBoxContainer/CenterContainer"] -margin_left = 117.0 -margin_right = 417.0 +margin_left = 203.0 +margin_right = 503.0 margin_bottom = 300.0 rect_min_size = Vector2( 300, 300 ) expand = true @@ -49,12 +49,12 @@ __meta__ = { [node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer"] margin_top = 304.0 -margin_right = 534.0 +margin_right = 706.0 margin_bottom = 318.0 custom_constants/separation = 32 [node name="ImageSizeLabel" type="Label" parent="VBoxContainer/SizeContainer"] -margin_right = 117.0 +margin_right = 118.0 margin_bottom = 14.0 text = "Image Size: 64×64" @@ -67,7 +67,7 @@ text = "Frame size: 64×64" [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] margin_top = 322.0 -margin_right = 534.0 +margin_right = 706.0 margin_bottom = 342.0 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] @@ -142,23 +142,44 @@ max_value = 0.0 [node name="NewLayerOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"] visible = false margin_left = 155.0 -margin_right = 286.0 +margin_right = 292.0 margin_bottom = 24.0 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewLayerOptions"] margin_top = 5.0 -margin_right = 53.0 +margin_right = 59.0 margin_bottom = 19.0 text = "At frame:" [node name="AtFrameSpinbox" type="SpinBox" parent="VBoxContainer/HBoxContainer/NewLayerOptions"] -margin_left = 57.0 -margin_right = 131.0 +margin_left = 63.0 +margin_right = 137.0 margin_bottom = 24.0 mouse_default_cursor_shape = 2 min_value = 1.0 max_value = 1.0 value = 1.0 + +[node name="NewBrushOptions" type="HBoxContainer" parent="VBoxContainer/HBoxContainer"] +visible = false +margin_left = 155.0 +margin_right = 324.0 +margin_bottom = 20.0 + +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer/NewBrushOptions"] +margin_top = 3.0 +margin_right = 73.0 +margin_bottom = 17.0 +text = "Brush type:" + +[node name="BrushTypeOption" type="OptionButton" parent="VBoxContainer/HBoxContainer/NewBrushOptions"] +margin_left = 77.0 +margin_right = 169.0 +margin_bottom = 20.0 +mouse_default_cursor_shape = 2 +text = "File brush" +items = [ "File brush", null, false, 0, null, "Project brush", null, false, 1, null, "Random brush", null, true, 2, null ] +selected = 0 [connection signal="about_to_show" from="." to="." method="_on_PreviewDialog_about_to_show"] [connection signal="confirmed" from="." to="." method="_on_PreviewDialog_confirmed"] [connection signal="popup_hide" from="." to="." method="_on_PreviewDialog_popup_hide"]