roundabout,
created on Monday, 6 January 2025, 17:22:49 (1736184169),
received on Tuesday, 7 January 2025, 08:25:28 (1736238328)
Author identity: vlad <vlad.muntoiu@gmail.com>
554317b0acc1ffb8847240567b8317d95351eda7
static/picture-annotation.py
@@ -715,13 +715,14 @@ zoom_offset = (0, 0)
def on_wheel(event):
global scale, scale_exponent, translate_x, translate_y
if object_list.matches(":hover"):
return
event.preventDefault()
# Adjust scale exponent and compute new scale
# Adjust scale exponent and compute new scale.
scale_exponent += (-1 if event.deltaY > 0 else 1) / 4
new_scale = 2 ** scale_exponent
# Update scale
scale = new_scale
update_transform()
@@ -733,12 +734,19 @@ start_y = 0
def on_mouse_down(event):
global is_dragging, start_x, start_y
is_dragging = True
start_x = event.clientX
start_y = event.clientY
if object_list.matches(":hover"):
return
if event.button == 0:
is_dragging = True
start_x = event.clientX
start_y = event.clientY
def on_mouse_move(event):
global translate_x, translate_y
if object_list.matches(":hover"):
return
if is_dragging:
translate_x += event.movementX / scale
translate_y += event.movementY / scale
@@ -746,12 +754,53 @@ def on_mouse_move(event):
def on_mouse_up(event):
global is_dragging
if object_list.matches(":hover"):
return
is_dragging = False
def on_touch_start(event):
global last_touch_positions
if event.touches.length == 2:
event.preventDefault()
last_touch_positions = [
(event.touches[0].clientX, event.touches[0].clientY),
(event.touches[1].clientX, event.touches[1].clientY)
]
def on_touch_move(event):
global translate_x, translate_y, last_touch_positions
if event.touches.length == 2:
event.preventDefault()
current_positions = [
(event.touches[0].clientX, event.touches[0].clientY),
(event.touches[1].clientX, event.touches[1].clientY)
]
delta_x = sum(p[0] - lp[0] for p, lp in zip(current_positions, last_touch_positions)) / 2
delta_y = sum(p[1] - lp[1] for p, lp in zip(current_positions, last_touch_positions)) / 2
translate_x += delta_x
translate_y += delta_y
last_touch_positions = current_positions
update_transform()
def on_touch_end(event):
global last_touch_positions
if event.touches.length == 0:
last_touch_positions = None
zoom_container.addEventListener("wheel", on_wheel)
zoom_container.addEventListener("mousedown", on_mouse_down)
document.addEventListener("mousemove", on_mouse_move)
document.addEventListener("mouseup", on_mouse_up)
zone.addEventListener("touchstart", on_touch_start)
zone.addEventListener("touchmove", on_touch_move)
zone.addEventListener("touchend", on_touch_end)
# Load existing annotations, if any
put_shapes(await load_shapes())