react-native-image-editor-skia 0.1.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/LICENSE +21 -0
- package/README.md +202 -0
- package/lib/commonjs/ImageEditor.js +141 -0
- package/lib/commonjs/ImageEditor.js.map +1 -0
- package/lib/commonjs/annotations/AnnotationView.js +42 -0
- package/lib/commonjs/annotations/AnnotationView.js.map +1 -0
- package/lib/commonjs/annotations/ArrowAnnotation.js +29 -0
- package/lib/commonjs/annotations/ArrowAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/CircleAnnotation.js +31 -0
- package/lib/commonjs/annotations/CircleAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/FreehandAnnotation.js +29 -0
- package/lib/commonjs/annotations/FreehandAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/MarkerAnnotation.js +27 -0
- package/lib/commonjs/annotations/MarkerAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/RotatedGroup.js +34 -0
- package/lib/commonjs/annotations/RotatedGroup.js.map +1 -0
- package/lib/commonjs/annotations/TextAnnotation.js +40 -0
- package/lib/commonjs/annotations/TextAnnotation.js.map +1 -0
- package/lib/commonjs/annotations/geometry.js +73 -0
- package/lib/commonjs/annotations/geometry.js.map +1 -0
- package/lib/commonjs/annotations/geometryPure.js +104 -0
- package/lib/commonjs/annotations/geometryPure.js.map +1 -0
- package/lib/commonjs/canvas/AnnotationLayer.js +58 -0
- package/lib/commonjs/canvas/AnnotationLayer.js.map +1 -0
- package/lib/commonjs/canvas/BaseImageLayer.js +27 -0
- package/lib/commonjs/canvas/BaseImageLayer.js.map +1 -0
- package/lib/commonjs/canvas/CropOverlay.js +135 -0
- package/lib/commonjs/canvas/CropOverlay.js.map +1 -0
- package/lib/commonjs/canvas/EditorCanvas.js +91 -0
- package/lib/commonjs/canvas/EditorCanvas.js.map +1 -0
- package/lib/commonjs/canvas/InFlightLayer.js +152 -0
- package/lib/commonjs/canvas/InFlightLayer.js.map +1 -0
- package/lib/commonjs/canvas/SelectionOverlay.js +90 -0
- package/lib/commonjs/canvas/SelectionOverlay.js.map +1 -0
- package/lib/commonjs/constants.js +56 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/context/EditorContext.js +132 -0
- package/lib/commonjs/context/EditorContext.js.map +1 -0
- package/lib/commonjs/export/drawScene.js +97 -0
- package/lib/commonjs/export/drawScene.js.map +1 -0
- package/lib/commonjs/export/exportImage.js +92 -0
- package/lib/commonjs/export/exportImage.js.map +1 -0
- package/lib/commonjs/gestures/applyTransform.js +79 -0
- package/lib/commonjs/gestures/applyTransform.js.map +1 -0
- package/lib/commonjs/gestures/createAnnotation.js +73 -0
- package/lib/commonjs/gestures/createAnnotation.js.map +1 -0
- package/lib/commonjs/gestures/handles.js +53 -0
- package/lib/commonjs/gestures/handles.js.map +1 -0
- package/lib/commonjs/gestures/hitTest.js +72 -0
- package/lib/commonjs/gestures/hitTest.js.map +1 -0
- package/lib/commonjs/gestures/useCropGesture.js +149 -0
- package/lib/commonjs/gestures/useCropGesture.js.map +1 -0
- package/lib/commonjs/gestures/useEditorGestures.js +289 -0
- package/lib/commonjs/gestures/useEditorGestures.js.map +1 -0
- package/lib/commonjs/image/disposeRegistry.js +63 -0
- package/lib/commonjs/image/disposeRegistry.js.map +1 -0
- package/lib/commonjs/image/useLoadedImage.js +121 -0
- package/lib/commonjs/image/useLoadedImage.js.map +1 -0
- package/lib/commonjs/index.js +52 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/state/history.js +85 -0
- package/lib/commonjs/state/history.js.map +1 -0
- package/lib/commonjs/state/selectors.js +19 -0
- package/lib/commonjs/state/selectors.js.map +1 -0
- package/lib/commonjs/state/useEditorReducer.js +83 -0
- package/lib/commonjs/state/useEditorReducer.js.map +1 -0
- package/lib/commonjs/toolbar/ColorPicker.js +84 -0
- package/lib/commonjs/toolbar/ColorPicker.js.map +1 -0
- package/lib/commonjs/toolbar/CropControls.js +65 -0
- package/lib/commonjs/toolbar/CropControls.js.map +1 -0
- package/lib/commonjs/toolbar/RotationSlider.js +73 -0
- package/lib/commonjs/toolbar/RotationSlider.js.map +1 -0
- package/lib/commonjs/toolbar/TextInputOverlay.js +108 -0
- package/lib/commonjs/toolbar/TextInputOverlay.js.map +1 -0
- package/lib/commonjs/toolbar/ToolButton.js +56 -0
- package/lib/commonjs/toolbar/ToolButton.js.map +1 -0
- package/lib/commonjs/toolbar/Toolbar.js +137 -0
- package/lib/commonjs/toolbar/Toolbar.js.map +1 -0
- package/lib/commonjs/types.js +47 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils/color.js +37 -0
- package/lib/commonjs/utils/color.js.map +1 -0
- package/lib/commonjs/utils/id.js +14 -0
- package/lib/commonjs/utils/id.js.map +1 -0
- package/lib/commonjs/utils/math.js +277 -0
- package/lib/commonjs/utils/math.js.map +1 -0
- package/lib/module/ImageEditor.js +138 -0
- package/lib/module/ImageEditor.js.map +1 -0
- package/lib/module/annotations/AnnotationView.js +39 -0
- package/lib/module/annotations/AnnotationView.js.map +1 -0
- package/lib/module/annotations/ArrowAnnotation.js +26 -0
- package/lib/module/annotations/ArrowAnnotation.js.map +1 -0
- package/lib/module/annotations/CircleAnnotation.js +27 -0
- package/lib/module/annotations/CircleAnnotation.js.map +1 -0
- package/lib/module/annotations/FreehandAnnotation.js +25 -0
- package/lib/module/annotations/FreehandAnnotation.js.map +1 -0
- package/lib/module/annotations/MarkerAnnotation.js +23 -0
- package/lib/module/annotations/MarkerAnnotation.js.map +1 -0
- package/lib/module/annotations/RotatedGroup.js +29 -0
- package/lib/module/annotations/RotatedGroup.js.map +1 -0
- package/lib/module/annotations/TextAnnotation.js +37 -0
- package/lib/module/annotations/TextAnnotation.js.map +1 -0
- package/lib/module/annotations/geometry.js +56 -0
- package/lib/module/annotations/geometry.js.map +1 -0
- package/lib/module/annotations/geometryPure.js +100 -0
- package/lib/module/annotations/geometryPure.js.map +1 -0
- package/lib/module/canvas/AnnotationLayer.js +55 -0
- package/lib/module/canvas/AnnotationLayer.js.map +1 -0
- package/lib/module/canvas/BaseImageLayer.js +23 -0
- package/lib/module/canvas/BaseImageLayer.js.map +1 -0
- package/lib/module/canvas/CropOverlay.js +131 -0
- package/lib/module/canvas/CropOverlay.js.map +1 -0
- package/lib/module/canvas/EditorCanvas.js +88 -0
- package/lib/module/canvas/EditorCanvas.js.map +1 -0
- package/lib/module/canvas/InFlightLayer.js +149 -0
- package/lib/module/canvas/InFlightLayer.js.map +1 -0
- package/lib/module/canvas/SelectionOverlay.js +85 -0
- package/lib/module/canvas/SelectionOverlay.js.map +1 -0
- package/lib/module/constants.js +52 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/context/EditorContext.js +126 -0
- package/lib/module/context/EditorContext.js.map +1 -0
- package/lib/module/export/drawScene.js +93 -0
- package/lib/module/export/drawScene.js.map +1 -0
- package/lib/module/export/exportImage.js +88 -0
- package/lib/module/export/exportImage.js.map +1 -0
- package/lib/module/gestures/applyTransform.js +75 -0
- package/lib/module/gestures/applyTransform.js.map +1 -0
- package/lib/module/gestures/createAnnotation.js +65 -0
- package/lib/module/gestures/createAnnotation.js.map +1 -0
- package/lib/module/gestures/handles.js +49 -0
- package/lib/module/gestures/handles.js.map +1 -0
- package/lib/module/gestures/hitTest.js +69 -0
- package/lib/module/gestures/hitTest.js.map +1 -0
- package/lib/module/gestures/useCropGesture.js +145 -0
- package/lib/module/gestures/useCropGesture.js.map +1 -0
- package/lib/module/gestures/useEditorGestures.js +285 -0
- package/lib/module/gestures/useEditorGestures.js.map +1 -0
- package/lib/module/image/disposeRegistry.js +57 -0
- package/lib/module/image/disposeRegistry.js.map +1 -0
- package/lib/module/image/useLoadedImage.js +117 -0
- package/lib/module/image/useLoadedImage.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/state/history.js +76 -0
- package/lib/module/state/history.js.map +1 -0
- package/lib/module/state/selectors.js +14 -0
- package/lib/module/state/selectors.js.map +1 -0
- package/lib/module/state/useEditorReducer.js +79 -0
- package/lib/module/state/useEditorReducer.js.map +1 -0
- package/lib/module/toolbar/ColorPicker.js +80 -0
- package/lib/module/toolbar/ColorPicker.js.map +1 -0
- package/lib/module/toolbar/CropControls.js +62 -0
- package/lib/module/toolbar/CropControls.js.map +1 -0
- package/lib/module/toolbar/RotationSlider.js +69 -0
- package/lib/module/toolbar/RotationSlider.js.map +1 -0
- package/lib/module/toolbar/TextInputOverlay.js +105 -0
- package/lib/module/toolbar/TextInputOverlay.js.map +1 -0
- package/lib/module/toolbar/ToolButton.js +52 -0
- package/lib/module/toolbar/ToolButton.js.map +1 -0
- package/lib/module/toolbar/Toolbar.js +133 -0
- package/lib/module/toolbar/Toolbar.js.map +1 -0
- package/lib/module/types.js +43 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/color.js +33 -0
- package/lib/module/utils/color.js.map +1 -0
- package/lib/module/utils/id.js +10 -0
- package/lib/module/utils/id.js.map +1 -0
- package/lib/module/utils/math.js +258 -0
- package/lib/module/utils/math.js.map +1 -0
- package/lib/typescript/src/ImageEditor.d.ts +9 -0
- package/lib/typescript/src/ImageEditor.d.ts.map +1 -0
- package/lib/typescript/src/annotations/AnnotationView.d.ts +6 -0
- package/lib/typescript/src/annotations/AnnotationView.d.ts.map +1 -0
- package/lib/typescript/src/annotations/ArrowAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/ArrowAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/CircleAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/CircleAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/FreehandAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/FreehandAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/MarkerAnnotation.d.ts +5 -0
- package/lib/typescript/src/annotations/MarkerAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/RotatedGroup.d.ts +13 -0
- package/lib/typescript/src/annotations/RotatedGroup.d.ts.map +1 -0
- package/lib/typescript/src/annotations/TextAnnotation.d.ts +10 -0
- package/lib/typescript/src/annotations/TextAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/annotations/geometry.d.ts +11 -0
- package/lib/typescript/src/annotations/geometry.d.ts.map +1 -0
- package/lib/typescript/src/annotations/geometryPure.d.ts +14 -0
- package/lib/typescript/src/annotations/geometryPure.d.ts.map +1 -0
- package/lib/typescript/src/canvas/AnnotationLayer.d.ts +11 -0
- package/lib/typescript/src/canvas/AnnotationLayer.d.ts.map +1 -0
- package/lib/typescript/src/canvas/BaseImageLayer.d.ts +12 -0
- package/lib/typescript/src/canvas/BaseImageLayer.d.ts.map +1 -0
- package/lib/typescript/src/canvas/CropOverlay.d.ts +10 -0
- package/lib/typescript/src/canvas/CropOverlay.d.ts.map +1 -0
- package/lib/typescript/src/canvas/EditorCanvas.d.ts +18 -0
- package/lib/typescript/src/canvas/EditorCanvas.d.ts.map +1 -0
- package/lib/typescript/src/canvas/InFlightLayer.d.ts +12 -0
- package/lib/typescript/src/canvas/InFlightLayer.d.ts.map +1 -0
- package/lib/typescript/src/canvas/SelectionOverlay.d.ts +11 -0
- package/lib/typescript/src/canvas/SelectionOverlay.d.ts.map +1 -0
- package/lib/typescript/src/constants.d.ts +25 -0
- package/lib/typescript/src/constants.d.ts.map +1 -0
- package/lib/typescript/src/context/EditorContext.d.ts +66 -0
- package/lib/typescript/src/context/EditorContext.d.ts.map +1 -0
- package/lib/typescript/src/export/drawScene.d.ts +10 -0
- package/lib/typescript/src/export/drawScene.d.ts.map +1 -0
- package/lib/typescript/src/export/exportImage.d.ts +23 -0
- package/lib/typescript/src/export/exportImage.d.ts.map +1 -0
- package/lib/typescript/src/gestures/applyTransform.d.ts +17 -0
- package/lib/typescript/src/gestures/applyTransform.d.ts.map +1 -0
- package/lib/typescript/src/gestures/createAnnotation.d.ts +11 -0
- package/lib/typescript/src/gestures/createAnnotation.d.ts.map +1 -0
- package/lib/typescript/src/gestures/handles.d.ts +17 -0
- package/lib/typescript/src/gestures/handles.d.ts.map +1 -0
- package/lib/typescript/src/gestures/hitTest.d.ts +9 -0
- package/lib/typescript/src/gestures/hitTest.d.ts.map +1 -0
- package/lib/typescript/src/gestures/useCropGesture.d.ts +7 -0
- package/lib/typescript/src/gestures/useCropGesture.d.ts.map +1 -0
- package/lib/typescript/src/gestures/useEditorGestures.d.ts +8 -0
- package/lib/typescript/src/gestures/useEditorGestures.d.ts.map +1 -0
- package/lib/typescript/src/image/disposeRegistry.d.ts +25 -0
- package/lib/typescript/src/image/disposeRegistry.d.ts.map +1 -0
- package/lib/typescript/src/image/useLoadedImage.d.ts +23 -0
- package/lib/typescript/src/image/useLoadedImage.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/state/history.d.ts +23 -0
- package/lib/typescript/src/state/history.d.ts.map +1 -0
- package/lib/typescript/src/state/selectors.d.ts +5 -0
- package/lib/typescript/src/state/selectors.d.ts.map +1 -0
- package/lib/typescript/src/state/useEditorReducer.d.ts +32 -0
- package/lib/typescript/src/state/useEditorReducer.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/ColorPicker.d.ts +7 -0
- package/lib/typescript/src/toolbar/ColorPicker.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/CropControls.d.ts +3 -0
- package/lib/typescript/src/toolbar/CropControls.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/RotationSlider.d.ts +8 -0
- package/lib/typescript/src/toolbar/RotationSlider.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/TextInputOverlay.d.ts +9 -0
- package/lib/typescript/src/toolbar/TextInputOverlay.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/ToolButton.d.ts +7 -0
- package/lib/typescript/src/toolbar/ToolButton.d.ts.map +1 -0
- package/lib/typescript/src/toolbar/Toolbar.d.ts +4 -0
- package/lib/typescript/src/toolbar/Toolbar.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +170 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/color.d.ts +8 -0
- package/lib/typescript/src/utils/color.d.ts.map +1 -0
- package/lib/typescript/src/utils/id.d.ts +3 -0
- package/lib/typescript/src/utils/id.d.ts.map +1 -0
- package/lib/typescript/src/utils/math.d.ts +68 -0
- package/lib/typescript/src/utils/math.d.ts.map +1 -0
- package/package.json +90 -0
- package/src/ImageEditor.tsx +133 -0
- package/src/annotations/AnnotationView.tsx +24 -0
- package/src/annotations/ArrowAnnotation.tsx +26 -0
- package/src/annotations/CircleAnnotation.tsx +22 -0
- package/src/annotations/FreehandAnnotation.tsx +22 -0
- package/src/annotations/MarkerAnnotation.tsx +20 -0
- package/src/annotations/RotatedGroup.tsx +28 -0
- package/src/annotations/TextAnnotation.tsx +42 -0
- package/src/annotations/geometry.ts +62 -0
- package/src/annotations/geometryPure.ts +73 -0
- package/src/canvas/AnnotationLayer.tsx +43 -0
- package/src/canvas/BaseImageLayer.tsx +28 -0
- package/src/canvas/CropOverlay.tsx +92 -0
- package/src/canvas/EditorCanvas.tsx +70 -0
- package/src/canvas/InFlightLayer.tsx +140 -0
- package/src/canvas/SelectionOverlay.tsx +92 -0
- package/src/constants.ts +46 -0
- package/src/context/EditorContext.tsx +229 -0
- package/src/export/drawScene.ts +120 -0
- package/src/export/exportImage.ts +111 -0
- package/src/gestures/applyTransform.ts +76 -0
- package/src/gestures/createAnnotation.ts +92 -0
- package/src/gestures/handles.ts +50 -0
- package/src/gestures/hitTest.ts +79 -0
- package/src/gestures/useCropGesture.ts +123 -0
- package/src/gestures/useEditorGestures.ts +308 -0
- package/src/image/disposeRegistry.ts +59 -0
- package/src/image/useLoadedImage.ts +131 -0
- package/src/index.ts +32 -0
- package/src/state/history.ts +71 -0
- package/src/state/selectors.ts +16 -0
- package/src/state/useEditorReducer.ts +93 -0
- package/src/toolbar/ColorPicker.tsx +72 -0
- package/src/toolbar/CropControls.tsx +46 -0
- package/src/toolbar/RotationSlider.tsx +56 -0
- package/src/toolbar/TextInputOverlay.tsx +104 -0
- package/src/toolbar/ToolButton.tsx +46 -0
- package/src/toolbar/Toolbar.tsx +110 -0
- package/src/types.ts +203 -0
- package/src/utils/color.ts +34 -0
- package/src/utils/id.ts +7 -0
- package/src/utils/math.ts +222 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.exportImage = exportImage;
|
|
7
|
+
var _reactNativeSkia = require("@shopify/react-native-skia");
|
|
8
|
+
var _math = require("../utils/math");
|
|
9
|
+
var _drawScene = require("./drawScene");
|
|
10
|
+
var _disposeRegistry = require("../image/disposeRegistry");
|
|
11
|
+
const RAD_TO_DEG = 180 / Math.PI;
|
|
12
|
+
/**
|
|
13
|
+
* Render the scene OFF-SCREEN at full resolution and return base64.
|
|
14
|
+
*
|
|
15
|
+
* Output = the (optionally cropped) image + annotations, scaled by `scene.scale`
|
|
16
|
+
* and rotated by `scene.rotation`, on a surface sized to the rotated content's
|
|
17
|
+
* bounding box (transparent corners for PNG). Because annotations live in image
|
|
18
|
+
* space, no per-annotation rescaling is needed — the exact preview geometry is
|
|
19
|
+
* drawn at native resolution.
|
|
20
|
+
*
|
|
21
|
+
* All Skia objects created here (surface + snapshot) are disposed before return.
|
|
22
|
+
*/
|
|
23
|
+
async function exportImage(params) {
|
|
24
|
+
const {
|
|
25
|
+
image,
|
|
26
|
+
annotations,
|
|
27
|
+
scene,
|
|
28
|
+
imageWidth,
|
|
29
|
+
imageHeight,
|
|
30
|
+
options
|
|
31
|
+
} = params;
|
|
32
|
+
const format = options?.format ?? 'png';
|
|
33
|
+
const quality = options?.quality ?? 100;
|
|
34
|
+
const dataUri = options?.dataUri ?? true;
|
|
35
|
+
const src = scene.cropRect ?? {
|
|
36
|
+
x: 0,
|
|
37
|
+
y: 0,
|
|
38
|
+
width: imageWidth,
|
|
39
|
+
height: imageHeight
|
|
40
|
+
};
|
|
41
|
+
const contentW = src.width * scene.scale;
|
|
42
|
+
const contentH = src.height * scene.scale;
|
|
43
|
+
const absCos = Math.abs(Math.cos(scene.rotation));
|
|
44
|
+
const absSin = Math.abs(Math.sin(scene.rotation));
|
|
45
|
+
const rotatedW = contentW * absCos + contentH * absSin;
|
|
46
|
+
const rotatedH = contentW * absSin + contentH * absCos;
|
|
47
|
+
const clamped = (0, _math.clampSizeToMax)(Math.max(1, Math.ceil(rotatedW)), Math.max(1, Math.ceil(rotatedH)), options?.maxExportSize);
|
|
48
|
+
// Reduce the drawing scale by the same factor the clamp shrank the surface.
|
|
49
|
+
const clampFactor = clamped.width / Math.max(1, Math.ceil(rotatedW));
|
|
50
|
+
const drawScale = scene.scale * clampFactor;
|
|
51
|
+
const surface = _reactNativeSkia.Skia.Surface.MakeOffscreen(clamped.width, clamped.height);
|
|
52
|
+
if (!surface) {
|
|
53
|
+
throw new Error('Skia.Surface.MakeOffscreen returned null — offscreen export unavailable on this device/version.');
|
|
54
|
+
}
|
|
55
|
+
let snapshot = null;
|
|
56
|
+
try {
|
|
57
|
+
const canvas = surface.getCanvas();
|
|
58
|
+
const srcCenter = {
|
|
59
|
+
x: src.x + src.width / 2,
|
|
60
|
+
y: src.y + src.height / 2
|
|
61
|
+
};
|
|
62
|
+
canvas.save();
|
|
63
|
+
canvas.translate(clamped.width / 2, clamped.height / 2);
|
|
64
|
+
if (scene.rotation) {
|
|
65
|
+
canvas.rotate(scene.rotation * RAD_TO_DEG, 0, 0);
|
|
66
|
+
}
|
|
67
|
+
canvas.scale(drawScale, drawScale);
|
|
68
|
+
canvas.translate(-srcCenter.x, -srcCenter.y);
|
|
69
|
+
// Clip to the crop region so only the selected area is drawn.
|
|
70
|
+
canvas.clipRect(_reactNativeSkia.Skia.XYWHRect(src.x, src.y, src.width, src.height), _reactNativeSkia.ClipOp.Intersect, true);
|
|
71
|
+
(0, _drawScene.drawScene)(canvas, image, annotations);
|
|
72
|
+
canvas.restore();
|
|
73
|
+
surface.flush();
|
|
74
|
+
snapshot = surface.makeImageSnapshot();
|
|
75
|
+
const skFormat = format === 'jpeg' ? _reactNativeSkia.ImageFormat.JPEG : _reactNativeSkia.ImageFormat.PNG;
|
|
76
|
+
const base64 = snapshot.encodeToBase64(skFormat, quality);
|
|
77
|
+
|
|
78
|
+
// File output: write the raw base64 via the caller-supplied writer.
|
|
79
|
+
if (options?.output === 'file') {
|
|
80
|
+
if (!options.filePath || !options.writeFile) {
|
|
81
|
+
throw new Error("exportImage: output:'file' requires both `filePath` and `writeFile`.");
|
|
82
|
+
}
|
|
83
|
+
await options.writeFile(options.filePath, base64);
|
|
84
|
+
return options.filePath;
|
|
85
|
+
}
|
|
86
|
+
return dataUri ? `data:image/${format};base64,${base64}` : base64;
|
|
87
|
+
} finally {
|
|
88
|
+
(0, _disposeRegistry.safeDispose)(snapshot);
|
|
89
|
+
(0, _disposeRegistry.safeDispose)(surface);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=exportImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNativeSkia","require","_math","_drawScene","_disposeRegistry","RAD_TO_DEG","Math","PI","exportImage","params","image","annotations","scene","imageWidth","imageHeight","options","format","quality","dataUri","src","cropRect","x","y","width","height","contentW","scale","contentH","absCos","abs","cos","rotation","absSin","sin","rotatedW","rotatedH","clamped","clampSizeToMax","max","ceil","maxExportSize","clampFactor","drawScale","surface","Skia","Surface","MakeOffscreen","Error","snapshot","canvas","getCanvas","srcCenter","save","translate","rotate","clipRect","XYWHRect","ClipOp","Intersect","drawScene","restore","flush","makeImageSnapshot","skFormat","ImageFormat","JPEG","PNG","base64","encodeToBase64","output","filePath","writeFile","safeDispose"],"sourceRoot":"..\\..\\..\\src","sources":["export/exportImage.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.applyTransformToAnnotation = applyTransformToAnnotation;
|
|
7
|
+
/**
|
|
8
|
+
* Bake a live move/resize/rotate transform into an annotation's stored geometry.
|
|
9
|
+
* This MUST match the on-screen preview (AnnotationLayer applies, in order:
|
|
10
|
+
* translate → rotate(about origin) → scale(about origin)). Rotation is folded
|
|
11
|
+
* into the annotation's `rotation` field (also about its center), so only scale
|
|
12
|
+
* and translate touch geometry here.
|
|
13
|
+
*/
|
|
14
|
+
function applyTransformToAnnotation(a, live) {
|
|
15
|
+
const {
|
|
16
|
+
scale: s,
|
|
17
|
+
origin: o,
|
|
18
|
+
tx,
|
|
19
|
+
ty,
|
|
20
|
+
rotate
|
|
21
|
+
} = live;
|
|
22
|
+
const map = p => ({
|
|
23
|
+
x: o.x + (p.x - o.x) * s + tx,
|
|
24
|
+
y: o.y + (p.y - o.y) * s + ty
|
|
25
|
+
});
|
|
26
|
+
const rotation = a.rotation + rotate;
|
|
27
|
+
switch (a.type) {
|
|
28
|
+
case 'circle':
|
|
29
|
+
return {
|
|
30
|
+
...a,
|
|
31
|
+
center: map(a.center),
|
|
32
|
+
radius: a.radius * s,
|
|
33
|
+
strokeWidth: a.strokeWidth * s,
|
|
34
|
+
rotation
|
|
35
|
+
};
|
|
36
|
+
case 'arrow':
|
|
37
|
+
return {
|
|
38
|
+
...a,
|
|
39
|
+
start: map(a.start),
|
|
40
|
+
end: map(a.end),
|
|
41
|
+
headSize: a.headSize * s,
|
|
42
|
+
strokeWidth: a.strokeWidth * s,
|
|
43
|
+
rotation
|
|
44
|
+
};
|
|
45
|
+
case 'marker':
|
|
46
|
+
{
|
|
47
|
+
const tl = map({
|
|
48
|
+
x: a.rect.x,
|
|
49
|
+
y: a.rect.y
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
...a,
|
|
53
|
+
rect: {
|
|
54
|
+
x: tl.x,
|
|
55
|
+
y: tl.y,
|
|
56
|
+
width: a.rect.width * s,
|
|
57
|
+
height: a.rect.height * s
|
|
58
|
+
},
|
|
59
|
+
rotation
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
case 'freehand':
|
|
63
|
+
return {
|
|
64
|
+
...a,
|
|
65
|
+
points: a.points.map(map),
|
|
66
|
+
strokeWidth: a.strokeWidth * s,
|
|
67
|
+
rotation
|
|
68
|
+
};
|
|
69
|
+
case 'text':
|
|
70
|
+
return {
|
|
71
|
+
...a,
|
|
72
|
+
origin: map(a.origin),
|
|
73
|
+
fontSize: a.fontSize * s,
|
|
74
|
+
width: a.width * s,
|
|
75
|
+
rotation
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=applyTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["applyTransformToAnnotation","a","live","scale","s","origin","o","tx","ty","rotate","map","p","x","y","rotation","type","center","radius","strokeWidth","start","end","headSize","tl","rect","width","height","points","fontSize"],"sourceRoot":"..\\..\\..\\src","sources":["gestures/applyTransform.ts"],"mappings":";;;;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,0BAA0BA,CACxCC,CAAa,EACbC,IAAgB,EACJ;EACZ,MAAM;IAAEC,KAAK,EAAEC,CAAC;IAAEC,MAAM,EAAEC,CAAC;IAAEC,EAAE;IAAEC,EAAE;IAAEC;EAAO,CAAC,GAAGP,IAAI;EACpD,MAAMQ,GAAG,GAAIC,CAAO,KAAY;IAC9BC,CAAC,EAAEN,CAAC,CAACM,CAAC,GAAG,CAACD,CAAC,CAACC,CAAC,GAAGN,CAAC,CAACM,CAAC,IAAIR,CAAC,GAAGG,EAAE;IAC7BM,CAAC,EAAEP,CAAC,CAACO,CAAC,GAAG,CAACF,CAAC,CAACE,CAAC,GAAGP,CAAC,CAACO,CAAC,IAAIT,CAAC,GAAGI;EAC7B,CAAC,CAAC;EACF,MAAMM,QAAQ,GAAGb,CAAC,CAACa,QAAQ,GAAGL,MAAM;EAEpC,QAAQR,CAAC,CAACc,IAAI;IACZ,KAAK,QAAQ;MACX,OAAO;QACL,GAAGd,CAAC;QACJe,MAAM,EAAEN,GAAG,CAACT,CAAC,CAACe,MAAM,CAAC;QACrBC,MAAM,EAAEhB,CAAC,CAACgB,MAAM,GAAGb,CAAC;QACpBc,WAAW,EAAEjB,CAAC,CAACiB,WAAW,GAAGd,CAAC;QAC9BU;MACF,CAAC;IACH,KAAK,OAAO;MACV,OAAO;QACL,GAAGb,CAAC;QACJkB,KAAK,EAAET,GAAG,CAACT,CAAC,CAACkB,KAAK,CAAC;QACnBC,GAAG,EAAEV,GAAG,CAACT,CAAC,CAACmB,GAAG,CAAC;QACfC,QAAQ,EAAEpB,CAAC,CAACoB,QAAQ,GAAGjB,CAAC;QACxBc,WAAW,EAAEjB,CAAC,CAACiB,WAAW,GAAGd,CAAC;QAC9BU;MACF,CAAC;IACH,KAAK,QAAQ;MAAE;QACb,MAAMQ,EAAE,GAAGZ,GAAG,CAAC;UAAEE,CAAC,EAAEX,CAAC,CAACsB,IAAI,CAACX,CAAC;UAAEC,CAAC,EAAEZ,CAAC,CAACsB,IAAI,CAACV;QAAE,CAAC,CAAC;QAC5C,OAAO;UACL,GAAGZ,CAAC;UACJsB,IAAI,EAAE;YACJX,CAAC,EAAEU,EAAE,CAACV,CAAC;YACPC,CAAC,EAAES,EAAE,CAACT,CAAC;YACPW,KAAK,EAAEvB,CAAC,CAACsB,IAAI,CAACC,KAAK,GAAGpB,CAAC;YACvBqB,MAAM,EAAExB,CAAC,CAACsB,IAAI,CAACE,MAAM,GAAGrB;UAC1B,CAAC;UACDU;QACF,CAAC;MACH;IACA,KAAK,UAAU;MACb,OAAO;QACL,GAAGb,CAAC;QACJyB,MAAM,EAAEzB,CAAC,CAACyB,MAAM,CAAChB,GAAG,CAACA,GAAG,CAAC;QACzBQ,WAAW,EAAEjB,CAAC,CAACiB,WAAW,GAAGd,CAAC;QAC9BU;MACF,CAAC;IACH,KAAK,MAAM;MACT,OAAO;QACL,GAAGb,CAAC;QACJI,MAAM,EAAEK,GAAG,CAACT,CAAC,CAACI,MAAM,CAAC;QACrBsB,QAAQ,EAAE1B,CAAC,CAAC0B,QAAQ,GAAGvB,CAAC;QACxBoB,KAAK,EAAEvB,CAAC,CAACuB,KAAK,GAAGpB,CAAC;QAClBU;MACF,CAAC;EACL;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.makeArrow = makeArrow;
|
|
7
|
+
exports.makeCircle = makeCircle;
|
|
8
|
+
exports.makeFreehand = makeFreehand;
|
|
9
|
+
exports.makeMarker = makeMarker;
|
|
10
|
+
exports.makeText = makeText;
|
|
11
|
+
var _constants = require("../constants");
|
|
12
|
+
var _id = require("../utils/id");
|
|
13
|
+
function makeCircle(center, radius, style) {
|
|
14
|
+
return {
|
|
15
|
+
id: (0, _id.genId)('circle'),
|
|
16
|
+
type: 'circle',
|
|
17
|
+
rotation: 0,
|
|
18
|
+
z: 0,
|
|
19
|
+
center,
|
|
20
|
+
radius,
|
|
21
|
+
strokeColor: style.strokeColor,
|
|
22
|
+
strokeWidth: style.strokeWidth
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function makeArrow(start, end, style) {
|
|
26
|
+
return {
|
|
27
|
+
id: (0, _id.genId)('arrow'),
|
|
28
|
+
type: 'arrow',
|
|
29
|
+
rotation: 0,
|
|
30
|
+
z: 0,
|
|
31
|
+
start,
|
|
32
|
+
end,
|
|
33
|
+
headSize: style.strokeWidth * _constants.ARROW_HEAD_RATIO,
|
|
34
|
+
strokeColor: style.strokeColor,
|
|
35
|
+
strokeWidth: style.strokeWidth
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function makeMarker(rect, color) {
|
|
39
|
+
return {
|
|
40
|
+
id: (0, _id.genId)('marker'),
|
|
41
|
+
type: 'marker',
|
|
42
|
+
rotation: 0,
|
|
43
|
+
z: 0,
|
|
44
|
+
rect,
|
|
45
|
+
color,
|
|
46
|
+
opacity: _constants.MARKER_OPACITY
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function makeFreehand(points, style) {
|
|
50
|
+
return {
|
|
51
|
+
id: (0, _id.genId)('freehand'),
|
|
52
|
+
type: 'freehand',
|
|
53
|
+
rotation: 0,
|
|
54
|
+
z: 0,
|
|
55
|
+
points,
|
|
56
|
+
strokeColor: style.strokeColor,
|
|
57
|
+
strokeWidth: style.strokeWidth
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function makeText(origin, color, fontSize = _constants.DEFAULT_FONT_SIZE) {
|
|
61
|
+
return {
|
|
62
|
+
id: (0, _id.genId)('text'),
|
|
63
|
+
type: 'text',
|
|
64
|
+
rotation: 0,
|
|
65
|
+
z: 0,
|
|
66
|
+
origin,
|
|
67
|
+
text: '',
|
|
68
|
+
color,
|
|
69
|
+
fontSize,
|
|
70
|
+
width: _constants.DEFAULT_TEXT_WIDTH
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=createAnnotation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_constants","require","_id","makeCircle","center","radius","style","id","genId","type","rotation","z","strokeColor","strokeWidth","makeArrow","start","end","headSize","ARROW_HEAD_RATIO","makeMarker","rect","color","opacity","MARKER_OPACITY","makeFreehand","points","makeText","origin","fontSize","DEFAULT_FONT_SIZE","text","width","DEFAULT_TEXT_WIDTH"],"sourceRoot":"..\\..\\..\\src","sources":["gestures/createAnnotation.ts"],"mappings":";;;;;;;;;;AAOA,IAAAA,UAAA,GAAAC,OAAA;AAMA,IAAAC,GAAA,GAAAD,OAAA;AAOO,SAASE,UAAUA,CACxBC,MAAY,EACZC,MAAc,EACdC,KAAgB,EACJ;EACZ,OAAO;IACLC,EAAE,EAAE,IAAAC,SAAK,EAAC,QAAQ,CAAC;IACnBC,IAAI,EAAE,QAAQ;IACdC,QAAQ,EAAE,CAAC;IACXC,CAAC,EAAE,CAAC;IACJP,MAAM;IACNC,MAAM;IACNO,WAAW,EAAEN,KAAK,CAACM,WAAW;IAC9BC,WAAW,EAAEP,KAAK,CAACO;EACrB,CAAC;AACH;AAEO,SAASC,SAASA,CAACC,KAAW,EAAEC,GAAS,EAAEV,KAAgB,EAAc;EAC9E,OAAO;IACLC,EAAE,EAAE,IAAAC,SAAK,EAAC,OAAO,CAAC;IAClBC,IAAI,EAAE,OAAO;IACbC,QAAQ,EAAE,CAAC;IACXC,CAAC,EAAE,CAAC;IACJI,KAAK;IACLC,GAAG;IACHC,QAAQ,EAAEX,KAAK,CAACO,WAAW,GAAGK,2BAAgB;IAC9CN,WAAW,EAAEN,KAAK,CAACM,WAAW;IAC9BC,WAAW,EAAEP,KAAK,CAACO;EACrB,CAAC;AACH;AAEO,SAASM,UAAUA,CAACC,IAAU,EAAEC,KAAkB,EAAc;EACrE,OAAO;IACLd,EAAE,EAAE,IAAAC,SAAK,EAAC,QAAQ,CAAC;IACnBC,IAAI,EAAE,QAAQ;IACdC,QAAQ,EAAE,CAAC;IACXC,CAAC,EAAE,CAAC;IACJS,IAAI;IACJC,KAAK;IACLC,OAAO,EAAEC;EACX,CAAC;AACH;AAEO,SAASC,YAAYA,CAACC,MAAc,EAAEnB,KAAgB,EAAc;EACzE,OAAO;IACLC,EAAE,EAAE,IAAAC,SAAK,EAAC,UAAU,CAAC;IACrBC,IAAI,EAAE,UAAU;IAChBC,QAAQ,EAAE,CAAC;IACXC,CAAC,EAAE,CAAC;IACJc,MAAM;IACNb,WAAW,EAAEN,KAAK,CAACM,WAAW;IAC9BC,WAAW,EAAEP,KAAK,CAACO;EACrB,CAAC;AACH;AAEO,SAASa,QAAQA,CACtBC,MAAY,EACZN,KAAkB,EAClBO,QAAQ,GAAGC,4BAAiB,EACZ;EAChB,OAAO;IACLtB,EAAE,EAAE,IAAAC,SAAK,EAAC,MAAM,CAAC;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAAC;IACXC,CAAC,EAAE,CAAC;IACJgB,MAAM;IACNG,IAAI,EAAE,EAAE;IACRT,KAAK;IACLO,QAAQ;IACRG,KAAK,EAAEC;EACT,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.selectionHandles = selectionHandles;
|
|
7
|
+
var _geometryPure = require("../annotations/geometryPure");
|
|
8
|
+
var _constants = require("../constants");
|
|
9
|
+
var _math = require("../utils/math");
|
|
10
|
+
/**
|
|
11
|
+
* Compute selection-box handle positions in SCREEN space for annotation `a`,
|
|
12
|
+
* accounting for its rotation and the current image→screen matrix. Worklet-safe
|
|
13
|
+
* (used by the transform gesture) and also callable from JS (SelectionOverlay).
|
|
14
|
+
*/
|
|
15
|
+
function selectionHandles(a, matrix) {
|
|
16
|
+
'worklet';
|
|
17
|
+
|
|
18
|
+
const b = (0, _geometryPure.annotationBounds)(a);
|
|
19
|
+
const center = (0, _geometryPure.annotationCenter)(a);
|
|
20
|
+
const localCorners = [{
|
|
21
|
+
x: b.x,
|
|
22
|
+
y: b.y
|
|
23
|
+
}, {
|
|
24
|
+
x: b.x + b.width,
|
|
25
|
+
y: b.y
|
|
26
|
+
}, {
|
|
27
|
+
x: b.x + b.width,
|
|
28
|
+
y: b.y + b.height
|
|
29
|
+
}, {
|
|
30
|
+
x: b.x,
|
|
31
|
+
y: b.y + b.height
|
|
32
|
+
}];
|
|
33
|
+
const screenCorners = localCorners.map(c => (0, _math.applyToPoint)(matrix, (0, _math.rotatePoint)(c, center, a.rotation)));
|
|
34
|
+
const centerScreen = (0, _math.applyToPoint)(matrix, center);
|
|
35
|
+
const topMid = {
|
|
36
|
+
x: (screenCorners[0].x + screenCorners[1].x) / 2,
|
|
37
|
+
y: (screenCorners[0].y + screenCorners[1].y) / 2
|
|
38
|
+
};
|
|
39
|
+
// Push the rotate handle outward from center along the top-edge direction.
|
|
40
|
+
const dx = topMid.x - centerScreen.x;
|
|
41
|
+
const dy = topMid.y - centerScreen.y;
|
|
42
|
+
const len = Math.hypot(dx, dy) || 1;
|
|
43
|
+
const rotate = {
|
|
44
|
+
x: topMid.x + dx / len * _constants.ROTATE_HANDLE_OFFSET,
|
|
45
|
+
y: topMid.y + dy / len * _constants.ROTATE_HANDLE_OFFSET
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
corners: screenCorners,
|
|
49
|
+
rotate,
|
|
50
|
+
center: centerScreen
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=handles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_geometryPure","require","_constants","_math","selectionHandles","a","matrix","b","annotationBounds","center","annotationCenter","localCorners","x","y","width","height","screenCorners","map","c","applyToPoint","rotatePoint","rotation","centerScreen","topMid","dx","dy","len","Math","hypot","rotate","ROTATE_HANDLE_OFFSET","corners"],"sourceRoot":"..\\..\\..\\src","sources":["gestures/handles.ts"],"mappings":";;;;;;AACA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAYA;AACA;AACA;AACA;AACA;AACO,SAASG,gBAAgBA,CAACC,CAAa,EAAEC,MAAW,EAAoB;EAC7E,SAAS;;EACT,MAAMC,CAAC,GAAG,IAAAC,8BAAgB,EAACH,CAAC,CAAC;EAC7B,MAAMI,MAAM,GAAG,IAAAC,8BAAgB,EAACL,CAAC,CAAC;EAClC,MAAMM,YAAoB,GAAG,CAC3B;IAAEC,CAAC,EAAEL,CAAC,CAACK,CAAC;IAAEC,CAAC,EAAEN,CAAC,CAACM;EAAE,CAAC,EAClB;IAAED,CAAC,EAAEL,CAAC,CAACK,CAAC,GAAGL,CAAC,CAACO,KAAK;IAAED,CAAC,EAAEN,CAAC,CAACM;EAAE,CAAC,EAC5B;IAAED,CAAC,EAAEL,CAAC,CAACK,CAAC,GAAGL,CAAC,CAACO,KAAK;IAAED,CAAC,EAAEN,CAAC,CAACM,CAAC,GAAGN,CAAC,CAACQ;EAAO,CAAC,EACvC;IAAEH,CAAC,EAAEL,CAAC,CAACK,CAAC;IAAEC,CAAC,EAAEN,CAAC,CAACM,CAAC,GAAGN,CAAC,CAACQ;EAAO,CAAC,CAC9B;EACD,MAAMC,aAAa,GAAGL,YAAY,CAACM,GAAG,CAAEC,CAAC,IACvC,IAAAC,kBAAY,EAACb,MAAM,EAAE,IAAAc,iBAAW,EAACF,CAAC,EAAET,MAAM,EAAEJ,CAAC,CAACgB,QAAQ,CAAC,CACzD,CAA6B;EAE7B,MAAMC,YAAY,GAAG,IAAAH,kBAAY,EAACb,MAAM,EAAEG,MAAM,CAAC;EACjD,MAAMc,MAAM,GAAG;IACbX,CAAC,EAAE,CAACI,aAAa,CAAC,CAAC,CAAC,CAACJ,CAAC,GAAGI,aAAa,CAAC,CAAC,CAAC,CAACJ,CAAC,IAAI,CAAC;IAChDC,CAAC,EAAE,CAACG,aAAa,CAAC,CAAC,CAAC,CAACH,CAAC,GAAGG,aAAa,CAAC,CAAC,CAAC,CAACH,CAAC,IAAI;EACjD,CAAC;EACD;EACA,MAAMW,EAAE,GAAGD,MAAM,CAACX,CAAC,GAAGU,YAAY,CAACV,CAAC;EACpC,MAAMa,EAAE,GAAGF,MAAM,CAACV,CAAC,GAAGS,YAAY,CAACT,CAAC;EACpC,MAAMa,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACJ,EAAE,EAAEC,EAAE,CAAC,IAAI,CAAC;EACnC,MAAMI,MAAM,GAAG;IACbjB,CAAC,EAAEW,MAAM,CAACX,CAAC,GAAIY,EAAE,GAAGE,GAAG,GAAII,+BAAoB;IAC/CjB,CAAC,EAAEU,MAAM,CAACV,CAAC,GAAIY,EAAE,GAAGC,GAAG,GAAII;EAC7B,CAAC;EAED,OAAO;IAAEC,OAAO,EAAEf,aAAa;IAAEa,MAAM;IAAEpB,MAAM,EAAEa;EAAa,CAAC;AACjE","ignoreList":[]}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.hitTest = hitTest;
|
|
7
|
+
var _geometryPure = require("../annotations/geometryPure");
|
|
8
|
+
var _math = require("../utils/math");
|
|
9
|
+
// NOTE: `hitOne` is declared BEFORE `hitTest`. The worklets Babel plugin rewrites
|
|
10
|
+
// `'worklet'` function declarations into `const`s (no hoisting), so a worklet that
|
|
11
|
+
// calls another must be defined after its callee.
|
|
12
|
+
function hitOne(a, p, slop) {
|
|
13
|
+
'worklet';
|
|
14
|
+
|
|
15
|
+
switch (a.type) {
|
|
16
|
+
case 'circle':
|
|
17
|
+
{
|
|
18
|
+
const d = Math.hypot(p.x - a.center.x, p.y - a.center.y);
|
|
19
|
+
if (a.fill !== undefined) {
|
|
20
|
+
return d <= a.radius + slop;
|
|
21
|
+
}
|
|
22
|
+
// Outline: hit near the ring.
|
|
23
|
+
return Math.abs(d - a.radius) <= slop + a.strokeWidth / 2;
|
|
24
|
+
}
|
|
25
|
+
case 'arrow':
|
|
26
|
+
return (0, _math.distanceToSegment)(p, a.start, a.end) <= slop + a.strokeWidth / 2;
|
|
27
|
+
case 'marker':
|
|
28
|
+
{
|
|
29
|
+
const r = a.rect;
|
|
30
|
+
return p.x >= r.x - slop && p.x <= r.x + r.width + slop && p.y >= r.y - slop && p.y <= r.y + r.height + slop;
|
|
31
|
+
}
|
|
32
|
+
case 'freehand':
|
|
33
|
+
{
|
|
34
|
+
const pts = a.points;
|
|
35
|
+
const tol = slop + a.strokeWidth / 2;
|
|
36
|
+
for (let i = 1; i < pts.length; i++) {
|
|
37
|
+
if ((0, _math.distanceToSegment)(p, pts[i - 1], pts[i]) <= tol) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return pts.length === 1 ? Math.hypot(p.x - pts[0].x, p.y - pts[0].y) <= tol : false;
|
|
42
|
+
}
|
|
43
|
+
case 'text':
|
|
44
|
+
{
|
|
45
|
+
const b = (0, _geometryPure.annotationBounds)(a);
|
|
46
|
+
return p.x >= b.x - slop && p.x <= b.x + b.width + slop && p.y >= b.y - slop && p.y <= b.y + b.height + slop;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Return the id of the top-most annotation hit by `point` (image space), or null.
|
|
53
|
+
* Worklet-safe so selection resolves on the UI thread during a tap.
|
|
54
|
+
*
|
|
55
|
+
* `slop` is an extra hit margin, in image pixels (screen slop / current scale).
|
|
56
|
+
*/
|
|
57
|
+
function hitTest(annotations, point, slop) {
|
|
58
|
+
'worklet';
|
|
59
|
+
|
|
60
|
+
// Iterate from top (highest z) to bottom.
|
|
61
|
+
const ordered = [...annotations].sort((a, b) => b.z - a.z);
|
|
62
|
+
for (let i = 0; i < ordered.length; i++) {
|
|
63
|
+
const a = ordered[i];
|
|
64
|
+
// Transform the touch into the annotation's local (unrotated) frame.
|
|
65
|
+
const local = a.rotation ? (0, _math.rotatePoint)(point, (0, _geometryPure.annotationCenter)(a), -a.rotation) : point;
|
|
66
|
+
if (hitOne(a, local, slop)) {
|
|
67
|
+
return a.id;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=hitTest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_geometryPure","require","_math","hitOne","a","p","slop","type","d","Math","hypot","x","center","y","fill","undefined","radius","abs","strokeWidth","distanceToSegment","start","end","r","rect","width","height","pts","points","tol","i","length","b","annotationBounds","hitTest","annotations","point","ordered","sort","z","local","rotation","rotatePoint","annotationCenter","id"],"sourceRoot":"..\\..\\..\\src","sources":["gestures/hitTest.ts"],"mappings":";;;;;;AACA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA,SAASE,MAAMA,CAACC,CAAa,EAAEC,CAAO,EAAEC,IAAY,EAAW;EAC7D,SAAS;;EACT,QAAQF,CAAC,CAACG,IAAI;IACZ,KAAK,QAAQ;MAAE;QACb,MAAMC,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACL,CAAC,CAACM,CAAC,GAAGP,CAAC,CAACQ,MAAM,CAACD,CAAC,EAAEN,CAAC,CAACQ,CAAC,GAAGT,CAAC,CAACQ,MAAM,CAACC,CAAC,CAAC;QACxD,IAAIT,CAAC,CAACU,IAAI,KAAKC,SAAS,EAAE;UACxB,OAAOP,CAAC,IAAIJ,CAAC,CAACY,MAAM,GAAGV,IAAI;QAC7B;QACA;QACA,OAAOG,IAAI,CAACQ,GAAG,CAACT,CAAC,GAAGJ,CAAC,CAACY,MAAM,CAAC,IAAIV,IAAI,GAAGF,CAAC,CAACc,WAAW,GAAG,CAAC;MAC3D;IACA,KAAK,OAAO;MACV,OAAO,IAAAC,uBAAiB,EAACd,CAAC,EAAED,CAAC,CAACgB,KAAK,EAAEhB,CAAC,CAACiB,GAAG,CAAC,IAAIf,IAAI,GAAGF,CAAC,CAACc,WAAW,GAAG,CAAC;IACzE,KAAK,QAAQ;MAAE;QACb,MAAMI,CAAC,GAAGlB,CAAC,CAACmB,IAAI;QAChB,OACElB,CAAC,CAACM,CAAC,IAAIW,CAAC,CAACX,CAAC,GAAGL,IAAI,IACjBD,CAAC,CAACM,CAAC,IAAIW,CAAC,CAACX,CAAC,GAAGW,CAAC,CAACE,KAAK,GAAGlB,IAAI,IAC3BD,CAAC,CAACQ,CAAC,IAAIS,CAAC,CAACT,CAAC,GAAGP,IAAI,IACjBD,CAAC,CAACQ,CAAC,IAAIS,CAAC,CAACT,CAAC,GAAGS,CAAC,CAACG,MAAM,GAAGnB,IAAI;MAEhC;IACA,KAAK,UAAU;MAAE;QACf,MAAMoB,GAAG,GAAGtB,CAAC,CAACuB,MAAM;QACpB,MAAMC,GAAG,GAAGtB,IAAI,GAAGF,CAAC,CAACc,WAAW,GAAG,CAAC;QACpC,KAAK,IAAIW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,GAAG,CAACI,MAAM,EAAED,CAAC,EAAE,EAAE;UACnC,IAAI,IAAAV,uBAAiB,EAACd,CAAC,EAAEqB,GAAG,CAACG,CAAC,GAAG,CAAC,CAAC,EAAGH,GAAG,CAACG,CAAC,CAAE,CAAC,IAAID,GAAG,EAAE;YACrD,OAAO,IAAI;UACb;QACF;QACA,OAAOF,GAAG,CAACI,MAAM,KAAK,CAAC,GACnBrB,IAAI,CAACC,KAAK,CAACL,CAAC,CAACM,CAAC,GAAGe,GAAG,CAAC,CAAC,CAAC,CAAEf,CAAC,EAAEN,CAAC,CAACQ,CAAC,GAAGa,GAAG,CAAC,CAAC,CAAC,CAAEb,CAAC,CAAC,IAAIe,GAAG,GACnD,KAAK;MACX;IACA,KAAK,MAAM;MAAE;QACX,MAAMG,CAAC,GAAG,IAAAC,8BAAgB,EAAC5B,CAAC,CAAC;QAC7B,OACEC,CAAC,CAACM,CAAC,IAAIoB,CAAC,CAACpB,CAAC,GAAGL,IAAI,IACjBD,CAAC,CAACM,CAAC,IAAIoB,CAAC,CAACpB,CAAC,GAAGoB,CAAC,CAACP,KAAK,GAAGlB,IAAI,IAC3BD,CAAC,CAACQ,CAAC,IAAIkB,CAAC,CAAClB,CAAC,GAAGP,IAAI,IACjBD,CAAC,CAACQ,CAAC,IAAIkB,CAAC,CAAClB,CAAC,GAAGkB,CAAC,CAACN,MAAM,GAAGnB,IAAI;MAEhC;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS2B,OAAOA,CACrBC,WAAyB,EACzBC,KAAW,EACX7B,IAAY,EACG;EACf,SAAS;;EACT;EACA,MAAM8B,OAAO,GAAG,CAAC,GAAGF,WAAW,CAAC,CAACG,IAAI,CAAC,CAACjC,CAAC,EAAE2B,CAAC,KAAKA,CAAC,CAACO,CAAC,GAAGlC,CAAC,CAACkC,CAAC,CAAC;EAC1D,KAAK,IAAIT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,OAAO,CAACN,MAAM,EAAED,CAAC,EAAE,EAAE;IACvC,MAAMzB,CAAC,GAAGgC,OAAO,CAACP,CAAC,CAAE;IACrB;IACA,MAAMU,KAAK,GAAGnC,CAAC,CAACoC,QAAQ,GACpB,IAAAC,iBAAW,EAACN,KAAK,EAAE,IAAAO,8BAAgB,EAACtC,CAAC,CAAC,EAAE,CAACA,CAAC,CAACoC,QAAQ,CAAC,GACpDL,KAAK;IACT,IAAIhC,MAAM,CAACC,CAAC,EAAEmC,KAAK,EAAEjC,IAAI,CAAC,EAAE;MAC1B,OAAOF,CAAC,CAACuC,EAAE;IACb;EACF;EACA,OAAO,IAAI;AACb","ignoreList":[]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useCropGesture = useCropGesture;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNativeGestureHandler = require("react-native-gesture-handler");
|
|
9
|
+
var _reactNativeReanimated = require("react-native-reanimated");
|
|
10
|
+
var _EditorContext = require("../context/EditorContext");
|
|
11
|
+
var _constants = require("../constants");
|
|
12
|
+
var _math = require("../utils/math");
|
|
13
|
+
const MIN_CROP = 24; // minimum crop size, in image pixels
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Pan gesture that edits `cropRectSV` (image space) while the crop tool is
|
|
17
|
+
* active. Grab a corner to resize, or the interior to move. All values stay
|
|
18
|
+
* clamped inside the image bounds.
|
|
19
|
+
*/
|
|
20
|
+
function useCropGesture() {
|
|
21
|
+
const {
|
|
22
|
+
tool,
|
|
23
|
+
matrix,
|
|
24
|
+
cropRectSV,
|
|
25
|
+
imageSize
|
|
26
|
+
} = (0, _EditorContext.useEditor)();
|
|
27
|
+
const invMatrix = (0, _react.useMemo)(() => (0, _math.invert)(matrix), [matrix]);
|
|
28
|
+
const cropMode = (0, _reactNativeReanimated.useSharedValue)('none');
|
|
29
|
+
const corner = (0, _reactNativeReanimated.useSharedValue)(-1);
|
|
30
|
+
const startRect = (0, _reactNativeReanimated.useSharedValue)({
|
|
31
|
+
x: 0,
|
|
32
|
+
y: 0,
|
|
33
|
+
width: 0,
|
|
34
|
+
height: 0
|
|
35
|
+
});
|
|
36
|
+
const startImg = (0, _reactNativeReanimated.useSharedValue)({
|
|
37
|
+
x: 0,
|
|
38
|
+
y: 0
|
|
39
|
+
});
|
|
40
|
+
return (0, _react.useMemo)(() => {
|
|
41
|
+
return _reactNativeGestureHandler.Gesture.Pan().enabled(tool === 'crop').maxPointers(1).onBegin(e => {
|
|
42
|
+
'worklet';
|
|
43
|
+
|
|
44
|
+
const screen = {
|
|
45
|
+
x: e.x,
|
|
46
|
+
y: e.y
|
|
47
|
+
};
|
|
48
|
+
const img = (0, _math.applyToPoint)(invMatrix, screen);
|
|
49
|
+
const r = cropRectSV.value;
|
|
50
|
+
startRect.value = r;
|
|
51
|
+
startImg.value = img;
|
|
52
|
+
const corners = [{
|
|
53
|
+
x: r.x,
|
|
54
|
+
y: r.y
|
|
55
|
+
}, {
|
|
56
|
+
x: r.x + r.width,
|
|
57
|
+
y: r.y
|
|
58
|
+
}, {
|
|
59
|
+
x: r.x + r.width,
|
|
60
|
+
y: r.y + r.height
|
|
61
|
+
}, {
|
|
62
|
+
x: r.x,
|
|
63
|
+
y: r.y + r.height
|
|
64
|
+
}];
|
|
65
|
+
for (let i = 0; i < corners.length; i++) {
|
|
66
|
+
const cs = (0, _math.applyToPoint)(matrix, corners[i]);
|
|
67
|
+
if ((0, _math.distance)(screen, cs) <= _constants.HANDLE_SIZE * 1.5) {
|
|
68
|
+
cropMode.value = 'resize';
|
|
69
|
+
corner.value = i;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (img.x >= r.x && img.x <= r.x + r.width && img.y >= r.y && img.y <= r.y + r.height) {
|
|
74
|
+
cropMode.value = 'move';
|
|
75
|
+
} else {
|
|
76
|
+
cropMode.value = 'none';
|
|
77
|
+
}
|
|
78
|
+
}).onChange(e => {
|
|
79
|
+
'worklet';
|
|
80
|
+
|
|
81
|
+
const img = (0, _math.applyToPoint)(invMatrix, {
|
|
82
|
+
x: e.x,
|
|
83
|
+
y: e.y
|
|
84
|
+
});
|
|
85
|
+
const dx = img.x - startImg.value.x;
|
|
86
|
+
const dy = img.y - startImg.value.y;
|
|
87
|
+
const s = startRect.value;
|
|
88
|
+
if (cropMode.value === 'move') {
|
|
89
|
+
let nx = s.x + dx;
|
|
90
|
+
let ny = s.y + dy;
|
|
91
|
+
nx = Math.max(0, Math.min(nx, imageSize.width - s.width));
|
|
92
|
+
ny = Math.max(0, Math.min(ny, imageSize.height - s.height));
|
|
93
|
+
cropRectSV.value = {
|
|
94
|
+
x: nx,
|
|
95
|
+
y: ny,
|
|
96
|
+
width: s.width,
|
|
97
|
+
height: s.height
|
|
98
|
+
};
|
|
99
|
+
} else if (cropMode.value === 'resize') {
|
|
100
|
+
// Fixed corner = the one opposite the grabbed corner.
|
|
101
|
+
const left = s.x;
|
|
102
|
+
const top = s.y;
|
|
103
|
+
const right = s.x + s.width;
|
|
104
|
+
const bottom = s.y + s.height;
|
|
105
|
+
let x0 = left;
|
|
106
|
+
let y0 = top;
|
|
107
|
+
let x1 = right;
|
|
108
|
+
let y1 = bottom;
|
|
109
|
+
switch (corner.value) {
|
|
110
|
+
case 0:
|
|
111
|
+
// TL moves
|
|
112
|
+
x0 = Math.min(right - MIN_CROP, Math.max(0, left + dx));
|
|
113
|
+
y0 = Math.min(bottom - MIN_CROP, Math.max(0, top + dy));
|
|
114
|
+
break;
|
|
115
|
+
case 1:
|
|
116
|
+
// TR moves
|
|
117
|
+
x1 = Math.max(left + MIN_CROP, Math.min(imageSize.width, right + dx));
|
|
118
|
+
y0 = Math.min(bottom - MIN_CROP, Math.max(0, top + dy));
|
|
119
|
+
break;
|
|
120
|
+
case 2:
|
|
121
|
+
// BR moves
|
|
122
|
+
x1 = Math.max(left + MIN_CROP, Math.min(imageSize.width, right + dx));
|
|
123
|
+
y1 = Math.max(top + MIN_CROP, Math.min(imageSize.height, bottom + dy));
|
|
124
|
+
break;
|
|
125
|
+
case 3:
|
|
126
|
+
// BL moves
|
|
127
|
+
x0 = Math.min(right - MIN_CROP, Math.max(0, left + dx));
|
|
128
|
+
y1 = Math.max(top + MIN_CROP, Math.min(imageSize.height, bottom + dy));
|
|
129
|
+
break;
|
|
130
|
+
default:
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
cropRectSV.value = {
|
|
134
|
+
x: x0,
|
|
135
|
+
y: y0,
|
|
136
|
+
width: x1 - x0,
|
|
137
|
+
height: y1 - y0
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}).onEnd(() => {
|
|
141
|
+
'worklet';
|
|
142
|
+
|
|
143
|
+
cropMode.value = 'none';
|
|
144
|
+
corner.value = -1;
|
|
145
|
+
});
|
|
146
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
147
|
+
}, [tool, matrix, imageSize]);
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=useCropGesture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNativeGestureHandler","_reactNativeReanimated","_EditorContext","_constants","_math","MIN_CROP","useCropGesture","tool","matrix","cropRectSV","imageSize","useEditor","invMatrix","useMemo","invert","cropMode","useSharedValue","corner","startRect","x","y","width","height","startImg","Gesture","Pan","enabled","maxPointers","onBegin","e","screen","img","applyToPoint","r","value","corners","i","length","cs","distance","HANDLE_SIZE","onChange","dx","dy","s","nx","ny","Math","max","min","left","top","right","bottom","x0","y0","x1","y1","onEnd"],"sourceRoot":"..\\..\\..\\src","sources":["gestures/useCropGesture.ts"],"mappings":"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","ignoreList":[]}
|