shinygolang.org/x/exp/shiny/gesture Index | Files

package gesture

import "golang.org/x/exp/shiny/gesture"

Package gesture provides gesture events such as long presses and drags. These are higher level than underlying mouse and touch events.

Index

Types

type Event

type Event struct {
	// Type is the gesture type.
	Type Type

	// Drag, LongPress and DoublePress are set when the gesture is recognized as
	// a drag, etc.
	//
	// Note that these status fields can be lost during a gesture's events over
	// time: LongPress can be set for the first press of a double press, but
	// unset on the second press.
	Drag        bool
	LongPress   bool
	DoublePress bool

	// InitialPos is the initial position of the button press or touch that
	// started this gesture.
	InitialPos Point

	// CurrentPos is the current position of the button or touch event.
	CurrentPos Point

	// Time is the event's time.
	Time time.Time
}

Event is a gesture event.

type EventFilter

type EventFilter struct {
	EventDeque screen.EventDeque
	// contains filtered or unexported fields
}

EventFilter generates gesture events from lower level mouse and touch events.

func (*EventFilter) Filter

func (f *EventFilter) Filter(e interface{}) interface{}

Filter filters the event. It can return e, a different event, or nil to consume the event. It can also trigger side effects such as pushing new events onto its EventDeque.

type Point

type Point struct {
	X, Y float32
}

Point is a mouse or touch location, in pixels.

type Type

type Type uint8

Type describes the type of a touch event.

const (
	// TypeStart and TypeEnd are the start and end of a gesture. A gesture
	// spans multiple events.
	TypeStart Type = 0
	TypeEnd   Type = 1

	// TypeIsXxx is when the gesture is recognized as a long press, double
	// press or drag. For example, a mouse button press won't generate a
	// TypeIsLongPress immediately, but if a threshold duration passes without
	// the corresponding mouse button release, a TypeIsLongPress event is sent.
	//
	// Once a TypeIsXxx event is sent, the corresponding Event.Xxx bool field
	// is set for this and subsequent events. For example, a TypeTap event by
	// itself doesn't say whether or not it is a single tap or the first tap of
	// a double tap. If the app needs to distinguish these two sorts of taps,
	// it can wait until a TypeEnd or TypeIsDoublePress event is seen. If a
	// TypeEnd is seen before TypeIsDoublePress, or equivalently, if the
	// TypeEnd event's DoublePress field is false, the gesture is a single tap.
	//
	// These attributes aren't exclusive. A long press drag is perfectly valid.
	//
	// The uncommon "double press" instead of "double tap" terminology is
	// because, in this package, taps are associated with button releases, not
	// button presses. Note also that "double" really means "at least two".
	TypeIsLongPress   Type = 10
	TypeIsDoublePress Type = 11
	TypeIsDrag        Type = 12

	// TypeTap and TypeDrag are tap and drag events.
	//
	// For 'flinging' drags, to simulate inertia, look to the Velocity field of
	// the TypeEnd event.
	//
	// TODO: implement velocity.
	TypeTap  Type = 20
	TypeDrag Type = 21
)

func (Type) String

func (t Type) String() string

Source Files

gesture.go

Version
v0.0.0-20250218142911-aa4b98e5adaa (latest)
Published
Feb 18, 2025
Platform
linux/amd64
Imports
4 packages
Last checked
1 month ago

Tools for package owners.