Merge branch 'master' into text-tool
21
CHANGELOG.md
|
@ -5,10 +5,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||
<br><br>
|
||||
|
||||
## [v0.8.1] - Unreleased
|
||||
This update has been brought to you by the contributions of:
|
||||
Laurenz Reinthaler (Schweini07), PinyaColada
|
||||
|
||||
### Added
|
||||
- Buttons for moving the current frame left or right. ([#344](https://github.com/Orama-Interactive/Pixelorama/pull/344))
|
||||
- Creating palettes from sprites has been enhanced - you can now choose if you want to get colors from the selection, current cel, entire frame or all frames, and if you want the colors to have an alpha component.
|
||||
- A new "Cut" option in the Edit menu or by pressing `Ctrl-X`. It cuts (deletes & copies) the selection, and you can later paste it. ([#345](https://github.com/Orama-Interactive/Pixelorama/pull/345))
|
||||
- A new purple theme.
|
||||
|
||||
### Changed
|
||||
- Guides now move with a step of 0.5 pixels. That makes it possible to have guides (and symmetry guides) to be in the middle of pixels.
|
||||
- Changed how Dark, Gray, Caramel and Light themes look. All theme elements now have the same spacing and margins.
|
||||
|
||||
### Fixed
|
||||
- Fixed crash where Pixelorama could not load a cached sub-resource - [Issue #339](https://github.com/Orama-Interactive/Pixelorama/issues/339)
|
||||
- Most likely fixed an issue that occurred when the user attempted to export the project, which failed due to a locking error (error code 23). (Part of [#331](https://github.com/Orama-Interactive/Pixelorama/issues/3391))
|
||||
- Fixed crash where Pixelorama could not load a cached sub-resource. ([#339](https://github.com/Orama-Interactive/Pixelorama/issues/339))
|
||||
- When moving tabs, the projects now move along with their respective tabs.
|
||||
- Fixed crash where the animation was playing in the mini canvas preview and then the user switched to a project with less frames.
|
||||
- Fixed issue with the selection rectangle, where if it was being moved while using paste or delete, it went back to its original position. ([#346](https://github.com/Orama-Interactive/Pixelorama/pull/346))
|
||||
<br><br>
|
||||
|
||||
## [v0.8] - 2020-09-23
|
||||
|
@ -216,9 +231,9 @@ sapient-cogbag, Kinwailo, Igor Santarek (jegor377), Dávid Gábor BODOR (dragonf
|
|||
- The grid options are now being updated realtime when they're being changed from the preferences, and they are also being saved in the config cache file.
|
||||
|
||||
### Fixed
|
||||
- Fixed crash that occured when trying to delete contents of a selection, that were outside the canvas.
|
||||
- Fixed crash that occurred when trying to delete contents of a selection, that were outside the canvas.
|
||||
- Fixed .gpl palettes not being imported correctly - Issue #112
|
||||
- Fixed crash that occured when pressing the play buttons on the timeline, on Godot 3.2 - Issue #111
|
||||
- Fixed crash that occurred when pressing the play buttons on the timeline, on Godot 3.2 - Issue #111
|
||||
- Fixed bug where, if you had a random brush selected and then selected the pencil tool, "brush color from" did not appear.
|
||||
- Fixed crash on Godot 3.2.beta6 when pressing the Edit Palette button.
|
||||
- The canvas updates automatically when onion skinning settings change.
|
||||
|
|
|
@ -103,6 +103,9 @@ msgstr ""
|
|||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Cut"
|
||||
msgstr ""
|
||||
|
||||
msgid "Paste"
|
||||
msgstr ""
|
||||
|
||||
|
@ -407,6 +410,9 @@ msgstr ""
|
|||
msgid "Light"
|
||||
msgstr ""
|
||||
|
||||
msgid "Purple"
|
||||
msgstr ""
|
||||
|
||||
msgid "Only affect selection"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1200,10 +1206,10 @@ msgstr ""
|
|||
msgid "File autosaved"
|
||||
msgstr ""
|
||||
|
||||
msgid "File failed to open"
|
||||
msgid "File failed to open. Error code %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "File failed to save"
|
||||
msgid "File failed to save. Error code %s"
|
||||
msgstr ""
|
||||
|
||||
msgid "File exported"
|
||||
|
@ -1242,6 +1248,15 @@ msgstr ""
|
|||
msgid "Edit Palette"
|
||||
msgstr ""
|
||||
|
||||
msgid "Create colors with alpha component"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get colors only from selection"
|
||||
msgstr ""
|
||||
|
||||
msgid "Get colors from"
|
||||
msgstr ""
|
||||
|
||||
msgid "Patrons:"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1404,3 +1419,9 @@ msgstr ""
|
|||
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
msgid "Move the selected frame to the left."
|
||||
msgstr ""
|
||||
|
||||
msgid "Move the selected frame to the right."
|
||||
msgstr ""
|
||||
|
|
BIN
assets/graphics/dark_themes/timeline/move_arrow.png
Normal file
After Width: | Height: | Size: 143 B |
|
@ -2,15 +2,15 @@
|
|||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/hsplit.png-a437d5e2d0493714b9a4bb4e31df7099.stex"
|
||||
path="res://.import/move_arrow.png-a7e1075bf6415244d8e7290d244180b2.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/dark/icons/hsplit.png"
|
||||
dest_files=[ "res://.import/hsplit.png-a437d5e2d0493714b9a4bb4e31df7099.stex" ]
|
||||
source_file="res://assets/graphics/dark_themes/timeline/move_arrow.png"
|
||||
dest_files=[ "res://.import/move_arrow.png-a7e1075bf6415244d8e7290d244180b2.stex" ]
|
||||
|
||||
[params]
|
||||
|
BIN
assets/graphics/dark_themes/timeline/move_arrow_disabled.png
Normal file
After Width: | Height: | Size: 142 B |
|
@ -2,15 +2,15 @@
|
|||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/spinbox.png-db435fcd46b95ff41e6b2b17aece2be9.stex"
|
||||
path="res://.import/move_arrow_disabled.png-52a5629e1ae2c34034b70ce489237c77.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/dark/icons/spinbox.png"
|
||||
dest_files=[ "res://.import/spinbox.png-db435fcd46b95ff41e6b2b17aece2be9.stex" ]
|
||||
source_file="res://assets/graphics/dark_themes/timeline/move_arrow_disabled.png"
|
||||
dest_files=[ "res://.import/move_arrow_disabled.png-52a5629e1ae2c34034b70ce489237c77.stex" ]
|
||||
|
||||
[params]
|
||||
|
BIN
assets/graphics/light_themes/timeline/move_arrow.png
Normal file
After Width: | Height: | Size: 144 B |
|
@ -2,15 +2,15 @@
|
|||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/grabber.png-81d4e5de8b8d25ef28043e12477a5047.stex"
|
||||
path="res://.import/move_arrow.png-5ac1f48e226beb6e78d77de0e04d0b5e.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/dark/icons/grabber.png"
|
||||
dest_files=[ "res://.import/grabber.png-81d4e5de8b8d25ef28043e12477a5047.stex" ]
|
||||
source_file="res://assets/graphics/light_themes/timeline/move_arrow.png"
|
||||
dest_files=[ "res://.import/move_arrow.png-5ac1f48e226beb6e78d77de0e04d0b5e.stex" ]
|
||||
|
||||
[params]
|
||||
|
BIN
assets/graphics/light_themes/timeline/move_arrow_disabled.png
Normal file
After Width: | Height: | Size: 144 B |
|
@ -2,15 +2,15 @@
|
|||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/grabber_hover.png-6e0d9c77ceadc2d1632c9a85a7911876.stex"
|
||||
path="res://.import/move_arrow_disabled.png-c34712e4f610edb14fd2ab4a585a557a.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/dark/icons/grabber_hover.png"
|
||||
dest_files=[ "res://.import/grabber_hover.png-6e0d9c77ceadc2d1632c9a85a7911876.stex" ]
|
||||
source_file="res://assets/graphics/light_themes/timeline/move_arrow_disabled.png"
|
||||
dest_files=[ "res://.import/move_arrow_disabled.png-c34712e4f610edb14fd2ab4a585a557a.stex" ]
|
||||
|
||||
[params]
|
||||
|
Before Width: | Height: | Size: 639 B |
Before Width: | Height: | Size: 629 B |
Before Width: | Height: | Size: 592 B |
Before Width: | Height: | Size: 602 B |
Before Width: | Height: | Size: 591 B |
|
@ -1,34 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/vsplit.png-3c495e075085fe8f9088eedeae9fcbcb.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/dark/icons/vsplit.png"
|
||||
dest_files=[ "res://.import/vsplit.png-3c495e075085fe8f9088eedeae9fcbcb.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=false
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
1764
assets/themes/green/theme.tres
Normal file
Before Width: | Height: | Size: 3.4 KiB |
|
@ -1,34 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/grabber.png-61927377c05a6faab6f5ad8d64517a4e.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/light/icons/grabber.png"
|
||||
dest_files=[ "res://.import/grabber.png-61927377c05a6faab6f5ad8d64517a4e.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=false
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
Before Width: | Height: | Size: 2.4 KiB |
|
@ -1,34 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/grabber_hover.png-50ed6eb83ae0f5e6818d3317f3ea7425.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/light/icons/grabber_hover.png"
|
||||
dest_files=[ "res://.import/grabber_hover.png-50ed6eb83ae0f5e6818d3317f3ea7425.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=false
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,34 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/hsplit.png-cff421f387a40a015e4864c4aad31efb.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/light/icons/hsplit.png"
|
||||
dest_files=[ "res://.import/hsplit.png-cff421f387a40a015e4864c4aad31efb.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=false
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
Before Width: | Height: | Size: 598 B |
|
@ -1,34 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/spinbox.png-d344968329ae29b64e56a477dcbd82f4.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/light/icons/spinbox.png"
|
||||
dest_files=[ "res://.import/spinbox.png-d344968329ae29b64e56a477dcbd82f4.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=false
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,34 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/vsplit.png-42d8c8f71ee9dacedb0f21c441def848.stex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/themes/light/icons/vsplit.png"
|
||||
dest_files=[ "res://.import/vsplit.png-42d8c8f71ee9dacedb0f21c441def848.stex" ]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/bptc_ldr=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=false
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
process/invert_color=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
||||
svg/scale=1.0
|
1764
assets/themes/orange/theme.tres
Normal file
1781
assets/themes/purple/theme.tres
Normal file
|
@ -422,6 +422,9 @@ left_text_tool={
|
|||
right_text_tool={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null)
|
||||
cut={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":88,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
|
|
|
@ -68,15 +68,16 @@ func external_export() -> void:
|
|||
|
||||
|
||||
func process_frame() -> void:
|
||||
processed_images.clear()
|
||||
var frame = Global.current_project.frames[frame_number - 1]
|
||||
var image := Image.new()
|
||||
image.create(Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8)
|
||||
blend_layers(image, frame)
|
||||
processed_images.clear()
|
||||
processed_images.append(image)
|
||||
|
||||
|
||||
func process_spritesheet() -> void:
|
||||
processed_images.clear()
|
||||
# Range of frames determined by tags
|
||||
var frames := []
|
||||
if frame_current_tag > 0:
|
||||
|
@ -98,7 +99,6 @@ func process_spritesheet() -> void:
|
|||
|
||||
var whole_image := Image.new()
|
||||
whole_image.create(width, height, false, Image.FORMAT_RGBA8)
|
||||
whole_image.lock()
|
||||
var origin := Vector2.ZERO
|
||||
var hh := 0
|
||||
var vv := 0
|
||||
|
@ -124,7 +124,6 @@ func process_spritesheet() -> void:
|
|||
origin.x = Global.current_project.size.x * vv
|
||||
blend_layers(whole_image, frame, origin)
|
||||
|
||||
processed_images.clear()
|
||||
processed_images.append(whole_image)
|
||||
|
||||
|
||||
|
@ -185,14 +184,12 @@ func export_processed_images(ignore_overwrites: bool, export_dialog: AcceptDialo
|
|||
gif_export_thread.start(self, "export_gif", {"export_dialog": export_dialog, "export_paths": export_paths})
|
||||
else:
|
||||
for i in range(processed_images.size()):
|
||||
processed_images[i].unlock()
|
||||
if OS.get_name() == "HTML5":
|
||||
Html5FileExchange.save_image(processed_images[i], export_paths[i].get_file())
|
||||
else:
|
||||
var err = processed_images[i].save_png(export_paths[i])
|
||||
if err != OK:
|
||||
OS.alert("Can't save file. Error code: %s" % err)
|
||||
processed_images[i].lock()
|
||||
|
||||
# Store settings for quick export and when the dialog is opened again
|
||||
was_exported = true
|
||||
|
@ -321,6 +318,7 @@ func blend_layers(image : Image, frame : Frame, origin : Vector2 = Vector2(0, 0)
|
|||
var alpha : float = pixel_color.a * cel.opacity
|
||||
cel_image.set_pixel(xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha))
|
||||
image.blend_rect(cel_image, Rect2(Global.canvas.location, Global.current_project.size), origin)
|
||||
cel_image.unlock()
|
||||
layer_i += 1
|
||||
image.unlock()
|
||||
|
||||
|
|
|
@ -139,6 +139,8 @@ var tag_container : Control
|
|||
var tag_dialog : AcceptDialog
|
||||
|
||||
var remove_frame_button : BaseButton
|
||||
var move_left_frame_button : BaseButton
|
||||
var move_right_frame_button : BaseButton
|
||||
|
||||
var remove_layer_button : BaseButton
|
||||
var move_up_layer_button : BaseButton
|
||||
|
@ -233,6 +235,8 @@ func _ready() -> void:
|
|||
tag_dialog = find_node_by_name(animation_timeline, "FrameTagDialog")
|
||||
|
||||
remove_frame_button = find_node_by_name(animation_timeline, "DeleteFrame")
|
||||
move_left_frame_button = find_node_by_name(animation_timeline, "MoveLeft")
|
||||
move_right_frame_button = find_node_by_name(animation_timeline, "MoveRight")
|
||||
|
||||
remove_layer_button = find_node_by_name(animation_timeline, "RemoveLayer")
|
||||
move_up_layer_button = find_node_by_name(animation_timeline, "MoveUpLayer")
|
||||
|
|
|
@ -53,7 +53,7 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void:
|
|||
err = file.open(path, File.READ) # If the file is not compressed open it raw (pre-v0.7)
|
||||
|
||||
if err != OK:
|
||||
Global.notification_label("File failed to open")
|
||||
Global.notification_label(tr("File failed to open. Error code %s") % err)
|
||||
file.close()
|
||||
return
|
||||
|
||||
|
@ -317,7 +317,7 @@ func save_pxo_file(path : String, autosave : bool, use_zstd_compression := true,
|
|||
Global.file_menu.get_popup().set_item_text(3, tr("Save") + " %s" % path.get_file())
|
||||
|
||||
else:
|
||||
Global.notification_label("File failed to save")
|
||||
Global.notification_label(tr("File failed to save. Error code %s") % err)
|
||||
file.close()
|
||||
|
||||
|
||||
|
|
|
@ -136,6 +136,8 @@ func change_project() -> void:
|
|||
Global.current_frame_mark_label.text = "%s/%s" % [str(current_frame + 1), frames.size()]
|
||||
|
||||
Global.disable_button(Global.remove_frame_button, frames.size() == 1)
|
||||
Global.disable_button(Global.move_left_frame_button, frames.size() == 1 or current_frame == 0)
|
||||
Global.disable_button(Global.move_right_frame_button, frames.size() == 1 or current_frame == frames.size() - 1)
|
||||
toggle_layer_buttons_layers()
|
||||
toggle_layer_buttons_current_layer()
|
||||
|
||||
|
@ -436,6 +438,8 @@ func frame_changed(value : int) -> void:
|
|||
layers[current_layer].frame_container.get_child(current_frame).pressed = true
|
||||
|
||||
Global.disable_button(Global.remove_frame_button, frames.size() == 1)
|
||||
Global.disable_button(Global.move_left_frame_button, frames.size() == 1 or current_frame == 0)
|
||||
Global.disable_button(Global.move_right_frame_button, frames.size() == 1 or current_frame == frames.size() - 1)
|
||||
|
||||
Global.canvas.update()
|
||||
Global.transparent_checker._ready() # To update the rect size
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
extends GridContainer
|
||||
|
||||
|
||||
enum {CEL, FRAME, ALL_FRAMES}
|
||||
|
||||
const palette_button = preload("res://src/Palette/PaletteButton.tscn")
|
||||
|
||||
var current_palette = "Default"
|
||||
var from_palette : Palette
|
||||
|
||||
onready var palette_from_sprite_dialog = $"../../../../PaletteFromSpriteDialog"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_load_palettes()
|
||||
|
@ -117,7 +122,8 @@ func add_palette_menu_id_pressed(id : int) -> void:
|
|||
1: # Import Palette
|
||||
on_import_palette()
|
||||
2: # Create Palette From Current Sprite
|
||||
create_palette_from_sprite()
|
||||
palette_from_sprite_dialog.popup_centered()
|
||||
Global.dialog_open(true)
|
||||
|
||||
|
||||
func create_new_palette(name : String, _from_palette : Palette) -> String: # Returns empty string, else error string
|
||||
|
@ -188,18 +194,51 @@ func create_palette_from_sprite() -> void:
|
|||
Global.error_dialog.set_text(result)
|
||||
Global.error_dialog.popup_centered()
|
||||
Global.dialog_open(true)
|
||||
else:
|
||||
var current_cel : Cel = current_project.frames[current_project.current_frame].cels[current_project.current_layer]
|
||||
var cel_image : Image = current_cel.image
|
||||
var palette : Palette = Global.palettes[current_palette]
|
||||
for x in cel_image.get_size().x:
|
||||
for y in cel_image.get_size().y:
|
||||
var color : Color = cel_image.get_pixel(x, y)
|
||||
if color.a > 0 and !palette.has_color(color):
|
||||
palette.add_color(color)
|
||||
return
|
||||
|
||||
save_palette(current_palette, current_palette + ".json")
|
||||
_display_palette(palette)
|
||||
var alpha_checkbox : CheckBox = palette_from_sprite_dialog.get_node("VBoxContainer/AlphaCheckBox")
|
||||
var selection_checkbox : CheckBox = palette_from_sprite_dialog.get_node("VBoxContainer/SelectionCheckBox")
|
||||
var colors_from_optionbutton : OptionButton = palette_from_sprite_dialog.get_node("VBoxContainer/HBoxContainer/ColorsFromOptionButton")
|
||||
|
||||
var palette : Palette = Global.palettes[current_palette]
|
||||
var pixels := []
|
||||
|
||||
if selection_checkbox.pressed:
|
||||
pixels = current_project.selected_pixels.duplicate()
|
||||
else:
|
||||
for x in current_project.size.x:
|
||||
for y in current_project.size.y:
|
||||
pixels.append(Vector2(x, y))
|
||||
|
||||
var cels := []
|
||||
match colors_from_optionbutton.selected:
|
||||
CEL:
|
||||
cels.append(current_project.frames[current_project.current_frame].cels[current_project.current_layer])
|
||||
FRAME:
|
||||
for cel in current_project.frames[current_project.current_frame].cels:
|
||||
cels.append(cel)
|
||||
ALL_FRAMES:
|
||||
for frame in current_project.frames:
|
||||
for cel in frame.cels:
|
||||
cels.append(cel)
|
||||
|
||||
for cel in cels:
|
||||
var cel_image := Image.new()
|
||||
cel_image.copy_from(cel.image)
|
||||
cel_image.lock()
|
||||
if cel_image.is_invisible():
|
||||
continue
|
||||
for i in pixels:
|
||||
var color : Color = cel_image.get_pixelv(i)
|
||||
if color.a > 0:
|
||||
if !alpha_checkbox.pressed:
|
||||
color.a = 1
|
||||
if !palette.has_color(color):
|
||||
palette.add_color(color)
|
||||
cel_image.unlock()
|
||||
|
||||
save_palette(current_palette, current_palette + ".json")
|
||||
_display_palette(palette)
|
||||
|
||||
|
||||
func _on_PaletteOptionButton_item_selected(ID : int) -> void:
|
||||
|
@ -373,3 +412,11 @@ func _on_NewPaletteDialog_popup_hide() -> void:
|
|||
|
||||
func _on_RemovePalette_pressed() -> void:
|
||||
remove_palette(current_palette)
|
||||
|
||||
|
||||
func _on_PaletteFromSpriteDialog_confirmed() -> void:
|
||||
create_palette_from_sprite()
|
||||
|
||||
|
||||
func _on_PaletteFromSpriteDialog_popup_hide() -> void:
|
||||
Global.dialog_open(false)
|
||||
|
|
|
@ -190,6 +190,60 @@ margin_left = 7.0
|
|||
margin_top = 7.0
|
||||
margin_right = 607.0
|
||||
margin_bottom = 577.0
|
||||
|
||||
[node name="PaletteFromSpriteDialog" type="ConfirmationDialog" parent="."]
|
||||
margin_left = 7.0
|
||||
margin_top = 7.0
|
||||
margin_right = 281.0
|
||||
margin_bottom = 127.0
|
||||
window_title = "Create Palette From Current Sprite"
|
||||
resizable = true
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="PaletteFromSpriteDialog"]
|
||||
margin_left = 8.0
|
||||
margin_top = 8.0
|
||||
margin_right = 266.0
|
||||
margin_bottom = 84.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="AlphaCheckBox" type="CheckBox" parent="PaletteFromSpriteDialog/VBoxContainer"]
|
||||
margin_right = 258.0
|
||||
margin_bottom = 24.0
|
||||
mouse_default_cursor_shape = 2
|
||||
pressed = true
|
||||
text = "Create colors with alpha component"
|
||||
|
||||
[node name="SelectionCheckBox" type="CheckBox" parent="PaletteFromSpriteDialog/VBoxContainer"]
|
||||
margin_top = 28.0
|
||||
margin_right = 258.0
|
||||
margin_bottom = 52.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "Get colors only from selection"
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="PaletteFromSpriteDialog/VBoxContainer"]
|
||||
margin_top = 56.0
|
||||
margin_right = 258.0
|
||||
margin_bottom = 76.0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Label" type="Label" parent="PaletteFromSpriteDialog/VBoxContainer/HBoxContainer"]
|
||||
margin_top = 3.0
|
||||
margin_right = 104.0
|
||||
margin_bottom = 17.0
|
||||
text = "Get colors from:"
|
||||
|
||||
[node name="ColorsFromOptionButton" type="OptionButton" parent="PaletteFromSpriteDialog/VBoxContainer/HBoxContainer"]
|
||||
margin_left = 108.0
|
||||
margin_right = 207.0
|
||||
margin_bottom = 20.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "Current cel"
|
||||
items = [ "Current cel", null, false, 0, null, "Current frame", null, false, 1, null, "All frames", null, false, 2, null ]
|
||||
selected = 0
|
||||
[connection signal="pressed" from="PaletteVBoxContainer/CenterContainer/PaletteButtons/AddPalette" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="_on_AddPalette_pressed"]
|
||||
[connection signal="pressed" from="PaletteVBoxContainer/CenterContainer/PaletteButtons/EditPalette" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="on_edit_palette"]
|
||||
[connection signal="pressed" from="PaletteVBoxContainer/CenterContainer/PaletteButtons/RemovePalette" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="_on_RemovePalette_pressed"]
|
||||
|
@ -198,3 +252,5 @@ margin_bottom = 577.0
|
|||
[connection signal="popup_hide" from="NewPaletteDialog" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="_on_NewPaletteDialog_popup_hide"]
|
||||
[connection signal="file_selected" from="PaletteImportFileDialog" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="on_palette_import_file_selected"]
|
||||
[connection signal="popup_hide" from="PaletteImportFileDialog" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="_on_NewPaletteDialog_popup_hide"]
|
||||
[connection signal="confirmed" from="PaletteFromSpriteDialog" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="_on_PaletteFromSpriteDialog_confirmed"]
|
||||
[connection signal="popup_hide" from="PaletteFromSpriteDialog" to="PaletteVBoxContainer/ScrollPalette/CenterPalette/PaletteContainer" method="_on_PaletteFromSpriteDialog_popup_hide"]
|
||||
|
|
|
@ -7,9 +7,10 @@ onready var themes := [
|
|||
[preload("res://assets/themes/blue/theme.tres"), "Blue"],
|
||||
[preload("res://assets/themes/caramel/theme.tres"), "Caramel"],
|
||||
[preload("res://assets/themes/light/theme.tres"), "Light"],
|
||||
[preload("res://assets/themes/purple/theme.tres"), "Purple"],
|
||||
]
|
||||
onready var buttons_container : BoxContainer = $ThemeButtons
|
||||
onready var colors_container : BoxContainer = $ThemeColors
|
||||
onready var colors_container : BoxContainer = $ThemeColorsSpacer/ThemeColors
|
||||
onready var theme_color_preview_scene = preload("res://src/Preferences/ThemeColorPreview.tscn")
|
||||
|
||||
|
||||
|
@ -59,12 +60,18 @@ func change_theme(ID : int) -> void:
|
|||
Global.theme_type = Global.Theme_Types.CARAMEL
|
||||
elif ID == 4: # Light Theme
|
||||
Global.theme_type = Global.Theme_Types.LIGHT
|
||||
elif ID == 5: # Purple Theme
|
||||
Global.theme_type = Global.Theme_Types.DARK
|
||||
|
||||
Global.control.theme = main_theme
|
||||
Global.control.theme.default_font = font
|
||||
Global.default_clear_color = main_theme.get_stylebox("panel", "PanelContainer").bg_color
|
||||
VisualServer.set_default_clear_color(Color(Global.default_clear_color))
|
||||
|
||||
(Global.animation_timeline.get_stylebox("panel", "Panel") as StyleBoxFlat).bg_color = main_theme.get_stylebox("panel", "Panel").bg_color
|
||||
var fake_vsplit_grabber : TextureRect = Global.find_node_by_name(Global.animation_timeline, "FakeVSplitContainerGrabber")
|
||||
fake_vsplit_grabber.texture = main_theme.get_icon("grabber", "VSplitContainer")
|
||||
|
||||
var layer_button_panel_container : PanelContainer = Global.find_node_by_name(Global.animation_timeline, "LayerButtonPanelContainer")
|
||||
(layer_button_panel_container.get_stylebox("panel", "PanelContainer") as StyleBoxFlat).bg_color = Global.default_clear_color
|
||||
|
||||
|
@ -80,13 +87,6 @@ func change_theme(ID : int) -> void:
|
|||
Global.vertical_ruler.add_stylebox_override("hover", ruler_style)
|
||||
Global.vertical_ruler.add_stylebox_override("focus", ruler_style)
|
||||
|
||||
var fake_vsplit_grabber : TextureRect = Global.find_node_by_name(Global.animation_timeline, "FakeVSplitContainerGrabber")
|
||||
|
||||
if Global.theme_type == Global.Theme_Types.DARK or Global.theme_type == Global.Theme_Types.BLUE:
|
||||
fake_vsplit_grabber.texture = preload("res://assets/themes/dark/icons/vsplit.png")
|
||||
else:
|
||||
fake_vsplit_grabber.texture = preload("res://assets/themes/light/icons/vsplit.png")
|
||||
|
||||
for button in get_tree().get_nodes_in_group("UIButtons"):
|
||||
if button is TextureButton:
|
||||
var last_backslash = button.texture_normal.resource_path.get_base_dir().find_last("/")
|
||||
|
|
|
@ -113,20 +113,23 @@ text = "System Language"
|
|||
|
||||
[node name="Themes" type="HBoxContainer" parent="HSplitContainer/ScrollContainer/VBoxContainer"]
|
||||
visible = false
|
||||
margin_top = 28.0
|
||||
margin_right = 498.0
|
||||
margin_bottom = 164.0
|
||||
script = ExtResource( 5 )
|
||||
|
||||
[node name="ThemeButtons" type="VBoxContainer" parent="HSplitContainer/ScrollContainer/VBoxContainer/Themes"]
|
||||
margin_right = 80.0
|
||||
margin_bottom = 136.0
|
||||
|
||||
[node name="ThemeColors" type="VBoxContainer" parent="HSplitContainer/ScrollContainer/VBoxContainer/Themes"]
|
||||
margin_left = 84.0
|
||||
margin_right = 134.0
|
||||
margin_bottom = 136.0
|
||||
custom_constants/separation = 6
|
||||
[node name="ThemeColorsSpacer" type="VBoxContainer" parent="HSplitContainer/ScrollContainer/VBoxContainer/Themes"]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 40.0
|
||||
|
||||
[node name="Control" type="Control" parent="HSplitContainer/ScrollContainer/VBoxContainer/Themes/ThemeColorsSpacer"]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 40.0
|
||||
|
||||
[node name="ThemeColors" type="VBoxContainer" parent="HSplitContainer/ScrollContainer/VBoxContainer/Themes/ThemeColorsSpacer"]
|
||||
margin_left = 4.0
|
||||
margin_right = 4.0
|
||||
custom_constants/separation = 12
|
||||
|
||||
[node name="Canvas" type="VBoxContainer" parent="HSplitContainer/ScrollContainer/VBoxContainer"]
|
||||
visible = false
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
]]
|
||||
margin_right = 16.0
|
||||
margin_bottom = 16.0
|
||||
size_flags_vertical = 4
|
||||
disabled = true
|
||||
texture_normal = ExtResource( 1 )
|
||||
texture_disabled = SubResource( 1 )
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
[node name="ThemeColorPreview" type="ColorRect"]
|
||||
margin_right = 50.0
|
||||
margin_bottom = 14.0
|
||||
rect_min_size = Vector2( 50, 14 )
|
||||
rect_min_size = Vector2( 50, 16 )
|
||||
color = Color( 0.380392, 0.384314, 0.380392, 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
|
|
|
@ -116,6 +116,26 @@ func copy() -> void:
|
|||
project.brushes.append(brush)
|
||||
Brushes.add_project_brush(brush)
|
||||
|
||||
func cut() -> void: # This is basically the same as copy + delete
|
||||
if _selected_rect.has_no_area():
|
||||
return
|
||||
|
||||
var undo_data = _get_undo_data(true)
|
||||
var project := Global.current_project
|
||||
var image : Image = project.frames[project.current_frame].cels[project.current_layer].image
|
||||
var size := _selected_rect.size
|
||||
var rect = Rect2(Vector2.ZERO, size)
|
||||
_clipboard = image.get_rect(_selected_rect)
|
||||
if _clipboard.is_invisible():
|
||||
return
|
||||
|
||||
_clear_image.resize(size.x, size.y, Image.INTERPOLATE_NEAREST)
|
||||
var brush = _clipboard.get_rect(_clipboard.get_used_rect())
|
||||
project.brushes.append(brush)
|
||||
Brushes.add_project_brush(brush)
|
||||
move_end() # The selection_rectangle can be used while is moving, this prevents malfunctioning
|
||||
image.blit_rect(_clear_image, rect, _selected_rect.position)
|
||||
commit_undo("Draw", undo_data)
|
||||
|
||||
func paste() -> void:
|
||||
if _clipboard.get_size() <= Vector2.ZERO:
|
||||
|
@ -127,6 +147,7 @@ func paste() -> void:
|
|||
var size := _selected_rect.size
|
||||
var rect = Rect2(Vector2.ZERO, size)
|
||||
image.blend_rect(_clipboard, rect, _selected_rect.position)
|
||||
move_end() # The selection_rectangle can be used while is moving, this prevents malfunctioning
|
||||
commit_undo("Draw", undo_data)
|
||||
|
||||
|
||||
|
@ -138,6 +159,7 @@ func delete() -> void:
|
|||
var rect = Rect2(Vector2.ZERO, size)
|
||||
_clear_image.resize(size.x, size.y, Image.INTERPOLATE_NEAREST)
|
||||
image.blit_rect(_clear_image, rect, _selected_rect.position)
|
||||
move_end() # The selection_rectangle can be used while is moving, this prevents malfunctioning
|
||||
commit_undo("Draw", undo_data)
|
||||
|
||||
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://src/Tools/Base.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://src/Tools/Bucket.gd" type="Script" id=3]
|
||||
|
||||
[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
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=1]
|
||||
bg_color = Color( 1, 1, 1, 1 )
|
||||
border_color = Color( 1, 1, 1, 1 )
|
||||
|
@ -72,9 +81,11 @@ rect_min_size = Vector2( 32, 32 )
|
|||
hint_tooltip = "Select a brush"
|
||||
mouse_default_cursor_shape = 2
|
||||
size_flags_horizontal = 4
|
||||
custom_styles/hover = SubResource( 1 )
|
||||
custom_styles/pressed = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 1 )
|
||||
custom_styles/hover = SubResource( 2 )
|
||||
custom_styles/pressed = SubResource( 2 )
|
||||
custom_styles/focus = SubResource( 1 )
|
||||
custom_styles/disabled = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 2 )
|
||||
|
||||
[node name="Texture" type="TextureRect" parent="FillPattern/Type" index="0"]
|
||||
margin_right = 32.0
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://src/Tools/Base.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://src/Tools/Draw.gd" type="Script" id=3]
|
||||
|
||||
[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
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=1]
|
||||
bg_color = Color( 1, 1, 1, 1 )
|
||||
border_color = Color( 1, 1, 1, 1 )
|
||||
|
@ -29,9 +38,11 @@ rect_min_size = Vector2( 32, 32 )
|
|||
hint_tooltip = "Select a brush"
|
||||
mouse_default_cursor_shape = 2
|
||||
size_flags_horizontal = 0
|
||||
custom_styles/hover = SubResource( 1 )
|
||||
custom_styles/pressed = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 1 )
|
||||
custom_styles/hover = SubResource( 2 )
|
||||
custom_styles/pressed = SubResource( 2 )
|
||||
custom_styles/focus = SubResource( 1 )
|
||||
custom_styles/disabled = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 2 )
|
||||
|
||||
[node name="Texture" type="TextureRect" parent="Brush/Type" index="0"]
|
||||
margin_right = 32.0
|
||||
|
|
|
@ -17,6 +17,8 @@ margin_bottom = 32.0
|
|||
rect_min_size = Vector2( 32, 32 )
|
||||
custom_styles/hover = SubResource( 1 )
|
||||
custom_styles/pressed = SubResource( 1 )
|
||||
custom_styles/focus = SubResource( 1 )
|
||||
custom_styles/disabled = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 1 )
|
||||
button_mask = 7
|
||||
script = ExtResource( 2 )
|
||||
|
|
|
@ -35,11 +35,13 @@ func _input(_event : InputEvent):
|
|||
if has_focus and visible:
|
||||
if Input.is_action_pressed("left_mouse"):
|
||||
if type == Types.HORIZONTAL:
|
||||
points[0].y = round(mouse_pos.y)
|
||||
points[1].y = round(mouse_pos.y)
|
||||
var yy = stepify(mouse_pos.y, 0.5)
|
||||
points[0].y = yy
|
||||
points[1].y = yy
|
||||
else:
|
||||
points[0].x = round(mouse_pos.x)
|
||||
points[1].x = round(mouse_pos.x)
|
||||
var xx = stepify(mouse_pos.x, 0.5)
|
||||
points[0].x = xx
|
||||
points[1].x = xx
|
||||
if Input.is_action_just_released("left_mouse"):
|
||||
Global.has_focus = true
|
||||
has_focus = false
|
||||
|
@ -53,10 +55,10 @@ func _draw() -> void:
|
|||
var zoom: Vector2 = Global.camera.zoom
|
||||
if type == Types.HORIZONTAL:
|
||||
draw_set_transform(Vector2(Global.camera.offset.x - (viewport_size.x / 2) * zoom.x, points[0].y + font.get_height() * zoom.x * 2), rotation, zoom * 2)
|
||||
draw_string(font, Vector2.ZERO, "%spx" % str(round(mouse_pos.y)))
|
||||
draw_string(font, Vector2.ZERO, "%spx" % str(stepify(mouse_pos.y, 0.5)))
|
||||
else:
|
||||
draw_set_transform(Vector2(points[0].x + font.get_height() * zoom.y, Global.camera.offset.y - (viewport_size.y / 2.25) * zoom.y), rotation, zoom * 2)
|
||||
draw_string(font, Vector2.ZERO, "%spx" % str(round(mouse_pos.x)))
|
||||
draw_string(font, Vector2.ZERO, "%spx" % str(stepify(mouse_pos.x, 0.5)))
|
||||
|
||||
|
||||
func outside_canvas() -> bool:
|
||||
|
|
|
@ -38,12 +38,14 @@ func _ready() -> void:
|
|||
contributors.create_item(contributor_root).set_text(0, " Aaron Franke (aaronfranke)")
|
||||
contributors.create_item(contributor_root).set_text(0, " rob-a-bolton")
|
||||
contributors.create_item(contributor_root).set_text(0, " Vriska Weaver (henlo-birb)")
|
||||
contributors.create_item(contributor_root).set_text(0, " PinyaColada")
|
||||
|
||||
var donors_root := donors.create_item()
|
||||
donors.create_item(donors_root).set_text(0, " pcmxms - https://www.nonamefornowsoft.com.br/")
|
||||
donors.create_item(donors_root).set_text(0, " Mike King")
|
||||
donors.create_item(donors_root).set_text(0, " Guillaume Gautier")
|
||||
donors.create_item(donors_root).set_text(0, " Isambard")
|
||||
donors.create_item(donors_root).set_text(0, " Hugo Locurcio")
|
||||
|
||||
|
||||
func _on_AboutDialog_about_to_show() -> void:
|
||||
|
|
|
@ -15,9 +15,6 @@ func _on_SplashDialog_about_to_show() -> void:
|
|||
var art_by_label : Button = Global.find_node_by_name(self, "ArtistName")
|
||||
var show_on_startup_button : CheckBox = Global.find_node_by_name(self, "ShowOnStartup")
|
||||
var copyright_label : Label = Global.find_node_by_name(self, "CopyrightLabel")
|
||||
var become_platinum : Button = Global.find_node_by_name(self, "BecomePlatinum")
|
||||
var become_gold : Button = Global.find_node_by_name(self, "BecomeGold")
|
||||
var become_patron : Button = Global.find_node_by_name(self, "BecomePatron")
|
||||
|
||||
if Global.config_cache.has_section_key("preferences", "startup"):
|
||||
show_on_startup_button.pressed = !Global.config_cache.get_value("preferences", "startup")
|
||||
|
@ -29,9 +26,6 @@ func _on_SplashDialog_about_to_show() -> void:
|
|||
art_by_label.text = tr("Art by: %s") % chosen_artwork
|
||||
art_by_label.hint_tooltip = artworks[chosen_artwork][1]
|
||||
|
||||
become_platinum.text = "- " + tr("Become a Platinum Sponsor")
|
||||
become_gold.text = "- " + tr("Become a Gold Sponsor")
|
||||
become_patron.text = "- " + tr("Become a Patron")
|
||||
if "zh" in TranslationServer.get_locale():
|
||||
show_on_startup_button.add_font_override("font", preload("res://assets/fonts/CJK/NotoSansCJKtc-Small.tres"))
|
||||
copyright_label.add_font_override("font", preload("res://assets/fonts/CJK/NotoSansCJKtc-Small.tres"))
|
||||
|
@ -62,10 +56,6 @@ func _on_PatreonButton_pressed() -> void:
|
|||
OS.shell_open("https://www.patreon.com/OramaInteractive")
|
||||
|
||||
|
||||
func _on_TakeThisSpot_pressed() -> void:
|
||||
OS.shell_open("https://www.patreon.com/OramaInteractive")
|
||||
|
||||
|
||||
func _on_GithubButton_pressed() -> void:
|
||||
OS.shell_open("https://github.com/Orama-Interactive/Pixelorama")
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ expand_margin_top = 20.0
|
|||
|
||||
[node name="SplashDialog" type="WindowDialog"]
|
||||
margin_right = 640.0
|
||||
margin_bottom = 570.0
|
||||
rect_min_size = Vector2( 640, 572 )
|
||||
margin_bottom = 583.0
|
||||
rect_min_size = Vector2( 640, 583 )
|
||||
custom_styles/panel = SubResource( 1 )
|
||||
script = ExtResource( 1 )
|
||||
__meta__ = {
|
||||
|
@ -112,72 +112,36 @@ __meta__ = {
|
|||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="Sponsors" type="HBoxContainer" parent="Contents/ButtonsPatronsLogos/Info"]
|
||||
margin_right = 294.0
|
||||
margin_bottom = 104.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
custom_constants/separation = 5
|
||||
|
||||
[node name="PatronContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info/Sponsors"]
|
||||
margin_right = 294.0
|
||||
margin_bottom = 104.0
|
||||
size_flags_horizontal = 3
|
||||
custom_constants/separation = 10
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer"]
|
||||
margin_right = 294.0
|
||||
margin_bottom = 31.0
|
||||
custom_constants/separation = 0
|
||||
|
||||
[node name="SpacerControl" type="Control" parent="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/HBoxContainer"]
|
||||
[node name="SpacerControl" type="Control" parent="Contents/ButtonsPatronsLogos/Info"]
|
||||
margin_right = 6.0
|
||||
margin_bottom = 31.0
|
||||
margin_bottom = 104.0
|
||||
rect_min_size = Vector2( 6, 0 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="PatronsLabel" type="Label" parent="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/HBoxContainer"]
|
||||
margin_left = 6.0
|
||||
margin_right = 236.0
|
||||
margin_bottom = 31.0
|
||||
[node name="PatronContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info"]
|
||||
margin_left = 10.0
|
||||
margin_right = 294.0
|
||||
margin_bottom = 104.0
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PatronsLabel" type="Label" parent="Contents/ButtonsPatronsLogos/Info/PatronContainer"]
|
||||
margin_right = 284.0
|
||||
margin_bottom = 14.0
|
||||
rect_min_size = Vector2( 230, 0 )
|
||||
size_flags_vertical = 8
|
||||
text = "Want your name or your company to be shown on the splash screen?"
|
||||
text = "Patrons:"
|
||||
autowrap = true
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer"]
|
||||
margin_top = 41.0
|
||||
margin_right = 294.0
|
||||
margin_bottom = 97.0
|
||||
custom_constants/separation = -2
|
||||
|
||||
[node name="BecomePlatinum" type="Button" parent="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/VBoxContainer"]
|
||||
margin_right = 294.0
|
||||
margin_bottom = 20.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "- Become a Platinum Sponsor"
|
||||
flat = true
|
||||
align = 0
|
||||
|
||||
[node name="BecomeGold" type="Button" parent="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/VBoxContainer"]
|
||||
[node name="PatronsLabel2" type="Label" parent="Contents/ButtonsPatronsLogos/Info/PatronContainer"]
|
||||
margin_top = 18.0
|
||||
margin_right = 294.0
|
||||
margin_bottom = 38.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "- Become a Gold Sponsor"
|
||||
flat = true
|
||||
align = 0
|
||||
|
||||
[node name="BecomePatron" type="Button" parent="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/VBoxContainer"]
|
||||
margin_top = 36.0
|
||||
margin_right = 294.0
|
||||
margin_bottom = 56.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "- Become a Patron"
|
||||
flat = true
|
||||
align = 0
|
||||
margin_right = 284.0
|
||||
margin_bottom = 32.0
|
||||
rect_min_size = Vector2( 230, 0 )
|
||||
size_flags_vertical = 8
|
||||
text = "Hugo Locurcio"
|
||||
autowrap = true
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="Contents/ButtonsPatronsLogos/Info"]
|
||||
margin_left = 298.0
|
||||
|
@ -261,9 +225,6 @@ __meta__ = {
|
|||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Buttons/NewBtn" to="." method="_on_NewBtn_pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Buttons/OpenBtn" to="." method="_on_OpenBtn__pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Buttons/OpenLastBtn" to="." method="_on_OpenLastBtn_pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/VBoxContainer/BecomePlatinum" to="." method="_on_TakeThisSpot_pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/VBoxContainer/BecomeGold" to="." method="_on_TakeThisSpot_pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Info/Sponsors/PatronContainer/VBoxContainer/BecomePatron" to="." method="_on_TakeThisSpot_pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links/GithubButton" to="." method="_on_GithubButton_pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links/DiscordButton" to="." method="_on_DiscordButton_pressed"]
|
||||
[connection signal="pressed" from="Contents/ButtonsPatronsLogos/Info/VBoxContainer/Branding/Links/PatreonButton" to="." method="_on_PatreonButton_pressed"]
|
||||
|
|
|
@ -1,7 +1,16 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://src/UI/PatternButton.gd" type="Script" id=2]
|
||||
|
||||
[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
|
||||
corner_radius_top_right = 5
|
||||
corner_radius_bottom_right = 5
|
||||
corner_radius_bottom_left = 5
|
||||
anti_aliasing = false
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=1]
|
||||
bg_color = Color( 1, 1, 1, 1 )
|
||||
border_color = Color( 1, 1, 1, 1 )
|
||||
|
@ -15,9 +24,11 @@ anti_aliasing = false
|
|||
margin_right = 32.0
|
||||
margin_bottom = 32.0
|
||||
rect_min_size = Vector2( 32, 32 )
|
||||
custom_styles/hover = SubResource( 1 )
|
||||
custom_styles/pressed = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 1 )
|
||||
custom_styles/hover = SubResource( 2 )
|
||||
custom_styles/pressed = SubResource( 2 )
|
||||
custom_styles/focus = SubResource( 1 )
|
||||
custom_styles/disabled = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 2 )
|
||||
button_mask = 7
|
||||
script = ExtResource( 2 )
|
||||
|
||||
|
|
|
@ -166,6 +166,17 @@ func _on_CopyFrame_pressed(frame := -1) -> void:
|
|||
func _on_FrameTagButton_pressed() -> void:
|
||||
Global.tag_dialog.popup_centered()
|
||||
|
||||
func _on_MoveLeft_pressed() -> void:
|
||||
var frame : int = Global.current_project.current_frame
|
||||
if frame == 0:
|
||||
return
|
||||
Global.current_project.layers[Global.current_project.current_layer].frame_container.get_child(frame).change_frame_order(-1)
|
||||
|
||||
func _on_MoveRight_pressed() -> void:
|
||||
var frame : int = Global.current_project.current_frame
|
||||
if frame == last_frame:
|
||||
return
|
||||
Global.current_project.layers[Global.current_project.current_layer].frame_container.get_child(frame).change_frame_order(1)
|
||||
|
||||
func _on_OnionSkinning_pressed() -> void:
|
||||
Global.onion_skinning = !Global.onion_skinning
|
||||
|
@ -176,7 +187,6 @@ func _on_OnionSkinning_pressed() -> void:
|
|||
else:
|
||||
Global.change_button_texturerect(texture_button, "onion_skinning_off.png")
|
||||
|
||||
|
||||
func _on_OnionSkinningSettings_pressed() -> void:
|
||||
$OnionSkinningSettings.popup(Rect2(Global.onion_skinning_button.rect_global_position.x - $OnionSkinningSettings.rect_size.x - 16, Global.onion_skinning_button.rect_global_position.y - 106, 136, 126))
|
||||
|
||||
|
@ -474,3 +484,4 @@ func _on_OpacitySlider_value_changed(value) -> void:
|
|||
|
||||
func _on_OnionSkinningSettings_popup_hide() -> void:
|
||||
Global.can_draw = true
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
[ext_resource path="res://assets/graphics/dark_themes/layers/move_down_disabled.png" type="Texture" id=5]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/layers/merge_down_disabled.png" type="Texture" id=6]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/layers/clone_layer.png" type="Texture" id=7]
|
||||
[ext_resource path="res://assets/themes/dark/icons/vsplit.png" type="Texture" id=8]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/timeline/move_arrow.png" type="Texture" id=8]
|
||||
[ext_resource path="res://src/UI/Timeline/LayerButton.tscn" type="PackedScene" id=18]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/timeline/new_frame.png" type="Texture" id=19]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/timeline/remove_frame.png" type="Texture" id=20]
|
||||
|
@ -320,19 +320,19 @@ __meta__ = {
|
|||
|
||||
[node name="Control" type="Control" parent="AnimationContainer/TimelineContainer/TimelineButtons"]
|
||||
margin_left = 225.0
|
||||
margin_right = 434.0
|
||||
margin_right = 386.0
|
||||
margin_bottom = 38.0
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="AnimationContainer/TimelineContainer/TimelineButtons"]
|
||||
margin_left = 438.0
|
||||
margin_left = 390.0
|
||||
margin_right = 902.0
|
||||
margin_bottom = 38.0
|
||||
|
||||
[node name="AnimationButtons" type="HBoxContainer" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer"]
|
||||
margin_left = 7.0
|
||||
margin_top = 7.0
|
||||
margin_right = 457.0
|
||||
margin_right = 505.0
|
||||
margin_bottom = 31.0
|
||||
rect_min_size = Vector2( 0, 24 )
|
||||
size_flags_horizontal = 3
|
||||
|
@ -340,7 +340,7 @@ custom_constants/separation = 40
|
|||
alignment = 2
|
||||
|
||||
[node name="FrameButtons" type="HBoxContainer" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons"]
|
||||
margin_right = 92.0
|
||||
margin_right = 140.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="AddFrame" type="Button" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons" groups=[
|
||||
|
@ -456,9 +456,66 @@ __meta__ = {
|
|||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="MoveLeft" type="Button" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons" groups=[
|
||||
"UIButtons",
|
||||
]]
|
||||
margin_left = 96.0
|
||||
margin_top = 2.0
|
||||
margin_right = 116.0
|
||||
margin_bottom = 22.0
|
||||
rect_min_size = Vector2( 20, 0 )
|
||||
hint_tooltip = "Move the selected frame to the left."
|
||||
focus_mode = 0
|
||||
mouse_default_cursor_shape = 2
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons/MoveLeft"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -7.5
|
||||
margin_top = -5.5
|
||||
margin_right = 7.5
|
||||
margin_bottom = 5.5
|
||||
texture = ExtResource( 8 )
|
||||
flip_h = true
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="MoveRight" type="Button" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons" groups=[
|
||||
"UIButtons",
|
||||
]]
|
||||
margin_left = 120.0
|
||||
margin_top = 2.0
|
||||
margin_right = 140.0
|
||||
margin_bottom = 22.0
|
||||
rect_min_size = Vector2( 20, 0 )
|
||||
hint_tooltip = "Move the selected frame to the right."
|
||||
focus_mode = 0
|
||||
mouse_default_cursor_shape = 2
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons/MoveRight"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -7.5
|
||||
margin_top = -5.5
|
||||
margin_right = 7.5
|
||||
margin_bottom = 5.5
|
||||
texture = ExtResource( 8 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="PlaybackButtons" type="HBoxContainer" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons"]
|
||||
margin_left = 132.0
|
||||
margin_right = 272.0
|
||||
margin_left = 180.0
|
||||
margin_right = 320.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="FirstFrame" type="Button" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/PlaybackButtons" groups=[
|
||||
|
@ -638,8 +695,8 @@ __meta__ = {
|
|||
}
|
||||
|
||||
[node name="LoopButtons" type="HBoxContainer" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons"]
|
||||
margin_left = 312.0
|
||||
margin_right = 450.0
|
||||
margin_left = 360.0
|
||||
margin_right = 498.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="OnionSkinningSettings" type="Button" parent="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/LoopButtons" groups=[
|
||||
|
@ -759,9 +816,9 @@ rect_min_size = Vector2( 214, 0 )
|
|||
|
||||
[node name="OpacityLabel" type="Label" parent="AnimationContainer/TimelineContainer/OpacityAndTagContainer/OpacityContainer"]
|
||||
margin_right = 53.0
|
||||
margin_bottom = 32.0
|
||||
margin_bottom = 14.0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 1
|
||||
size_flags_vertical = 0
|
||||
text = "Opacity:"
|
||||
valign = 1
|
||||
|
||||
|
@ -930,7 +987,6 @@ margin_top = -6.0
|
|||
margin_right = 24.0
|
||||
margin_bottom = -4.76837e-07
|
||||
mouse_filter = 2
|
||||
texture = ExtResource( 8 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
@ -944,6 +1000,8 @@ __meta__ = {
|
|||
[connection signal="pressed" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons/DeleteFrame" to="." method="_on_DeleteFrame_pressed"]
|
||||
[connection signal="pressed" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons/CopyFrame" to="." method="_on_CopyFrame_pressed"]
|
||||
[connection signal="pressed" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons/FrameTagButton" to="." method="_on_FrameTagButton_pressed"]
|
||||
[connection signal="pressed" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons/MoveLeft" to="." method="_on_MoveLeft_pressed"]
|
||||
[connection signal="pressed" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/FrameButtons/MoveRight" to="." method="_on_MoveRight_pressed"]
|
||||
[connection signal="pressed" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/PlaybackButtons/FirstFrame" to="." method="_on_FirstFrame_pressed"]
|
||||
[connection signal="pressed" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/PlaybackButtons/PreviousFrame" to="." method="_on_PreviousFrame_pressed"]
|
||||
[connection signal="toggled" from="AnimationContainer/TimelineContainer/TimelineButtons/PanelContainer/AnimationButtons/PlaybackButtons/PlayBackwards" to="." method="_on_PlayBackwards_toggled"]
|
||||
|
|
|
@ -26,8 +26,12 @@ __meta__ = {
|
|||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="EmptySpacer" type="Control" parent="HBoxContainer"]
|
||||
margin_bottom = 36.0
|
||||
|
||||
[node name="LayerButtons" type="HBoxContainer" parent="HBoxContainer"]
|
||||
margin_right = 104.0
|
||||
margin_left = 4.0
|
||||
margin_right = 108.0
|
||||
margin_bottom = 36.0
|
||||
|
||||
[node name="VisibilityButton" type="Button" parent="HBoxContainer/LayerButtons" groups=[
|
||||
|
@ -122,8 +126,8 @@ __meta__ = {
|
|||
}
|
||||
|
||||
[node name="LayerName" type="HBoxContainer" parent="HBoxContainer"]
|
||||
margin_left = 108.0
|
||||
margin_right = 212.0
|
||||
margin_left = 112.0
|
||||
margin_right = 216.0
|
||||
margin_bottom = 36.0
|
||||
rect_min_size = Vector2( 104, 0 )
|
||||
mouse_default_cursor_shape = 2
|
||||
|
|
|
@ -43,6 +43,7 @@ func setup_edit_menu() -> void:
|
|||
"Undo" : InputMap.get_action_list("undo")[0].get_scancode_with_modifiers(),
|
||||
"Redo" : InputMap.get_action_list("redo")[0].get_scancode_with_modifiers(),
|
||||
"Copy" : InputMap.get_action_list("copy")[0].get_scancode_with_modifiers(),
|
||||
"Cut" : InputMap.get_action_list("cut")[0].get_scancode_with_modifiers(),
|
||||
"Paste" : InputMap.get_action_list("paste")[0].get_scancode_with_modifiers(),
|
||||
"Delete" : InputMap.get_action_list("delete")[0].get_scancode_with_modifiers(),
|
||||
"Clear Selection" : 0,
|
||||
|
@ -211,14 +212,16 @@ func edit_menu_id_pressed(id : int) -> void:
|
|||
Global.control.redone = false
|
||||
2: # Copy
|
||||
Global.selection_rectangle.copy()
|
||||
3: # paste
|
||||
3: # cut
|
||||
Global.selection_rectangle.cut()
|
||||
4: # paste
|
||||
Global.selection_rectangle.paste()
|
||||
4: # Delete
|
||||
5: # Delete
|
||||
Global.selection_rectangle.delete()
|
||||
5: # Clear selection
|
||||
6: # Clear selection
|
||||
Global.selection_rectangle.set_rect(Rect2(0, 0, 0, 0))
|
||||
Global.selection_rectangle.select_rect()
|
||||
6: # Preferences
|
||||
7: # Preferences
|
||||
Global.preferences_dialog.popup_centered(Vector2(400, 280))
|
||||
Global.dialog_open(true)
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ __meta__ = {
|
|||
|
||||
[node name="FileMenu" type="MenuButton" parent="MenuItems"]
|
||||
margin_right = 35.0
|
||||
margin_bottom = 20.0
|
||||
margin_bottom = 23.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "File"
|
||||
switch_on_hover = true
|
||||
|
@ -29,7 +29,7 @@ switch_on_hover = true
|
|||
[node name="EditMenu" type="MenuButton" parent="MenuItems"]
|
||||
margin_left = 39.0
|
||||
margin_right = 75.0
|
||||
margin_bottom = 20.0
|
||||
margin_bottom = 23.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "Edit"
|
||||
switch_on_hover = true
|
||||
|
@ -37,7 +37,7 @@ switch_on_hover = true
|
|||
[node name="ViewMenu" type="MenuButton" parent="MenuItems"]
|
||||
margin_left = 79.0
|
||||
margin_right = 121.0
|
||||
margin_bottom = 20.0
|
||||
margin_bottom = 23.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "View"
|
||||
switch_on_hover = true
|
||||
|
@ -45,7 +45,7 @@ switch_on_hover = true
|
|||
[node name="ImageMenu" type="MenuButton" parent="MenuItems"]
|
||||
margin_left = 125.0
|
||||
margin_right = 177.0
|
||||
margin_bottom = 20.0
|
||||
margin_bottom = 23.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "Image"
|
||||
switch_on_hover = true
|
||||
|
@ -53,7 +53,7 @@ switch_on_hover = true
|
|||
[node name="HelpMenu" type="MenuButton" parent="MenuItems"]
|
||||
margin_left = 181.0
|
||||
margin_right = 223.0
|
||||
margin_bottom = 20.0
|
||||
margin_bottom = 23.0
|
||||
mouse_default_cursor_shape = 2
|
||||
text = "Help"
|
||||
switch_on_hover = true
|
||||
|
@ -91,10 +91,10 @@ anchor_top = 0.5
|
|||
anchor_right = 1.0
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -330.0
|
||||
margin_top = -14.0
|
||||
margin_bottom = 14.0
|
||||
margin_top = -10.0
|
||||
margin_right = 0.00012207
|
||||
margin_bottom = 13.0
|
||||
grow_horizontal = 2
|
||||
size_flags_vertical = 0
|
||||
alignment = 1
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
|
@ -103,10 +103,9 @@ __meta__ = {
|
|||
[node name="CurrentFrame" type="Label" parent="HBoxContainer"]
|
||||
margin_left = 106.0
|
||||
margin_right = 198.0
|
||||
margin_bottom = 28.0
|
||||
margin_bottom = 23.0
|
||||
size_flags_vertical = 1
|
||||
text = "Current frame:"
|
||||
valign = 1
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
@ -114,7 +113,6 @@ __meta__ = {
|
|||
[node name="CurrentFrameMark" type="Label" parent="HBoxContainer"]
|
||||
margin_left = 202.0
|
||||
margin_right = 223.0
|
||||
margin_bottom = 28.0
|
||||
margin_bottom = 23.0
|
||||
size_flags_vertical = 1
|
||||
text = "1/2"
|
||||
valign = 1
|
||||
|
|
|
@ -49,8 +49,10 @@ size_flags_vertical = 3
|
|||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
margin_left = -20.5
|
||||
margin_right = 20.5
|
||||
margin_bottom = 254.0
|
||||
margin_right = -6.5
|
||||
margin_bottom = 14.0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
@ -59,7 +61,9 @@ __meta__ = {
|
|||
margin_left = 7.0
|
||||
margin_top = 7.0
|
||||
margin_right = 39.0
|
||||
margin_bottom = 291.0
|
||||
margin_bottom = 255.0
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 0
|
||||
script = ExtResource( 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
|
|