diff --git a/src/components/painter/WidgetPainter.vue b/src/components/painter/WidgetPainter.vue index 0c467bf3c9..5024622ca1 100644 --- a/src/components/painter/WidgetPainter.vue +++ b/src/components/painter/WidgetPainter.vue @@ -28,8 +28,9 @@ />
@@ -281,6 +282,7 @@ const { nodeId } = defineProps<{ const modelValue = defineModel({ default: '' }) const canvasEl = useTemplateRef('canvasEl') +const cursorEl = useTemplateRef('cursorEl') const controlsEl = useTemplateRef('controlsEl') const { width: controlsWidth } = useElementSize(controlsEl) const compact = computed( @@ -296,8 +298,6 @@ const { backgroundColor, canvasWidth, canvasHeight, - cursorX, - cursorY, cursorVisible, displayBrushSize, inputImageUrl, @@ -309,7 +309,7 @@ const { handlePointerLeave, handleInputImageLoad, handleClear -} = usePainter(nodeId, { canvasEl, modelValue }) +} = usePainter(nodeId, { canvasEl, cursorEl, modelValue }) const canvasContainerStyle = computed(() => ({ aspectRatio: `${canvasWidth.value} / ${canvasHeight.value}`, @@ -318,16 +318,10 @@ const canvasContainerStyle = computed(() => ({ : backgroundColor.value })) -const cursorStyle = computed(() => { - const size = displayBrushSize.value - const x = cursorX.value - size / 2 - const y = cursorY.value - size / 2 - return { - width: `${size}px`, - height: `${size}px`, - transform: `translate(${x}px, ${y}px)` - } -}) +const cursorSizeStyle = computed(() => ({ + width: `${displayBrushSize.value}px`, + height: `${displayBrushSize.value}px` +})) const brushOpacityPercent = computed({ get: () => Math.round(brushOpacity.value * 100), diff --git a/src/composables/painter/usePainter.ts b/src/composables/painter/usePainter.ts index fec324cfb2..fefb014cef 100644 --- a/src/composables/painter/usePainter.ts +++ b/src/composables/painter/usePainter.ts @@ -27,11 +27,12 @@ export const PAINTER_TOOLS: Record = { interface UsePainterOptions { canvasEl: Ref + cursorEl: Ref modelValue: Ref } export function usePainter(nodeId: string, options: UsePainterOptions) { - const { canvasEl, modelValue } = options + const { canvasEl, cursorEl, modelValue } = options const { t } = useI18n() const nodeOutputStore = useNodeOutputStore() const toastStore = useToastStore() @@ -41,8 +42,6 @@ export function usePainter(nodeId: string, options: UsePainterOptions) { const canvasWidth = ref(512) const canvasHeight = ref(512) - const cursorX = ref(0) - const cursorY = ref(0) const cursorVisible = ref(false) const inputImageUrl = ref(null) @@ -518,8 +517,10 @@ export function usePainter(nodeId: string, options: UsePainterOptions) { } function updateCursorPos(e: PointerEvent) { - cursorX.value = e.offsetX - cursorY.value = e.offsetY + const el = cursorEl.value + if (!el) return + const size = displayBrushSize.value + el.style.transform = `translate(${e.offsetX - size / 2}px, ${e.offsetY - size / 2}px)` } function handlePointerDown(e: PointerEvent) { @@ -760,8 +761,6 @@ export function usePainter(nodeId: string, options: UsePainterOptions) { canvasWidth, canvasHeight, - cursorX, - cursorY, cursorVisible, displayBrushSize,