tool extends Control class_name SummerDayCanvas signal fill_transform_changed(fill_transform) signal canvas_transform_changed(canvas_transform) signal view_transform_changed(view_transform) var scene: SummerDayScene var fill_transform := Transform2D.IDENTITY var canvas_transform := Transform2D.IDENTITY var view_transform := Transform2D.IDENTITY # fill_transform * canvas_transform func _ready(): connect("view_transform_changed", $BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed") func _gui_input(event): if event is InputEventMagnifyGesture: print(event.factor) if event is InputEventMouseButton: print(event.pressed) func _on_SummerDay_scene_changed(new_scene): scene = new_scene _update_fill_transform() scene.connect("aspect_ratio_changed", self, "_on_scene_aspect_ratio_changed") $Label.text = str(scene) + "\n" + str(scene.aspect_ratio) func _on_Canvas_resized(): _update_fill_transform() func _on_scene_aspect_ratio_changed(new_aspect_ratio): $BackgroundLayer/EmptyCanvasLayer._update_size(new_aspect_ratio) _update_fill_transform() func _update_fill_transform(): if scene == null: fill_transform = Transform2D.IDENTITY else: var aspect_ratio = scene.aspect_ratio.x / scene.aspect_ratio.y var size_ratio = rect_size.x / rect_size.y var scale var translation = Vector2.ZERO if aspect_ratio <= size_ratio: scale = rect_size.y print(rect_size.y) translation.x = rect_size.x * 0.5 - aspect_ratio * scale * 0.5 print(rect_size.x * 0.5) print(aspect_ratio * scale * 0.5) print(translation) else: scale = rect_size.x / aspect_ratio translation.y = rect_size.y * 0.5 - scale * 0.5 fill_transform = Transform2D.IDENTITY.scaled(Vector2(scale, scale)) fill_transform = fill_transform.translated(translation) fill_transform = Transform2D( Vector2(scale, 0.0), Vector2(0.0, scale), translation ) print(fill_transform) emit_signal("fill_transform_changed", fill_transform) func _update_view_transformation(transform): view_transform = fill_transform * canvas_transform emit_signal("view_transform_changed", view_transform)