Liu Song’s Projects


~/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)