diff options
author | vkalev <vjk1883@gmail.com> | 2021-10-07 15:34:25 -0400 |
---|---|---|
committer | vkalev <vjk1883@gmail.com> | 2021-10-07 15:34:25 -0400 |
commit | 687b51a3de67eca11fcc1bd11964d93acc1f56d9 (patch) | |
tree | 3f8cebc469e9ec953ee14617934905a1cfe4b930 /src/client/views/DocumentDecorations.tsx | |
parent | fc679d849ae8afa3ef66e4e0b2b2b816e1fb41d4 (diff) |
ink rotation based on angle change
Diffstat (limited to 'src/client/views/DocumentDecorations.tsx')
-rw-r--r-- | src/client/views/DocumentDecorations.tsx | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/client/views/DocumentDecorations.tsx b/src/client/views/DocumentDecorations.tsx index bd9c3509b..b1c147747 100644 --- a/src/client/views/DocumentDecorations.tsx +++ b/src/client/views/DocumentDecorations.tsx @@ -197,9 +197,23 @@ export class DocumentDecorations extends React.Component<{ PanelWidth: number, P this._rotateUndo = UndoManager.StartBatch("rotatedown"); setupMoveUpEvents(this, e, (e: PointerEvent, down: number[], delta: number[]) => { - const movement = { X: delta[0], Y: e.clientY - down[1] }; - const angle = Math.max(1, Math.abs(movement.Y / 10)); - InkStrokeProperties.Instance?.rotateInk(2 * movement.X / angle * (Math.PI / 180)); + let origin; + SelectionManager.Views().filter(dv => dv.rootDoc.type === DocumentType.INK) + .map(doc => { + const inkData = Cast(doc.rootDoc.data, InkField)?.inkData ?? []; + const inkStrokeWidth = NumCast(doc.rootDoc.strokeWidth, 1); + const inkTop = Math.min(...inkData.map(p => p.Y)) - inkStrokeWidth / 2; + const inkBottom = Math.max(...inkData.map(p => p.Y)) + inkStrokeWidth / 2; + const inkLeft = Math.min(...inkData.map(p => p.X)) - inkStrokeWidth / 2; + const inkRight = Math.max(...inkData.map(p => p.X)) + inkStrokeWidth / 2; + origin = { X: (inkLeft + inkRight) / 2, Y: (inkTop + inkBottom) / 2 }; + }); + if (origin) { + const previousPoint = { X: e.clientX, Y: e.clientY }; + const movedPoint = { X: e.clientX - delta[0], Y: e.clientY - delta[1] }; + const angle = InkStrokeProperties.Instance?.angleChange(previousPoint, movedPoint, origin); + if (angle) InkStrokeProperties.Instance?.rotateInk(-angle); + } return false; }, () => { |