fun handlePointerEvent()

in lets-plot-compose/src/desktopMain/kotlin/org/jetbrains/letsPlot/compose/desktop/SvgView.kt [79:141]


    fun handlePointerEvent(pointerEvent: PointerEvent): Boolean {
        val change = pointerEvent.changes.first()
        val position = change.position

        // Convert logical pixel coordinates to physical pixel coordinates for SVG interaction
        // 1. Scale down by density (logical → physical pixels)
        // 2. Subtract position offset (which is also in physical pixels)
        val adjustedX = ((position.x / pixelDensity) - offsetX).roundToInt()
        val adjustedY = ((position.y / pixelDensity) - offsetY).roundToInt()
        val vector = Vector(adjustedX, adjustedY)

        // Translate PointerEvent to lets-plot MouseEvent
        val mouseEvent = when {
            change.pressed -> MouseEvent.leftButton(vector)
            else -> MouseEvent.noButton(vector)
        }

        when (pointerEvent.type) {
            PointerEventType.Press -> {
                onMouseEvent(MOUSE_PRESSED, mouseEvent)
                return true
            }

            PointerEventType.Release -> {
                onMouseEvent(MOUSE_RELEASED, mouseEvent)
                return true
            }

            PointerEventType.Move -> {
                if (change.pressed) {
                    onMouseEvent(MOUSE_DRAGGED, mouseEvent)
                } else {
                    onMouseEvent(MOUSE_MOVED, mouseEvent)
                }
                return true
            }

            PointerEventType.Enter -> {
                onMouseEvent(MOUSE_ENTERED, mouseEvent)
                return true
            }

            PointerEventType.Exit -> {
                onMouseEvent(MOUSE_LEFT, mouseEvent)
                return true
            }

            PointerEventType.Scroll -> {
                val scrollDelta = change.scrollDelta
                val wheelMouseEvent = MouseWheelEvent(
                    x = vector.x,
                    y = vector.y,
                    button = Button.NONE,
                    modifiers = KeyModifiers.emptyModifiers(),
                    scrollAmount = scrollDelta.y.toDouble()
                )
                onMouseEvent(MOUSE_WHEEL_ROTATED, wheelMouseEvent)
                return true
            }
        }

        return false
    }