roundabout,
created on Tuesday, 7 January 2025, 13:23:30 (1736256210),
received on Tuesday, 7 January 2025, 13:23:33 (1736256213)
Author identity: vlad <vlad.muntoiu@gmail.com>
60235e765827c05c4f66a8285bffe270126dbca5
static/picture-annotation.py
@@ -302,7 +302,8 @@ async def focus_shape(shape):
async def select_shape(event):
await focus_shape(event.target)
if drag_distance == 0:
await focus_shape(event.target)
async def next_shape(event):
@@ -366,18 +367,19 @@ async def previous_shape(event):
def unselect_shape(event):
global selected_shape
if selected_shape is not None:
selected_shape.classList.remove("selected")
selected_shape = None
if drag_distance == 0:
if selected_shape is not None:
selected_shape.classList.remove("selected")
selected_shape = None
object_list_content.innerHTML = ""
object_list.style.display = "none"
delete_button.style.display = "none"
next_button.style.display = "none"
previous_button.style.display = "none"
document.removeEventListener("keydown", delete_shape_key_proxy)
document.removeEventListener("keydown", next_shape_key_proxy)
document.removeEventListener("keydown", previous_shape_key_proxy)
object_list_content.innerHTML = ""
object_list.style.display = "none"
delete_button.style.display = "none"
next_button.style.display = "none"
previous_button.style.display = "none"
document.removeEventListener("keydown", delete_shape_key_proxy)
document.removeEventListener("keydown", next_shape_key_proxy)
document.removeEventListener("keydown", previous_shape_key_proxy)
def delete_shape(event):
@@ -432,6 +434,7 @@ def switch_shape(event):
shape.addEventListener("click", select_shape_proxy)
image.addEventListener("click", unselect_shape_proxy)
helper_message.innerText = "Click on a shape to select"
zone.style.cursor = "inherit"
# Cancel the current shape creation
if shape_type == "shape-bbox":
cancel_bbox(None)
@@ -440,6 +443,9 @@ def switch_shape(event):
elif shape_type == "shape-polyline":
cancel_polygon(None)
else:
zone.style.cursor = "pointer"
if shape_type == "shape-point":
zone.style.cursor = "crosshair"
# Remove event listeners for selection
for shape in document.getElementsByClassName("shape"):
print("Removing event listener from shape:", shape)
@@ -767,6 +773,7 @@ def on_wheel(event):
is_dragging = False
drag_distance = 0
start_x = 0
start_y = 0
@@ -779,22 +786,30 @@ def on_mouse_down(event):
is_dragging = True
start_x = event.clientX
start_y = event.clientY
zoom_container.style.cursor = "grabbing"
def on_mouse_move(event):
global translate_x, translate_y
global translate_x, translate_y, drag_distance
if object_list.matches(":hover"):
return
if is_dragging:
if is_dragging and min(event.movementX, event.movementY) != 0:
drag_distance += abs(event.movementX) + abs(event.movementY)
translate_x += event.movementX
translate_y += event.movementY
update_transform()
def on_mouse_up(event):
global is_dragging
global is_dragging, drag_distance
if drag_distance:
# Don't click if the image was panned
event.preventDefault()
event.stopPropagation()
if object_list.matches(":hover"):
return
is_dragging = False
drag_distance = 0
zoom_container.style.cursor = "grab"
last_touch_positions = None
last_touch_distance = None
@@ -884,7 +899,7 @@ def zoom_out(event):
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)
document.addEventListener("click", on_mouse_up)
zone.addEventListener("touchstart", on_touch_start)
zone.addEventListener("touchmove", on_touch_move)
zone.addEventListener("touchend", on_touch_end)
static/style.css
@@ -871,3 +871,11 @@ body.fixed-content-area > main {
width: 7ch;
text-align: right;
}
#annotation-zoom-container {
cursor: grab;
}
#object-types {
cursor: auto;
}