1
0
Fork 0
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:
OverloadedOrama 2020-06-05 19:51:06 +03:00
parent 1b1c7f844f
commit 6d87901056
5 changed files with 59 additions and 64 deletions

View file

@ -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("-")

View file

@ -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

View file

@ -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

View file

@ -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, "")

View file

@ -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"]