roundabout,
created on Tuesday, 7 January 2025, 09:09:09 (1736240949),
received on 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_distancenew_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) / scalecontent_mid_y = (midpoint_y - rect.top - translate_y) / scaletranslate_x = midpoint_x - content_mid_x * new_scaletranslate_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_xtranslate_y += delta_ytranslate_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: