1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-18 17:19:50 +00:00

Optimize _input() methods

This commit is contained in:
Manolis Papadeas 2021-11-22 21:32:39 +02:00
parent 4931e50213
commit 79ff0a8d45
8 changed files with 64 additions and 56 deletions

View file

@ -127,6 +127,7 @@ onready var small_preview_viewport : ViewportContainer = canvas_preview_containe
onready var camera : Camera2D = main_viewport.find_node("Camera2D")
onready var camera2 : Camera2D = control.find_node("Camera2D2")
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 vertical_ruler : BaseButton = control.find_node("VerticalRuler")
onready var transparent_checker : ColorRect = control.find_node("TransparentChecker")

View file

@ -231,7 +231,7 @@ func change_project() -> void:
Global.top_menu_container.edit_menu_button.get_popup().set_item_disabled(6, !has_selection)
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]
if camera == Global.camera_preview:
Global.preview_zoom_slider.disconnect("value_changed", Global.canvas_preview_container, "_on_PreviewZoomSlider_value_changed")

View file

@ -1,15 +1,14 @@
extends Control
var opensprite_file_selected := false
var redone := false
var is_quitting_on_save := false
var tallscreen_is_active = false
var alternate_transparent_background := ColorRect.new()
onready var ui := $MenuAndUI/UI
onready var tools_and_canvas : HSplitContainer = $MenuAndUI/UI/ToolsAndCanvas
onready var tallscreen_hsplit_container : HSplitContainer = $MenuAndUI/UI/ToolsAndCanvas/CanvasAndTimeline/TallscreenHSplitContainer
onready var bottom_panel : VSplitContainer = tallscreen_hsplit_container.get_node("BottomPanel")
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.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()
zstd_checkbox.name = "ZSTDCompression"
zstd_checkbox.pressed = true

View file

@ -1,6 +1,8 @@
extends Camera2D
enum Cameras {MAIN, SECOND, SMALL}
const low_speed_move_rate := 150.0
const medium_speed_move_rate := 750.0
const high_speed_move_rate := 3750.0
@ -12,6 +14,7 @@ var viewport_container : ViewportContainer
var transparent_checker : ColorRect
var mouse_pos := Vector2.ZERO
var drag := false
var index := 0
func _ready() -> void:
@ -44,13 +47,13 @@ func rotation_button_pressed() -> 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
func rotation_focus_exited() -> void:
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
Global.rotation_level_button.visible = true
Global.rotation_level_spinbox.visible = false
@ -66,13 +69,13 @@ func zoom_button_pressed() -> void:
func zoom_value_changed(value) -> void:
if name == "Camera2D":
if index == Cameras.MAIN:
zoom_camera_percent(value)
func zoom_focus_exited() -> void:
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)
Global.zoom_level_button.visible = true
Global.zoom_level_spinbox.visible = false
@ -180,38 +183,42 @@ func process_direction_action_released(event: InputEvent) -> void:
func _input(event : InputEvent) -> void:
if !Global.can_draw:
drag = false
return
mouse_pos = viewport_container.get_local_mouse_position()
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"):
drag = true
elif event.is_action_released("middle_mouse") || event.is_action_released("space"):
drag = false
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)
elif event.is_action_pressed("zoom_out"): # Wheel Down Event
elif event.is_action_pressed("zoom_in"): # Wheel Up Event
zoom_camera(-1)
elif event.is_action_pressed("zoom_out"): # Wheel Down Event
zoom_camera(1)
elif event is InputEventMagnifyGesture: # Zoom Gesture on a Laptop touchpad
if event.factor < 1:
zoom_camera(1)
elif event is InputEventMagnifyGesture: # Zoom Gesture on a Laptop touchpad
if event.factor < 1:
zoom_camera(1)
else:
zoom_camera(-1)
elif event is InputEventPanGesture: # Pan Gesture on a Latop touchpad
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:
offset = offset - event.relative.rotated(rotation) * zoom
update_transparent_checker_offset()
update_rulers()
elif is_action_direction_pressed(event):
else:
zoom_camera(-1)
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
elif event is InputEventMouseMotion && drag:
offset = offset - event.relative.rotated(rotation) * zoom
update_transparent_checker_offset()
update_rulers()
elif event is InputEventKey:
if is_action_direction_pressed(event):
process_direction_action_pressed(event)
elif is_action_direction_released(event):
process_direction_action_released(event)
save_values_to_project()
save_values_to_project()
# Rotate Camera
func rotate_camera_around_point(degrees: float, point: Vector2) -> void:
@ -219,6 +226,7 @@ func rotate_camera_around_point(degrees: float, point: Vector2) -> void:
rotation_degrees = wrapf(rotation_degrees + degrees, -180, 180)
rotation_changed()
func set_camera_rotation_degrees(degrees: float) -> void:
var difference := degrees - rotation_degrees
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_changed()
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
Global.rotation_level_button.text = str(wrapi(round(-rotation_degrees), -180, 180)) + " °"
update_rulers()
@ -271,7 +280,7 @@ func zoom_camera_percent(value : float) -> void:
func zoom_changed() -> void:
update_transparent_checker_offset()
if name == "Camera2D":
if index == Cameras.MAIN:
Global.zoom_level_button.text = str(round(100 / zoom.x)) + " %"
Global.canvas.pixel_grid.update()
update_rulers()
@ -280,7 +289,7 @@ func zoom_changed() -> void:
Global.canvas.selection.update_on_zoom(zoom.x)
elif name == "CameraPreview":
elif index == Cameras.SMALL:
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()
func zoom_100() -> void:
zoom = Vector2.ONE
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
# If the ratio is 0, it means that the viewport container is hidden
# 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
v_ratio = Global.second_viewport.rect_size.y / size.y
ratio = min(h_ratio, v_ratio)
elif name == "Camera2D2":
elif index == Cameras.SECOND:
h_ratio = Global.main_viewport.rect_size.x / size.x
v_ratio = Global.main_viewport.rect_size.y / size.y
ratio = min(h_ratio, v_ratio)
@ -338,18 +346,7 @@ func fit_to_frame(size : Vector2) -> void:
func save_values_to_project() -> void:
if name == "Camera2D":
Global.current_project.cameras_rotation[0] = rotation
Global.current_project.cameras_zoom[0] = zoom
Global.current_project.cameras_offset[0] = offset
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
Global.current_project.cameras_rotation[index] = rotation
Global.current_project.cameras_zoom[index] = zoom
Global.current_project.cameras_offset[index] = offset
Global.current_project.cameras_zoom_max[index] = zoom_max

