by roundabout, Tuesday, 7 January 2025, 09:09:09 (1736240949), pushed by roundabout, Tuesday, 7 January 2025, 09:09:12 (1736240952)
Author identity: vlad <vlad.muntoiu@gmail.com>
f43122aff9736de8ac17adea57a4d540404d4d32
static/picture-annotation.py
@@ -813,38 +813,40 @@ def on_touch_move(event):
if event.touches.length == 2:
event.preventDefault()
# Finger positions.
current_positions = [
(event.touches[0].clientX, event.touches[0].clientY),
(event.touches[1].clientX, event.touches[1].clientY)
]
current_distance = calculate_distance(event.touches)
zoom_factor = current_distance / last_touch_distance
new_scale = max(0.0625, min(64, scale * zoom_factor))
scale_factor = new_scale / scale
# Ignore small movements.
if abs(current_distance - last_touch_distance) > 16:
zoom_factor = current_distance / last_touch_distance
new_scale = max(0.0625, min(64, scale * zoom_factor))
# Finger midpoint.
midpoint_x = (current_positions[0][0] + current_positions[1][0]) / 2
midpoint_y = (current_positions[0][1] + current_positions[1][1]) / 2
rect = zone.getBoundingClientRect()
content_mid_x = (midpoint_x - rect.left - translate_x) / scale
content_mid_y = (midpoint_y - rect.top - translate_y) / scale
translate_x = midpoint_x - content_mid_x * new_scale
translate_y = midpoint_y - content_mid_y * new_scale
# Compute translation for zooming around the midpoint.
tx, ty = compute_zoom_translation_around_point(zone, midpoint_x, midpoint_y, scale, new_scale)
# Compute translation for panning.
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
translate_x += delta_x - tx
translate_y += delta_y - ty
# Update state.
scale = new_scale
last_touch_positions = current_positions
last_touch_distance = current_distance
update_transform()
def on_touch_end(event):
global last_touch_positions, last_touch_distance
if event.touches.length < 2: