virtual_pointer

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2025 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package virtual_pointer provides Go bindings for the wlr-virtual-pointer-unstable-v1 Wayland protocol.

This protocol allows clients to emulate a physical pointer device, enabling mouse input injection into Wayland compositors without requiring root privileges. This is a complete, working implementation built on neurlang/wayland.

Basic Usage

// Create manager and pointer
ctx := context.Background()
manager, err := NewVirtualPointerManager(ctx)
if err != nil {
	log.Fatal(err)
}
defer manager.Close()

pointer, err := manager.CreatePointer()
if err != nil {
	log.Fatal(err)
}
defer pointer.Close()

// Move mouse cursor (relative movement)
pointer.MoveRelative(100.0, 50.0)

// Click buttons
pointer.LeftClick()
pointer.RightClick()
pointer.MiddleClick()

// Scroll (positive = down/right, negative = up/left)
pointer.ScrollVertical(5.0)
pointer.ScrollHorizontal(-3.0)

// Manual control with timestamps
pointer.Motion(time.Now(), 10.0, 5.0)
pointer.Frame()

Protocol Specification

Based on wlr-virtual-pointer-unstable-v1 from wlroots project. Supported by Hyprland, Sway, and other wlroots-based compositors.

Index

Constants

View Source
const (
	BTN_LEFT   = 0x110
	BTN_RIGHT  = 0x111
	BTN_MIDDLE = 0x112
	BTN_SIDE   = 0x113
	BTN_EXTRA  = 0x114
)

Button constants for mouse buttons

View Source
const (
	BUTTON_STATE_RELEASED = 0
	BUTTON_STATE_PRESSED  = 1
)

Button state constants

View Source
const (
	AXIS_VERTICAL_SCROLL   = 0
	AXIS_HORIZONTAL_SCROLL = 1
)

Axis constants (from wl_pointer)

View Source
const (
	AXIS_SOURCE_WHEEL      = 0
	AXIS_SOURCE_FINGER     = 1
	AXIS_SOURCE_CONTINUOUS = 2
	AXIS_SOURCE_WHEEL_TILT = 3
)

Axis source constants (from wl_pointer)

Variables

This section is empty.

Functions

This section is empty.

Types

type Axis added in v0.2.0

type Axis uint32

Axis represents a scroll axis

const (
	AxisVertical   Axis = 0
	AxisHorizontal Axis = 1
)

type AxisSource added in v0.2.0

type AxisSource uint32

AxisSource represents the source of axis events

const (
	AxisSourceWheel      AxisSource = 0
	AxisSourceFinger     AxisSource = 1
	AxisSourceContinuous AxisSource = 2
	AxisSourceWheelTilt  AxisSource = 3
)

type ButtonState added in v0.2.0

type ButtonState uint32

ButtonState represents the state of a button

const (
	ButtonStateReleased ButtonState = 0
	ButtonStatePressed  ButtonState = 1
)

type VirtualPointer

type VirtualPointer struct {
	// contains filtered or unexported fields
}

VirtualPointer represents a virtual pointer device

func (*VirtualPointer) Axis

func (p *VirtualPointer) Axis(timestamp time.Time, axis Axis, value float64) error

Axis sends a scroll event

func (*VirtualPointer) AxisDiscrete

func (p *VirtualPointer) AxisDiscrete(timestamp time.Time, axis Axis, value float64, discrete int32) error

AxisDiscrete sends a discrete axis event

func (*VirtualPointer) AxisSource

func (p *VirtualPointer) AxisSource(source AxisSource) error

AxisSource sets the axis source for subsequent axis events

func (*VirtualPointer) AxisStop

func (p *VirtualPointer) AxisStop(timestamp time.Time, axis Axis) error

AxisStop sends an axis stop event

func (*VirtualPointer) Button

func (p *VirtualPointer) Button(timestamp time.Time, button uint32, state ButtonState) error

Button sends a button press/release event

func (*VirtualPointer) Close added in v0.2.0

func (p *VirtualPointer) Close() error

Close releases the virtual pointer device

func (*VirtualPointer) Frame

func (p *VirtualPointer) Frame() error

Frame indicates the end of a pointer event sequence

func (*VirtualPointer) LeftClick added in v0.2.0

func (p *VirtualPointer) LeftClick() error

LeftClick performs a left mouse button click

func (*VirtualPointer) MiddleClick added in v0.2.0

func (p *VirtualPointer) MiddleClick() error

MiddleClick performs a middle mouse button click

func (*VirtualPointer) Motion

func (p *VirtualPointer) Motion(timestamp time.Time, dx, dy float64) error

Motion sends a relative motion event

func (*VirtualPointer) MotionAbsolute

func (p *VirtualPointer) MotionAbsolute(timestamp time.Time, x, y uint32, xExtent, yExtent uint32) error

MotionAbsolute sends an absolute motion event

func (*VirtualPointer) MoveRelative added in v0.2.0

func (p *VirtualPointer) MoveRelative(dx, dy float64) error

MoveRelative moves the pointer by the specified amount

func (*VirtualPointer) RightClick added in v0.2.0

func (p *VirtualPointer) RightClick() error

RightClick performs a right mouse button click

func (*VirtualPointer) ScrollHorizontal added in v0.2.0

func (p *VirtualPointer) ScrollHorizontal(amount float64) error

ScrollHorizontal scrolls horizontally by the specified amount

func (*VirtualPointer) ScrollVertical added in v0.2.0

func (p *VirtualPointer) ScrollVertical(amount float64) error

ScrollVertical scrolls vertically by the specified amount

type VirtualPointerManager

type VirtualPointerManager struct {
	// contains filtered or unexported fields
}

VirtualPointerManager manages virtual pointer devices

func NewVirtualPointerManager

func NewVirtualPointerManager(ctx context.Context) (*VirtualPointerManager, error)

NewVirtualPointerManager creates a new virtual pointer manager

func (*VirtualPointerManager) Close added in v0.2.0

func (m *VirtualPointerManager) Close() error

Close releases the virtual pointer manager

func (*VirtualPointerManager) CreatePointer added in v0.2.0

func (m *VirtualPointerManager) CreatePointer() (*VirtualPointer, error)

CreatePointer creates a new virtual pointer device

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL