mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-31 07:29:49 +00:00
Optimize _input() methods
This commit is contained in:
parent
4931e50213
commit
79ff0a8d45
|
@ -127,6 +127,7 @@ onready var small_preview_viewport : ViewportContainer = canvas_preview_containe
|
||||||
onready var camera : Camera2D = main_viewport.find_node("Camera2D")
|
onready var camera : Camera2D = main_viewport.find_node("Camera2D")
|
||||||
onready var camera2 : Camera2D = control.find_node("Camera2D2")
|
onready var camera2 : Camera2D = control.find_node("Camera2D2")
|
||||||
onready var camera_preview : Camera2D = control.find_node("CameraPreview")
|
onready var camera_preview : Camera2D = control.find_node("CameraPreview")
|
||||||
|
onready var cameras = [Global.camera, Global.camera2, Global.camera_preview]
|
||||||
onready var horizontal_ruler : BaseButton = control.find_node("HorizontalRuler")
|
onready var horizontal_ruler : BaseButton = control.find_node("HorizontalRuler")
|
||||||
onready var vertical_ruler : BaseButton = control.find_node("VerticalRuler")
|
onready var vertical_ruler : BaseButton = control.find_node("VerticalRuler")
|
||||||
onready var transparent_checker : ColorRect = control.find_node("TransparentChecker")
|
onready var transparent_checker : ColorRect = control.find_node("TransparentChecker")
|
||||||
|
|
|
@ -231,7 +231,7 @@ func change_project() -> void:
|
||||||
Global.top_menu_container.edit_menu_button.get_popup().set_item_disabled(6, !has_selection)
|
Global.top_menu_container.edit_menu_button.get_popup().set_item_disabled(6, !has_selection)
|
||||||
|
|
||||||
var i := 0
|
var i := 0
|
||||||
for camera in [Global.camera, Global.camera2, Global.camera_preview]:
|
for camera in Global.cameras:
|
||||||
camera.zoom_max = cameras_zoom_max[i]
|
camera.zoom_max = cameras_zoom_max[i]
|
||||||
if camera == Global.camera_preview:
|
if camera == Global.camera_preview:
|
||||||
Global.preview_zoom_slider.disconnect("value_changed", Global.canvas_preview_container, "_on_PreviewZoomSlider_value_changed")
|
Global.preview_zoom_slider.disconnect("value_changed", Global.canvas_preview_container, "_on_PreviewZoomSlider_value_changed")
|
||||||
|
|
10
src/Main.gd
10
src/Main.gd
|
@ -1,15 +1,14 @@
|
||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
var opensprite_file_selected := false
|
var opensprite_file_selected := false
|
||||||
var redone := false
|
var redone := false
|
||||||
var is_quitting_on_save := false
|
var is_quitting_on_save := false
|
||||||
|
|
||||||
var tallscreen_is_active = false
|
var tallscreen_is_active = false
|
||||||
|
|
||||||
var alternate_transparent_background := ColorRect.new()
|
var alternate_transparent_background := ColorRect.new()
|
||||||
|
|
||||||
onready var ui := $MenuAndUI/UI
|
onready var ui := $MenuAndUI/UI
|
||||||
onready var tools_and_canvas : HSplitContainer = $MenuAndUI/UI/ToolsAndCanvas
|
onready var tools_and_canvas : HSplitContainer = $MenuAndUI/UI/ToolsAndCanvas
|
||||||
|
|
||||||
onready var tallscreen_hsplit_container : HSplitContainer = $MenuAndUI/UI/ToolsAndCanvas/CanvasAndTimeline/TallscreenHSplitContainer
|
onready var tallscreen_hsplit_container : HSplitContainer = $MenuAndUI/UI/ToolsAndCanvas/CanvasAndTimeline/TallscreenHSplitContainer
|
||||||
onready var bottom_panel : VSplitContainer = tallscreen_hsplit_container.get_node("BottomPanel")
|
onready var bottom_panel : VSplitContainer = tallscreen_hsplit_container.get_node("BottomPanel")
|
||||||
onready var right_panel := $MenuAndUI/UI/RightPanel
|
onready var right_panel := $MenuAndUI/UI/RightPanel
|
||||||
|
@ -62,6 +61,11 @@ func _ready() -> void:
|
||||||
Global.open_sprites_dialog.current_dir = OS.get_user_data_dir()
|
Global.open_sprites_dialog.current_dir = OS.get_user_data_dir()
|
||||||
Global.save_sprites_dialog.current_dir = OS.get_user_data_dir()
|
Global.save_sprites_dialog.current_dir = OS.get_user_data_dir()
|
||||||
|
|
||||||
|
var i := 0
|
||||||
|
for camera in Global.cameras:
|
||||||
|
camera.index = i
|
||||||
|
i += 1
|
||||||
|
|
||||||
var zstd_checkbox := CheckBox.new()
|
var zstd_checkbox := CheckBox.new()
|
||||||
zstd_checkbox.name = "ZSTDCompression"
|
zstd_checkbox.name = "ZSTDCompression"
|
||||||
zstd_checkbox.pressed = true
|
zstd_checkbox.pressed = true
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
extends Camera2D
|
extends Camera2D
|
||||||
|
|
||||||
|
|
||||||
|
enum Cameras {MAIN, SECOND, SMALL}
|
||||||
|
|
||||||
const low_speed_move_rate := 150.0
|
const low_speed_move_rate := 150.0
|
||||||
const medium_speed_move_rate := 750.0
|
const medium_speed_move_rate := 750.0
|
||||||
const high_speed_move_rate := 3750.0
|
const high_speed_move_rate := 3750.0
|
||||||
|
@ -12,6 +14,7 @@ var viewport_container : ViewportContainer
|
||||||
var transparent_checker : ColorRect
|
var transparent_checker : ColorRect
|
||||||
var mouse_pos := Vector2.ZERO
|
var mouse_pos := Vector2.ZERO
|
||||||
var drag := false
|
var drag := false
|
||||||
|
var index := 0
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
@ -44,13 +47,13 @@ func rotation_button_pressed() -> void:
|
||||||
|
|
||||||
|
|
||||||
func rotation_value_changed(value) -> void:
|
func rotation_value_changed(value) -> void:
|
||||||
if name == "Camera2D":
|
if index == Cameras.MAIN:
|
||||||
set_camera_rotation_degrees(-value) # Negative makes going up rotate clockwise
|
set_camera_rotation_degrees(-value) # Negative makes going up rotate clockwise
|
||||||
|
|
||||||
|
|
||||||
func rotation_focus_exited() -> void:
|
func rotation_focus_exited() -> void:
|
||||||
if Global.rotation_level_spinbox.value != rotation: #If user pressed enter while editing
|
if Global.rotation_level_spinbox.value != rotation: #If user pressed enter while editing
|
||||||
if name == "Camera2D":
|
if index == Cameras.MAIN:
|
||||||
set_camera_rotation_degrees(-Global.rotation_level_spinbox.value) # Negative makes going up rotate clockwise
|
set_camera_rotation_degrees(-Global.rotation_level_spinbox.value) # Negative makes going up rotate clockwise
|
||||||
Global.rotation_level_button.visible = true
|
Global.rotation_level_button.visible = true
|
||||||
Global.rotation_level_spinbox.visible = false
|
Global.rotation_level_spinbox.visible = false
|
||||||
|
@ -66,13 +69,13 @@ func zoom_button_pressed() -> void:
|
||||||
|
|
||||||
|
|
||||||
func zoom_value_changed(value) -> void:
|
func zoom_value_changed(value) -> void:
|
||||||
if name == "Camera2D":
|
if index == Cameras.MAIN:
|
||||||
zoom_camera_percent(value)
|
zoom_camera_percent(value)
|
||||||
|
|
||||||
|
|
||||||
func zoom_focus_exited() -> void:
|
func zoom_focus_exited() -> void:
|
||||||
if Global.zoom_level_spinbox.value != round(100 / zoom.x): #If user pressed enter while editing
|
if Global.zoom_level_spinbox.value != round(100 / zoom.x): #If user pressed enter while editing
|
||||||
if name == "Camera2D":
|
if index == Cameras.MAIN:
|
||||||
zoom_camera_percent(Global.zoom_level_spinbox.value)
|
zoom_camera_percent(Global.zoom_level_spinbox.value)
|
||||||
Global.zoom_level_button.visible = true
|
Global.zoom_level_button.visible = true
|
||||||
Global.zoom_level_spinbox.visible = false
|
Global.zoom_level_spinbox.visible = false
|
||||||
|
@ -180,15 +183,20 @@ func process_direction_action_released(event: InputEvent) -> void:
|
||||||
|
|
||||||
|
|
||||||
func _input(event : InputEvent) -> void:
|
func _input(event : InputEvent) -> void:
|
||||||
|
if !Global.can_draw:
|
||||||
|
drag = false
|
||||||
|
return
|
||||||
mouse_pos = viewport_container.get_local_mouse_position()
|
mouse_pos = viewport_container.get_local_mouse_position()
|
||||||
var viewport_size := viewport_container.rect_size
|
var viewport_size := viewport_container.rect_size
|
||||||
|
if !Rect2(Vector2.ZERO, viewport_size).has_point(mouse_pos):
|
||||||
|
drag = false
|
||||||
|
return
|
||||||
|
|
||||||
if event.is_action_pressed("middle_mouse") || event.is_action_pressed("space"):
|
if event.is_action_pressed("middle_mouse") || event.is_action_pressed("space"):
|
||||||
drag = true
|
drag = true
|
||||||
elif event.is_action_released("middle_mouse") || event.is_action_released("space"):
|
elif event.is_action_released("middle_mouse") || event.is_action_released("space"):
|
||||||
drag = false
|
drag = false
|
||||||
|
elif event.is_action_pressed("zoom_in"): # Wheel Up Event
|
||||||
if Global.can_draw && Rect2(Vector2.ZERO, viewport_size).has_point(mouse_pos):
|
|
||||||
if event.is_action_pressed("zoom_in"): # Wheel Up Event
|
|
||||||
zoom_camera(-1)
|
zoom_camera(-1)
|
||||||
elif event.is_action_pressed("zoom_out"): # Wheel Down Event
|
elif event.is_action_pressed("zoom_out"): # Wheel Down Event
|
||||||
zoom_camera(1)
|
zoom_camera(1)
|
||||||
|
@ -197,28 +205,28 @@ func _input(event : InputEvent) -> void:
|
||||||
zoom_camera(1)
|
zoom_camera(1)
|
||||||
else:
|
else:
|
||||||
zoom_camera(-1)
|
zoom_camera(-1)
|
||||||
elif event is InputEventPanGesture: # Pan Gesture on a Latop touchpad
|
elif event is InputEventPanGesture and OS.get_name() != "Android": # Pan Gesture on a Latop touchpad
|
||||||
offset = offset + event.delta.rotated(rotation) * zoom * 7 # for moving the canvas
|
offset = offset + event.delta.rotated(rotation) * zoom * 7 # for moving the canvas
|
||||||
if OS.get_name() == "Android":
|
|
||||||
return
|
|
||||||
offset = offset + event.delta * zoom * 7 # for moving the canvas
|
|
||||||
elif event is InputEventMouseMotion && drag:
|
elif event is InputEventMouseMotion && drag:
|
||||||
offset = offset - event.relative.rotated(rotation) * zoom
|
offset = offset - event.relative.rotated(rotation) * zoom
|
||||||
update_transparent_checker_offset()
|
update_transparent_checker_offset()
|
||||||
update_rulers()
|
update_rulers()
|
||||||
elif is_action_direction_pressed(event):
|
elif event is InputEventKey:
|
||||||
|
if is_action_direction_pressed(event):
|
||||||
process_direction_action_pressed(event)
|
process_direction_action_pressed(event)
|
||||||
elif is_action_direction_released(event):
|
elif is_action_direction_released(event):
|
||||||
process_direction_action_released(event)
|
process_direction_action_released(event)
|
||||||
|
|
||||||
save_values_to_project()
|
save_values_to_project()
|
||||||
|
|
||||||
|
|
||||||
# Rotate Camera
|
# Rotate Camera
|
||||||
func rotate_camera_around_point(degrees: float, point: Vector2) -> void:
|
func rotate_camera_around_point(degrees: float, point: Vector2) -> void:
|
||||||
offset = (offset - point).rotated(deg2rad(degrees)) + point
|
offset = (offset - point).rotated(deg2rad(degrees)) + point
|
||||||
rotation_degrees = wrapf(rotation_degrees + degrees, -180, 180)
|
rotation_degrees = wrapf(rotation_degrees + degrees, -180, 180)
|
||||||
rotation_changed()
|
rotation_changed()
|
||||||
|
|
||||||
|
|
||||||
func set_camera_rotation_degrees(degrees: float) -> void:
|
func set_camera_rotation_degrees(degrees: float) -> void:
|
||||||
var difference := degrees - rotation_degrees
|
var difference := degrees - rotation_degrees
|
||||||
var canvas_center := Global.current_project.size / 2
|
var canvas_center := Global.current_project.size / 2
|
||||||
|
@ -226,8 +234,9 @@ func set_camera_rotation_degrees(degrees: float) -> void:
|
||||||
rotation_degrees = wrapf(degrees, -180, 180)
|
rotation_degrees = wrapf(degrees, -180, 180)
|
||||||
rotation_changed()
|
rotation_changed()
|
||||||
|
|
||||||
|
|
||||||
func rotation_changed() -> void:
|
func rotation_changed() -> void:
|
||||||
if name == "Camera2D":
|
if index == Cameras.MAIN:
|
||||||
# Negative to make going up in value clockwise, and match the spinbox which does the same
|
# Negative to make going up in value clockwise, and match the spinbox which does the same
|
||||||
Global.rotation_level_button.text = str(wrapi(round(-rotation_degrees), -180, 180)) + " °"
|
Global.rotation_level_button.text = str(wrapi(round(-rotation_degrees), -180, 180)) + " °"
|
||||||
update_rulers()
|
update_rulers()
|
||||||
|
@ -271,7 +280,7 @@ func zoom_camera_percent(value : float) -> void:
|
||||||
|
|
||||||
func zoom_changed() -> void:
|
func zoom_changed() -> void:
|
||||||
update_transparent_checker_offset()
|
update_transparent_checker_offset()
|
||||||
if name == "Camera2D":
|
if index == Cameras.MAIN:
|
||||||
Global.zoom_level_button.text = str(round(100 / zoom.x)) + " %"
|
Global.zoom_level_button.text = str(round(100 / zoom.x)) + " %"
|
||||||
Global.canvas.pixel_grid.update()
|
Global.canvas.pixel_grid.update()
|
||||||
update_rulers()
|
update_rulers()
|
||||||
|
@ -280,7 +289,7 @@ func zoom_changed() -> void:
|
||||||
|
|
||||||
Global.canvas.selection.update_on_zoom(zoom.x)
|
Global.canvas.selection.update_on_zoom(zoom.x)
|
||||||
|
|
||||||
elif name == "CameraPreview":
|
elif index == Cameras.SMALL:
|
||||||
Global.preview_zoom_slider.value = -zoom.x
|
Global.preview_zoom_slider.value = -zoom.x
|
||||||
|
|
||||||
|
|
||||||
|
@ -293,7 +302,6 @@ func _on_tween_step(_object: Object, _key: NodePath, _elapsed: float, _value: Ob
|
||||||
zoom_changed()
|
zoom_changed()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func zoom_100() -> void:
|
func zoom_100() -> void:
|
||||||
zoom = Vector2.ONE
|
zoom = Vector2.ONE
|
||||||
offset = Global.current_project.size / 2
|
offset = Global.current_project.size / 2
|
||||||
|
@ -323,11 +331,11 @@ func fit_to_frame(size : Vector2) -> void:
|
||||||
ratio = 0.1 # Set it to a non-zero value just in case
|
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
|
# If the ratio is 0, it means that the viewport container is hidden
|
||||||
# in that case, use the other viewport to get the ratio
|
# in that case, use the other viewport to get the ratio
|
||||||
if name == "Camera2D":
|
if index == Cameras.MAIN:
|
||||||
h_ratio = Global.second_viewport.rect_size.x / size.x
|
h_ratio = Global.second_viewport.rect_size.x / size.x
|
||||||
v_ratio = Global.second_viewport.rect_size.y / size.y
|
v_ratio = Global.second_viewport.rect_size.y / size.y
|
||||||
ratio = min(h_ratio, v_ratio)
|
ratio = min(h_ratio, v_ratio)
|
||||||
elif name == "Camera2D2":
|
elif index == Cameras.SECOND:
|
||||||
h_ratio = Global.main_viewport.rect_size.x / size.x
|
h_ratio = Global.main_viewport.rect_size.x / size.x
|
||||||
v_ratio = Global.main_viewport.rect_size.y / size.y
|
v_ratio = Global.main_viewport.rect_size.y / size.y
|
||||||
ratio = min(h_ratio, v_ratio)
|
ratio = min(h_ratio, v_ratio)
|
||||||
|
@ -338,18 +346,7 @@ func fit_to_frame(size : Vector2) -> void:
|
||||||
|
|
||||||
|
|
||||||
func save_values_to_project() -> void:
|
func save_values_to_project() -> void:
|
||||||
if name == "Camera2D":
|
Global.current_project.cameras_rotation[index] = rotation
|
||||||
Global.current_project.cameras_rotation[0] = rotation
|
Global.current_project.cameras_zoom[index] = zoom
|
||||||
Global.current_project.cameras_zoom[0] = zoom
|
Global.current_project.cameras_offset[index] = offset
|
||||||
Global.current_project.cameras_offset[0] = offset
|
Global.current_project.cameras_zoom_max[index] = zoom_max
|
||||||
Global.current_project.cameras_zoom_max[0] = zoom_max
|
|
||||||
elif name == "Camera2D2":
|
|
||||||
Global.current_project.cameras_rotation[1] = rotation
|
|
||||||
Global.current_project.cameras_zoom[1] = zoom
|
|
||||||
Global.current_project.cameras_offset[1] = offset
|
|
||||||
Global.current_project.cameras_zoom_max[1] = zoom_max
|
|
||||||
elif name == "CameraPreview":
|
|
||||||
Global.current_project.cameras_rotation[2] = rotation
|
|
||||||
Global.current_project.cameras_zoom[2] = zoom
|
|
||||||
Global.current_project.cameras_offset[2] = offset
|
|
||||||
Global.current_project.cameras_zoom_max[2] = zoom_max
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ func _draw() -> void:
|
||||||
onion_skinning()
|
onion_skinning()
|
||||||
currently_visible_frame.size = Global.current_project.size
|
currently_visible_frame.size = Global.current_project.size
|
||||||
current_frame_drawer.update()
|
current_frame_drawer.update()
|
||||||
|
if Global.current_project.tile_mode != Global.TileMode.NONE:
|
||||||
tile_mode.update()
|
tile_mode.update()
|
||||||
draw_set_transform(position, rotation, scale)
|
draw_set_transform(position, rotation, scale)
|
||||||
|
|
||||||
|
@ -87,8 +88,8 @@ func camera_zoom() -> void:
|
||||||
# Set camera zoom based on the sprite size
|
# Set camera zoom based on the sprite size
|
||||||
var bigger_canvas_axis = max(Global.current_project.size.x, Global.current_project.size.y)
|
var bigger_canvas_axis = max(Global.current_project.size.x, Global.current_project.size.y)
|
||||||
var zoom_max := Vector2(bigger_canvas_axis, bigger_canvas_axis) * 0.01
|
var zoom_max := Vector2(bigger_canvas_axis, bigger_canvas_axis) * 0.01
|
||||||
var cameras = [Global.camera, Global.camera2, Global.camera_preview]
|
|
||||||
for camera in cameras:
|
for camera in Global.cameras:
|
||||||
if zoom_max > Vector2.ONE:
|
if zoom_max > Vector2.ONE:
|
||||||
camera.zoom_max = zoom_max
|
camera.zoom_max = zoom_max
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -18,6 +18,8 @@ func _ready() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _input(_event : InputEvent) -> void:
|
func _input(_event : InputEvent) -> void:
|
||||||
|
if !visible:
|
||||||
|
return
|
||||||
var tmp_transform = get_canvas_transform().affine_inverse()
|
var tmp_transform = get_canvas_transform().affine_inverse()
|
||||||
var tmp_position = Global.main_viewport.get_local_mouse_position()
|
var tmp_position = Global.main_viewport.get_local_mouse_position()
|
||||||
mouse_pos = tmp_transform.basis_xform(tmp_position) + tmp_transform.origin
|
mouse_pos = tmp_transform.basis_xform(tmp_position) + tmp_transform.origin
|
||||||
|
@ -30,12 +32,12 @@ func _input(_event : InputEvent) -> void:
|
||||||
else:
|
else:
|
||||||
point0.x -= width * 3
|
point0.x -= width * 3
|
||||||
point1.x += width * 3
|
point1.x += width * 3
|
||||||
if Global.can_draw and Global.has_focus and point_in_rectangle(mouse_pos, point0, point1) and Input.is_action_just_pressed("left_mouse") and visible:
|
if Global.can_draw and Global.has_focus and point_in_rectangle(mouse_pos, point0, point1) and Input.is_action_just_pressed("left_mouse"):
|
||||||
if !point_in_rectangle(Global.canvas.current_pixel, Vector2.ZERO, project.size):
|
if !point_in_rectangle(Global.canvas.current_pixel, Vector2.ZERO, project.size):
|
||||||
has_focus = true
|
has_focus = true
|
||||||
Global.has_focus = false
|
Global.has_focus = false
|
||||||
update()
|
update()
|
||||||
if has_focus and visible:
|
if has_focus:
|
||||||
if Input.is_action_pressed("left_mouse"):
|
if Input.is_action_pressed("left_mouse"):
|
||||||
if type == Types.HORIZONTAL:
|
if type == Types.HORIZONTAL:
|
||||||
var yy = stepify(mouse_pos.y, 0.5)
|
var yy = stepify(mouse_pos.y, 0.5)
|
||||||
|
|
|
@ -15,6 +15,8 @@ func _ready() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _input(_event : InputEvent) -> void:
|
func _input(_event : InputEvent) -> void:
|
||||||
|
if !visible:
|
||||||
|
return
|
||||||
._input(_event)
|
._input(_event)
|
||||||
if type == Types.HORIZONTAL:
|
if type == Types.HORIZONTAL:
|
||||||
project.y_symmetry_point = points[0].y * 2 - 1
|
project.y_symmetry_point = points[0].y * 2 - 1
|
||||||
|
|
|
@ -32,11 +32,12 @@ func _ready() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _input(event : InputEvent) -> void:
|
func _input(event : InputEvent) -> void:
|
||||||
if not Global.has_focus:
|
if not Global.has_focus or not event is InputEventKey:
|
||||||
return
|
return
|
||||||
for action in ["undo", "redo", "redo_secondary"]:
|
for action in ["undo", "redo", "redo_secondary"]:
|
||||||
if event.is_action_pressed(action):
|
if event.is_action_pressed(action):
|
||||||
return
|
return
|
||||||
|
|
||||||
for t in tools: # Handle tool shortcuts
|
for t in tools: # Handle tool shortcuts
|
||||||
if event.is_action_pressed("right_" + t[1] + "_tool") and !event.control: # Shortcut for right button (with Alt)
|
if event.is_action_pressed("right_" + t[1] + "_tool") and !event.control: # Shortcut for right button (with Alt)
|
||||||
Tools.assign_tool(t[0].name, BUTTON_RIGHT)
|
Tools.assign_tool(t[0].name, BUTTON_RIGHT)
|
||||||
|
|
Loading…
Reference in a new issue