mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-20 12:33:14 +00:00
Imported image files now open in an new tab
Keep in mind that opening an image file as a new frame might not work properly yet, if the target image has a different size.
This commit is contained in:
parent
1b1c7f844f
commit
6d87901056
5 changed files with 59 additions and 64 deletions
|
@ -20,14 +20,14 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void:
|
|||
var file := File.new()
|
||||
var err := file.open_compressed(path, File.READ, File.COMPRESSION_ZSTD)
|
||||
if err == ERR_FILE_UNRECOGNIZED:
|
||||
err = file.open(path, File.READ) # If the file is not compressed open it raw (pre-v0.7)
|
||||
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")
|
||||
file.close()
|
||||
return
|
||||
|
||||
var new_project := Project.new()
|
||||
var new_project := Project.new([], path.get_file())
|
||||
|
||||
var file_version := file.get_line() # Example, "v0.7.10-beta"
|
||||
var file_ver_splitted := file_version.split("-")
|
||||
|
|
|
@ -206,7 +206,8 @@ func frame_changed(value : int) -> void:
|
|||
layer.frame_container.get_child(i).pressed = false
|
||||
|
||||
# Select the new frame
|
||||
Global.frame_ids.get_child(current_frame).add_color_override("font_color", Global.control.theme.get_color("Selected Color", "Label"))
|
||||
if current_frame < Global.frame_ids.get_child_count():
|
||||
Global.frame_ids.get_child(current_frame).add_color_override("font_color", Global.control.theme.get_color("Selected Color", "Label"))
|
||||
if current_frame < layers[current_layer].frame_container.get_child_count():
|
||||
layers[current_layer].frame_container.get_child(current_frame).pressed = true
|
||||
|
||||
|
|
|
@ -225,8 +225,7 @@ func handle_loading_files(files : PoolStringArray) -> void:
|
|||
if file.get_extension().to_lower() == "pxo":
|
||||
_on_OpenSprite_file_selected(file)
|
||||
else:
|
||||
if file == files[0]:
|
||||
$ImportSprites.new_frame = false
|
||||
$ImportSprites.new_frame = false
|
||||
$ImportSprites._on_ImportSprites_files_selected([file])
|
||||
$ImportSprites.new_frame = true
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
extends FileDialog
|
||||
|
||||
var new_frame := true
|
||||
var new_frame := false
|
||||
var import_spritesheet := false
|
||||
var spritesheet_horizontal := 1
|
||||
var spritesheet_vertical := 1
|
||||
|
@ -36,86 +36,82 @@ func _on_VerticalFrames_value_changed(value) -> void:
|
|||
|
||||
func _on_ImportSprites_files_selected(paths : PoolStringArray) -> void:
|
||||
Global.control.opensprite_file_selected = true
|
||||
if !new_frame: # If we're not adding a new frame, delete the previous
|
||||
Global.clear_frames()
|
||||
Global.current_project.layers.clear()
|
||||
Global.current_project.layers.append(Layer.new())
|
||||
Global.current_project.current_layer = 0
|
||||
|
||||
var project := Global.current_project
|
||||
var first_path : String = paths[0]
|
||||
var i : int = Global.current_project.frames.size()
|
||||
if !import_spritesheet:
|
||||
for path in paths:
|
||||
var image := Image.new()
|
||||
var err := image.load(path)
|
||||
if err != OK: # An error occured
|
||||
var file_name : String = path.get_file()
|
||||
Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)])
|
||||
Global.error_dialog.popup_centered()
|
||||
Global.dialog_open(true)
|
||||
continue
|
||||
var i := 0
|
||||
if new_frame:
|
||||
i = project.frames.size()
|
||||
|
||||
Global.current_project.size = image.get_size()
|
||||
for path in paths:
|
||||
var image := Image.new()
|
||||
var err := image.load(path)
|
||||
if err != OK: # An error occured
|
||||
var file_name : String = path.get_file()
|
||||
Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)])
|
||||
Global.error_dialog.popup_centered()
|
||||
Global.dialog_open(true)
|
||||
continue
|
||||
|
||||
if !new_frame: # If we're not adding a new frame, delete the previous
|
||||
project = Project.new([], path.get_file())
|
||||
project.layers.append(Layer.new())
|
||||
Global.projects.append(project)
|
||||
|
||||
if !import_spritesheet:
|
||||
if !new_frame:
|
||||
project.size = image.get_size()
|
||||
var frame := Frame.new()
|
||||
image.convert(Image.FORMAT_RGBA8)
|
||||
image.lock()
|
||||
frame.cels.append(Cel.new(image, 1))
|
||||
|
||||
for _i in range(1, Global.current_project.layers.size()):
|
||||
for _i in range(1, project.layers.size()):
|
||||
var empty_sprite := Image.new()
|
||||
empty_sprite.create(Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8)
|
||||
empty_sprite.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
|
||||
empty_sprite.fill(Color(0, 0, 0, 0))
|
||||
empty_sprite.lock()
|
||||
frame.cels.append(Cel.new(empty_sprite, 1))
|
||||
|
||||
Global.current_project.frames.append(frame)
|
||||
project.frames.append(frame)
|
||||
|
||||
i += 1
|
||||
|
||||
else:
|
||||
var image := Image.new()
|
||||
var err := image.load(first_path)
|
||||
if err != OK: # An error occured
|
||||
var file_name : String = first_path.get_file()
|
||||
Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)])
|
||||
Global.error_dialog.popup_centered()
|
||||
Global.dialog_open(true)
|
||||
return
|
||||
else:
|
||||
spritesheet_horizontal = min(spritesheet_horizontal, image.get_size().x)
|
||||
spritesheet_vertical = min(spritesheet_vertical, image.get_size().y)
|
||||
var frame_width := image.get_size().x / spritesheet_horizontal
|
||||
var frame_height := image.get_size().y / spritesheet_vertical
|
||||
for yy in range(spritesheet_vertical):
|
||||
for xx in range(spritesheet_horizontal):
|
||||
var frame := Frame.new()
|
||||
var cropped_image := Image.new()
|
||||
cropped_image = image.get_rect(Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height))
|
||||
if !new_frame:
|
||||
project.size = cropped_image.get_size()
|
||||
cropped_image.convert(Image.FORMAT_RGBA8)
|
||||
cropped_image.lock()
|
||||
frame.cels.append(Cel.new(cropped_image, 1))
|
||||
|
||||
spritesheet_horizontal = min(spritesheet_horizontal, image.get_size().x)
|
||||
spritesheet_vertical = min(spritesheet_vertical, image.get_size().y)
|
||||
var frame_width := image.get_size().x / spritesheet_horizontal
|
||||
var frame_height := image.get_size().y / spritesheet_vertical
|
||||
for yy in range(spritesheet_vertical):
|
||||
for xx in range(spritesheet_horizontal):
|
||||
var frame := Frame.new()
|
||||
var cropped_image := Image.new()
|
||||
cropped_image = image.get_rect(Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height))
|
||||
Global.current_project.size = cropped_image.get_size()
|
||||
cropped_image.convert(Image.FORMAT_RGBA8)
|
||||
cropped_image.lock()
|
||||
frame.cels.append(Cel.new(cropped_image, 1))
|
||||
for _i in range(1, project.layers.size()):
|
||||
var empty_sprite := Image.new()
|
||||
empty_sprite.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
|
||||
empty_sprite.fill(Color(0, 0, 0, 0))
|
||||
empty_sprite.lock()
|
||||
frame.cels.append(Cel.new(empty_sprite, 1))
|
||||
|
||||
for _i in range(1, Global.current_project.layers.size()):
|
||||
var empty_sprite := Image.new()
|
||||
empty_sprite.create(Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8)
|
||||
empty_sprite.fill(Color(0, 0, 0, 0))
|
||||
empty_sprite.lock()
|
||||
frame.cels.append(Cel.new(empty_sprite, 1))
|
||||
project.frames.append(frame)
|
||||
|
||||
Global.current_project.frames.append(frame)
|
||||
|
||||
i += 1
|
||||
i += 1
|
||||
|
||||
Global.tabs.current_tab = Global.tabs.get_tab_count() - 1
|
||||
Global.canvas.camera_zoom()
|
||||
|
||||
Global.current_project.frames = Global.current_project.frames # Just to call Global.frames_changed
|
||||
Global.current_project.current_frame = i - 1
|
||||
if !new_frame:
|
||||
Global.current_project.layers = Global.current_project.layers # Just to call Global.layers_changed
|
||||
if new_frame:
|
||||
project.frames = project.frames # Just to call Global.frames_changed
|
||||
project.current_frame = i - 1
|
||||
|
||||
Global.window_title = first_path.get_file() + " (" + tr("imported") + ") - Pixelorama " + Global.current_version
|
||||
if Global.current_project.has_changed:
|
||||
if project.has_changed:
|
||||
Global.window_title = Global.window_title + "(*)"
|
||||
var file_name := first_path.get_basename().get_file()
|
||||
var directory_path := first_path.get_basename().replace(file_name, "")
|
||||
|
|
|
@ -24,7 +24,6 @@ margin_bottom = 312.0
|
|||
margin_right = 161.0
|
||||
margin_bottom = 304.0
|
||||
mouse_default_cursor_shape = 2
|
||||
pressed = true
|
||||
text = "Import as new frame"
|
||||
|
||||
[node name="ImportSpritesheet" type="CheckBox" parent="HBoxContainer2"]
|
||||
|
|
Loading…
Add table
Reference in a new issue