aboutsummaryrefslogtreecommitdiff
path: root/src/mobile/MobileInkOverlay.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/mobile/MobileInkOverlay.tsx')
-rw-r--r--src/mobile/MobileInkOverlay.tsx91
1 files changed, 78 insertions, 13 deletions
diff --git a/src/mobile/MobileInkOverlay.tsx b/src/mobile/MobileInkOverlay.tsx
index 71dd20c51..5efc7b83a 100644
--- a/src/mobile/MobileInkOverlay.tsx
+++ b/src/mobile/MobileInkOverlay.tsx
@@ -1,8 +1,9 @@
import React = require('react');
import { observer } from "mobx-react";
-import { MobileInkBoxContent, GestureContent } from "../server/Message";
+import { MobileInkOverlayContent, GestureContent, UpdateMobileInkOverlayPosition } from "../server/Message";
import { observable, action } from "mobx";
import { GestureUtils } from "../pen-gestures/GestureUtils";
+import "./MobileInkOverlay.scss";
@observer
@@ -15,6 +16,11 @@ export default class MobileInkOverlay extends React.Component {
@observable private _x: number = -300;
@observable private _y: number = -300;
+ @observable private _offsetX: number = 0;
+ @observable private _offsetY: number = 0;
+ @observable private _isDragging: boolean = false;
+ private _mainCont: React.RefObject<HTMLDivElement> = React.createRef();
+
constructor(props: Readonly<{}>) {
super(props);
MobileInkOverlay.Instance = this;
@@ -28,18 +34,27 @@ export default class MobileInkOverlay extends React.Component {
}
@action
- initMobileInkOverlay(content: MobileInkBoxContent) {
+ initMobileInkOverlay(content: MobileInkOverlayContent) {
const { width, height } = content;
const scaledSize = this.initialSize(width ? width : 0, height ? height : 0);
- this._width = scaledSize.width;
- this._height = scaledSize.height;
- this._scale = scaledSize.scale;
+ this._width = scaledSize.width * .5;
+ this._height = scaledSize.height * .5;
+ this._scale = .5; //scaledSize.scale;
this._x = 300; // TODO: center on screen
this._y = 25; // TODO: center on screen
}
+ @action
+ updatePosition(content: UpdateMobileInkOverlayPosition) {
+ const { dx, dy, dsize } = content;
+ console.log(dx, dy, dsize);
+ }
+
drawStroke = (content: GestureContent) => {
+ // TODO: figure out why strokes drawn in corner of mobile interface dont get inserted
+
const { points, bounds } = content;
+ console.log("received points", points, bounds);
const B = {
right: (bounds.right * this._scale) + this._x,
@@ -65,16 +80,66 @@ export default class MobileInkOverlay extends React.Component {
);
}
+ @action
+ dragStart = (e: React.PointerEvent) => {
+ console.log("pointer down");
+ document.removeEventListener("pointermove", this.dragging);
+ document.removeEventListener("pointerup", this.dragEnd);
+ document.addEventListener("pointermove", this.dragging);
+ document.addEventListener("pointerup", this.dragEnd);
+
+ this._isDragging = true;
+ this._offsetX = e.pageX - this._mainCont.current!.getBoundingClientRect().left;
+ this._offsetY = e.pageY - this._mainCont.current!.getBoundingClientRect().top;
+
+ e.preventDefault();
+ e.stopPropagation();
+ }
+
+ @action
+ dragging = (e: PointerEvent) => {
+ const x = e.pageX - this._offsetX;
+ const y = e.pageY - this._offsetY;
+
+ // TODO: don't allow drag over library?
+ this._x = Math.min(Math.max(x, 0), window.innerWidth - this._width);
+ this._y = Math.min(Math.max(y, 0), window.innerHeight - this._height);
+
+ e.preventDefault();
+ e.stopPropagation();
+ }
+
+ @action
+ dragEnd = (e: PointerEvent) => {
+ document.removeEventListener("pointermove", this.dragging);
+ document.removeEventListener("pointerup", this.dragEnd);
+
+ this._isDragging = false;
+
+ e.preventDefault();
+ e.stopPropagation();
+ }
+
render() {
+
return (
- <div className="mobileInkOverlay" style={{
- width: this._width,
- height: this._height,
- position: "absolute",
- transform: `translate(${this._x}px, ${this._y}px)`,
- zIndex: 30000,
- pointerEvents: "none"
- }}></div>
+ <div className="mobileInkOverlay"
+ style={{
+ width: this._width,
+ height: this._height,
+ position: "absolute",
+ transform: `translate(${this._x}px, ${this._y}px)`,
+ zIndex: 30000,
+ pointerEvents: "none",
+ borderStyle: this._isDragging ? "solid" : "dashed"
+ }}
+ ref={this._mainCont}
+ >
+ <div className="mobileInkOverlay-border top" onPointerDown={this.dragStart}></div>
+ <div className="mobileInkOverlay-border bottom" onPointerDown={this.dragStart}></div>
+ <div className="mobileInkOverlay-border left" onPointerDown={this.dragStart}></div>
+ <div className="mobileInkOverlay-border right" onPointerDown={this.dragStart}></div>
+ </div>
);
}
} \ No newline at end of file