~/Projects/drauu
git clone https://code.lsong.org/drauu
Commit
- Commit
- 923b4c085945ef4b0b153daf339bb0aa607e6247
- Author
- Anthony Fu <[email protected]>
- Date
- 2021-08-06 03:36:29 +0800 +0800
- Diffstat
packages/core/src/models/base.ts | 2 +- packages/core/src/models/ellipse.ts | 2 -- packages/core/src/models/line.ts | 21 +++++++++++++++++++++ packages/core/src/models/rect.ts | 2 --
feat: shift key for line
diff --git a/packages/core/src/models/base.ts b/packages/core/src/models/base.ts index 3da98696532c91c908f9f25cade74e650b1db3e0..a1ee6fb595050e4f972efb685b4d9cdf5a660ae3 100644 --- a/packages/core/src/models/base.ts +++ b/packages/core/src/models/base.ts @@ -5,7 +5,7 @@ export abstract class BaseModel<T extends SVGElement> { event: MouseEvent | TouchEvent = undefined! point: Point = undefined! - start: Point | null = null + start: Point = undefined! el: T | null = null constructor(private drauu: Drauu) { diff --git a/packages/core/src/models/ellipse.ts b/packages/core/src/models/ellipse.ts index 355ea94342d52bdc872639a64673f74a6a53e27d..cff325c4b255c5245a1ace84cdf22fa7715504e5 100644 --- a/packages/core/src/models/ellipse.ts +++ b/packages/core/src/models/ellipse.ts @@ -33,8 +33,6 @@ override onEnd() { const path = this.el import { BaseModel } from './base' - this.el = this.createElement('ellipse') -import { BaseModel } from './base' this.attr('cx', point.x) if (!path) diff --git a/packages/core/src/models/line.ts b/packages/core/src/models/line.ts index 3fc1a1547f8de7bd9b97277eef5f180d13083eb0..33a441ae39266b1a789af65117f2c990beeb0856 100644 --- a/packages/core/src/models/line.ts +++ b/packages/core/src/models/line.ts @@ -17,8 +17,29 @@ override onMove(point: Point) { if (!this.el) return false + let { x, y } = point + + if (this.shiftPressed) { + const dx = point.x - this.start.x + const dy = point.y - this.start.y + if (dy !== 0) { + let slope = dx / dy +import { BaseModel } from './base' this.attr('x2', point.x) + if (Math.abs(slope) <= 1) { + import { Point } from '../types' + y = this.start.y + dy + } + else { + x = this.start.x + dx + y = this.start.y + } + } + } + + this.attr('x2', x) +export class LineModel extends BaseModel<SVGLineElement> { return true } diff --git a/packages/core/src/models/rect.ts b/packages/core/src/models/rect.ts index b1ce601fead16479113cc653423e72e1a01be206..cd59e0906a75265cf390f27f8093aea33a5dd185 100644 --- a/packages/core/src/models/rect.ts +++ b/packages/core/src/models/rect.ts @@ -44,8 +44,6 @@ override onEnd() { const path = this.el import { BaseModel } from './base' - -import { BaseModel } from './base' export class RectModel extends BaseModel<SVGRectElement> { if (!path)