roundabout,
created on Saturday, 1 February 2025, 20:16:18 (1738440978),
received on Saturday, 1 February 2025, 20:16:21 (1738440981)
Author identity: vlad <vlad.muntoiu@gmail.com>
57c3520a75742f50d16fe49810c8ce5f3bd4e44a
static/picture-annotation.py
@@ -4,6 +4,7 @@ from pyscript import document, fetch as pyfetch
from pyscript.ffi import create_proxy import asyncio import json import mathdocument.getElementById("shape-options").style.display = "flex"
@@ -826,8 +827,8 @@ def on_touch_start(event):
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)((event.touches[0].clientX - zone.getBoundingClientRect().left) / scale, (event.touches[0].clientY - zone.getBoundingClientRect().top) / scale), ((event.touches[1].clientX - zone.getBoundingClientRect().left) / scale, (event.touches[1].clientY - zone.getBoundingClientRect().top) / scale)] last_touch_distance = calculate_distance(event.touches)
@@ -839,15 +840,17 @@ def on_touch_move(event):
# Finger positions. current_positions = [ (event.touches[0].clientX, event.touches[0].clientY),(event.touches[1].clientX, event.touches[1].clientY)((event.touches[0].clientX - zone.getBoundingClientRect().left) / scale, (event.touches[0].clientY - zone.getBoundingClientRect().top) / scale), ((event.touches[1].clientX - zone.getBoundingClientRect().left) / scale, (event.touches[1].clientY - zone.getBoundingClientRect().top) / scale)] current_distance = calculate_distance(event.touches) # Ignore small movements. if abs(current_distance - last_touch_distance) > 16:if last_touch_distance and abs(current_distance - last_touch_distance) > min(image.width, image.height) / 64:zoom_factor = current_distance / last_touch_distance new_scale = max(0.0625, min(64, scale * zoom_factor)) scale_exponent = math.log2(new_scale) zoom_slider.value = scale_exponentelse: new_scale = scale
@@ -859,8 +862,11 @@ def on_touch_move(event):
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)) / 2delta_y = sum(p[1] - lp[1] for p, lp in zip(current_positions, last_touch_positions)) / 2if last_touch_positions: 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 else: delta_x = delta_y = 0translate_x += delta_x - tx translate_y += delta_y - ty
static/style.css
@@ -825,12 +825,13 @@ nav .button-flat .ripple-pad {
#annotation-zoom-container { flex: 1 1 auto; overflow: scroll;overflow: hidden;align-self: stretch; width: 100%; display: flex; justify-content: center; align-items: center; touch-action: none;} #annotation-zoom-container > #annotation-zone {