feat: 渲染元素的 cursor 属性

This commit is contained in:
unanmed 2025-02-20 22:35:17 +08:00
parent 2e3c368354
commit e79c530c48
2 changed files with 21 additions and 0 deletions

View File

@ -177,6 +177,12 @@ export interface IRenderTreeRoot {
* *
*/ */
getCanvas(): HTMLCanvasElement; getCanvas(): HTMLCanvasElement;
/**
*
* @param element
*/
hoverElement(element: RenderItem): void;
} }
export interface ERenderItemEvent extends ERenderItemActionEvent { export interface ERenderItemEvent extends ERenderItemActionEvent {
@ -260,6 +266,9 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
/** 不透明度 */ /** 不透明度 */
alpha: number = 1; alpha: number = 1;
/** 鼠标覆盖在此元素上时的光标样式 */
cursor: string = 'auto';
get x() { get x() {
return this._transform.x; return this._transform.x;
} }
@ -788,6 +797,9 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
): boolean { ): boolean {
switch (type) { switch (type) {
case ActionType.Move: { case ActionType.Move: {
if (inElement) {
this._root?.hoverElement(this);
}
if (this.hovered && !inElement) { if (this.hovered && !inElement) {
this.hovered = false; this.hovered = false;
this.emit('leaveCapture', event); this.emit('leaveCapture', event);
@ -1063,6 +1075,11 @@ export abstract class RenderItem<E extends ERenderItemEvent = ERenderItemEvent>
this.setAnchor(nextValue[0] as number, nextValue[1] as number); this.setAnchor(nextValue[0] as number, nextValue[1] as number);
return; return;
} }
case 'cursor': {
if (!this.assertType(nextValue, 'string', key)) return;
this.cursor = nextValue;
return;
}
} }
const ev = this.parseEvent(key); const ev = this.parseEvent(key);
if (ev) { if (ev) {

View File

@ -449,6 +449,10 @@ export class MotaRenderer extends Container implements IRenderTreeRoot {
return this.target.canvas; return this.target.canvas;
} }
hoverElement(element: RenderItem): void {
this.target.canvas.style.cursor = element.cursor;
}
destroy() { destroy() {
super.destroy(); super.destroy();
MotaRenderer.list.delete(this.id); MotaRenderer.list.delete(this.id);