aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/util/DragManager.ts2
-rw-r--r--src/views/freeformcanvas/CollectionFreeFormView.tsx25
-rw-r--r--src/views/nodes/DocumentView.tsx34
3 files changed, 32 insertions, 29 deletions
diff --git a/src/util/DragManager.ts b/src/util/DragManager.ts
index da4537845..e523408a3 100644
--- a/src/util/DragManager.ts
+++ b/src/util/DragManager.ts
@@ -14,8 +14,6 @@ export namespace DragManager {
interface DragOptions {
handlers: DragHandlers;
- buttons: number;
-
hideSource: boolean | (() => boolean);
}
diff --git a/src/views/freeformcanvas/CollectionFreeFormView.tsx b/src/views/freeformcanvas/CollectionFreeFormView.tsx
index fc473f0a6..437db7493 100644
--- a/src/views/freeformcanvas/CollectionFreeFormView.tsx
+++ b/src/views/freeformcanvas/CollectionFreeFormView.tsx
@@ -120,34 +120,11 @@ export class CollectionFreeFormView extends React.Component<IProps> {
}
}
-
- private getLocalPoint(me: DocumentView, inputX: number, inputY: number) {
- let ContainerX = inputX;
- let ContainerY = inputY;
- if (me.props.ContainingDocumentView != undefined) {
- let pme = me.props.ContainingDocumentView!;
- let {LocalX, LocalY} = this.getLocalPoint(pme, ContainerX, ContainerY);
- ContainerX = LocalX;
- ContainerY = LocalY;
- }
-
- let W = me.props.Document.GetFieldValue(KeyStore.Width, NumberField, Number(0));
- let Xx = me.props.Document.GetFieldValue(KeyStore.X, NumberField, Number(0));
- let Yy = me.props.Document.GetFieldValue(KeyStore.Y, NumberField, Number(0));
- let Ss = me.props.Document.GetFieldValue(KeyStore.Scale, NumberField, Number(1));
- let Panxx = me.props.Document.GetFieldValue(KeyStore.PanX, NumberField, Number(0));
- let Panyy = me.props.Document.GetFieldValue(KeyStore.PanY, NumberField, Number(0));
- let LocalX = W / 2 - (Xx + Panxx) / Ss + (ContainerX - W / 2) / Ss;
- let LocalY = -(Yy + Panyy) / Ss + ContainerY / Ss;
-
- return {LocalX, Ss, W, Panxx, Xx, LocalY, Panyy, Yy, ContainerX, ContainerY};
- }
-
@action
onPointerWheel = (e: React.WheelEvent): void => {
e.stopPropagation();
- let {LocalX, Ss, W, Panxx, Xx, LocalY, Panyy, Yy, ContainerX, ContainerY} = this.getLocalPoint(this.props.ContainingDocumentView!, e.pageX, e.pageY);
+ let {LocalX, Ss, W, Panxx, Xx, LocalY, Panyy, Yy, ContainerX, ContainerY} = this.props.ContainingDocumentView!.TransformToLocalPoint(e.pageX, e.pageY);
var deltaScale = (1 - (e.deltaY / 1000)) * Ss;
diff --git a/src/views/nodes/DocumentView.tsx b/src/views/nodes/DocumentView.tsx
index da2768bbe..8250d5405 100644
--- a/src/views/nodes/DocumentView.tsx
+++ b/src/views/nodes/DocumentView.tsx
@@ -69,6 +69,8 @@ class DocumentContents extends React.Component<IProps> {
export class DocumentView extends React.Component<IProps> {
private _mainCont = React.createRef<HTMLDivElement>();
private _contextMenuCanOpen = false;
+ private _downX: number = 0;
+ private _downY: number = 0;
get screenRect(): ClientRect | DOMRect {
if (this._mainCont.current) {
@@ -117,6 +119,7 @@ export class DocumentView extends React.Component<IProps> {
set height(h: number) {
this.props.Document.SetFieldValue(KeyStore.Height, h, NumberField)
}
+
@action
dragComplete = (e: DragManager.DragCompleteEvent) => {
}
@@ -126,8 +129,34 @@ export class DocumentView extends React.Component<IProps> {
return SelectionManager.IsSelected(this) || this.props.ContainingCollectionView === undefined || this.props.ContainingCollectionView!.active;
}
- private _downX: number = 0;
- private _downY: number = 0;
+ //
+ // Converts an input coordinate in application's screen space
+ // into a coordinate in the space of this document.
+ // NOTE: this is intended for use on DocumentViews that are CollectionFreeFormViews
+ //
+ public TransformToLocalPoint(screenX: number, screenY: number) {
+ let ContainerX = screenX;
+ let ContainerY = screenY;
+ // if this collection view is nested within another collection view, then
+ // first transform the screen point into the parent collection's coordinate space.
+ if (this.props.ContainingDocumentView != undefined) {
+ let {LocalX, LocalY} = this.props.ContainingDocumentView!.TransformToLocalPoint(screenX, screenY);
+ ContainerX = LocalX;
+ ContainerY = LocalY;
+ }
+
+ let W = this.props.Document.GetFieldValue(KeyStore.Width, NumberField, Number(0));
+ let Xx = this.props.Document.GetFieldValue(KeyStore.X, NumberField, Number(0));
+ let Yy = this.props.Document.GetFieldValue(KeyStore.Y, NumberField, Number(0));
+ let Ss = this.props.Document.GetFieldValue(KeyStore.Scale, NumberField, Number(1));
+ let Panxx = this.props.Document.GetFieldValue(KeyStore.PanX, NumberField, Number(0));
+ let Panyy = this.props.Document.GetFieldValue(KeyStore.PanY, NumberField, Number(0));
+ let LocalX = W / 2 - (Xx + Panxx) / Ss + (ContainerX - W / 2) / Ss;
+ let LocalY = -(Yy + Panyy) / Ss + ContainerY / Ss;
+
+ return {LocalX, Ss, W, Panxx, Xx, LocalY, Panyy, Yy, ContainerX, ContainerY};
+ }
+
onPointerDown = (e: React.PointerEvent): void => {
let me = this;
this._downX = e.clientX;
@@ -153,7 +182,6 @@ export class DocumentView extends React.Component<IProps> {
dragData[ "xOffset" ] = e.x - rect.left;
dragData[ "yOffset" ] = e.y - rect.top;
DragManager.StartDrag(this._mainCont.current, dragData, {
- buttons: 2,
handlers: {
dragComplete: this.dragComplete,
},