View file

@ -51,7 +51,8 @@ func _draw() -> void:
onion_skinning()
currently_visible_frame.size = Global.current_project.size
current_frame_drawer.update()
tile_mode.update()
if Global.current_project.tile_mode != Global.TileMode.NONE:
tile_mode.update()
draw_set_transform(position, rotation, scale)
@ -87,8 +88,8 @@ func camera_zoom() -> void:
# Set camera zoom based on the sprite size
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 cameras = [Global.camera, Global.camera2, Global.camera_preview]
for camera in cameras:
for camera in Global.cameras:
if zoom_max > Vector2.ONE:
camera.zoom_max = zoom_max
else:

View file

@ -18,6 +18,8 @@ func _ready() -> void:
func _input(_event : InputEvent) -> void:
if !visible:
return
var tmp_transform = get_canvas_transform().affine_inverse()
var tmp_position = Global.main_viewport.get_local_mouse_position()
mouse_pos = tmp_transform.basis_xform(tmp_position) + tmp_transform.origin
@ -30,12 +32,12 @@ func _input(_event : InputEvent) -> void:
else:
point0.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):
has_focus = true
Global.has_focus = false
update()
if has_focus and visible:
if has_focus:
if Input.is_action_pressed("left_mouse"):
if type == Types.HORIZONTAL:
var yy = stepify(mouse_pos.y, 0.5)

View file

@ -15,6 +15,8 @@ func _ready() -> void:
func _input(_event : InputEvent) -> void:
if !visible:
return
._input(_event)
if type == Types.HORIZONTAL:
project.y_symmetry_point = points[0].y * 2 - 1

View file

@ -32,11 +32,12 @@ func _ready() -> void:
func _input(event : InputEvent) -> void:
if not Global.has_focus:
if not Global.has_focus or not event is InputEventKey:
return
for action in ["undo", "redo", "redo_secondary"]:
if event.is_action_pressed(action):
return
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)
Tools.assign_tool(t[0].name, BUTTON_RIGHT)