Commit Graph
15 Commits
Author SHA1 Message Date
Hiren Kangad 9a4edd90c7 refboard: complete image geometry rework — consumer adoption + tests
- Fix grouping.ts ungroup: transform display position (with flip
  compensation) through group transform, then back-calculate canonical
  data.x/y. Fixes visual jump for flipped images in rotated groups.
- Fix clipboard.ts + export.ts resolution estimation: account for
  scale when computing effective rendered width for texture ratio.
- Add imageTransforms.test.ts: 32 unit tests covering source rect,
  visible local rect, display transform, display geometry, editor
  geometry anchor preservation, crop rect round-trips, coordinate
  conversions, negative scale normalization, and world bounds invariants.
- Add vitest as dev dependency with "test" script.
- Include canonical geometry layer (imageTransforms.ts) and crop
  session rewrite (CropOverlay.ts) from prior work.
- Add image geometry rework plan document.
2026-03-13 13:37:42 +05:30
Hiren Kangad 768de39463 refboard: use full image geometry in crop mode 2026-03-13 12:50:13 +05:30
Hiren Kangad 50dbb4e0cf refboard: anchor crop apply to selected region 2026-03-13 12:42:16 +05:30
Hiren Kangad 5c13def2d2 refboard: improve crop preview and cropped bounds focus 2026-03-13 12:15:22 +05:30
Hiren Kangad 4f8e3984b2 refboard: fix crop pointer coordinate mapping 2026-03-13 12:04:57 +05:30
Hiren Kangad c78325227f refboard: drive crop drag from DOM pointer events 2026-03-13 11:57:26 +05:30
Hiren Kangad 421ad176d4 refboard: align crop drag handling with transform box 2026-03-13 11:48:13 +05:30
Hiren Kangad e1b97d52f8 refboard: route crop drag events through viewport 2026-03-13 11:41:03 +05:30
Hiren Kangad 470693266e refboard: stabilize crop interaction bounds 2026-03-13 11:31:18 +05:30
Hiren Kangad b350951bf1 refboard: merge crop mode polish with markdown editor 2026-03-13 11:21:28 +05:30
Hiren Kangad dd1578110b refboard: support rotated image crop editing 2026-03-13 11:21:27 +05:30
Hiren Kangad 12410c0098 refboard: stabilize image flip and crop transforms 2026-03-13 11:21:27 +05:30
Hiren Kangad d3f7c45dda fix(crop): ensure overlay renders on top of scene items
CropOverlay was hidden behind images because SceneManager._applyZOrder()
reorders viewport children by z-index, pushing non-scene children behind.
Now start() moves itself to the top of the viewport child list.
2026-03-11 18:17:43 +05:30
Hiren Kangad 01f22c9d43 fix: address code review findings from crop/text commit
- CropOverlay: register move/up handlers dynamically on drag start (single
  handler instead of 8x per-handle), remove on drag end. Override destroy()
  to call _cleanup() preventing keyboard listener leaks.
- Text format toolbar: re-measure text bounds (w/h) after fontSize/fontFamily
  changes, update spatial index and transform box.
- TextEditor: add clearText() method; tools.ts uses it instead of fragile
  document.querySelector('textarea').
- SceneManager._updateItem: apply crop mask on remote sync for image items.
- useCanvasSetup: stop TextEditor on unmount to prevent orphaned textarea.
- Double-click zoom: use item.data dimensions instead of getBounds() (which
  includes shadow offset).
2026-03-11 17:28:52 +05:30
Hiren Kangad 58da934ec1 feat: text tool UX, image crop, text format toolbar, double-click focus
- Text tool: click-to-place immediately opens inline editor, auto-switches
  back to select tool. Empty text cleanup on save.
- Crop: select image + press C (or right-click > Crop) to enter crop mode.
  8 drag handles with rule-of-thirds grid, dimmed outside area.
  Enter confirms, Escape cancels. Non-destructive (stored as normalized rect).
- Text format toolbar: appears when text items selected, with font size +/-,
  font family dropdown, and color picker with presets.
- Double-click image: zoom-to-fit (PureRef-style focus)
- Entrance animation: replaced bounce with simple fade-in (no delay before
  items become interactive)
- TextEditor: allow empty text (caller handles cleanup)
2026-03-11 17:22:25 +05:30