diff options
Diffstat (limited to 'src/client/views')
| -rw-r--r-- | src/client/views/InkControlPtHandles.tsx | 12 | ||||
| -rw-r--r-- | src/client/views/InkStrokeProperties.ts | 11 | 
2 files changed, 14 insertions, 9 deletions
| diff --git a/src/client/views/InkControlPtHandles.tsx b/src/client/views/InkControlPtHandles.tsx index 73de4a3e0..607137c2f 100644 --- a/src/client/views/InkControlPtHandles.tsx +++ b/src/client/views/InkControlPtHandles.tsx @@ -2,10 +2,10 @@ import React = require("react");  import { action, observable } from "mobx";  import { observer } from "mobx-react";  import { Doc } from "../../fields/Doc"; -import { ControlPoint, InkData, PointData } from "../../fields/InkField"; +import { ControlPoint, InkData, PointData, InkField } from "../../fields/InkField";  import { List } from "../../fields/List";  import { listSpec } from "../../fields/Schema"; -import { Cast } from "../../fields/Types"; +import { Cast, NumCast } from "../../fields/Types";  import { setupMoveUpEvents } from "../../Utils";  import { Transform } from "../util/Transform";  import { UndoManager } from "../util/UndoManager"; @@ -43,8 +43,8 @@ export class InkControlPtHandles extends React.Component<InkControlProps> {       */      @action      onControlDown = (e: React.PointerEvent, controlIndex: number): void => { -        if (InkStrokeProperties.Instance) { -            const screenScale = this.props.ScreenToLocalTransform().Scale; +        const ptFromScreen = this.props.inkView.ComponentView?.ptFromScreen +        if (InkStrokeProperties.Instance && ptFromScreen) {              const order = controlIndex % 4;              const handleIndexA = ((order === 3 ? controlIndex - 1 : controlIndex - 2) + this.props.inkCtrlPoints.length) % this.props.inkCtrlPoints.length;              const handleIndexB = (order === 3 ? controlIndex + 2 : controlIndex + 1) % this.props.inkCtrlPoints.length; @@ -53,7 +53,9 @@ export class InkControlPtHandles extends React.Component<InkControlProps> {              setupMoveUpEvents(this, e,                  action((e: PointerEvent, down: number[], delta: number[]) => {                      if (!this.controlUndo) this.controlUndo = UndoManager.StartBatch("drag ink ctrl pt"); -                    InkStrokeProperties.Instance?.moveControlPtHandle(this.props.inkView, delta[0] * screenScale, delta[1] * screenScale, controlIndex); +                    const inkMoveEnd = ptFromScreen({ X: delta[0], Y: delta[1] }); +                    const inkMoveStart = ptFromScreen({ X: 0, Y: 0 }); +                    InkStrokeProperties.Instance?.moveControlPtHandle(this.props.inkView, inkMoveEnd.X - inkMoveStart.X, inkMoveEnd.Y - inkMoveStart.Y, controlIndex);                      return false;                  }),                  action(() => { diff --git a/src/client/views/InkStrokeProperties.ts b/src/client/views/InkStrokeProperties.ts index a0fdfcd7f..7c91a3323 100644 --- a/src/client/views/InkStrokeProperties.ts +++ b/src/client/views/InkStrokeProperties.ts @@ -199,7 +199,7 @@ export class InkStrokeProperties {                      (order === 3 && controlIndex !== ink.length - 1 && i === controlIndex + 1) ||                      (order === 3 && controlIndex !== ink.length - 1 && i === controlIndex + 2) ||                      ((ink[0].X === ink[ink.length - 1].X) && (ink[0].Y === ink[ink.length - 1].Y) && (i === 0 || i === ink.length - 1) && (controlIndex === 0 || controlIndex === ink.length - 1))) { -                    return ({ X: pt.X + deltaX / xScale, Y: pt.Y + deltaY / yScale }); +                    return ({ X: pt.X + deltaX, Y: pt.Y + deltaY });                  }                  return pt;              }); @@ -243,7 +243,9 @@ export class InkStrokeProperties {                  if (snapData.distance < 10) {                      const deltaX = (snapData.nearestPt.X - ink[controlIndex].X);                      const deltaY = (snapData.nearestPt.Y - ink[controlIndex].Y); -                    return this.moveControlPtHandle(inkView, deltaX, deltaY, controlIndex); +                    const res = this.moveControlPtHandle(inkView, deltaX, deltaY, controlIndex); +                    console.log("X= " + snapData.nearestPt.X + " " + snapData.nearestPt.Y); +                    return res;                  }              }          } @@ -269,8 +271,9 @@ export class InkStrokeProperties {                  const testInkView = DocumentManager.Instance.getDocumentView(doc, containingCollection?.props.CollectionView);                  const snapped = testInkView?.ComponentView?.snapPt?.(screenDragPt, doc === inkView.rootDoc ? this.excludeSelfSnapSegs(ink, controlIndex) : []);                  if (snapped && snapped.distance < snapData.distance) { -                    const snappedScrPt = testInkView?.ComponentView?.ptToScreen?.(snapped.nearestPt);  // convert from snapped ink coordinate system to dragged ink coordinate system by converting to/from screen space -                    const snappedInkPt = snappedScrPt && inkView.ComponentView?.ptFromScreen?.(snappedScrPt); +                    const snappedInkPt = doc === inkView.rootDoc ? snapped.nearestPt : +                        inkView.ComponentView?.ptFromScreen?.(testInkView?.ComponentView?.ptToScreen?.(snapped.nearestPt) ?? { X: 0, Y: 0 });  // convert from snapped ink coordinate system to dragged ink coordinate system by converting to/from screen space +                      if (snappedInkPt) {                          snapData = { nearestPt: snappedInkPt, distance: snapped.distance };                      } | 
