@archireport/react-native-drawing 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +181 -0
- package/lib/commonjs/DrawingEditor.js +815 -0
- package/lib/commonjs/DrawingEditor.js.map +1 -0
- package/lib/commonjs/assets/toolbar-icons/arrow-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/arrow-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/arrow.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/circle-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/circle-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/circle.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/freehand-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/freehand-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/freehand.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/line-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/line-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/line.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/measure-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/measure-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/measure.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/move-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/move-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/move.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/polygon-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/polygon-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/polygon.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/rectangle-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/rectangle-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/rectangle.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/text-disabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/text-enabled.png +0 -0
- package/lib/commonjs/assets/toolbar-icons/text.png +0 -0
- package/lib/commonjs/components/ColorPalette.js +379 -0
- package/lib/commonjs/components/ColorPalette.js.map +1 -0
- package/lib/commonjs/components/LineWidthSlider.js +70 -0
- package/lib/commonjs/components/LineWidthSlider.js.map +1 -0
- package/lib/commonjs/components/MeasurementEditModal.js +153 -0
- package/lib/commonjs/components/MeasurementEditModal.js.map +1 -0
- package/lib/commonjs/components/MiniMap.js +244 -0
- package/lib/commonjs/components/MiniMap.js.map +1 -0
- package/lib/commonjs/components/TextAnnotation.js +162 -0
- package/lib/commonjs/components/TextAnnotation.js.map +1 -0
- package/lib/commonjs/components/TextEditModal.js +133 -0
- package/lib/commonjs/components/TextEditModal.js.map +1 -0
- package/lib/commonjs/components/Toolbar.js +198 -0
- package/lib/commonjs/components/Toolbar.js.map +1 -0
- package/lib/commonjs/components/ZoomBadge.js +161 -0
- package/lib/commonjs/components/ZoomBadge.js.map +1 -0
- package/lib/commonjs/hooks/useFreehandGesture.js +173 -0
- package/lib/commonjs/hooks/useFreehandGesture.js.map +1 -0
- package/lib/commonjs/hooks/usePolygonGesture.js +109 -0
- package/lib/commonjs/hooks/usePolygonGesture.js.map +1 -0
- package/lib/commonjs/hooks/useSelectionGesture.js +236 -0
- package/lib/commonjs/hooks/useSelectionGesture.js.map +1 -0
- package/lib/commonjs/hooks/useShapeGesture.js +181 -0
- package/lib/commonjs/hooks/useShapeGesture.js.map +1 -0
- package/lib/commonjs/hooks/useViewportGesture.js +238 -0
- package/lib/commonjs/hooks/useViewportGesture.js.map +1 -0
- package/lib/commonjs/index.js +104 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/renderers/ArrowRenderer.js +118 -0
- package/lib/commonjs/renderers/ArrowRenderer.js.map +1 -0
- package/lib/commonjs/renderers/CircleRenderer.js +51 -0
- package/lib/commonjs/renderers/CircleRenderer.js.map +1 -0
- package/lib/commonjs/renderers/FreehandRenderer.js +31 -0
- package/lib/commonjs/renderers/FreehandRenderer.js.map +1 -0
- package/lib/commonjs/renderers/InProgressRenderer.js +174 -0
- package/lib/commonjs/renderers/InProgressRenderer.js.map +1 -0
- package/lib/commonjs/renderers/LineRenderer.js +27 -0
- package/lib/commonjs/renderers/LineRenderer.js.map +1 -0
- package/lib/commonjs/renderers/MeasurementRenderer.js +134 -0
- package/lib/commonjs/renderers/MeasurementRenderer.js.map +1 -0
- package/lib/commonjs/renderers/ObjectRenderer.js +65 -0
- package/lib/commonjs/renderers/ObjectRenderer.js.map +1 -0
- package/lib/commonjs/renderers/PolygonRenderer.js +46 -0
- package/lib/commonjs/renderers/PolygonRenderer.js.map +1 -0
- package/lib/commonjs/renderers/RectRenderer.js +51 -0
- package/lib/commonjs/renderers/RectRenderer.js.map +1 -0
- package/lib/commonjs/renderers/SelectedObjectRenderer.js +592 -0
- package/lib/commonjs/renderers/SelectedObjectRenderer.js.map +1 -0
- package/lib/commonjs/renderers/SelectionOverlay.js +120 -0
- package/lib/commonjs/renderers/SelectionOverlay.js.map +1 -0
- package/lib/commonjs/store/useDrawingStore.js +354 -0
- package/lib/commonjs/store/useDrawingStore.js.map +1 -0
- package/lib/commonjs/types.js +6 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/colors.js +44 -0
- package/lib/commonjs/utils/colors.js.map +1 -0
- package/lib/commonjs/utils/coordinates.js +81 -0
- package/lib/commonjs/utils/coordinates.js.map +1 -0
- package/lib/commonjs/utils/hitTesting.js +181 -0
- package/lib/commonjs/utils/hitTesting.js.map +1 -0
- package/lib/commonjs/utils/serialization.js +42 -0
- package/lib/commonjs/utils/serialization.js.map +1 -0
- package/lib/commonjs/utils/shapeDetection.js +151 -0
- package/lib/commonjs/utils/shapeDetection.js.map +1 -0
- package/lib/commonjs/utils/smoothing.js +85 -0
- package/lib/commonjs/utils/smoothing.js.map +1 -0
- package/lib/module/DrawingEditor.js +811 -0
- package/lib/module/DrawingEditor.js.map +1 -0
- package/lib/module/assets/toolbar-icons/arrow-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/arrow-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/arrow.png +0 -0
- package/lib/module/assets/toolbar-icons/circle-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/circle-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/circle.png +0 -0
- package/lib/module/assets/toolbar-icons/freehand-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/freehand-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/freehand.png +0 -0
- package/lib/module/assets/toolbar-icons/line-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/line-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/line.png +0 -0
- package/lib/module/assets/toolbar-icons/measure-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/measure-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/measure.png +0 -0
- package/lib/module/assets/toolbar-icons/move-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/move-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/move.png +0 -0
- package/lib/module/assets/toolbar-icons/polygon-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/polygon-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/polygon.png +0 -0
- package/lib/module/assets/toolbar-icons/rectangle-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/rectangle-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/rectangle.png +0 -0
- package/lib/module/assets/toolbar-icons/text-disabled.png +0 -0
- package/lib/module/assets/toolbar-icons/text-enabled.png +0 -0
- package/lib/module/assets/toolbar-icons/text.png +0 -0
- package/lib/module/components/ColorPalette.js +374 -0
- package/lib/module/components/ColorPalette.js.map +1 -0
- package/lib/module/components/LineWidthSlider.js +64 -0
- package/lib/module/components/LineWidthSlider.js.map +1 -0
- package/lib/module/components/MeasurementEditModal.js +148 -0
- package/lib/module/components/MeasurementEditModal.js.map +1 -0
- package/lib/module/components/MiniMap.js +239 -0
- package/lib/module/components/MiniMap.js.map +1 -0
- package/lib/module/components/TextAnnotation.js +157 -0
- package/lib/module/components/TextAnnotation.js.map +1 -0
- package/lib/module/components/TextEditModal.js +128 -0
- package/lib/module/components/TextEditModal.js.map +1 -0
- package/lib/module/components/Toolbar.js +193 -0
- package/lib/module/components/Toolbar.js.map +1 -0
- package/lib/module/components/ZoomBadge.js +155 -0
- package/lib/module/components/ZoomBadge.js.map +1 -0
- package/lib/module/hooks/useFreehandGesture.js +169 -0
- package/lib/module/hooks/useFreehandGesture.js.map +1 -0
- package/lib/module/hooks/usePolygonGesture.js +106 -0
- package/lib/module/hooks/usePolygonGesture.js.map +1 -0
- package/lib/module/hooks/useSelectionGesture.js +232 -0
- package/lib/module/hooks/useSelectionGesture.js.map +1 -0
- package/lib/module/hooks/useShapeGesture.js +177 -0
- package/lib/module/hooks/useShapeGesture.js.map +1 -0
- package/lib/module/hooks/useViewportGesture.js +234 -0
- package/lib/module/hooks/useViewportGesture.js.map +1 -0
- package/lib/module/index.js +20 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/renderers/ArrowRenderer.js +113 -0
- package/lib/module/renderers/ArrowRenderer.js.map +1 -0
- package/lib/module/renderers/CircleRenderer.js +46 -0
- package/lib/module/renderers/CircleRenderer.js.map +1 -0
- package/lib/module/renderers/FreehandRenderer.js +26 -0
- package/lib/module/renderers/FreehandRenderer.js.map +1 -0
- package/lib/module/renderers/InProgressRenderer.js +169 -0
- package/lib/module/renderers/InProgressRenderer.js.map +1 -0
- package/lib/module/renderers/LineRenderer.js +22 -0
- package/lib/module/renderers/LineRenderer.js.map +1 -0
- package/lib/module/renderers/MeasurementRenderer.js +129 -0
- package/lib/module/renderers/MeasurementRenderer.js.map +1 -0
- package/lib/module/renderers/ObjectRenderer.js +60 -0
- package/lib/module/renderers/ObjectRenderer.js.map +1 -0
- package/lib/module/renderers/PolygonRenderer.js +41 -0
- package/lib/module/renderers/PolygonRenderer.js.map +1 -0
- package/lib/module/renderers/RectRenderer.js +46 -0
- package/lib/module/renderers/RectRenderer.js.map +1 -0
- package/lib/module/renderers/SelectedObjectRenderer.js +587 -0
- package/lib/module/renderers/SelectedObjectRenderer.js.map +1 -0
- package/lib/module/renderers/SelectionOverlay.js +116 -0
- package/lib/module/renderers/SelectionOverlay.js.map +1 -0
- package/lib/module/store/useDrawingStore.js +350 -0
- package/lib/module/store/useDrawingStore.js.map +1 -0
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/colors.js +40 -0
- package/lib/module/utils/colors.js.map +1 -0
- package/lib/module/utils/coordinates.js +71 -0
- package/lib/module/utils/coordinates.js.map +1 -0
- package/lib/module/utils/hitTesting.js +171 -0
- package/lib/module/utils/hitTesting.js.map +1 -0
- package/lib/module/utils/serialization.js +36 -0
- package/lib/module/utils/serialization.js.map +1 -0
- package/lib/module/utils/shapeDetection.js +147 -0
- package/lib/module/utils/shapeDetection.js.map +1 -0
- package/lib/module/utils/smoothing.js +80 -0
- package/lib/module/utils/smoothing.js.map +1 -0
- package/lib/typescript/DrawingEditor.d.ts +3 -0
- package/lib/typescript/DrawingEditor.d.ts.map +1 -0
- package/lib/typescript/components/ColorPalette.d.ts +9 -0
- package/lib/typescript/components/ColorPalette.d.ts.map +1 -0
- package/lib/typescript/components/LineWidthSlider.d.ts +11 -0
- package/lib/typescript/components/LineWidthSlider.d.ts.map +1 -0
- package/lib/typescript/components/MeasurementEditModal.d.ts +11 -0
- package/lib/typescript/components/MeasurementEditModal.d.ts.map +1 -0
- package/lib/typescript/components/MiniMap.d.ts +23 -0
- package/lib/typescript/components/MiniMap.d.ts.map +1 -0
- package/lib/typescript/components/TextAnnotation.d.ts +22 -0
- package/lib/typescript/components/TextAnnotation.d.ts.map +1 -0
- package/lib/typescript/components/TextEditModal.d.ts +10 -0
- package/lib/typescript/components/TextEditModal.d.ts.map +1 -0
- package/lib/typescript/components/Toolbar.d.ts +13 -0
- package/lib/typescript/components/Toolbar.d.ts.map +1 -0
- package/lib/typescript/components/ZoomBadge.d.ts +9 -0
- package/lib/typescript/components/ZoomBadge.d.ts.map +1 -0
- package/lib/typescript/hooks/useFreehandGesture.d.ts +47 -0
- package/lib/typescript/hooks/useFreehandGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/usePolygonGesture.d.ts +47 -0
- package/lib/typescript/hooks/usePolygonGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/useSelectionGesture.d.ts +32 -0
- package/lib/typescript/hooks/useSelectionGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/useShapeGesture.d.ts +54 -0
- package/lib/typescript/hooks/useShapeGesture.d.ts.map +1 -0
- package/lib/typescript/hooks/useViewportGesture.d.ts +37 -0
- package/lib/typescript/hooks/useViewportGesture.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +11 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/renderers/ArrowRenderer.d.ts +9 -0
- package/lib/typescript/renderers/ArrowRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/CircleRenderer.d.ts +9 -0
- package/lib/typescript/renderers/CircleRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/FreehandRenderer.d.ts +9 -0
- package/lib/typescript/renderers/FreehandRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/InProgressRenderer.d.ts +32 -0
- package/lib/typescript/renderers/InProgressRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/LineRenderer.d.ts +9 -0
- package/lib/typescript/renderers/LineRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/MeasurementRenderer.d.ts +9 -0
- package/lib/typescript/renderers/MeasurementRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/ObjectRenderer.d.ts +12 -0
- package/lib/typescript/renderers/ObjectRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/PolygonRenderer.d.ts +13 -0
- package/lib/typescript/renderers/PolygonRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/RectRenderer.d.ts +9 -0
- package/lib/typescript/renderers/RectRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/SelectedObjectRenderer.d.ts +18 -0
- package/lib/typescript/renderers/SelectedObjectRenderer.d.ts.map +1 -0
- package/lib/typescript/renderers/SelectionOverlay.d.ts +21 -0
- package/lib/typescript/renderers/SelectionOverlay.d.ts.map +1 -0
- package/lib/typescript/store/useDrawingStore.d.ts +30 -0
- package/lib/typescript/store/useDrawingStore.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +130 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/utils/colors.d.ts +11 -0
- package/lib/typescript/utils/colors.d.ts.map +1 -0
- package/lib/typescript/utils/coordinates.d.ts +34 -0
- package/lib/typescript/utils/coordinates.d.ts.map +1 -0
- package/lib/typescript/utils/hitTesting.d.ts +18 -0
- package/lib/typescript/utils/hitTesting.d.ts.map +1 -0
- package/lib/typescript/utils/serialization.d.ts +17 -0
- package/lib/typescript/utils/serialization.d.ts.map +1 -0
- package/lib/typescript/utils/shapeDetection.d.ts +22 -0
- package/lib/typescript/utils/shapeDetection.d.ts.map +1 -0
- package/lib/typescript/utils/smoothing.d.ts +16 -0
- package/lib/typescript/utils/smoothing.d.ts.map +1 -0
- package/package.json +108 -0
- package/src/DrawingEditor.tsx +1071 -0
- package/src/assets/toolbar-icons/arrow-disabled.png +0 -0
- package/src/assets/toolbar-icons/arrow-enabled.png +0 -0
- package/src/assets/toolbar-icons/arrow.png +0 -0
- package/src/assets/toolbar-icons/circle-disabled.png +0 -0
- package/src/assets/toolbar-icons/circle-enabled.png +0 -0
- package/src/assets/toolbar-icons/circle.png +0 -0
- package/src/assets/toolbar-icons/freehand-disabled.png +0 -0
- package/src/assets/toolbar-icons/freehand-enabled.png +0 -0
- package/src/assets/toolbar-icons/freehand.png +0 -0
- package/src/assets/toolbar-icons/line-disabled.png +0 -0
- package/src/assets/toolbar-icons/line-enabled.png +0 -0
- package/src/assets/toolbar-icons/line.png +0 -0
- package/src/assets/toolbar-icons/measure-disabled.png +0 -0
- package/src/assets/toolbar-icons/measure-enabled.png +0 -0
- package/src/assets/toolbar-icons/measure.png +0 -0
- package/src/assets/toolbar-icons/move-disabled.png +0 -0
- package/src/assets/toolbar-icons/move-enabled.png +0 -0
- package/src/assets/toolbar-icons/move.png +0 -0
- package/src/assets/toolbar-icons/polygon-disabled.png +0 -0
- package/src/assets/toolbar-icons/polygon-enabled.png +0 -0
- package/src/assets/toolbar-icons/polygon.png +0 -0
- package/src/assets/toolbar-icons/rectangle-disabled.png +0 -0
- package/src/assets/toolbar-icons/rectangle-enabled.png +0 -0
- package/src/assets/toolbar-icons/rectangle.png +0 -0
- package/src/assets/toolbar-icons/text-disabled.png +0 -0
- package/src/assets/toolbar-icons/text-enabled.png +0 -0
- package/src/assets/toolbar-icons/text.png +0 -0
- package/src/components/ColorPalette.tsx +497 -0
- package/src/components/LineWidthSlider.tsx +87 -0
- package/src/components/MeasurementEditModal.tsx +163 -0
- package/src/components/MiniMap.tsx +275 -0
- package/src/components/TextAnnotation.tsx +198 -0
- package/src/components/TextEditModal.tsx +139 -0
- package/src/components/Toolbar.tsx +254 -0
- package/src/components/ZoomBadge.tsx +166 -0
- package/src/hooks/useFreehandGesture.ts +249 -0
- package/src/hooks/usePolygonGesture.ts +162 -0
- package/src/hooks/useSelectionGesture.ts +293 -0
- package/src/hooks/useShapeGesture.ts +256 -0
- package/src/hooks/useViewportGesture.ts +337 -0
- package/src/index.tsx +51 -0
- package/src/renderers/ArrowRenderer.tsx +123 -0
- package/src/renderers/CircleRenderer.tsx +60 -0
- package/src/renderers/FreehandRenderer.tsx +33 -0
- package/src/renderers/InProgressRenderer.tsx +217 -0
- package/src/renderers/LineRenderer.tsx +34 -0
- package/src/renderers/MeasurementRenderer.tsx +179 -0
- package/src/renderers/ObjectRenderer.tsx +42 -0
- package/src/renderers/PolygonRenderer.tsx +66 -0
- package/src/renderers/RectRenderer.tsx +60 -0
- package/src/renderers/SelectedObjectRenderer.tsx +738 -0
- package/src/renderers/SelectionOverlay.tsx +170 -0
- package/src/store/useDrawingStore.ts +357 -0
- package/src/types.ts +186 -0
- package/src/utils/colors.ts +98 -0
- package/src/utils/coordinates.ts +75 -0
- package/src/utils/hitTesting.ts +242 -0
- package/src/utils/serialization.ts +45 -0
- package/src/utils/shapeDetection.ts +160 -0
- package/src/utils/smoothing.ts +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","Gesture","useSharedValue","useDerivedValue","runOnJS","Skia","buildSmoothedPathFromFlat","normalize","screenToCanvas","generateId","detectShape","useDrawingStore","MIN_GESTURE_DURATION_MS","MIN_GESTURE_DISTANCE","useFreehandGesture","colorSV","lineWidthSV","fillColorSV","fillAlphaSV","canvasSize","enabled","imageOffsetX","imageOffsetY","imageWidth","imageHeight","viewScale","viewTranslateX","viewTranslateY","rawPoints","isDrawing","gestureStartTime","gestureStartPos","addObject","s","inProgressPath","value","svg","path","Path","MakeFromSVGString","inProgressColor","inProgressWidth","commitPath","flatPoints","durationMs","color","lineWidth","fillColor","fillAlpha","n","length","pixelPoints","i","push","x","y","detected","obj","from","to","type","id","backgroundColor","undefined","backgroundAlpha","normalizedPoints","map","p","points","gesture","Pan","maxPointers","minDistance","onBegin","e","canvas","Math","max","min","Date","now","onUpdate","onEnd","duration","sx","sy","dist","sqrt","pts","lw","fc","fa","onFinalize"],"sourceRoot":"../../../src","sources":["hooks/useFreehandGesture.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { Gesture } from "react-native-gesture-handler";
|
|
5
|
+
import { useSharedValue, runOnJS } from "react-native-reanimated";
|
|
6
|
+
import { normalize, screenToCanvas } from "../utils/coordinates";
|
|
7
|
+
import { generateId } from "../utils/serialization";
|
|
8
|
+
import { useDrawingStore } from "../store/useDrawingStore";
|
|
9
|
+
|
|
10
|
+
/** Distance in pixels to auto-close the polygon when tapping near the first point */
|
|
11
|
+
const CLOSE_DISTANCE = 30;
|
|
12
|
+
export function usePolygonGesture({
|
|
13
|
+
colorSV,
|
|
14
|
+
lineWidthSV,
|
|
15
|
+
fillColorSV,
|
|
16
|
+
fillAlphaSV,
|
|
17
|
+
canvasSize,
|
|
18
|
+
enabled,
|
|
19
|
+
imageOffsetX,
|
|
20
|
+
imageOffsetY,
|
|
21
|
+
imageWidth,
|
|
22
|
+
imageHeight,
|
|
23
|
+
viewScale,
|
|
24
|
+
viewTranslateX,
|
|
25
|
+
viewTranslateY
|
|
26
|
+
}) {
|
|
27
|
+
// Flat array of pixel coordinates: [x0, y0, x1, y1, ...]
|
|
28
|
+
const pointsFlat = useSharedValue([]);
|
|
29
|
+
const pointCount = useSharedValue(0);
|
|
30
|
+
const isActive = useSharedValue(false);
|
|
31
|
+
const addObject = useDrawingStore(s => s.addObject);
|
|
32
|
+
const commitPolygon = useCallback((flatPoints, closed, color, lineWidth, fillColor, fillAlpha) => {
|
|
33
|
+
const count = flatPoints.length / 2;
|
|
34
|
+
if (count < 3) return; // Need at least 3 points for a polygon
|
|
35
|
+
|
|
36
|
+
const normalizedPoints = [];
|
|
37
|
+
for (let i = 0; i < count; i++) {
|
|
38
|
+
normalizedPoints.push(normalize({
|
|
39
|
+
x: flatPoints[i * 2],
|
|
40
|
+
y: flatPoints[i * 2 + 1]
|
|
41
|
+
}, canvasSize));
|
|
42
|
+
}
|
|
43
|
+
const obj = {
|
|
44
|
+
id: generateId(),
|
|
45
|
+
type: "polygon",
|
|
46
|
+
points: normalizedPoints,
|
|
47
|
+
closed,
|
|
48
|
+
color,
|
|
49
|
+
lineWidth,
|
|
50
|
+
backgroundColor: closed && fillColor ? fillColor : undefined,
|
|
51
|
+
backgroundAlpha: closed && fillColor ? fillAlpha : undefined
|
|
52
|
+
};
|
|
53
|
+
addObject(obj);
|
|
54
|
+
}, [canvasSize, addObject]);
|
|
55
|
+
const resetState = useCallback(() => {
|
|
56
|
+
pointsFlat.value = [];
|
|
57
|
+
pointCount.value = 0;
|
|
58
|
+
isActive.value = false;
|
|
59
|
+
}, [pointsFlat, pointCount, isActive]);
|
|
60
|
+
const gesture = Gesture.Tap().enabled(enabled).maxDuration(500).onEnd(e => {
|
|
61
|
+
"worklet";
|
|
62
|
+
|
|
63
|
+
const canvas = screenToCanvas(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
64
|
+
const x = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
65
|
+
const y = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
66
|
+
const flat = pointsFlat.value;
|
|
67
|
+
const count = pointCount.value;
|
|
68
|
+
|
|
69
|
+
// Check if should close
|
|
70
|
+
if (count >= 3) {
|
|
71
|
+
const firstX = flat[0];
|
|
72
|
+
const firstY = flat[1];
|
|
73
|
+
const dx = x - firstX;
|
|
74
|
+
const dy = y - firstY;
|
|
75
|
+
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
76
|
+
if (dist < CLOSE_DISTANCE) {
|
|
77
|
+
// Close — commit on JS thread
|
|
78
|
+
const snapshot = flat.slice();
|
|
79
|
+
runOnJS(commitPolygon)(snapshot, true, colorSV.value, lineWidthSV.value, fillColorSV.value, fillAlphaSV.value);
|
|
80
|
+
pointsFlat.value = [];
|
|
81
|
+
pointCount.value = 0;
|
|
82
|
+
isActive.value = false;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Add point
|
|
88
|
+
const newFlat = [...flat, x, y];
|
|
89
|
+
pointsFlat.value = newFlat;
|
|
90
|
+
pointCount.value = count + 1;
|
|
91
|
+
isActive.value = true;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
/** Cancel the current polygon construction (e.g. on tool switch) — discard points */
|
|
95
|
+
const cancel = useCallback(() => {
|
|
96
|
+
resetState();
|
|
97
|
+
}, [resetState]);
|
|
98
|
+
return {
|
|
99
|
+
gesture,
|
|
100
|
+
pointsFlat,
|
|
101
|
+
pointCount,
|
|
102
|
+
isActive,
|
|
103
|
+
cancel
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=usePolygonGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","Gesture","useSharedValue","runOnJS","normalize","screenToCanvas","generateId","useDrawingStore","CLOSE_DISTANCE","usePolygonGesture","colorSV","lineWidthSV","fillColorSV","fillAlphaSV","canvasSize","enabled","imageOffsetX","imageOffsetY","imageWidth","imageHeight","viewScale","viewTranslateX","viewTranslateY","pointsFlat","pointCount","isActive","addObject","s","commitPolygon","flatPoints","closed","color","lineWidth","fillColor","fillAlpha","count","length","normalizedPoints","i","push","x","y","obj","id","type","points","backgroundColor","undefined","backgroundAlpha","resetState","value","gesture","Tap","maxDuration","onEnd","e","canvas","Math","max","min","flat","firstX","firstY","dx","dy","dist","sqrt","snapshot","slice","newFlat","cancel"],"sourceRoot":"../../../src","sources":["hooks/usePolygonGesture.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect } from "react";
|
|
4
|
+
import { Gesture } from "react-native-gesture-handler";
|
|
5
|
+
import { runOnJS, useSharedValue } from "react-native-reanimated";
|
|
6
|
+
import { screenToCanvas } from "../utils/coordinates";
|
|
7
|
+
import { useDrawingStore } from "../store/useDrawingStore";
|
|
8
|
+
import { hitTestObject } from "../utils/hitTesting";
|
|
9
|
+
import { getAnchorPoints, ANCHOR_HIT_RADIUS } from "../renderers/SelectionOverlay";
|
|
10
|
+
export function useSelectionGesture({
|
|
11
|
+
canvasSize,
|
|
12
|
+
imageOffsetX,
|
|
13
|
+
imageOffsetY,
|
|
14
|
+
viewScale,
|
|
15
|
+
viewTranslateX,
|
|
16
|
+
viewTranslateY,
|
|
17
|
+
onTapEmpty
|
|
18
|
+
}) {
|
|
19
|
+
const isDragging = useSharedValue(false);
|
|
20
|
+
const dragStartX = useSharedValue(0);
|
|
21
|
+
const dragStartY = useSharedValue(0);
|
|
22
|
+
// Live pixel offset for visual feedback during drag
|
|
23
|
+
const dragOffsetX = useSharedValue(0);
|
|
24
|
+
const dragOffsetY = useSharedValue(0);
|
|
25
|
+
// Which anchor is being dragged (-1 = none, moving whole object)
|
|
26
|
+
const draggingAnchorIndex = useSharedValue(-1);
|
|
27
|
+
// True between onEnd and the React re-render that commits the new position
|
|
28
|
+
const pendingCommit = useSharedValue(false);
|
|
29
|
+
|
|
30
|
+
// Pre-computed anchor positions in pixel coords (for worklet access)
|
|
31
|
+
const anchor0X = useSharedValue(0);
|
|
32
|
+
const anchor0Y = useSharedValue(0);
|
|
33
|
+
const anchor1X = useSharedValue(0);
|
|
34
|
+
const anchor1Y = useSharedValue(0);
|
|
35
|
+
const hasAnchors = useSharedValue(false);
|
|
36
|
+
// Flat array of all anchor positions [x0, y0, x1, y1, ...] for N-anchor objects
|
|
37
|
+
const allAnchorsFlat = useSharedValue([]);
|
|
38
|
+
const anchorCount = useSharedValue(0);
|
|
39
|
+
const objects = useDrawingStore(s => s.objects);
|
|
40
|
+
const selectedObjectId = useDrawingStore(s => s.selectedObjectId);
|
|
41
|
+
const selectObject = useDrawingStore(s => s.selectObject);
|
|
42
|
+
const moveObject = useDrawingStore(s => s.moveObject);
|
|
43
|
+
const resizeObject = useDrawingStore(s => s.resizeObject);
|
|
44
|
+
|
|
45
|
+
// Sync anchor positions to shared values whenever selection changes
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!selectedObjectId) {
|
|
48
|
+
hasAnchors.value = false;
|
|
49
|
+
anchorCount.value = 0;
|
|
50
|
+
allAnchorsFlat.value = [];
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const obj = objects.find(o => o.id === selectedObjectId);
|
|
54
|
+
if (!obj) {
|
|
55
|
+
hasAnchors.value = false;
|
|
56
|
+
anchorCount.value = 0;
|
|
57
|
+
allAnchorsFlat.value = [];
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const anchors = getAnchorPoints(obj, canvasSize);
|
|
61
|
+
if (anchors.length >= 2) {
|
|
62
|
+
anchor0X.value = anchors[0].x;
|
|
63
|
+
anchor0Y.value = anchors[0].y;
|
|
64
|
+
anchor1X.value = anchors[1].x;
|
|
65
|
+
anchor1Y.value = anchors[1].y;
|
|
66
|
+
hasAnchors.value = true;
|
|
67
|
+
// Store all anchors for N-vertex objects (polygon)
|
|
68
|
+
const flat = [];
|
|
69
|
+
for (const a of anchors) {
|
|
70
|
+
flat.push(a.x, a.y);
|
|
71
|
+
}
|
|
72
|
+
allAnchorsFlat.value = flat;
|
|
73
|
+
anchorCount.value = anchors.length;
|
|
74
|
+
} else {
|
|
75
|
+
hasAnchors.value = false;
|
|
76
|
+
anchorCount.value = 0;
|
|
77
|
+
allAnchorsFlat.value = [];
|
|
78
|
+
}
|
|
79
|
+
}, [selectedObjectId, objects, canvasSize]);
|
|
80
|
+
const handleTap = useCallback((x, y) => {
|
|
81
|
+
const tapPoint = {
|
|
82
|
+
x,
|
|
83
|
+
y
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
// Find the topmost object that is hit (reverse iteration)
|
|
87
|
+
for (let i = objects.length - 1; i >= 0; i--) {
|
|
88
|
+
const obj = objects[i];
|
|
89
|
+
if (hitTestObject(obj, tapPoint, canvasSize)) {
|
|
90
|
+
selectObject(obj.id);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Tap on empty space → delegate or deselect
|
|
95
|
+
if (onTapEmpty) {
|
|
96
|
+
onTapEmpty(x, y);
|
|
97
|
+
} else {
|
|
98
|
+
selectObject(null);
|
|
99
|
+
}
|
|
100
|
+
}, [objects, canvasSize, selectObject, onTapEmpty]);
|
|
101
|
+
const resetDragState = useCallback(() => {
|
|
102
|
+
isDragging.value = false;
|
|
103
|
+
dragOffsetX.value = 0;
|
|
104
|
+
dragOffsetY.value = 0;
|
|
105
|
+
draggingAnchorIndex.value = -1;
|
|
106
|
+
pendingCommit.value = false;
|
|
107
|
+
}, [isDragging, dragOffsetX, dragOffsetY, draggingAnchorIndex, pendingCommit]);
|
|
108
|
+
const handleDragEnd = useCallback((dx, dy) => {
|
|
109
|
+
if (!selectedObjectId) {
|
|
110
|
+
// No store update will occur — reset immediately
|
|
111
|
+
resetDragState();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Convert pixel delta to normalized delta
|
|
116
|
+
const normalizedDx = canvasSize.width > 0 ? dx / canvasSize.width : 0;
|
|
117
|
+
const normalizedDy = canvasSize.height > 0 ? dy / canvasSize.height : 0;
|
|
118
|
+
moveObject(selectedObjectId, normalizedDx, normalizedDy);
|
|
119
|
+
// Drag state is reset by SelectedObjectRenderer's useEffect
|
|
120
|
+
// when the component re-renders with the updated object.
|
|
121
|
+
}, [selectedObjectId, canvasSize, moveObject, resetDragState]);
|
|
122
|
+
const handleResizeEnd = useCallback((anchorIndex, dx, dy) => {
|
|
123
|
+
if (!selectedObjectId) {
|
|
124
|
+
resetDragState();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const normalizedDx = canvasSize.width > 0 ? dx / canvasSize.width : 0;
|
|
128
|
+
const normalizedDy = canvasSize.height > 0 ? dy / canvasSize.height : 0;
|
|
129
|
+
resizeObject(selectedObjectId, anchorIndex, normalizedDx, normalizedDy);
|
|
130
|
+
// Drag state is reset by SelectedObjectRenderer's useEffect
|
|
131
|
+
}, [selectedObjectId, canvasSize, resizeObject, resetDragState]);
|
|
132
|
+
const tapGesture = Gesture.Tap().onEnd(e => {
|
|
133
|
+
"worklet";
|
|
134
|
+
|
|
135
|
+
const canvas = screenToCanvas(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
136
|
+
const x = canvas.x - imageOffsetX.value;
|
|
137
|
+
const y = canvas.y - imageOffsetY.value;
|
|
138
|
+
runOnJS(handleTap)(x, y);
|
|
139
|
+
});
|
|
140
|
+
const panGesture = Gesture.Pan().enabled(selectedObjectId !== null).maxPointers(1).minDistance(5).onBegin(e => {
|
|
141
|
+
"worklet";
|
|
142
|
+
|
|
143
|
+
const canvas = screenToCanvas(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
144
|
+
const x = canvas.x - imageOffsetX.value;
|
|
145
|
+
const y = canvas.y - imageOffsetY.value;
|
|
146
|
+
pendingCommit.value = false;
|
|
147
|
+
isDragging.value = true;
|
|
148
|
+
dragStartX.value = e.x;
|
|
149
|
+
dragStartY.value = e.y;
|
|
150
|
+
dragOffsetX.value = 0;
|
|
151
|
+
dragOffsetY.value = 0;
|
|
152
|
+
|
|
153
|
+
// Check if we hit an anchor handle
|
|
154
|
+
draggingAnchorIndex.value = -1;
|
|
155
|
+
if (hasAnchors.value) {
|
|
156
|
+
const hitRadius = ANCHOR_HIT_RADIUS;
|
|
157
|
+
let bestDist = hitRadius;
|
|
158
|
+
let bestIdx = -1;
|
|
159
|
+
const flat = allAnchorsFlat.value;
|
|
160
|
+
const count = anchorCount.value;
|
|
161
|
+
for (let i = 0; i < count; i++) {
|
|
162
|
+
const ax = flat[i * 2];
|
|
163
|
+
const ay = flat[i * 2 + 1];
|
|
164
|
+
const d = Math.sqrt((x - ax) ** 2 + (y - ay) ** 2);
|
|
165
|
+
if (d < bestDist) {
|
|
166
|
+
bestDist = d;
|
|
167
|
+
bestIdx = i;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (bestIdx >= 0) {
|
|
171
|
+
draggingAnchorIndex.value = bestIdx;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}).onUpdate(e => {
|
|
175
|
+
"worklet";
|
|
176
|
+
|
|
177
|
+
// Scale drag offset by 1/scale so visual feedback matches canvas coordinates
|
|
178
|
+
dragOffsetX.value = (e.x - dragStartX.value) / viewScale.value;
|
|
179
|
+
dragOffsetY.value = (e.y - dragStartY.value) / viewScale.value;
|
|
180
|
+
}).onEnd(e => {
|
|
181
|
+
"worklet";
|
|
182
|
+
|
|
183
|
+
// Convert screen-space deltas to canvas-space deltas
|
|
184
|
+
const dx = (e.x - dragStartX.value) / viewScale.value;
|
|
185
|
+
const dy = (e.y - dragStartY.value) / viewScale.value;
|
|
186
|
+
|
|
187
|
+
// Keep isDragging + offsets alive so the object stays at its dragged
|
|
188
|
+
// position until React re-renders with the committed store update.
|
|
189
|
+
// SelectedObjectRenderer's useEffect will reset drag state atomically.
|
|
190
|
+
pendingCommit.value = true;
|
|
191
|
+
if (draggingAnchorIndex.value >= 0) {
|
|
192
|
+
runOnJS(handleResizeEnd)(draggingAnchorIndex.value, dx, dy);
|
|
193
|
+
} else {
|
|
194
|
+
runOnJS(handleDragEnd)(dx, dy);
|
|
195
|
+
}
|
|
196
|
+
}).onFinalize(() => {
|
|
197
|
+
"worklet";
|
|
198
|
+
|
|
199
|
+
// Only reset if onEnd didn't fire (gesture was cancelled)
|
|
200
|
+
if (!pendingCommit.value) {
|
|
201
|
+
isDragging.value = false;
|
|
202
|
+
dragOffsetX.value = 0;
|
|
203
|
+
dragOffsetY.value = 0;
|
|
204
|
+
draggingAnchorIndex.value = -1;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// Double-tap for editing measurement text or text annotations
|
|
209
|
+
const doubleTapGesture = Gesture.Tap().numberOfTaps(2).minPointers(1).onEnd(e => {
|
|
210
|
+
"worklet";
|
|
211
|
+
|
|
212
|
+
const canvas = screenToCanvas(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
213
|
+
const x = canvas.x - imageOffsetX.value;
|
|
214
|
+
const y = canvas.y - imageOffsetY.value;
|
|
215
|
+
// Will be handled in the DrawingEditor for opening edit modals
|
|
216
|
+
runOnJS(handleDoubleTap)(x, y);
|
|
217
|
+
});
|
|
218
|
+
const handleDoubleTap = useCallback((_x, _y) => {
|
|
219
|
+
// Double-tap handling is delegated to DrawingEditor via callbacks
|
|
220
|
+
// This hook just detects the gesture
|
|
221
|
+
}, []);
|
|
222
|
+
return {
|
|
223
|
+
tapGesture,
|
|
224
|
+
panGesture,
|
|
225
|
+
doubleTapGesture,
|
|
226
|
+
isDragging,
|
|
227
|
+
dragOffsetX,
|
|
228
|
+
dragOffsetY,
|
|
229
|
+
draggingAnchorIndex
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=useSelectionGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","Gesture","runOnJS","useSharedValue","screenToCanvas","useDrawingStore","hitTestObject","getAnchorPoints","ANCHOR_HIT_RADIUS","useSelectionGesture","canvasSize","imageOffsetX","imageOffsetY","viewScale","viewTranslateX","viewTranslateY","onTapEmpty","isDragging","dragStartX","dragStartY","dragOffsetX","dragOffsetY","draggingAnchorIndex","pendingCommit","anchor0X","anchor0Y","anchor1X","anchor1Y","hasAnchors","allAnchorsFlat","anchorCount","objects","s","selectedObjectId","selectObject","moveObject","resizeObject","value","obj","find","o","id","anchors","length","x","y","flat","a","push","handleTap","tapPoint","i","resetDragState","handleDragEnd","dx","dy","normalizedDx","width","normalizedDy","height","handleResizeEnd","anchorIndex","tapGesture","Tap","onEnd","e","canvas","panGesture","Pan","enabled","maxPointers","minDistance","onBegin","hitRadius","bestDist","bestIdx","count","ax","ay","d","Math","sqrt","onUpdate","onFinalize","doubleTapGesture","numberOfTaps","minPointers","handleDoubleTap","_x","_y"],"sourceRoot":"../../../src","sources":["hooks/useSelectionGesture.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAC9C,SAASC,OAAO,QAAQ,8BAA8B;AACtD,SAASC,OAAO,EAAEC,cAAc,QAAQ,yBAAyB;AAEjE,SAASC,cAAc,QAAQ,sBAAsB;AAErD,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SACEC,eAAe,EACfC,iBAAiB,QACZ,+BAA+B;AAYtC,OAAO,SAASC,mBAAmBA,CAAC;EAClCC,UAAU;EACVC,YAAY;EACZC,YAAY;EACZC,SAAS;EACTC,cAAc;EACdC,cAAc;EACdC;AAC0B,CAAC,EAAE;EAC7B,MAAMC,UAAU,GAAGd,cAAc,CAAC,KAAK,CAAC;EACxC,MAAMe,UAAU,GAAGf,cAAc,CAAC,CAAC,CAAC;EACpC,MAAMgB,UAAU,GAAGhB,cAAc,CAAC,CAAC,CAAC;EACpC;EACA,MAAMiB,WAAgC,GAAGjB,cAAc,CAAC,CAAC,CAAC;EAC1D,MAAMkB,WAAgC,GAAGlB,cAAc,CAAC,CAAC,CAAC;EAC1D;EACA,MAAMmB,mBAAmB,GAAGnB,cAAc,CAAC,CAAC,CAAC,CAAC;EAC9C;EACA,MAAMoB,aAAa,GAAGpB,cAAc,CAAC,KAAK,CAAC;;EAE3C;EACA,MAAMqB,QAAQ,GAAGrB,cAAc,CAAC,CAAC,CAAC;EAClC,MAAMsB,QAAQ,GAAGtB,cAAc,CAAC,CAAC,CAAC;EAClC,MAAMuB,QAAQ,GAAGvB,cAAc,CAAC,CAAC,CAAC;EAClC,MAAMwB,QAAQ,GAAGxB,cAAc,CAAC,CAAC,CAAC;EAClC,MAAMyB,UAAU,GAAGzB,cAAc,CAAC,KAAK,CAAC;EACxC;EACA,MAAM0B,cAAc,GAAG1B,cAAc,CAAW,EAAE,CAAC;EACnD,MAAM2B,WAAW,GAAG3B,cAAc,CAAC,CAAC,CAAC;EAErC,MAAM4B,OAAO,GAAG1B,eAAe,CAAE2B,CAAC,IAAKA,CAAC,CAACD,OAAO,CAAC;EACjD,MAAME,gBAAgB,GAAG5B,eAAe,CAAE2B,CAAC,IAAKA,CAAC,CAACC,gBAAgB,CAAC;EACnE,MAAMC,YAAY,GAAG7B,eAAe,CAAE2B,CAAC,IAAKA,CAAC,CAACE,YAAY,CAAC;EAC3D,MAAMC,UAAU,GAAG9B,eAAe,CAAE2B,CAAC,IAAKA,CAAC,CAACG,UAAU,CAAC;EACvD,MAAMC,YAAY,GAAG/B,eAAe,CAAE2B,CAAC,IAAKA,CAAC,CAACI,YAAY,CAAC;;EAE3D;EACApC,SAAS,CAAC,MAAM;IACd,IAAI,CAACiC,gBAAgB,EAAE;MACrBL,UAAU,CAACS,KAAK,GAAG,KAAK;MACxBP,WAAW,CAACO,KAAK,GAAG,CAAC;MACrBR,cAAc,CAACQ,KAAK,GAAG,EAAE;MACzB;IACF;IACA,MAAMC,GAAG,GAAGP,OAAO,CAACQ,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,EAAE,KAAKR,gBAAgB,CAAC;IAC1D,IAAI,CAACK,GAAG,EAAE;MACRV,UAAU,CAACS,KAAK,GAAG,KAAK;MACxBP,WAAW,CAACO,KAAK,GAAG,CAAC;MACrBR,cAAc,CAACQ,KAAK,GAAG,EAAE;MACzB;IACF;IACA,MAAMK,OAAO,GAAGnC,eAAe,CAAC+B,GAAG,EAAE5B,UAAU,CAAC;IAChD,IAAIgC,OAAO,CAACC,MAAM,IAAI,CAAC,EAAE;MACvBnB,QAAQ,CAACa,KAAK,GAAGK,OAAO,CAAC,CAAC,CAAC,CAAEE,CAAC;MAC9BnB,QAAQ,CAACY,KAAK,GAAGK,OAAO,CAAC,CAAC,CAAC,CAAEG,CAAC;MAC9BnB,QAAQ,CAACW,KAAK,GAAGK,OAAO,CAAC,CAAC,CAAC,CAAEE,CAAC;MAC9BjB,QAAQ,CAACU,KAAK,GAAGK,OAAO,CAAC,CAAC,CAAC,CAAEG,CAAC;MAC9BjB,UAAU,CAACS,KAAK,GAAG,IAAI;MACvB;MACA,MAAMS,IAAc,GAAG,EAAE;MACzB,KAAK,MAAMC,CAAC,IAAIL,OAAO,EAAE;QACvBI,IAAI,CAACE,IAAI,CAACD,CAAC,CAACH,CAAC,EAAEG,CAAC,CAACF,CAAC,CAAC;MACrB;MACAhB,cAAc,CAACQ,KAAK,GAAGS,IAAI;MAC3BhB,WAAW,CAACO,KAAK,GAAGK,OAAO,CAACC,MAAM;IACpC,CAAC,MAAM;MACLf,UAAU,CAACS,KAAK,GAAG,KAAK;MACxBP,WAAW,CAACO,KAAK,GAAG,CAAC;MACrBR,cAAc,CAACQ,KAAK,GAAG,EAAE;IAC3B;EACF,CAAC,EAAE,CAACJ,gBAAgB,EAAEF,OAAO,EAAErB,UAAU,CAAC,CAAC;EAE3C,MAAMuC,SAAS,GAAGlD,WAAW,CAC3B,CAAC6C,CAAS,EAAEC,CAAS,KAAK;IACxB,MAAMK,QAAe,GAAG;MAAEN,CAAC;MAAEC;IAAE,CAAC;;IAEhC;IACA,KAAK,IAAIM,CAAC,GAAGpB,OAAO,CAACY,MAAM,GAAG,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MAC5C,MAAMb,GAAG,GAAGP,OAAO,CAACoB,CAAC,CAAE;MACvB,IAAI7C,aAAa,CAACgC,GAAG,EAAEY,QAAQ,EAAExC,UAAU,CAAC,EAAE;QAC5CwB,YAAY,CAACI,GAAG,CAACG,EAAE,CAAC;QACpB;MACF;IACF;IACA;IACA,IAAIzB,UAAU,EAAE;MACdA,UAAU,CAAC4B,CAAC,EAAEC,CAAC,CAAC;IAClB,CAAC,MAAM;MACLX,YAAY,CAAC,IAAI,CAAC;IACpB;EACF,CAAC,EACD,CAACH,OAAO,EAAErB,UAAU,EAAEwB,YAAY,EAAElB,UAAU,CAChD,CAAC;EAED,MAAMoC,cAAc,GAAGrD,WAAW,CAAC,MAAM;IACvCkB,UAAU,CAACoB,KAAK,GAAG,KAAK;IACxBjB,WAAW,CAACiB,KAAK,GAAG,CAAC;IACrBhB,WAAW,CAACgB,KAAK,GAAG,CAAC;IACrBf,mBAAmB,CAACe,KAAK,GAAG,CAAC,CAAC;IAC9Bd,aAAa,CAACc,KAAK,GAAG,KAAK;EAC7B,CAAC,EAAE,CACDpB,UAAU,EACVG,WAAW,EACXC,WAAW,EACXC,mBAAmB,EACnBC,aAAa,CACd,CAAC;EAEF,MAAM8B,aAAa,GAAGtD,WAAW,CAC/B,CAACuD,EAAU,EAAEC,EAAU,KAAK;IAC1B,IAAI,CAACtB,gBAAgB,EAAE;MACrB;MACAmB,cAAc,CAAC,CAAC;MAChB;IACF;;IAEA;IACA,MAAMI,YAAY,GAAG9C,UAAU,CAAC+C,KAAK,GAAG,CAAC,GAAGH,EAAE,GAAG5C,UAAU,CAAC+C,KAAK,GAAG,CAAC;IACrE,MAAMC,YAAY,GAAGhD,UAAU,CAACiD,MAAM,GAAG,CAAC,GAAGJ,EAAE,GAAG7C,UAAU,CAACiD,MAAM,GAAG,CAAC;IAEvExB,UAAU,CAACF,gBAAgB,EAAEuB,YAAY,EAAEE,YAAY,CAAC;IACxD;IACA;EACF,CAAC,EACD,CAACzB,gBAAgB,EAAEvB,UAAU,EAAEyB,UAAU,EAAEiB,cAAc,CAC3D,CAAC;EAED,MAAMQ,eAAe,GAAG7D,WAAW,CACjC,CAAC8D,WAAmB,EAAEP,EAAU,EAAEC,EAAU,KAAK;IAC/C,IAAI,CAACtB,gBAAgB,EAAE;MACrBmB,cAAc,CAAC,CAAC;MAChB;IACF;IAEA,MAAMI,YAAY,GAAG9C,UAAU,CAAC+C,KAAK,GAAG,CAAC,GAAGH,EAAE,GAAG5C,UAAU,CAAC+C,KAAK,GAAG,CAAC;IACrE,MAAMC,YAAY,GAAGhD,UAAU,CAACiD,MAAM,GAAG,CAAC,GAAGJ,EAAE,GAAG7C,UAAU,CAACiD,MAAM,GAAG,CAAC;IAEvEvB,YAAY,CAACH,gBAAgB,EAAE4B,WAAW,EAAEL,YAAY,EAAEE,YAAY,CAAC;IACvE;EACF,CAAC,EACD,CAACzB,gBAAgB,EAAEvB,UAAU,EAAE0B,YAAY,EAAEgB,cAAc,CAC7D,CAAC;EAED,MAAMU,UAAU,GAAG7D,OAAO,CAAC8D,GAAG,CAAC,CAAC,CAACC,KAAK,CAAEC,CAAC,IAAK;IAC5C,SAAS;;IACT,MAAMC,MAAM,GAAG9D,cAAc,CAC3B6D,CAAC,CAACrB,CAAC,EACHqB,CAAC,CAACpB,CAAC,EACHhC,SAAS,CAACwB,KAAK,EACfvB,cAAc,CAACuB,KAAK,EACpBtB,cAAc,CAACsB,KACjB,CAAC;IACD,MAAMO,CAAC,GAAGsB,MAAM,CAACtB,CAAC,GAAGjC,YAAY,CAAC0B,KAAK;IACvC,MAAMQ,CAAC,GAAGqB,MAAM,CAACrB,CAAC,GAAGjC,YAAY,CAACyB,KAAK;IACvCnC,OAAO,CAAC+C,SAAS,CAAC,CAACL,CAAC,EAAEC,CAAC,CAAC;EAC1B,CAAC,CAAC;EAEF,MAAMsB,UAAU,GAAGlE,OAAO,CAACmE,GAAG,CAAC,CAAC,CAC7BC,OAAO,CAACpC,gBAAgB,KAAK,IAAI,CAAC,CAClCqC,WAAW,CAAC,CAAC,CAAC,CACdC,WAAW,CAAC,CAAC,CAAC,CACdC,OAAO,CAAEP,CAAC,IAAK;IACd,SAAS;;IACT,MAAMC,MAAM,GAAG9D,cAAc,CAC3B6D,CAAC,CAACrB,CAAC,EACHqB,CAAC,CAACpB,CAAC,EACHhC,SAAS,CAACwB,KAAK,EACfvB,cAAc,CAACuB,KAAK,EACpBtB,cAAc,CAACsB,KACjB,CAAC;IACD,MAAMO,CAAC,GAAGsB,MAAM,CAACtB,CAAC,GAAGjC,YAAY,CAAC0B,KAAK;IACvC,MAAMQ,CAAC,GAAGqB,MAAM,CAACrB,CAAC,GAAGjC,YAAY,CAACyB,KAAK;IAEvCd,aAAa,CAACc,KAAK,GAAG,KAAK;IAC3BpB,UAAU,CAACoB,KAAK,GAAG,IAAI;IACvBnB,UAAU,CAACmB,KAAK,GAAG4B,CAAC,CAACrB,CAAC;IACtBzB,UAAU,CAACkB,KAAK,GAAG4B,CAAC,CAACpB,CAAC;IACtBzB,WAAW,CAACiB,KAAK,GAAG,CAAC;IACrBhB,WAAW,CAACgB,KAAK,GAAG,CAAC;;IAErB;IACAf,mBAAmB,CAACe,KAAK,GAAG,CAAC,CAAC;IAC9B,IAAIT,UAAU,CAACS,KAAK,EAAE;MACpB,MAAMoC,SAAS,GAAGjE,iBAAiB;MACnC,IAAIkE,QAAQ,GAAGD,SAAS;MACxB,IAAIE,OAAO,GAAG,CAAC,CAAC;MAChB,MAAM7B,IAAI,GAAGjB,cAAc,CAACQ,KAAK;MACjC,MAAMuC,KAAK,GAAG9C,WAAW,CAACO,KAAK;MAC/B,KAAK,IAAIc,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyB,KAAK,EAAEzB,CAAC,EAAE,EAAE;QAC9B,MAAM0B,EAAE,GAAG/B,IAAI,CAACK,CAAC,GAAG,CAAC,CAAE;QACvB,MAAM2B,EAAE,GAAGhC,IAAI,CAACK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE;QAC3B,MAAM4B,CAAC,GAAGC,IAAI,CAACC,IAAI,CAAC,CAACrC,CAAC,GAAGiC,EAAE,KAAK,CAAC,GAAG,CAAChC,CAAC,GAAGiC,EAAE,KAAK,CAAC,CAAC;QAClD,IAAIC,CAAC,GAAGL,QAAQ,EAAE;UAChBA,QAAQ,GAAGK,CAAC;UACZJ,OAAO,GAAGxB,CAAC;QACb;MACF;MACA,IAAIwB,OAAO,IAAI,CAAC,EAAE;QAChBrD,mBAAmB,CAACe,KAAK,GAAGsC,OAAO;MACrC;IACF;EACF,CAAC,CAAC,CACDO,QAAQ,CAAEjB,CAAC,IAAK;IACf,SAAS;;IACT;IACA7C,WAAW,CAACiB,KAAK,GAAG,CAAC4B,CAAC,CAACrB,CAAC,GAAG1B,UAAU,CAACmB,KAAK,IAAIxB,SAAS,CAACwB,KAAK;IAC9DhB,WAAW,CAACgB,KAAK,GAAG,CAAC4B,CAAC,CAACpB,CAAC,GAAG1B,UAAU,CAACkB,KAAK,IAAIxB,SAAS,CAACwB,KAAK;EAChE,CAAC,CAAC,CACD2B,KAAK,CAAEC,CAAC,IAAK;IACZ,SAAS;;IACT;IACA,MAAMX,EAAE,GAAG,CAACW,CAAC,CAACrB,CAAC,GAAG1B,UAAU,CAACmB,KAAK,IAAIxB,SAAS,CAACwB,KAAK;IACrD,MAAMkB,EAAE,GAAG,CAACU,CAAC,CAACpB,CAAC,GAAG1B,UAAU,CAACkB,KAAK,IAAIxB,SAAS,CAACwB,KAAK;;IAErD;IACA;IACA;IACAd,aAAa,CAACc,KAAK,GAAG,IAAI;IAE1B,IAAIf,mBAAmB,CAACe,KAAK,IAAI,CAAC,EAAE;MAClCnC,OAAO,CAAC0D,eAAe,CAAC,CAACtC,mBAAmB,CAACe,KAAK,EAAEiB,EAAE,EAAEC,EAAE,CAAC;IAC7D,CAAC,MAAM;MACLrD,OAAO,CAACmD,aAAa,CAAC,CAACC,EAAE,EAAEC,EAAE,CAAC;IAChC;EACF,CAAC,CAAC,CACD4B,UAAU,CAAC,MAAM;IAChB,SAAS;;IACT;IACA,IAAI,CAAC5D,aAAa,CAACc,KAAK,EAAE;MACxBpB,UAAU,CAACoB,KAAK,GAAG,KAAK;MACxBjB,WAAW,CAACiB,KAAK,GAAG,CAAC;MACrBhB,WAAW,CAACgB,KAAK,GAAG,CAAC;MACrBf,mBAAmB,CAACe,KAAK,GAAG,CAAC,CAAC;IAChC;EACF,CAAC,CAAC;;EAEJ;EACA,MAAM+C,gBAAgB,GAAGnF,OAAO,CAAC8D,GAAG,CAAC,CAAC,CACnCsB,YAAY,CAAC,CAAC,CAAC,CACfC,WAAW,CAAC,CAAC,CAAC,CACdtB,KAAK,CAAEC,CAAC,IAAK;IACZ,SAAS;;IACT,MAAMC,MAAM,GAAG9D,cAAc,CAC3B6D,CAAC,CAACrB,CAAC,EACHqB,CAAC,CAACpB,CAAC,EACHhC,SAAS,CAACwB,KAAK,EACfvB,cAAc,CAACuB,KAAK,EACpBtB,cAAc,CAACsB,KACjB,CAAC;IACD,MAAMO,CAAC,GAAGsB,MAAM,CAACtB,CAAC,GAAGjC,YAAY,CAAC0B,KAAK;IACvC,MAAMQ,CAAC,GAAGqB,MAAM,CAACrB,CAAC,GAAGjC,YAAY,CAACyB,KAAK;IACvC;IACAnC,OAAO,CAACqF,eAAe,CAAC,CAAC3C,CAAC,EAAEC,CAAC,CAAC;EAChC,CAAC,CAAC;EAEJ,MAAM0C,eAAe,GAAGxF,WAAW,CAAC,CAACyF,EAAU,EAAEC,EAAU,KAAK;IAC9D;IACA;EAAA,CACD,EAAE,EAAE,CAAC;EAEN,OAAO;IACL3B,UAAU;IACVK,UAAU;IACViB,gBAAgB;IAChBnE,UAAU;IACVG,WAAW;IACXC,WAAW;IACXC;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
import { Gesture } from "react-native-gesture-handler";
|
|
5
|
+
import { useSharedValue, useDerivedValue, runOnJS } from "react-native-reanimated";
|
|
6
|
+
import { normalize, screenToCanvas } from "../utils/coordinates";
|
|
7
|
+
import { generateId } from "../utils/serialization";
|
|
8
|
+
import { useDrawingStore } from "../store/useDrawingStore";
|
|
9
|
+
const MIN_GESTURE_DURATION_MS = 300;
|
|
10
|
+
const MIN_GESTURE_DISTANCE = 5;
|
|
11
|
+
export function useShapeGesture({
|
|
12
|
+
shapeType,
|
|
13
|
+
colorSV,
|
|
14
|
+
lineWidthSV,
|
|
15
|
+
fillColorSV,
|
|
16
|
+
fillAlphaSV,
|
|
17
|
+
canvasSize,
|
|
18
|
+
enabled,
|
|
19
|
+
imageOffsetX,
|
|
20
|
+
imageOffsetY,
|
|
21
|
+
imageWidth,
|
|
22
|
+
imageHeight,
|
|
23
|
+
viewScale,
|
|
24
|
+
viewTranslateX,
|
|
25
|
+
viewTranslateY,
|
|
26
|
+
onMeasureCreated
|
|
27
|
+
}) {
|
|
28
|
+
// Shared values for the in-progress shape (pixel coords)
|
|
29
|
+
const startX = useSharedValue(0);
|
|
30
|
+
const startY = useSharedValue(0);
|
|
31
|
+
const currentX = useSharedValue(0);
|
|
32
|
+
const currentY = useSharedValue(0);
|
|
33
|
+
const isDrawing = useSharedValue(false);
|
|
34
|
+
const gestureStartTime = useSharedValue(0);
|
|
35
|
+
const addObject = useDrawingStore(s => s.addObject);
|
|
36
|
+
const inProgressColor = useDerivedValue(() => colorSV.value);
|
|
37
|
+
const inProgressWidth = useDerivedValue(() => lineWidthSV.value);
|
|
38
|
+
const inProgressFillColor = useDerivedValue(() => fillColorSV.value);
|
|
39
|
+
const inProgressFillAlpha = useDerivedValue(() => fillAlphaSV.value);
|
|
40
|
+
const commitShape = useCallback((sx, sy, ex, ey, color, lineWidth, fillColor, fillAlpha) => {
|
|
41
|
+
const from = normalize({
|
|
42
|
+
x: sx,
|
|
43
|
+
y: sy
|
|
44
|
+
}, canvasSize);
|
|
45
|
+
const to = normalize({
|
|
46
|
+
x: ex,
|
|
47
|
+
y: ey
|
|
48
|
+
}, canvasSize);
|
|
49
|
+
let obj;
|
|
50
|
+
switch (shapeType) {
|
|
51
|
+
case "line":
|
|
52
|
+
obj = {
|
|
53
|
+
id: generateId(),
|
|
54
|
+
type: "line",
|
|
55
|
+
from,
|
|
56
|
+
to,
|
|
57
|
+
color,
|
|
58
|
+
lineWidth
|
|
59
|
+
};
|
|
60
|
+
break;
|
|
61
|
+
case "arrow":
|
|
62
|
+
obj = {
|
|
63
|
+
id: generateId(),
|
|
64
|
+
type: "arrow",
|
|
65
|
+
from,
|
|
66
|
+
to,
|
|
67
|
+
color,
|
|
68
|
+
lineWidth
|
|
69
|
+
};
|
|
70
|
+
break;
|
|
71
|
+
case "rectangle":
|
|
72
|
+
obj = {
|
|
73
|
+
id: generateId(),
|
|
74
|
+
type: "rectangle",
|
|
75
|
+
from,
|
|
76
|
+
to,
|
|
77
|
+
color,
|
|
78
|
+
lineWidth,
|
|
79
|
+
backgroundColor: fillColor ?? undefined,
|
|
80
|
+
backgroundAlpha: fillColor ? fillAlpha : undefined
|
|
81
|
+
};
|
|
82
|
+
break;
|
|
83
|
+
case "circle":
|
|
84
|
+
obj = {
|
|
85
|
+
id: generateId(),
|
|
86
|
+
type: "circle",
|
|
87
|
+
from,
|
|
88
|
+
to,
|
|
89
|
+
color,
|
|
90
|
+
lineWidth,
|
|
91
|
+
backgroundColor: fillColor ?? undefined,
|
|
92
|
+
backgroundAlpha: fillColor ? fillAlpha : undefined
|
|
93
|
+
};
|
|
94
|
+
break;
|
|
95
|
+
case "measure":
|
|
96
|
+
{
|
|
97
|
+
const measureId = generateId();
|
|
98
|
+
obj = {
|
|
99
|
+
id: measureId,
|
|
100
|
+
type: "measure",
|
|
101
|
+
from,
|
|
102
|
+
to,
|
|
103
|
+
color,
|
|
104
|
+
lineWidth,
|
|
105
|
+
text: "",
|
|
106
|
+
unit: "cm",
|
|
107
|
+
measureStyle: 0
|
|
108
|
+
};
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
addObject(obj);
|
|
113
|
+
if (shapeType === "measure" && onMeasureCreated) {
|
|
114
|
+
onMeasureCreated(obj.id);
|
|
115
|
+
}
|
|
116
|
+
}, [canvasSize, shapeType, addObject, onMeasureCreated]);
|
|
117
|
+
const gesture = Gesture.Pan().enabled(enabled).maxPointers(1).minDistance(0).onBegin(e => {
|
|
118
|
+
"worklet";
|
|
119
|
+
|
|
120
|
+
const canvas = screenToCanvas(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
121
|
+
const x = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
122
|
+
const y = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
123
|
+
isDrawing.value = true;
|
|
124
|
+
gestureStartTime.value = Date.now();
|
|
125
|
+
startX.value = x;
|
|
126
|
+
startY.value = y;
|
|
127
|
+
currentX.value = x;
|
|
128
|
+
currentY.value = y;
|
|
129
|
+
}).onUpdate(e => {
|
|
130
|
+
"worklet";
|
|
131
|
+
|
|
132
|
+
const canvas = screenToCanvas(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
133
|
+
currentX.value = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
134
|
+
currentY.value = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
135
|
+
}).onEnd(e => {
|
|
136
|
+
"worklet";
|
|
137
|
+
|
|
138
|
+
const canvas = screenToCanvas(e.x, e.y, viewScale.value, viewTranslateX.value, viewTranslateY.value);
|
|
139
|
+
const clampedX = Math.max(0, Math.min(imageWidth.value, canvas.x - imageOffsetX.value));
|
|
140
|
+
const clampedY = Math.max(0, Math.min(imageHeight.value, canvas.y - imageOffsetY.value));
|
|
141
|
+
const duration = Date.now() - gestureStartTime.value;
|
|
142
|
+
const dx = clampedX - startX.value;
|
|
143
|
+
const dy = clampedY - startY.value;
|
|
144
|
+
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
145
|
+
if (duration < MIN_GESTURE_DURATION_MS && dist < MIN_GESTURE_DISTANCE) {
|
|
146
|
+
isDrawing.value = false;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const sx = startX.value;
|
|
150
|
+
const sy = startY.value;
|
|
151
|
+
const ex = currentX.value;
|
|
152
|
+
const ey = currentY.value;
|
|
153
|
+
const color = colorSV.value;
|
|
154
|
+
const lw = lineWidthSV.value;
|
|
155
|
+
const fc = fillColorSV.value;
|
|
156
|
+
const fa = fillAlphaSV.value;
|
|
157
|
+
isDrawing.value = false;
|
|
158
|
+
runOnJS(commitShape)(sx, sy, ex, ey, color, lw, fc, fa);
|
|
159
|
+
}).onFinalize(() => {
|
|
160
|
+
"worklet";
|
|
161
|
+
|
|
162
|
+
isDrawing.value = false;
|
|
163
|
+
});
|
|
164
|
+
return {
|
|
165
|
+
gesture,
|
|
166
|
+
startX,
|
|
167
|
+
startY,
|
|
168
|
+
currentX,
|
|
169
|
+
currentY,
|
|
170
|
+
isDrawing,
|
|
171
|
+
inProgressColor,
|
|
172
|
+
inProgressWidth,
|
|
173
|
+
inProgressFillColor,
|
|
174
|
+
inProgressFillAlpha
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=useShapeGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","Gesture","useSharedValue","useDerivedValue","runOnJS","normalize","screenToCanvas","generateId","useDrawingStore","MIN_GESTURE_DURATION_MS","MIN_GESTURE_DISTANCE","useShapeGesture","shapeType","colorSV","lineWidthSV","fillColorSV","fillAlphaSV","canvasSize","enabled","imageOffsetX","imageOffsetY","imageWidth","imageHeight","viewScale","viewTranslateX","viewTranslateY","onMeasureCreated","startX","startY","currentX","currentY","isDrawing","gestureStartTime","addObject","s","inProgressColor","value","inProgressWidth","inProgressFillColor","inProgressFillAlpha","commitShape","sx","sy","ex","ey","color","lineWidth","fillColor","fillAlpha","from","x","y","to","obj","id","type","backgroundColor","undefined","backgroundAlpha","measureId","text","unit","measureStyle","gesture","Pan","maxPointers","minDistance","onBegin","e","canvas","Math","max","min","Date","now","onUpdate","onEnd","clampedX","clampedY","duration","dx","dy","dist","sqrt","lw","fc","fa","onFinalize"],"sourceRoot":"../../../src","sources":["hooks/useShapeGesture.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,OAAO,QAAQ,8BAA8B;AACtD,SACEC,cAAc,EACdC,eAAe,EACfC,OAAO,QACF,yBAAyB;AAEhC,SAASC,SAAS,EAAEC,cAAc,QAAQ,sBAAsB;AAChE,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,eAAe,QAAQ,0BAA0B;AAE1D,MAAMC,uBAAuB,GAAG,GAAG;AACnC,MAAMC,oBAAoB,GAAG,CAAC;AAoB9B,OAAO,SAASC,eAAeA,CAAC;EAC9BC,SAAS;EACTC,OAAO;EACPC,WAAW;EACXC,WAAW;EACXC,WAAW;EACXC,UAAU;EACVC,OAAO;EACPC,YAAY;EACZC,YAAY;EACZC,UAAU;EACVC,WAAW;EACXC,SAAS;EACTC,cAAc;EACdC,cAAc;EACdC;AACsB,CAAC,EAAE;EACzB;EACA,MAAMC,MAAM,GAAGzB,cAAc,CAAC,CAAC,CAAC;EAChC,MAAM0B,MAAM,GAAG1B,cAAc,CAAC,CAAC,CAAC;EAChC,MAAM2B,QAAQ,GAAG3B,cAAc,CAAC,CAAC,CAAC;EAClC,MAAM4B,QAAQ,GAAG5B,cAAc,CAAC,CAAC,CAAC;EAClC,MAAM6B,SAAS,GAAG7B,cAAc,CAAC,KAAK,CAAC;EACvC,MAAM8B,gBAAgB,GAAG9B,cAAc,CAAC,CAAC,CAAC;EAE1C,MAAM+B,SAAS,GAAGzB,eAAe,CAAE0B,CAAC,IAAKA,CAAC,CAACD,SAAS,CAAC;EAErD,MAAME,eAAe,GAAGhC,eAAe,CAAC,MAAMU,OAAO,CAACuB,KAAK,CAAC;EAC5D,MAAMC,eAAe,GAAGlC,eAAe,CAAC,MAAMW,WAAW,CAACsB,KAAK,CAAC;EAChE,MAAME,mBAAmB,GAAGnC,eAAe,CAAC,MAAMY,WAAW,CAACqB,KAAK,CAAC;EACpE,MAAMG,mBAAmB,GAAGpC,eAAe,CAAC,MAAMa,WAAW,CAACoB,KAAK,CAAC;EAEpE,MAAMI,WAAW,GAAGxC,WAAW,CAC7B,CACEyC,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,EAAU,EACVC,KAAa,EACbC,SAAiB,EACjBC,SAAwB,EACxBC,SAAiB,KACd;IACH,MAAMC,IAAI,GAAG5C,SAAS,CAAC;MAAE6C,CAAC,EAAET,EAAE;MAAEU,CAAC,EAAET;IAAG,CAAC,EAAEzB,UAAU,CAAC;IACpD,MAAMmC,EAAE,GAAG/C,SAAS,CAAC;MAAE6C,CAAC,EAAEP,EAAE;MAAEQ,CAAC,EAAEP;IAAG,CAAC,EAAE3B,UAAU,CAAC;IAElD,IAAIoC,GAAkB;IAEtB,QAAQzC,SAAS;MACf,KAAK,MAAM;QACTyC,GAAG,GAAG;UACJC,EAAE,EAAE/C,UAAU,CAAC,CAAC;UAChBgD,IAAI,EAAE,MAAM;UACZN,IAAI;UACJG,EAAE;UACFP,KAAK;UACLC;QACF,CAAC;QACD;MACF,KAAK,OAAO;QACVO,GAAG,GAAG;UACJC,EAAE,EAAE/C,UAAU,CAAC,CAAC;UAChBgD,IAAI,EAAE,OAAO;UACbN,IAAI;UACJG,EAAE;UACFP,KAAK;UACLC;QACF,CAAC;QACD;MACF,KAAK,WAAW;QACdO,GAAG,GAAG;UACJC,EAAE,EAAE/C,UAAU,CAAC,CAAC;UAChBgD,IAAI,EAAE,WAAW;UACjBN,IAAI;UACJG,EAAE;UACFP,KAAK;UACLC,SAAS;UACTU,eAAe,EAAET,SAAS,IAAIU,SAAS;UACvCC,eAAe,EAAEX,SAAS,GAAGC,SAAS,GAAGS;QAC3C,CAAC;QACD;MACF,KAAK,QAAQ;QACXJ,GAAG,GAAG;UACJC,EAAE,EAAE/C,UAAU,CAAC,CAAC;UAChBgD,IAAI,EAAE,QAAQ;UACdN,IAAI;UACJG,EAAE;UACFP,KAAK;UACLC,SAAS;UACTU,eAAe,EAAET,SAAS,IAAIU,SAAS;UACvCC,eAAe,EAAEX,SAAS,GAAGC,SAAS,GAAGS;QAC3C,CAAC;QACD;MACF,KAAK,SAAS;QAAE;UACd,MAAME,SAAS,GAAGpD,UAAU,CAAC,CAAC;UAC9B8C,GAAG,GAAG;YACJC,EAAE,EAAEK,SAAS;YACbJ,IAAI,EAAE,SAAS;YACfN,IAAI;YACJG,EAAE;YACFP,KAAK;YACLC,SAAS;YACTc,IAAI,EAAE,EAAE;YACRC,IAAI,EAAE,IAAI;YACVC,YAAY,EAAE;UAChB,CAAC;UACD;QACF;IACF;IAEA7B,SAAS,CAACoB,GAAG,CAAC;IAEd,IAAIzC,SAAS,KAAK,SAAS,IAAIc,gBAAgB,EAAE;MAC/CA,gBAAgB,CAAC2B,GAAG,CAACC,EAAE,CAAC;IAC1B;EACF,CAAC,EACD,CAACrC,UAAU,EAAEL,SAAS,EAAEqB,SAAS,EAAEP,gBAAgB,CACrD,CAAC;EAED,MAAMqC,OAAO,GAAG9D,OAAO,CAAC+D,GAAG,CAAC,CAAC,CAC1B9C,OAAO,CAACA,OAAO,CAAC,CAChB+C,WAAW,CAAC,CAAC,CAAC,CACdC,WAAW,CAAC,CAAC,CAAC,CACdC,OAAO,CAAEC,CAAC,IAAK;IACd,SAAS;;IACT,MAAMC,MAAM,GAAG/D,cAAc,CAC3B8D,CAAC,CAAClB,CAAC,EACHkB,CAAC,CAACjB,CAAC,EACH5B,SAAS,CAACa,KAAK,EACfZ,cAAc,CAACY,KAAK,EACpBX,cAAc,CAACW,KACjB,CAAC;IACD,MAAMc,CAAC,GAAGoB,IAAI,CAACC,GAAG,CAChB,CAAC,EACDD,IAAI,CAACE,GAAG,CAACnD,UAAU,CAACe,KAAK,EAAEiC,MAAM,CAACnB,CAAC,GAAG/B,YAAY,CAACiB,KAAK,CAC1D,CAAC;IACD,MAAMe,CAAC,GAAGmB,IAAI,CAACC,GAAG,CAChB,CAAC,EACDD,IAAI,CAACE,GAAG,CAAClD,WAAW,CAACc,KAAK,EAAEiC,MAAM,CAAClB,CAAC,GAAG/B,YAAY,CAACgB,KAAK,CAC3D,CAAC;IACDL,SAAS,CAACK,KAAK,GAAG,IAAI;IACtBJ,gBAAgB,CAACI,KAAK,GAAGqC,IAAI,CAACC,GAAG,CAAC,CAAC;IACnC/C,MAAM,CAACS,KAAK,GAAGc,CAAC;IAChBtB,MAAM,CAACQ,KAAK,GAAGe,CAAC;IAChBtB,QAAQ,CAACO,KAAK,GAAGc,CAAC;IAClBpB,QAAQ,CAACM,KAAK,GAAGe,CAAC;EACpB,CAAC,CAAC,CACDwB,QAAQ,CAAEP,CAAC,IAAK;IACf,SAAS;;IACT,MAAMC,MAAM,GAAG/D,cAAc,CAC3B8D,CAAC,CAAClB,CAAC,EACHkB,CAAC,CAACjB,CAAC,EACH5B,SAAS,CAACa,KAAK,EACfZ,cAAc,CAACY,KAAK,EACpBX,cAAc,CAACW,KACjB,CAAC;IACDP,QAAQ,CAACO,KAAK,GAAGkC,IAAI,CAACC,GAAG,CACvB,CAAC,EACDD,IAAI,CAACE,GAAG,CAACnD,UAAU,CAACe,KAAK,EAAEiC,MAAM,CAACnB,CAAC,GAAG/B,YAAY,CAACiB,KAAK,CAC1D,CAAC;IACDN,QAAQ,CAACM,KAAK,GAAGkC,IAAI,CAACC,GAAG,CACvB,CAAC,EACDD,IAAI,CAACE,GAAG,CAAClD,WAAW,CAACc,KAAK,EAAEiC,MAAM,CAAClB,CAAC,GAAG/B,YAAY,CAACgB,KAAK,CAC3D,CAAC;EACH,CAAC,CAAC,CACDwC,KAAK,CAAER,CAAC,IAAK;IACZ,SAAS;;IACT,MAAMC,MAAM,GAAG/D,cAAc,CAC3B8D,CAAC,CAAClB,CAAC,EACHkB,CAAC,CAACjB,CAAC,EACH5B,SAAS,CAACa,KAAK,EACfZ,cAAc,CAACY,KAAK,EACpBX,cAAc,CAACW,KACjB,CAAC;IACD,MAAMyC,QAAQ,GAAGP,IAAI,CAACC,GAAG,CACvB,CAAC,EACDD,IAAI,CAACE,GAAG,CAACnD,UAAU,CAACe,KAAK,EAAEiC,MAAM,CAACnB,CAAC,GAAG/B,YAAY,CAACiB,KAAK,CAC1D,CAAC;IACD,MAAM0C,QAAQ,GAAGR,IAAI,CAACC,GAAG,CACvB,CAAC,EACDD,IAAI,CAACE,GAAG,CAAClD,WAAW,CAACc,KAAK,EAAEiC,MAAM,CAAClB,CAAC,GAAG/B,YAAY,CAACgB,KAAK,CAC3D,CAAC;IACD,MAAM2C,QAAQ,GAAGN,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG1C,gBAAgB,CAACI,KAAK;IACpD,MAAM4C,EAAE,GAAGH,QAAQ,GAAGlD,MAAM,CAACS,KAAK;IAClC,MAAM6C,EAAE,GAAGH,QAAQ,GAAGlD,MAAM,CAACQ,KAAK;IAClC,MAAM8C,IAAI,GAAGZ,IAAI,CAACa,IAAI,CAACH,EAAE,GAAGA,EAAE,GAAGC,EAAE,GAAGA,EAAE,CAAC;IAEzC,IAAIF,QAAQ,GAAGtE,uBAAuB,IAAIyE,IAAI,GAAGxE,oBAAoB,EAAE;MACrEqB,SAAS,CAACK,KAAK,GAAG,KAAK;MACvB;IACF;IAEA,MAAMK,EAAE,GAAGd,MAAM,CAACS,KAAK;IACvB,MAAMM,EAAE,GAAGd,MAAM,CAACQ,KAAK;IACvB,MAAMO,EAAE,GAAGd,QAAQ,CAACO,KAAK;IACzB,MAAMQ,EAAE,GAAGd,QAAQ,CAACM,KAAK;IACzB,MAAMS,KAAK,GAAGhC,OAAO,CAACuB,KAAK;IAC3B,MAAMgD,EAAE,GAAGtE,WAAW,CAACsB,KAAK;IAC5B,MAAMiD,EAAE,GAAGtE,WAAW,CAACqB,KAAK;IAC5B,MAAMkD,EAAE,GAAGtE,WAAW,CAACoB,KAAK;IAE5BL,SAAS,CAACK,KAAK,GAAG,KAAK;IAEvBhC,OAAO,CAACoC,WAAW,CAAC,CAACC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,KAAK,EAAEuC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC;EACzD,CAAC,CAAC,CACDC,UAAU,CAAC,MAAM;IAChB,SAAS;;IACTxD,SAAS,CAACK,KAAK,GAAG,KAAK;EACzB,CAAC,CAAC;EAEJ,OAAO;IACL2B,OAAO;IACPpC,MAAM;IACNC,MAAM;IACNC,QAAQ;IACRC,QAAQ;IACRC,SAAS;IACTI,eAAe;IACfE,eAAe;IACfC,mBAAmB;IACnBC;EACF,CAAC;AACH","ignoreList":[]}
|