diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/util/DragManager.ts | 2 | ||||
-rw-r--r-- | src/views/freeformcanvas/CollectionFreeFormView.tsx | 25 | ||||
-rw-r--r-- | src/views/nodes/DocumentView.tsx | 34 |
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, }, |