diff --git a/src/core/render/event.ts b/src/core/render/event.ts index 41d7b28..86cd660 100644 --- a/src/core/render/event.ts +++ b/src/core/render/event.ts @@ -72,6 +72,7 @@ export interface IActionEvent { /** * 当前按下了哪些按键。该值是一个数字,可以通过位运算判断是否按下了某个按键。 * 例如通过 `buttons & MouseType.Left` 来判断是否按下了左键。 + * 注意在鼠标抬起或鼠标点击事件中,并不会包含触发的那个按键 */ buttons: number; /** 触发时是否按下了 alt 键 */ diff --git a/src/core/render/item.ts b/src/core/render/item.ts index 32c47fa..2182b74 100644 --- a/src/core/render/item.ts +++ b/src/core/render/item.ts @@ -822,6 +822,7 @@ export abstract class RenderItem } case ActionType.Down: { // 记录标识符,用于判定 click + if (!inElement) return false; if (event.touch) { this.touchId.add(event.identifier); } else { @@ -830,6 +831,7 @@ export abstract class RenderItem break; } case ActionType.Click: { + if (!inElement) return false; if (event.touch) { if (!this.touchId.has(event.identifier)) { return false; @@ -878,7 +880,9 @@ export abstract class RenderItem event: IActionEvent, transform: Transform ): vec3 { - return transform.untransformed(event.offsetX, event.offsetY); + const x = event.offsetX + this.anchorX * this.width; + const y = event.offsetY + this.anchorY * this.height; + return transform.untransformed(x, y); } /** diff --git a/src/core/render/preset/misc.ts b/src/core/render/preset/misc.ts index 72d6aef..647eb9f 100644 --- a/src/core/render/preset/misc.ts +++ b/src/core/render/preset/misc.ts @@ -236,8 +236,8 @@ export class Icon extends RenderItem implements IAnimateFrame { const renderable = this.renderable; if (!renderable) return; const [x, y, w, h] = renderable.render[0]; - const cw = canvas.width; - const ch = canvas.height; + const cw = this.width; + const ch = this.height; const frame = this.animate ? RenderItem.animatedFrame % renderable.frame : 0; diff --git a/src/core/render/render.ts b/src/core/render/render.ts index bbf3452..e85e317 100644 --- a/src/core/render/render.ts +++ b/src/core/render/render.ts @@ -214,7 +214,9 @@ export class MotaRenderer extends Container implements IRenderTreeRoot { case ActionType.Move: case ActionType.Enter: case ActionType.Leave: - case ActionType.Wheel: + case ActionType.Wheel: { + return this.getActiveMouseIdentifier(mouse); + } case ActionType.Up: case ActionType.Click: { const id = this.getActiveMouseIdentifier(mouse); @@ -241,14 +243,16 @@ export class MotaRenderer extends Container implements IRenderTreeRoot { mouse: MouseType = this.getMouseType(event) ): IActionEvent { const id = this.getMouseIdentifier(type, mouse); + const x = event.offsetX / core.domStyle.scale; + const y = event.offsetY / core.domStyle.scale; return { target: this, identifier: id, touch: false, - offsetX: event.offsetX, - offsetY: event.offsetY, - absoluteX: event.offsetX, - absoluteY: event.offsetY, + offsetX: x, + offsetY: y, + absoluteX: x, + absoluteY: y, type: mouse, buttons: this.getMouseButtons(event), altKey: event.altKey, @@ -309,8 +313,8 @@ export class MotaRenderer extends Container implements IRenderTreeRoot { event: TouchEvent, rect: DOMRect ): IActionEvent { - const x = touch.clientX - rect.left; - const y = touch.clientY - rect.top; + const x = (touch.clientX - rect.left) / core.domStyle.scale; + const y = (touch.clientY - rect.top) / core.domStyle.scale; return { target: this, identifier: this.getTouchIdentifier(touch, type), diff --git a/src/module/render/index.tsx b/src/module/render/index.tsx index af7f88a..547d537 100644 --- a/src/module/render/index.tsx +++ b/src/module/render/index.tsx @@ -66,7 +66,6 @@ export function create() { return () => ( -