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