aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/DocumentDecorations.tsx
diff options
context:
space:
mode:
authorMonika Hedman <monika_hedman@brown.edu>2019-02-24 16:26:14 -0500
committerMonika Hedman <monika_hedman@brown.edu>2019-02-24 16:26:14 -0500
commitb119b7d4b38c3eada66e4ac49f1d65dfae6b22c0 (patch)
treeae38ab0d33da6354d0777c4f159363d3f3783e45 /src/client/views/DocumentDecorations.tsx
parent1447bcdb79425d2e520ca39732d600466deb242c (diff)
parentd9d55e422826da1fe87aa7973c92e54bc0c99f02 (diff)
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web into navigation
Diffstat (limited to 'src/client/views/DocumentDecorations.tsx')
-rw-r--r--src/client/views/DocumentDecorations.tsx67
1 files changed, 29 insertions, 38 deletions
diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx
index d385bcdef..2f012913d 100644
--- a/src/client/views/DocumentDecorations.tsx
+++ b/src/client/views/DocumentDecorations.tsx
@@ -1,10 +1,9 @@
-import { observable, computed } from "mobx";
+import { observable, computed, action } from "mobx";
import React = require("react");
import { SelectionManager } from "../util/SelectionManager";
import { observer } from "mobx-react";
import './DocumentDecorations.scss'
-import { CollectionFreeFormView } from "./collections/CollectionFreeFormView";
-import { KeyStore } from '../../fields/Key'
+import { KeyStore } from '../../fields/KeyStore'
import { NumberField } from "../../fields/NumberField";
@observer
@@ -12,7 +11,7 @@ export class DocumentDecorations extends React.Component {
static Instance: DocumentDecorations
private _resizer = ""
private _isPointerDown = false;
- @observable private _opacity = 1;
+ @observable private _hidden = false;
constructor(props: Readonly<{}>) {
super(props)
@@ -22,17 +21,13 @@ export class DocumentDecorations extends React.Component {
@computed
get Bounds(): { x: number, y: number, b: number, r: number } {
- return SelectionManager.SelectedDocuments().reduce((bounds, element) => {
- if (element.props.ContainingCollectionView != undefined &&
- !(element.props.ContainingCollectionView instanceof CollectionFreeFormView)) {
+ return SelectionManager.SelectedDocuments().reduce((bounds, documentView) => {
+ if (documentView.props.isTopMost) {
return bounds;
}
- let transform = element.props.ScreenToLocalTransform().inverse();
+ let transform = (documentView.props.ScreenToLocalTransform().scale(documentView.props.ContentScaling())).inverse();
var [sptX, sptY] = transform.transformPoint(0, 0);
- // var [bptX, bptY] = transform.transformDirection(element.width, element.height);
- let doc = element.props.Document;
- let [bptX, bptY] = [doc.GetNumber(KeyStore.Width, 0), doc.GetNumber(KeyStore.Height, 0)];
- [bptX, bptY] = transform.transformPoint(bptX, bptY);
+ let [bptX, bptY] = transform.transformPoint(documentView.props.PanelWidth(), documentView.props.PanelHeight());
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)
@@ -40,14 +35,10 @@ export class DocumentDecorations extends React.Component {
}, { x: Number.MAX_VALUE, y: Number.MAX_VALUE, r: Number.MIN_VALUE, b: Number.MIN_VALUE });
}
- @computed
- get opacity(): number {
- return this._opacity
- }
- set opacity(o: number) {
- this._opacity = Math.min(Math.max(0, o), 1)
- }
+ @computed
+ public get Hidden() { return this._hidden; }
+ public set Hidden(value: boolean) { this._hidden = value; }
onPointerDown = (e: React.PointerEvent): void => {
e.stopPropagation();
@@ -110,33 +101,28 @@ export class DocumentDecorations extends React.Component {
}
SelectionManager.SelectedDocuments().forEach(element => {
- const rect = element.screenRect;
- // if (rect.width !== 0) {
- // let scale = element.width / rect.width;
- // let actualdW = Math.max(element.width + (dW * scale), 20);
- // let actualdH = Math.max(element.height + (dH * scale), 20);
- // element.x += dX * (actualdW - element.width);
- // element.y += dY * (actualdH - element.height);
- // if (Math.abs(dW) > Math.abs(dH))
- // element.width = actualdW;
- // else
- // element.height = actualdH;
- // }
+ const rect = element.screenRect();
if (rect.width !== 0) {
let doc = element.props.Document;
let width = doc.GetOrCreate(KeyStore.Width, NumberField);
let height = doc.GetOrCreate(KeyStore.Height, NumberField);
let x = doc.GetOrCreate(KeyStore.X, NumberField);
- let y = doc.GetOrCreate(KeyStore.X, NumberField);
+ let y = doc.GetOrCreate(KeyStore.Y, NumberField);
let scale = width.Data / rect.width;
let actualdW = Math.max(width.Data + (dW * scale), 20);
let actualdH = Math.max(height.Data + (dH * scale), 20);
x.Data += dX * (actualdW - width.Data);
y.Data += dY * (actualdH - height.Data);
- if (Math.abs(dW) > Math.abs(dH))
- width.Data = actualdW;
- else
- height.Data = actualdH;
+ var nativeWidth = doc.GetNumber(KeyStore.NativeWidth, 0);
+ var nativeHeight = doc.GetNumber(KeyStore.NativeHeight, 0);
+ if (nativeWidth > 0 && nativeHeight > 0) {
+ if (Math.abs(dW) > Math.abs(dH))
+ actualdH = nativeHeight / nativeWidth * actualdW;
+ else
+ actualdW = nativeWidth / nativeHeight * actualdH;
+ }
+ width.Data = actualdW;
+ height.Data = actualdH;
}
})
}
@@ -153,13 +139,19 @@ export class DocumentDecorations extends React.Component {
render() {
var bounds = this.Bounds;
+ if (this.Hidden) {
+ return (null);
+ }
+ if (isNaN(bounds.r) || isNaN(bounds.b) || isNaN(bounds.x) || isNaN(bounds.y)) {
+ console.log("DocumentDecorations: Bounds Error")
+ return (null);
+ }
return (
<div id="documentDecorations-container" style={{
width: (bounds.r - bounds.x + 40) + "px",
height: (bounds.b - bounds.y + 40) + "px",
left: bounds.x - 20,
top: bounds.y - 20,
- opacity: this.opacity
}}>
<div id="documentDecorations-topLeftResizer" className="documentDecorations-resizer" onPointerDown={this.onPointerDown} onContextMenu={(e) => e.preventDefault()}></div>
<div id="documentDecorations-topResizer" className="documentDecorations-resizer" onPointerDown={this.onPointerDown} onContextMenu={(e) => e.preventDefault()}></div>
@@ -170,7 +162,6 @@ export class DocumentDecorations extends React.Component {
<div id="documentDecorations-bottomLeftResizer" className="documentDecorations-resizer" onPointerDown={this.onPointerDown} onContextMenu={(e) => e.preventDefault()}></div>
<div id="documentDecorations-bottomResizer" className="documentDecorations-resizer" onPointerDown={this.onPointerDown} onContextMenu={(e) => e.preventDefault()}></div>
<div id="documentDecorations-bottomRightResizer" className="documentDecorations-resizer" onPointerDown={this.onPointerDown} onContextMenu={(e) => e.preventDefault()}></div>
-
</div>
)
}