aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-04-19 16:57:44 -0400
committerbob <bcz@cs.brown.edu>2019-04-19 16:57:44 -0400
commitc8dcb2a6f93374c426f8b10292d28ca4a79b7ec0 (patch)
treeee453702c3ad3236af25729336713b7d1cfb6449
parentaf6feb64510490da8d815f41ceb639d693b9eae3 (diff)
moved icon into documentview until it can find a better home.
-rw-r--r--src/client/views/DocumentDecorations.tsx2
-rw-r--r--src/client/views/nodes/DocumentView.tsx72
-rw-r--r--src/client/views/nodes/IconBox.tsx47
3 files changed, 68 insertions, 53 deletions
diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx
index da2c7a3be..1f5078c85 100644
--- a/src/client/views/DocumentDecorations.tsx
+++ b/src/client/views/DocumentDecorations.tsx
@@ -202,7 +202,7 @@ export class DocumentDecorations extends React.Component<{}, { value: string }>
let dy = e.pageY - this._downY;
if (Math.abs(dx) > 4 || Math.abs(dy) > 4) {
this._iconifying = true;
- let xf = SelectionManager.SelectedDocuments()[0].props.ScreenToLocalTransform().inverse().transformPoint(0, 0);
+ let xf = SelectionManager.SelectedDocuments()[0].props.ScreenToLocalTransform().scale(SelectionManager.SelectedDocuments()[0].props.ContentScaling()).inverse().transformPoint(0, 0);
let dx = e.pageX - xf[0];
let dy = e.pageY - xf[1];
this._minimizedX = e.clientX;
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 558cbf017..65c104c98 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -168,7 +168,7 @@ export class DocumentView extends React.Component<DocumentViewProps> {
if (Math.abs(this._downX - e.clientX) > 3 || Math.abs(this._downY - e.clientY) > 3) {
document.removeEventListener("pointermove", this.onPointerMove);
document.removeEventListener("pointerup", this.onPointerUp);
- if (!this.topMost || e.buttons === 2 || e.altKey) {
+ if (!e.altKey && (!this.topMost || e.buttons === 2)) {
this.startDragging(this._downX, this._downY, e.ctrlKey || e.altKey);
}
}
@@ -181,7 +181,16 @@ export class DocumentView extends React.Component<DocumentViewProps> {
e.stopPropagation();
if (!SelectionManager.IsSelected(this) && e.button !== 2)
if (Math.abs(e.clientX - this._downX) < 4 && Math.abs(e.clientY - this._downY) < 4) {
- SelectionManager.SelectDoc(this, e.ctrlKey);
+ if (this.props.Document.Get(KeyStore.MaximizedDoc) instanceof Document) {
+ this.props.Document.GetAsync(KeyStore.MaximizedDoc, maxdoc => {
+ if (maxdoc instanceof Document) {
+ this.props.addDocument && this.props.addDocument(maxdoc, false);
+ this.toggleMinimize(maxdoc, this.props.Document);
+ }
+ });
+ } else {
+ SelectionManager.SelectDoc(this, e.ctrlKey);
+ }
}
}
stopPropagation = (e: React.SyntheticEvent) => {
@@ -211,7 +220,7 @@ export class DocumentView extends React.Component<DocumentViewProps> {
ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15);
}
- @action createIcon = (layoutString: string): void => {
+ @action createIcon = (layoutString: string): Document => {
let iconDoc = Documents.IconDocument(layoutString);
iconDoc.SetBoolean(KeyStore.IsMinimized, false);
iconDoc.SetNumber(KeyStore.NativeWidth, 0);
@@ -220,22 +229,73 @@ export class DocumentView extends React.Component<DocumentViewProps> {
iconDoc.Set(KeyStore.MaximizedDoc, this.props.Document);
this.props.Document.Set(KeyStore.MinimizedDoc, iconDoc);
this.props.addDocument && this.props.addDocument(iconDoc, false);
+ return iconDoc;
+ }
+
+ animateTransition(icon: number[], targ: number[], width: number, height: number, stime: number, target: Document, maximizing: boolean) {
+ setTimeout(() => {
+ let now = Date.now();
+ let progress = Math.min(1, (now - stime) / 200);
+ let pval = maximizing ?
+ [icon[0] + (targ[0] - icon[0]) * progress, icon[1] + (targ[1] - icon[1]) * progress] :
+ [targ[0] + (icon[0] - targ[0]) * progress, targ[1] + (icon[1] - targ[1]) * progress];
+ target.SetNumber(KeyStore.Width, maximizing ? 25 + (width - 25) * progress : width + (25 - width) * progress);
+ target.SetNumber(KeyStore.Height, maximizing ? 25 + (height - 25) * progress : height + (25 - height) * progress);
+ target.SetNumber(KeyStore.X, pval[0]);
+ target.SetNumber(KeyStore.Y, pval[1]);
+ if (now < stime + 200) {
+ this.animateTransition(icon, targ, width, height, stime, target, maximizing);
+ }
+ else {
+ if (!maximizing) {
+ target.SetBoolean(KeyStore.IsMinimized, true);
+ target.SetNumber(KeyStore.X, targ[0]);
+ target.SetNumber(KeyStore.Y, targ[1]);
+ target.SetNumber(KeyStore.Width, width);
+ target.SetNumber(KeyStore.Height, height);
+ }
+ this._completed = true;
+ }
+ },
+ 2);
+ }
+
+ _completed = true;
+
+ @action
+ public toggleMinimize = (maximized: Document, minim: Document): void => {
+ SelectionManager.DeselectAll();
+ if (maximized instanceof Document && this._completed) {
+ this._completed = false;
+ let minimized = maximized.GetBoolean(KeyStore.IsMinimized, false);
+ maximized.SetBoolean(KeyStore.IsMinimized, false);
+ this.animateTransition(
+ [minim.GetNumber(KeyStore.X, 0), minim.GetNumber(KeyStore.Y, 0)],
+ [maximized.GetNumber(KeyStore.X, 0), maximized.GetNumber(KeyStore.Y, 0)],
+ maximized.GetNumber(KeyStore.Width, 0), maximized.GetNumber(KeyStore.Width, 0),
+ Date.now(), maximized, minimized);
+ }
}
@action
public minimize = (): void => {
- this.props.Document.SetBoolean(KeyStore.IsMinimized, true);
this.props.Document.GetAsync(KeyStore.MinimizedDoc, mindoc => {
if (mindoc === undefined) {
this.props.Document.GetAsync(KeyStore.BackgroundLayout, field => {
- if (field instanceof TextField) this.createIcon(field.Data);
+ if (field instanceof TextField) {
+ this.toggleMinimize(this.props.Document, this.createIcon(field.Data));
+ }
else this.props.Document.GetAsync(KeyStore.Layout, field => {
- if (field instanceof TextField) this.createIcon(field.Data);
+ if (field instanceof TextField) {
+ this.createIcon(field.Data);
+ this.toggleMinimize(this.props.Document, this.createIcon(field.Data));
+ }
});
});
}
else if (mindoc instanceof Document) {
this.props.addDocument && this.props.addDocument(mindoc, false);
+ this.toggleMinimize(this.props.Document, mindoc);
}
});
}
diff --git a/src/client/views/nodes/IconBox.tsx b/src/client/views/nodes/IconBox.tsx
index 5ada2186d..9c90c0a0e 100644
--- a/src/client/views/nodes/IconBox.tsx
+++ b/src/client/views/nodes/IconBox.tsx
@@ -36,54 +36,9 @@ export class IconBox extends React.Component<FieldViewProps> {
return <FontAwesomeIcon icon={button} className="documentView-minimizedIcon" />
}
- animateTransition(icon: number[], targ: number[], width: number, height: number, stime: number, target: Document, maximizing: boolean) {
- setTimeout(() => {
- let now = Date.now();
- let progress = Math.min(1, (now - stime) / 200);
- let pval = maximizing ?
- [icon[0] + (targ[0] - icon[0]) * progress, icon[1] + (targ[1] - icon[1]) * progress] :
- [targ[0] + (icon[0] - targ[0]) * progress, targ[1] + (icon[1] - targ[1]) * progress];
- target.SetNumber(KeyStore.Width, maximizing ? 25 + (width - 25) * progress : width + (25 - width) * progress);
- target.SetNumber(KeyStore.Height, maximizing ? 25 + (height - 25) * progress : height + (25 - height) * progress);
- target.SetNumber(KeyStore.X, pval[0]);
- target.SetNumber(KeyStore.Y, pval[1]);
- if (now < stime + 200) {
- this.animateTransition(icon, targ, width, height, stime, target, maximizing);
- }
- else {
- if (!maximizing) {
- target.SetBoolean(KeyStore.IsMinimized, true);
- target.SetNumber(KeyStore.X, targ[0]);
- target.SetNumber(KeyStore.Y, targ[1]);
- target.SetNumber(KeyStore.Width, width);
- target.SetNumber(KeyStore.Height, height);
- }
- this._completed = true;
- }
- },
- 2);
- }
-
- _completed = true;
-
- @action
- public toggleMinimize = (): void => {
- SelectionManager.DeselectAll();
- if (this.maximized instanceof Document && this._completed) {
- this._completed = false;
- let minimized = this.maximized.GetBoolean(KeyStore.IsMinimized, false);
- this.maximized.SetBoolean(KeyStore.IsMinimized, false);
- this.animateTransition(
- [this.props.Document.GetNumber(KeyStore.X, 0), this.props.Document.GetNumber(KeyStore.Y, 0)],
- [this.maximized.GetNumber(KeyStore.X, 0), this.maximized.GetNumber(KeyStore.Y, 0)],
- this.maximized.GetNumber(KeyStore.Width, 0), this.maximized.GetNumber(KeyStore.Width, 0),
- Date.now(), this.maximized, minimized);
- }
- }
-
render() {
return (
- <div className="iconBox-container" onClick={this.toggleMinimize} >
+ <div className="iconBox-container">
{this.minimizedIcon}
</div>);
}