From 3207b098d206f4eb1a3c0f23afdd5cf072c308fb Mon Sep 17 00:00:00 2001 From: bob Date: Wed, 20 Feb 2019 17:29:53 -0500 Subject: working, but oh so confusing transforms for selections. --- src/client/views/nodes/DocumentView.tsx | 35 ++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'src/client/views/nodes/DocumentView.tsx') diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index e9b1d5c8a..fa39ad09a 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -31,6 +31,7 @@ export interface DocumentViewProps { isTopMost: boolean; //tfs: This shouldn't be necessary I don't think Scaling: number; + PanelSize: number[]; } export interface JsxArgs extends DocumentViewProps { Keys: { [name: string]: Key } @@ -245,8 +246,19 @@ export class DocumentView extends React.Component { SelectionManager.SelectDoc(this, ctrlPressed) } - screenToLocalTransform = () => { - return this.props.ScreenToLocalTransform().transform(Transform.Identity.scale(1 / this.props.Scaling)); + ScreenToLocalTransform = () => { + return this.props.PanelSize[0] ? this.backgroundScreenToLocalTransform() : this.props.ScreenToLocalTransform(); + } + + backgroundScreenToLocalTransform = () => { + if (this.props.PanelSize[0]) + return this.props.ScreenToLocalTransform().scale(this.props.Scaling); + else return this.props.ScreenToLocalTransform().scale(1 / this.props.Scaling); + } + documentScreenToLocalTransform = () => { + if (this.props.PanelSize[0]) + return this.props.ScreenToLocalTransform(); + else return this.backgroundScreenToLocalTransform(); } render() { if (!this.props.Document) @@ -255,18 +267,23 @@ export class DocumentView extends React.Component { if (!lkeys || lkeys === "") { return

Error loading layout keys

; } - let bindings = { + let backgroundBindings = { ...this.props, - ScreenToLocalTransform: this.screenToLocalTransform, // adds 'Scaling' to the screen to local Xf + ScreenToLocalTransform: this.backgroundScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf isSelected: this.isSelected, select: this.select } as any; for (const key of this.layoutKeys) { - bindings[key.Name + "Key"] = key; // this maps string values of the form Key to an actual key Kestore.keyname e.g, "DataKey" => KeyStore.Data + backgroundBindings[key.Name + "Key"] = key; // this maps string values of the form Key to an actual key Kestore.keyname e.g, "DataKey" => KeyStore.Data } for (const key of this.layoutFields) { let field = this.props.Document.Get(key); - bindings[key.Name] = field && field != FieldWaiting ? field.GetValue() : field; + backgroundBindings[key.Name] = field && field != FieldWaiting ? field.GetValue() : field; + } + + let documentBindings = { + ...backgroundBindings, + ScreenToLocalTransform: this.documentScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf } /* tfs: @@ -278,12 +295,12 @@ export class DocumentView extends React.Component { if (backgroundLayout) { let backgroundView = () => ( { console.log(test) }} />); - bindings.BackgroundView = backgroundView; + documentBindings.BackgroundView = backgroundView; } var width = this.props.Document.GetNumber(KeyStore.NativeWidth, 0); @@ -297,7 +314,7 @@ export class DocumentView extends React.Component { onPointerDown={this.onPointerDown} > { console.log(test) }} -- cgit v1.2.3-70-g09d2 From f9e115ee3a83a6e14da8305575693fc10300c6e1 Mon Sep 17 00:00:00 2001 From: bob Date: Wed, 20 Feb 2019 18:02:36 -0500 Subject: piddling. --- src/client/views/nodes/DocumentView.tsx | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/client/views/nodes/DocumentView.tsx') diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index fa39ad09a..4eb49f18f 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -267,24 +267,20 @@ export class DocumentView extends React.Component { if (!lkeys || lkeys === "") { return

Error loading layout keys

; } - let backgroundBindings = { + let documentBindings = { ...this.props, - ScreenToLocalTransform: this.backgroundScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf + ScreenToLocalTransform: this.documentScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf isSelected: this.isSelected, select: this.select } as any; for (const key of this.layoutKeys) { - backgroundBindings[key.Name + "Key"] = key; // this maps string values of the form Key to an actual key Kestore.keyname e.g, "DataKey" => KeyStore.Data + documentBindings[key.Name + "Key"] = key; // this maps string values of the form Key to an actual key Kestore.keyname e.g, "DataKey" => KeyStore.Data } for (const key of this.layoutFields) { let field = this.props.Document.Get(key); - backgroundBindings[key.Name] = field && field != FieldWaiting ? field.GetValue() : field; + documentBindings[key.Name] = field && field != FieldWaiting ? field.GetValue() : field; } - let documentBindings = { - ...backgroundBindings, - ScreenToLocalTransform: this.documentScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf - } /* tfs: Should this be moved to CollectionFreeformView or another component that renders @@ -293,6 +289,10 @@ export class DocumentView extends React.Component { */ let backgroundLayout = this.backgroundLayout; if (backgroundLayout) { + let backgroundBindings = { + ...documentBindings, + ScreenToLocalTransform: this.backgroundScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf + } let backgroundView = () => ( { documentBindings.BackgroundView = backgroundView; } - var width = this.props.Document.GetNumber(KeyStore.NativeWidth, 0); - var strwidth = width > 0 ? width.toString() + "px" : "100%"; - var height = this.props.Document.GetNumber(KeyStore.NativeHeight, 0); - var strheight = height > 0 ? height.toString() + "px" : "100%"; + var nativeWidth = this.props.Document.GetNumber(KeyStore.NativeWidth, 0); + var nativeHeight = this.props.Document.GetNumber(KeyStore.NativeHeight, 0); + var nodeWidth = nativeWidth > 0 ? nativeWidth.toString() + "px" : "100%"; + var nodeHeight = nativeHeight > 0 ? nativeHeight.toString() + "px" : "100%"; var scaling = this.props.Scaling; return ( -
Date: Wed, 20 Feb 2019 19:42:24 -0500 Subject: cleaned up screen transforms at last. --- src/client/views/DocumentDecorations.tsx | 9 ++------- .../views/collections/CollectionFreeFormView.tsx | 2 +- .../views/nodes/CollectionFreeFormDocumentView.tsx | 9 +++++++-- src/client/views/nodes/DocumentView.tsx | 21 +-------------------- 4 files changed, 11 insertions(+), 30 deletions(-) (limited to 'src/client/views/nodes/DocumentView.tsx') diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index 0aaea7ae5..4e109d475 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -25,14 +25,9 @@ export class DocumentDecorations extends React.Component { if (element.props.isTopMost) { return bounds; } - let transform = element.ScreenToLocalTransform().inverse(); + let transform = (element.props.ScreenToLocalTransform().scale(element.props.Scaling)).inverse(); var [sptX, sptY] = transform.transformPoint(0, 0); - let doc = element.props.Document; - let [bptX, bptY] = [ - element.props.PanelSize[0] > 0 ? element.props.PanelSize[0] : doc.GetNumber(KeyStore.Width, 0), - element.props.PanelSize[1] > 0 ? element.props.PanelSize[1] : doc.GetNumber(KeyStore.Height, 0) - ]; - [bptX, bptY] = transform.transformPoint(bptX, bptY); + let [bptX, bptY] = transform.transformPoint(element.props.PanelSize[0], element.props.PanelSize[1]); return { x: Math.min(sptX, bounds.x), y: Math.min(sptY, bounds.y), r: Math.max(bptX, bounds.r), b: Math.max(bptY, bounds.b) diff --git a/src/client/views/collections/CollectionFreeFormView.tsx b/src/client/views/collections/CollectionFreeFormView.tsx index ffd4d211f..412a4d03d 100644 --- a/src/client/views/collections/CollectionFreeFormView.tsx +++ b/src/client/views/collections/CollectionFreeFormView.tsx @@ -247,7 +247,7 @@ export class CollectionFreeFormView extends CollectionViewBase { ScreenToLocalTransform={this.getTransform} isTopMost={false} Scaling={1} - PanelSize={[0, 0]} + PanelSize={[doc.GetNumber(KeyStore.Width, 0), doc.GetNumber(KeyStore.Height, 0)]} ContainingCollectionView={this} />); })}
diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx index bb85f85a3..7cad6ffc1 100644 --- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx +++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx @@ -77,7 +77,9 @@ export class CollectionFreeFormDocumentView extends React.Component { - return this.props.ScreenToLocalTransform().translate(-this.props.Document.GetNumber(KeyStore.X, 0), -this.props.Document.GetNumber(KeyStore.Y, 0)); + var parentScaling = this.nativeWidth > 0 ? this.width / this.nativeWidth : 1; + return this.props.ScreenToLocalTransform(). + translate(-this.props.Document.GetNumber(KeyStore.X, 0), -this.props.Document.GetNumber(KeyStore.Y, 0)).scale(1 / parentScaling); } render() { @@ -93,7 +95,10 @@ export class CollectionFreeFormDocumentView extends React.Component - + ); } diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 4eb49f18f..20875586d 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -246,20 +246,6 @@ export class DocumentView extends React.Component { SelectionManager.SelectDoc(this, ctrlPressed) } - ScreenToLocalTransform = () => { - return this.props.PanelSize[0] ? this.backgroundScreenToLocalTransform() : this.props.ScreenToLocalTransform(); - } - - backgroundScreenToLocalTransform = () => { - if (this.props.PanelSize[0]) - return this.props.ScreenToLocalTransform().scale(this.props.Scaling); - else return this.props.ScreenToLocalTransform().scale(1 / this.props.Scaling); - } - documentScreenToLocalTransform = () => { - if (this.props.PanelSize[0]) - return this.props.ScreenToLocalTransform(); - else return this.backgroundScreenToLocalTransform(); - } render() { if (!this.props.Document) return
@@ -269,7 +255,6 @@ export class DocumentView extends React.Component { } let documentBindings = { ...this.props, - ScreenToLocalTransform: this.documentScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf isSelected: this.isSelected, select: this.select } as any; @@ -289,13 +274,9 @@ export class DocumentView extends React.Component { */ let backgroundLayout = this.backgroundLayout; if (backgroundLayout) { - let backgroundBindings = { - ...documentBindings, - ScreenToLocalTransform: this.backgroundScreenToLocalTransform, // adds 'Scaling' to the screen to local Xf - } let backgroundView = () => ( { console.log(test) }} -- cgit v1.2.3-70-g09d2 From 3b067e1353d1814517dad0a53cc59f193e4ebab2 Mon Sep 17 00:00:00 2001 From: Bob Zeleznik Date: Wed, 20 Feb 2019 19:59:44 -0500 Subject: fixed so that context menus work on a mac --- src/client/views/nodes/DocumentView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/client/views/nodes/DocumentView.tsx') diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx index 20875586d..7cf00a116 100644 --- a/src/client/views/nodes/DocumentView.tsx +++ b/src/client/views/nodes/DocumentView.tsx @@ -128,7 +128,7 @@ export class DocumentView extends React.Component { e.stopPropagation(); return; } - this._contextMenuCanOpen = e.button == 2; + this._contextMenuCanOpen = true; if (this.active && !e.isDefaultPrevented()) { e.stopPropagation(); if (e.buttons === 2) { -- cgit v1.2.3-70-g09d2