Documentation ¶
Overview ¶
Package widget implements state tracking and event handling of common user interface controls. To draw widgets, use a theme packages such as package github.com/cybriq/p9/pkg/gel/gio/widget/material.
Index ¶
- type Bool
- type Border
- type ChangeEvent
- type Click
- type Clickable
- type Editor
- func (e *Editor) CaretCoords() f32.Point
- func (e *Editor) CaretPos() (line, col int)
- func (e *Editor) ClearSelection()
- func (e *Editor) Delete(runes int)
- func (e *Editor) Events() []EditorEvent
- func (e *Editor) Focus()
- func (e *Editor) Focused() bool
- func (e *Editor) Insert(s string)
- func (e *Editor) Layout(gtx layout.Context, sh text.Shaper, font text.Font, size unit.Value) layout.Dimensions
- func (e *Editor) Len() int
- func (e *Editor) MoveCaret(startDelta, endDelta int)
- func (e *Editor) NumLines() int
- func (e *Editor) PaintCaret(gtx layout.Context)
- func (e *Editor) PaintSelection(gtx layout.Context)
- func (e *Editor) PaintText(gtx layout.Context)
- func (e *Editor) SelectedText() string
- func (e *Editor) Selection() (start, end int)
- func (e *Editor) SelectionLen() int
- func (e *Editor) SetCaret(start, end int)
- func (e *Editor) SetText(s string)
- func (e *Editor) Text() string
- type EditorEvent
- type Enum
- type Fit
- type Float
- type Icon
- type Image
- type Label
- type Press
- type SelectEvent
- type SubmitEvent
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Bool ¶
type Bool struct { Value bool // contains filtered or unexported fields }
type ChangeEvent ¶
type ChangeEvent struct{}
A ChangeEvent is generated for every user change to the text.
type Clickable ¶
type Clickable struct {
// contains filtered or unexported fields
}
Clickable represents a clickable area.
Example (Passthrough) ¶
package main import ( "fmt" "image" "github.com/cybriq/p9/pkg/gel/gio/f32" "github.com/cybriq/p9/pkg/gel/gio/io/pointer" "github.com/cybriq/p9/pkg/gel/gio/io/router" "github.com/cybriq/p9/pkg/gel/gio/layout" "github.com/cybriq/p9/pkg/gel/gio/op" "github.com/cybriq/p9/pkg/gel/gio/widget" ) func main() { // When laying out clickable widgets on top of each other, // pointer events can be passed down for the underlying // widgets to pick them up. var button1, button2 widget.Clickable var r router.Router gtx := layout.Context{ Ops: new(op.Ops), Constraints: layout.Exact(image.Pt(100, 100)), Queue: &r, } // widget lays out two buttons on top of each other. widget := func() { // button2 completely covers button1, but PassOp allows pointer // events to pass through to button1. button1.Layout(gtx) // PassOp is applied to the area defined by button1. pointer.PassOp{Pass: true}.Add(gtx.Ops) button2.Layout(gtx) } // The first layout and call to Frame declare the Clickable handlers // to the input router, so the following pointer events are propagated. widget() r.Frame(gtx.Ops) // Simulate one click on the buttons by sending a Press and Release event. r.Queue( pointer.Event{ Source: pointer.Mouse, Buttons: pointer.ButtonPrimary, Type: pointer.Press, Position: f32.Pt(50, 50), }, pointer.Event{ Source: pointer.Mouse, Buttons: pointer.ButtonPrimary, Type: pointer.Release, Position: f32.Pt(50, 50), }, ) // The second layout ensures that the click event is registered by the buttons. widget() if button1.Clicked() { fmt.Println("button1 clicked!") } if button2.Clicked() { fmt.Println("button2 clicked!") } }
Output: button1 clicked! button2 clicked!
func (*Clickable) Clicked ¶
Clicked reports whether there are pending clicks as would be reported by Clicks. If so, Clicked removes the earliest click.
func (*Clickable) History ¶
History is the past pointer presses useful for drawing markers. History is retained for a short duration (about a second).
type Editor ¶
type Editor struct { Alignment text.Alignment // SingleLine force the text to stay on a single line. // SingleLine also sets the scrolling direction to // horizontal. SingleLine bool // Submit enabled translation of carriage return keys to SubmitEvents. // If not enabled, carriage returns are inserted as newlines in the text. Submit bool // Mask replaces the visual display of each rune in the contents with the given rune. // Newline characters are not masked. When non-zero, the unmasked contents // are accessed by Len, Text, and SetText. Mask rune // contains filtered or unexported fields }
Editor implements an editable and scrollable text area.
func (*Editor) CaretCoords ¶
CaretCoords returns the coordinates of the caret, relative to the editor itself.
func (*Editor) ClearSelection ¶
func (e *Editor) ClearSelection()
ClearSelection clears the selection, by setting the selection end equal to the selection start.
func (*Editor) Delete ¶
Delete runes from the caret position. The sign of runes specifies the direction to delete: positive is forward, negative is backward.
If there is a selection, it is deleted and counts as a single rune.
func (*Editor) Events ¶
func (e *Editor) Events() []EditorEvent
Events returns available editor events.
func (*Editor) Insert ¶
Insert inserts text at the caret, moving the caret forward. If there is a selection, Insert overwrites it.
func (*Editor) Layout ¶
func (e *Editor) Layout( gtx layout.Context, sh text.Shaper, font text.Font, size unit.Value, ) layout.Dimensions
Layout lays out the editor.
func (*Editor) MoveCaret ¶
MoveCaret moves the caret (aka selection start) and the selection end relative to their current positions. Positive distances moves forward, negative distances moves backward. Distances are in runes.
func (*Editor) PaintCaret ¶
func (*Editor) PaintSelection ¶
PaintSelection paints the contrasting background for selected text.
func (*Editor) SelectedText ¶
SelectedText returns the currently selected text (if any) from the editor.
func (*Editor) Selection ¶
Selection returns the start and end of the selection, as offsets into the editor text. start can be > end.
func (*Editor) SelectionLen ¶
SelectionLen returns the length of the selection, in bytes; it is equivalent to len(e.SelectedText()).
func (*Editor) SetCaret ¶
SetCaret moves the caret to start, and sets the selection end to end. start and end are in bytes, and represent offsets into the editor text. start and end must be at a rune boundary.
type EditorEvent ¶
type EditorEvent interface {
// contains filtered or unexported methods
}
type Enum ¶
type Enum struct { Value string // contains filtered or unexported fields }
func (*Enum) Changed ¶
Changed reports whether Value has changed by user interaction since the last call to Changed.
type Fit ¶
type Fit uint8
Fit scales a widget to fit and clip to the constraints.
const ( // Unscaled does not alter the scale of a widget. Unscaled Fit = iota // Contain scales widget as large as possible without cropping // and it preserves aspect-ratio. Contain // Cover scales the widget to cover the constraint area and // preserves aspect-ratio. Cover // ScaleDown scales the widget smaller without cropping, // when it exceeds the constraint area. // It preserves aspect-ratio. ScaleDown // Fill stretches the widget to the constraints and does not // preserve aspect-ratio. Fill )
type Float ¶
Float is for selecting a value in a range.
func (*Float) Changed ¶
Changed reports whether the value has changed since the last call to Changed.
type Image ¶
type Image struct { // Src is the image to display. Src paint.ImageOp // Fit specifies how to scale the image to the constraints. // By default it does not do any scaling. Fit Fit // Position specifies where to position the image within // the constraints. Position layout.Direction // Scale is the ratio of image pixels to // dps. If Scale is zero Image falls back to // a scale that match a standard 72 DPI. Scale float32 }
Image is a widget that displays an image.
type Label ¶
type Label struct { // Alignment specify the text alignment. Alignment text.Alignment // MaxLines limits the number of lines. Zero means no limit. MaxLines int }
Label is a widget for laying out and drawing text.
type Press ¶
type Press struct { // Position of the press. Position f32.Point // Start is when the press began. Start time.Time // End is when the press was ended by a release or cancel. // A zero End means it hasn't ended yet. End time.Time // Cancelled is true for cancelled presses. Cancelled bool }
Press represents a past pointer press.
type SelectEvent ¶
type SelectEvent struct{}
A SelectEvent is generated when the user selects some text, or changes the selection (e.g. with a shift-click), including if they remove the selection. The selected text is not part of the event, on the theory that it could be a relatively expensive operation (for a large editor), most applications won't actually care about it, and those that do can call Editor.SelectedText() (which can be empty).
type SubmitEvent ¶
type SubmitEvent struct {
Text string
}
A SubmitEvent is generated when Submit is set and a carriage return key is pressed.