aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/InkingCanvas.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/InkingCanvas.tsx')
-rw-r--r--src/client/views/InkingCanvas.tsx35
1 files changed, 28 insertions, 7 deletions
diff --git a/src/client/views/InkingCanvas.tsx b/src/client/views/InkingCanvas.tsx
index 0037b95d0..5c17696c8 100644
--- a/src/client/views/InkingCanvas.tsx
+++ b/src/client/views/InkingCanvas.tsx
@@ -10,6 +10,8 @@ import { UndoManager } from "../util/UndoManager";
import { StrokeData, InkField, InkTool } from "../../new_fields/InkField";
import { Doc } from "../../new_fields/Doc";
import { Cast, PromiseValue, NumCast } from "../../new_fields/Types";
+import { Touchable } from "./Touchable";
+import { InteractionUtils } from "../util/InteractionUtils";
interface InkCanvasProps {
getScreenTransform: () => Transform;
@@ -20,7 +22,7 @@ interface InkCanvasProps {
}
@observer
-export class InkingCanvas extends React.Component<InkCanvasProps> {
+export class InkingCanvas extends Touchable<InkCanvasProps> {
maxCanvasDim = 8192 / 2; // 1/2 of the maximum canvas dimension for Chrome
@observable inkMidX: number = 0;
@observable inkMidY: number = 0;
@@ -95,6 +97,18 @@ export class InkingCanvas extends React.Component<InkCanvasProps> {
}
@action
+ handle1PointerMove = (e: TouchEvent) => {
+ e.stopPropagation();
+ e.preventDefault();
+ let pointer = e.targetTouches.item(0);
+ if (pointer) {
+ this.handleMove(pointer.clientX, pointer.clientY);
+ }
+ }
+
+ handle2PointersMove = () => { }
+
+ @action
onPointerUp = (e: PointerEvent): void => {
document.removeEventListener("pointermove", this.onPointerMove, true);
document.removeEventListener("pointerup", this.onPointerUp, true);
@@ -117,21 +131,28 @@ export class InkingCanvas extends React.Component<InkCanvasProps> {
batch.end();
}
- @action
- onPointerMove = (e: PointerEvent): void => {
- e.stopPropagation();
- e.preventDefault();
+ handleMove = (x: number, y: number) => {
if (InkingControl.Instance.selectedTool !== InkTool.Eraser && InkingControl.Instance.selectedTool !== InkTool.Scrubber) {
let data = this.inkData; // add points to new line as it is being drawn
let strokeData = data.get(this._currentStrokeId);
if (strokeData) {
- strokeData.pathData.push(this.relativeCoordinatesForEvent(e.clientX, e.clientY));
+ strokeData.pathData.push(this.relativeCoordinatesForEvent(x, y));
data.set(this._currentStrokeId, strokeData);
}
this.inkData = data;
}
}
+ @action
+ onPointerMove = (e: PointerEvent): void => {
+ if (InteractionUtils.IsType(e, InteractionUtils.TOUCH)) {
+ return;
+ }
+ e.stopPropagation();
+ e.preventDefault();
+ this.handleMove(e.clientX, e.clientY);
+ }
+
relativeCoordinatesForEvent = (ex: number, ey: number): { x: number, y: number } => {
let [x, y] = this.props.getScreenTransform().transformPoint(ex, ey);
return { x, y };
@@ -187,7 +208,7 @@ export class InkingCanvas extends React.Component<InkCanvasProps> {
InkingControl.Instance.selectedTool === InkTool.Scrubber ? "pointer" : "default") : undefined;
return (
<div className="inkingCanvas">
- <div className={`inkingCanvas-${svgCanvasStyle}`} onPointerDown={this.onPointerDown} style={{ cursor: cursor }} />
+ <div className={`inkingCanvas-${svgCanvasStyle}`} onPointerDown={this.onPointerDown} onTouchStart={this.onTouchStart} style={{ cursor: cursor }} />
{this.props.children()}
{this.drawnPaths}
</div >