From 6fe419d5545dce871376fa5540665f8ef07f5ae2 Mon Sep 17 00:00:00 2001 From: Sam Wilkins Date: Fri, 17 Jan 2020 18:43:26 -0500 Subject: added resize mode functionality based on location of drag initiation, pinned above and global below --- .../collections/CollectionMulticolumnView.scss | 7 ++++++ .../collections/CollectionMulticolumnView.tsx | 27 ++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/client/views/collections/CollectionMulticolumnView.scss b/src/client/views/collections/CollectionMulticolumnView.scss index acb194983..5fbc35df6 100644 --- a/src/client/views/collections/CollectionMulticolumnView.scss +++ b/src/client/views/collections/CollectionMulticolumnView.scss @@ -19,6 +19,13 @@ background: black; cursor: ew-resize; transition: 0.5s opacity ease; + display: flex; + flex-direction: column; + + .internal { + width: 100%; + height: 100%; + } } } \ No newline at end of file diff --git a/src/client/views/collections/CollectionMulticolumnView.tsx b/src/client/views/collections/CollectionMulticolumnView.tsx index aa84e0db6..ef15b29eb 100644 --- a/src/client/views/collections/CollectionMulticolumnView.tsx +++ b/src/client/views/collections/CollectionMulticolumnView.tsx @@ -28,7 +28,7 @@ interface LayoutData { } const resolvedUnits = ["*", "px"]; -const resizerWidth = 2; +const resizerWidth = 4; const resizerOpacity = 1; @observer @@ -209,14 +209,22 @@ interface ResizerProps { toRight?: Doc; } +enum ResizeMode { + Global, + Pinned, + Undefined +} + @observer class ResizeBar extends React.Component { @observable private isHoverActive = false; @observable private isResizingActive = false; + private resizeMode = ResizeMode.Undefined; - private registerResizing = (e: React.PointerEvent) => { + private registerResizing = (e: React.PointerEvent, mode: ResizeMode) => { e.stopPropagation(); e.preventDefault(); + this.resizeMode = mode; window.removeEventListener("pointermove", this.onPointerMove); window.removeEventListener("pointerup", this.onPointerUp); window.addEventListener("pointermove", this.onPointerMove); @@ -236,7 +244,7 @@ class ResizeBar extends React.Component { const scale = widthUnit === "*" ? unitLength : 1; toNarrow.widthMagnitude = NumCast(widthMagnitude) - Math.abs(movementX) / scale; } - if (toWiden) { + if (this.resizeMode === ResizeMode.Pinned && toWiden) { const { widthUnit, widthMagnitude } = toWiden; const scale = widthUnit === "*" ? unitLength : 1; toWiden.widthMagnitude = NumCast(widthMagnitude) + Math.abs(movementX) / scale; @@ -267,6 +275,7 @@ class ResizeBar extends React.Component { @action private onPointerUp = () => { + this.resizeMode = ResizeMode.Undefined; this.isResizingActive = false; this.isHoverActive = false; window.removeEventListener("pointermove", this.onPointerMove); @@ -281,10 +290,18 @@ class ResizeBar extends React.Component { width: this.props.width, opacity: this.isActivated && this.isHoverActive ? resizerOpacity : 0 }} - onPointerDown={this.registerResizing} onPointerEnter={action(() => this.isHoverActive = true)} onPointerLeave={action(() => !this.isResizingActive && (this.isHoverActive = false))} - /> + > +
this.registerResizing(e, ResizeMode.Pinned)} + /> +
this.registerResizing(e, ResizeMode.Global)} + /> +
); } -- cgit v1.2.3-70-g09d2