startDrag method
Begins a drag at localPos (planner-local coordinates) if it lands on an
event. Called from the widget layer's gesture handlers — never from paint.
Implementation
void startDrag(Offset localPos) {
if (_draggedEvent != null) return;
final event = getEventAtPos(localPos);
if (event == null) return;
// Spanning events are read-only in this first cut (#47): a long-press on one
// starts no drag, so it can't be moved or resized (it stays tappable for
// edit/delete via double-tap and the context menu).
if (event.entry.time.spansColumns) return;
_draggedEvent = event;
event.startDrag(_toGridPos(localPos));
controller.triggerUpdate.value++;
}