-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEditorWindow.gd
More file actions
114 lines (94 loc) · 3.66 KB
/
Copy pathEditorWindow.gd
File metadata and controls
114 lines (94 loc) · 3.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
class_name EditorWindow extends SubViewportContainer
var document: PFDocument
var texture: ImageTexture
@onready var canvas_sprite = $SubViewport/Sprite2D
@onready var scene_camera = $SubViewport/Camera2D
@onready var viewport = $SubViewport
@onready var pixel_grid = $SubViewport/PixelGrid
@onready var ruler_group = $SubViewport/UIRulers
@onready var ruler_x = $SubViewport/UIRulers/HorizonalRuler
@onready var ruler_y = $SubViewport/UIRulers/VerticalRuler
@export var key_pan_speed = 10
signal edited(editor: EditorWindow)
var _pan_dragging = false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#focus_neighbor_top = get_path_to(self)
#focus_neighbor_right = get_path_to(self)
#focus_neighbor_bottom = get_path_to(self)
#focus_neighbor_left = get_path_to(self)
pass
func link_to_document(doc: PFDocument) -> void:
document = doc
document.edited.connect(_on_document_edited)
texture = ImageTexture.create_from_image(document.image)
canvas_sprite.texture = texture
pixel_grid.document = doc
pixel_grid.recalculate_origin()
ruler_x.document = doc
ruler_y.document = doc
ruler_x.camera = scene_camera
ruler_y.camera = scene_camera
zoom_to_fit()
func zoom_to_fit() -> void:
scene_camera.position = Vector2.ZERO
var zoom = min(float(viewport.size.y) / float(document.image.get_height()), float(viewport.size.x) / float(document.image.get_width()))
scene_camera.zoom = Vector2(zoom, zoom)
func zoom_absolute(zoom: float) -> void:
scene_camera.zoom = Vector2(zoom, zoom)
func incremental_zoom(amount: float) -> void:
var cam_zoom = scene_camera.zoom.y
cam_zoom = cam_zoom * amount
scene_camera.zoom = Vector2(cam_zoom, cam_zoom)
func incremental_zoom_toward(amount: float, toward: Vector2) -> void:
var cam_zoom = scene_camera.zoom.y
cam_zoom = cam_zoom * amount
var mouse_world_pos = scene_camera.get_canvas_transform().affine_inverse() * toward
var offset_initial = mouse_world_pos - scene_camera.position
var offset_final = offset_initial * amount
var offset_diff = offset_final - offset_initial
scene_camera.zoom = Vector2(cam_zoom, cam_zoom)
scene_camera.position += offset_diff
func pan_camera(amount: Vector2):
var world_amount = scene_camera.get_canvas_transform().affine_inverse().basis_xform(amount)
scene_camera.position -= world_amount
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func _on_document_edited() -> void:
texture.set_image(document.image)
pixel_grid.recalculate_origin()
edited.emit(self)
func _gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_WHEEL_UP and event.pressed:
incremental_zoom_toward(1.03, event.position)
get_viewport().set_input_as_handled()
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN and event.pressed:
incremental_zoom_toward(0.97, event.position)
get_viewport().set_input_as_handled()
if event.button_index == MOUSE_BUTTON_MIDDLE:
if event.pressed:
_pan_dragging = true
else:
_pan_dragging = false
get_viewport().set_input_as_handled()
if event is InputEventMouseMotion:
if _pan_dragging:
pan_camera(event.relative)
get_viewport().set_input_as_handled()
if event is InputEventKey:
if event.is_pressed():
if event.keycode == KEY_UP:
pan_camera(Vector2(0, -key_pan_speed))
accept_event()
elif event.keycode == KEY_RIGHT:
pan_camera(Vector2(key_pan_speed, 0))
accept_event()
elif event.keycode == KEY_DOWN:
pan_camera(Vector2(0, key_pan_speed))
accept_event()
elif event.keycode == KEY_LEFT:
pan_camera(Vector2(-key_pan_speed, 0))
accept_event()
#func _input(event):