SummerDay/addons/summer_day/tool/canvas/canvas.gd

82 lines
2.1 KiB
GDScript

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)