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).
This commit is contained in:
Hiren Kangad
2026-03-11 17:28:52 +05:30
parent 58da934ec1
commit 01f22c9d43
6 changed files with 72 additions and 21 deletions
+4
View File
@@ -421,6 +421,10 @@ export class SceneManager {
if (data.type === 'group' && obj instanceof FrameSprite) {
obj.updateFromData(data as GroupObject);
}
if (data.type === 'image' && obj instanceof ImageSprite) {
const imgData = data as ImageObject;
obj.applyCrop(imgData.crop);
}
// Update stored data
item.data = { ...data };