Added shift and control modifier with LMB to pan/zoom 2D preview.

This commit is contained in:
Rodolphe Suescun 2021-08-10 14:48:01 +02:00
parent 30ee03c2b9
commit 14a496984d
1 changed files with 16 additions and 7 deletions

View File

@ -49,6 +49,7 @@ func on_resized() -> void:
$Axes.update() $Axes.update()
var dragging : bool = false var dragging : bool = false
var zooming : bool = false
func _on_gui_input(event): func _on_gui_input(event):
var need_update : bool = false var need_update : bool = false
@ -56,24 +57,32 @@ func _on_gui_input(event):
var multiplier : float = min(rect_size.x, rect_size.y) var multiplier : float = min(rect_size.x, rect_size.y)
var image_rect : Rect2 = get_global_rect() var image_rect : Rect2 = get_global_rect()
var offset_from_center : Vector2 = get_global_mouse_position()-(image_rect.position+0.5*image_rect.size) var offset_from_center : Vector2 = get_global_mouse_position()-(image_rect.position+0.5*image_rect.size)
var new_scale : float = scale
if event is InputEventMouseButton: if event is InputEventMouseButton:
if event.pressed: if event.pressed:
var new_scale : float = scale
if event.button_index == BUTTON_WHEEL_DOWN: if event.button_index == BUTTON_WHEEL_DOWN:
new_scale = min(new_scale*1.05, 5) new_scale = min(new_scale*1.05, 5.0)
elif event.button_index == BUTTON_WHEEL_UP: elif event.button_index == BUTTON_WHEEL_UP:
new_scale = max(new_scale*0.95, 0.005) new_scale = max(new_scale*0.95, 0.005)
elif event.button_index == BUTTON_MIDDLE: elif event.button_index == BUTTON_MIDDLE:
dragging = true dragging = true
if new_scale != scale: elif event.button_index == BUTTON_LEFT:
new_center = center+offset_from_center*(scale-new_scale)/multiplier if event.shift:
scale = new_scale dragging = true
need_update = true elif event.command:
elif event.button_index == BUTTON_MIDDLE: zooming = true
else:
dragging = false dragging = false
zooming = false
elif event is InputEventMouseMotion: elif event is InputEventMouseMotion:
if dragging: if dragging:
new_center = center-event.relative*scale/multiplier new_center = center-event.relative*scale/multiplier
elif zooming:
new_scale = clamp(new_scale*(1.0+0.01*event.relative.y), 0.005, 5.0)
if new_scale != scale:
new_center = center+offset_from_center*(scale-new_scale)/multiplier
scale = new_scale
need_update = true
if new_center != center: if new_center != center:
center.x = clamp(new_center.x, 0.0, 1.0) center.x = clamp(new_center.x, 0.0, 1.0)
center.y = clamp(new_center.y, 0.0, 1.0) center.y = clamp(new_center.y, 0.0, 1.0)