aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/InkingStroke.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/InkingStroke.tsx')
-rw-r--r--src/client/views/InkingStroke.tsx44
1 files changed, 26 insertions, 18 deletions
diff --git a/src/client/views/InkingStroke.tsx b/src/client/views/InkingStroke.tsx
index 8e3f72cee..4a77728b6 100644
--- a/src/client/views/InkingStroke.tsx
+++ b/src/client/views/InkingStroke.tsx
@@ -18,6 +18,8 @@ import { Doc } from "../../fields/Doc";
import FormatShapePane from "./collections/collectionFreeForm/FormatShapePane";
import { action } from "mobx";
import { setupMoveUpEvents } from "../../Utils";
+import { undoBatch, UndoManager } from "../util/UndoManager";
+
library.add(faPaintBrush);
@@ -26,8 +28,12 @@ const InkDocument = makeInterface(documentSchema);
@observer
export class InkingStroke extends ViewBoxBaseComponent<FieldViewProps, InkDocument>(InkDocument) {
+ private _controlUndo?: UndoManager.Batch;
+
public static LayoutString(fieldStr: string) { return FieldView.LayoutString(InkingStroke, fieldStr); }
+
+
private analyzeStrokes = () => {
const data: InkData = Cast(this.dataDoc[this.fieldKey], InkField)?.inkData ?? [];
CognitiveServices.Inking.Appliers.ConcatenateHandwriting(this.dataDoc, ["inkAnalysis", "handwriting"], [data]);
@@ -52,6 +58,7 @@ export class InkingStroke extends ViewBoxBaseComponent<FieldViewProps, InkDocume
@action
onControlDown = (e: React.PointerEvent, i: number): void => {
setupMoveUpEvents(this, e, this.onControlMove, this.onControlup, (e) => { });
+ this._controlUndo = UndoManager.StartBatch("DocDecs set radius");
this._prevX = e.clientX;
this._prevY = e.clientY;
this._controlNum = i;
@@ -76,6 +83,8 @@ export class InkingStroke extends ViewBoxBaseComponent<FieldViewProps, InkDocume
this._prevX = 0;
this._prevY = 0;
this._controlNum = 0;
+ this._controlUndo?.end();
+ this._controlUndo = undefined;
}
public static MaskDim = 50000;
@@ -90,10 +99,10 @@ export class InkingStroke extends ViewBoxBaseComponent<FieldViewProps, InkDocume
const top = Math.min(...ys) - strokeWidth / 2;
const right = Math.max(...xs) + strokeWidth / 2;
const bottom = Math.max(...ys) + strokeWidth / 2;
- const width = right - left;
- const height = bottom - top;
- const scaleX = (this.props.PanelWidth() - strokeWidth) / (width - strokeWidth);
- const scaleY = (this.props.PanelHeight() - strokeWidth) / (height - strokeWidth);
+ const width = Math.max(right - left);
+ const height = Math.max(1, bottom - top);
+ const scaleX = width === strokeWidth ? 1 : (this.props.PanelWidth() - strokeWidth) / (width - strokeWidth);
+ const scaleY = height === strokeWidth ? 1 : (this.props.PanelHeight() - strokeWidth) / (height - strokeWidth);
const strokeColor = StrCast(this.layoutDoc.color, "");
const points = InteractionUtils.CreatePolyline(data, left, top, strokeColor, strokeWidth, strokeWidth,
@@ -106,9 +115,9 @@ export class InkingStroke extends ViewBoxBaseComponent<FieldViewProps, InkDocume
StrCast(this.layoutDoc.strokeBezier), StrCast(this.layoutDoc.fillColor, "transparent"),
"none", "none", "0", scaleX, scaleY, "", this.props.active() ? "visiblepainted" : "none", false, true);
- var controlPoints: { X: number, Y: number, I: number }[] = [];
- var handlePoints: { X: number, Y: number, I: number, dot1: number, dot2: number }[] = [];
- var handleLine: { X1: number, Y1: number, X2: number, Y2: number, X3: number, Y3: number, dot1: number, dot2: number }[] = [];
+ const controlPoints: { X: number, Y: number, I: number }[] = [];
+ const handlePoints: { X: number, Y: number, I: number, dot1: number, dot2: number }[] = [];
+ const handleLine: { X1: number, Y1: number, X2: number, Y2: number, X3: number, Y3: number, dot1: number, dot2: number }[] = [];
if (data.length >= 4) {
for (var i = 0; i <= data.length - 4; i += 4) {
controlPoints.push({ X: data[i].X, Y: data[i].Y, I: i });
@@ -125,18 +134,17 @@ export class InkingStroke extends ViewBoxBaseComponent<FieldViewProps, InkDocume
}
handleLine.push({ X1: data[data.length - 2].X, Y1: data[data.length - 2].Y, X2: data[data.length - 1].X, Y2: data[data.length - 1].Y, X3: data[data.length - 1].X, Y3: data[data.length - 1].Y, dot1: data.length - 1, dot2: data.length - 1 });
-
- }
- if (data.length <= 4) {
- handlePoints = [];
- handleLine = [];
- controlPoints = [];
- for (var i = 0; i < data.length; i++) {
- controlPoints.push({ X: data[i].X, Y: data[i].Y, I: i });
- }
-
}
- const dotsize = String(Math.min(width * scaleX, height * scaleY) / 40);
+ // if (data.length <= 4) {
+ // handlePoints = [];
+ // handleLine = [];
+ // controlPoints = [];
+ // for (var i = 0; i < data.length; i++) {
+ // controlPoints.push({ X: data[i].X, Y: data[i].Y, I: i });
+ // }
+
+ // }
+ const dotsize = String(Math.max(width * scaleX, height * scaleY) / 40);
const controls = controlPoints.map((pts, i) =>