aboutsummaryrefslogtreecommitdiff
path: root/src/fields/InkField.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2024-05-17 14:55:36 -0400
committerbobzel <zzzman@gmail.com>2024-05-17 14:55:36 -0400
commit0b451af28e5aef6b749da61e8a9fcd0a840789ac (patch)
treebdee4e28ee4715b69299a8da1b615c70b6adc445 /src/fields/InkField.ts
parent8c1b420a143e4b72ec551277887c211ca6ca003b (diff)
parent38a382a03675d6a50ec7de75f05025efd093f570 (diff)
merged with new master
Diffstat (limited to 'src/fields/InkField.ts')
-rw-r--r--src/fields/InkField.ts22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/fields/InkField.ts b/src/fields/InkField.ts
index b3e01229a..46704eb2b 100644
--- a/src/fields/InkField.ts
+++ b/src/fields/InkField.ts
@@ -2,6 +2,7 @@ import { Bezier } from 'bezier-js';
import { alias, createSimpleSchema, list, object, serializable } from 'serializr';
import { ScriptingGlobals } from '../client/util/ScriptingGlobals';
import { Deserializable } from '../client/util/SerializationHelper';
+import { PointData } from '../pen-gestures/GestureTypes';
import { Copy, ToJavascriptString, ToScriptString, ToString } from './FieldSymbols';
import { ObjectField } from './ObjectField';
@@ -16,12 +17,6 @@ export enum InkTool {
PresentationPin = 'presentationpin',
}
-// Defines a point in an ink as a pair of x- and y-coordinates.
-export interface PointData {
- X: number;
- Y: number;
-}
-
export type Segment = Array<Bezier>;
// Defines an ink as an array of points.
@@ -62,10 +57,10 @@ const strokeDataSchema = createSimpleSchema({
'*': true,
});
+export const InkDataFieldName = '__inkData';
@Deserializable('ink')
export class InkField extends ObjectField {
- public static InkDataFieldName = '__inkData';
- @serializable(alias(InkField.InkDataFieldName, list(object(strokeDataSchema))))
+ @serializable(alias(InkDataFieldName, list(object(strokeDataSchema))))
readonly inkData: InkData;
constructor(data: InkData) {
@@ -94,6 +89,17 @@ export class InkField extends ObjectField {
[ToString]() {
return 'InkField';
}
+
+ public static getBounds(stroke: InkData, pad?: boolean) {
+ const padding = pad ? [-20000, 20000] : [];
+ const xs = [...padding, ...stroke.map(p => p.X)];
+ const ys = [...padding, ...stroke.map(p => p.Y)];
+ const right = Math.max(...xs);
+ const left = Math.min(...xs);
+ const bottom = Math.max(...ys);
+ const top = Math.min(...ys);
+ return { right, left, bottom, top, width: right - left, height: bottom - top };
+ }
}
ScriptingGlobals.add('InkField', InkField);