From 48e907bdf5424f53c03f60bd93122135e7c1cb92 Mon Sep 17 00:00:00 2001 From: bobzel Date: Sun, 18 Oct 2020 23:22:01 -0400 Subject: fixed rubber-banding of ink shapes to not get clipped. fixed dropping document at bototm of stack (e.g., in presentation views) --- src/client/views/GestureOverlay.tsx | 15 ++++++++------- src/client/views/collections/CollectionStackingView.tsx | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/client/views/GestureOverlay.tsx b/src/client/views/GestureOverlay.tsx index 18743e850..ffa089af1 100644 --- a/src/client/views/GestureOverlay.tsx +++ b/src/client/views/GestureOverlay.tsx @@ -655,7 +655,7 @@ export class GestureOverlay extends Touchable { this._points = []; } //get out of ink mode after each stroke= - if (!CollectionFreeFormViewChrome.Instance._keepMode) { + if (CollectionFreeFormViewChrome.Instance && !CollectionFreeFormViewChrome.Instance?._keepMode) { Doc.SetSelectedTool(InkTool.None); CollectionFreeFormViewChrome.Instance._selected = CollectionFreeFormViewChrome.Instance._shapesNum; SetActiveArrowStart("none"); @@ -839,14 +839,15 @@ export class GestureOverlay extends Touchable { ) || false; } - getBounds = (stroke: InkData) => { - const xs = stroke.map(p => p.X); - const ys = stroke.map(p => p.Y); + getBounds = (stroke: InkData, pad?: boolean) => { + const padding = pad ? [-20000, 20000] : []; + const xs = [...padding, ...stroke.map(p => p.X)]; + const ys = [...padding, ...stroke.map(p => p.Y)]; const right = Math.max(...xs); const left = Math.min(...xs); const bottom = Math.max(...ys); const top = Math.min(...ys); - return { right: right, left: left, bottom: bottom, top: top, width: right - left, height: bottom - top }; + return { right, left, bottom, top, width: right - left, height: bottom - top }; } @computed get svgBounds() { @@ -856,7 +857,7 @@ export class GestureOverlay extends Touchable { @computed get elements() { const width = Number(ActiveInkWidth()); const rect = this._overlayRef.current?.getBoundingClientRect(); - const B = this.svgBounds; + const B = { left: -20000, right: 20000, top: -20000, bottom: 20000, width: 40000, height: 40000 }; //this.getBounds(this._points, true); B.left = B.left - width / 2; B.right = B.right + width / 2; B.top = B.top - width / 2 - (rect?.y || 0); @@ -867,7 +868,7 @@ export class GestureOverlay extends Touchable { this.props.children, this._palette, [this._strokes.map((l, i) => { - const b = this.getBounds(l); + const b = { left: -20000, right: 20000, top: -20000, bottom: 20000, width: 40000, height: 40000 };//this.getBounds(l, true); return {InteractionUtils.CreatePolyline(l, b.left, b.top, ActiveInkColor(), width, width, ActiveInkBezierApprox(), ActiveFillColor(), ActiveArrowStart(), ActiveArrowEnd(), diff --git a/src/client/views/collections/CollectionStackingView.tsx b/src/client/views/collections/CollectionStackingView.tsx index b62fde4c8..2fedca711 100644 --- a/src/client/views/collections/CollectionStackingView.tsx +++ b/src/client/views/collections/CollectionStackingView.tsx @@ -283,7 +283,7 @@ export class CollectionStackingView extends CollectionSubView { const pos = cd.dxf().inverse().transformPoint(-2 * this.gridGap, -2 * this.gridGap); const pos1 = cd.dxf().inverse().transformPoint(cd.width(), cd.height()); - if (where[0] > pos[0] && where[0] < pos1[0] && where[1] > pos[1] && where[1] < pos1[1]) { + if (where[0] > pos[0] && where[0] < pos1[0] && where[1] > pos[1] && (i === this._docXfs.length - 1 || where[1] < pos1[1])) { targInd = i; const axis = this.Document._viewType === CollectionViewType.Masonry ? 0 : 1; plusOne = where[axis] > (pos[axis] + pos1[axis]) / 2 ? 1 : 0; -- cgit v1.2.3-70-g09d2