63 lines
1.9 KiB
GDScript
63 lines
1.9 KiB
GDScript
tool
|
|
extends PanelContainer
|
|
class_name SummerDayCanvas
|
|
|
|
var scene: SummerDayScene
|
|
var canvas_state := SummerDayCanvasState.new()
|
|
var tool_pool := SummerDayCanvasToolPool.new()
|
|
|
|
var tool_context: SummerDayToolContext # Provided by plugin root.
|
|
|
|
|
|
func _ready():
|
|
tool_context.canvas_state = canvas_state
|
|
canvas_state.connect("view_transform_changed",
|
|
$Render/BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed")
|
|
canvas_state.connect("clip_space_view_transform_changed",
|
|
self, "_on_clip_space_view_transform_changed")
|
|
|
|
|
|
func _gui_input(event):
|
|
tool_pool.run_most_prior(event, tool_context)
|
|
|
|
|
|
# _gui_input() cannot receive screen touch released event so we do this here.
|
|
func _input(event):
|
|
if event is InputEventScreenTouch and !event.is_pressed():
|
|
tool_pool.run_most_prior(event, tool_context)
|
|
|
|
|
|
func _on_SummerDay_scene_changed(new_scene):
|
|
scene = new_scene
|
|
canvas_state.update_fill_transform(scene)
|
|
scene.connect("aspect_ratio_changed",
|
|
self, "_on_scene_aspect_ratio_changed")
|
|
$Render/Label.text = str(scene) + "\n" + str(scene.aspect_ratio)
|
|
$Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene)
|
|
canvas_state.update_fill_transform(scene)
|
|
|
|
|
|
func _on_Canvas_resized():
|
|
canvas_state.rect_size = rect_size
|
|
canvas_state.update_canvas_to_clip_space()
|
|
canvas_state.update_fill_transform(scene)
|
|
|
|
|
|
func _on_scene_aspect_ratio_changed(new_aspect_ratio):
|
|
$Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene)
|
|
canvas_state.update_fill_transform(scene)
|
|
|
|
|
|
func _on_clip_space_view_transform_changed(new_transform):
|
|
var listeners = get_tree().get_nodes_in_group("ListenForTransformUpdate")
|
|
for i in listeners:
|
|
var basis = Basis(
|
|
Vector3(new_transform.x.x, new_transform.x.y, 0.0),
|
|
Vector3(new_transform.y.x, new_transform.y.y, 0.0),
|
|
Vector3(new_transform.origin.x, new_transform.origin.y, 1.0)
|
|
)
|
|
i.get_material().set_shader_param("canvas_transform", basis)
|
|
#print(i.get_material().get_shader_param("canvas_transform"))
|
|
|
|
|