gxui

package module
v0.0.0-...-adb7743 Latest Latest
Warning

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

Go to latest
Published: Jul 27, 2017 License: BSD-3-Clause Imports: 15 Imported by: 1

README

GXUI - A Go cross platform UI library.

My Fork

For the awareness of anyone eyeing my fork of gxui:

I originally forked this to solve some issues I was seeing with the Go editor I'm writing. I had planned to send pull requests for any bugs I managed to find and solve, but with it going unmaintained, I've started just aggressively changing anything that doesn't work (or read) how I want it to. Most of my changes revolve around the CodeEditor and TextBox types.

A note about my use of gxui for the editor: when the abandonment announcement got posted to gxui's README, I spent some time looking at other libraries. There are plenty of others out there. However, nothing I saw looked like it would be a quick swap - gxui just feels easy to use by comparison. That may be due to me being used to gxui at this point, but that's beside the point. Eventually, I decided I would rather maintain a fork than try to port to another UI library.

If things continue to progress with my editor, there may be a day when I start maintaining my fork as a tested, maintained fork from the original project; but for now, I'm just making fixes when I come across things my editor needs, and usually making minor changes whenever I'm looking at code to make it easier for me to read.

I'm (for the moment) leaving this README as-is other than this minor blurb, so the gitter link will still be pointing to upstream's gitter.im and whatnot.

Build Status GoDoc

Disclaimer

All code in this package is experimental and will have frequent breaking changes. Please feel free to play, but please don't be upset when the API has significant reworkings.

The code is currently undocumented, and is certainly not idiomatic Go. It will be heavily refactored over the coming months.

This is not an official Google product (experimental or otherwise), it is just code that happens to be owned by Google.

Dependencies

Linux:

In order to build GXUI on linux, you will need the following packages installed:

sudo apt-get install libxi-dev libxcursor-dev libxrandr-dev libxinerama-dev mesa-common-dev libgl1-mesa-dev libxxf86vm-dev
Common:

After setting up GOPATH (see Go documentation), you can then fetch the GXUI library and its dependencies:

go get -u github.com/google/gxui/...

Samples

Samples can be found in gxui/samples.

To build all samples run:

go install github.com/google/gxui/samples/...

And they will be built into GOPATH/bin.

If you add GOPATH/bin to your PATH, you can simply type the name of a sample to run it. For example: image_viewer.

Web

gxui code is cross platform and can be compiled using GopherJS to JavaScript, allowing it to run in browsers with WebGL support. To do so, you'll need the GopherJS compiler and some additional dependencies:

go get -u github.com/gopherjs/gopherjs
go get -u -d -tags=js github.com/google/gxui/...

Afterwards, you can try the samples by running gopherjs serve command and opening http://localhost:8080/github.com/google/gxui/samples/ in a browser.

Fonts

Many of the samples require a font to render text. The dark theme (and currently the only theme) uses Roboto. This is built into the gxfont package.

Make sure to mention this font in any notices file distributed with your application.

Contributing

GXUI was written by a couple of Googlers as an experiment, but with help of the open-source community GXUI could mature into something far more interesting.

Contributions, however small are extremely welcome but will require the author to have signed the Google Individual Contributor License Agreement.

The CLA is necessary mainly because you own the copyright to your changes, even after your contribution becomes part of our codebase, so we need your permission to use and distribute your code. We also need to be sure of various other things—for instance that you'll tell us if you know that your code infringes on other people's patents. You don't have to sign the CLA until after you've submitted your code for review and a member has approved it, but you must do it before we can put your code into our codebase. Before you start working on a larger contribution, you should get in touch with us first through the issue tracker with your idea so that we can help out and possibly guide you. Coordinating up front makes it much easier to avoid frustration later on.

Documentation

Index

Constants

View Source
const (
	AspectStretch = iota
	AspectCorrectLetterbox
	AspectCorrectCrop
)

Variables

View Source
var Black = Color{0.0, 0.0, 0.0, 1.0}
View Source
var BlackBrush = CreateBrush(Black)
View Source
var Blue = Color{0.0, 0.0, 1.0, 1.0}
View Source
var Blue10 = Color{0.0, 0.0, 0.1, 1.0}
View Source
var Blue20 = Color{0.0, 0.0, 0.2, 1.0}
View Source
var Blue30 = Color{0.0, 0.0, 0.3, 1.0}
View Source
var Blue40 = Color{0.0, 0.0, 0.4, 1.0}
View Source
var Blue50 = Color{0.0, 0.0, 0.5, 1.0}
View Source
var Blue60 = Color{0.0, 0.0, 0.6, 1.0}
View Source
var Blue70 = Color{0.0, 0.0, 0.7, 1.0}
View Source
var Blue80 = Color{0.0, 0.0, 0.8, 1.0}
View Source
var Blue90 = Color{0.0, 0.0, 0.9, 1.0}
View Source
var DefaultBrush = WhiteBrush
View Source
var Gray10 = Color{0.1, 0.1, 0.1, 1.0}
View Source
var Gray15 = Color{0.15, 0.15, 0.15, 1.0}
View Source
var Gray20 = Color{0.2, 0.2, 0.2, 1.0}
View Source
var Gray30 = Color{0.3, 0.3, 0.3, 1.0}
View Source
var Gray40 = Color{0.4, 0.4, 0.4, 1.0}
View Source
var Gray50 = Color{0.5, 0.5, 0.5, 1.0}
View Source
var Gray60 = Color{0.6, 0.6, 0.6, 1.0}
View Source
var Gray70 = Color{0.7, 0.7, 0.7, 1.0}
View Source
var Gray80 = Color{0.8, 0.8, 0.8, 1.0}
View Source
var Gray90 = Color{0.9, 0.9, 0.9, 1.0}
View Source
var Green = Color{0.0, 1.0, 0.0, 1.0}
View Source
var Green10 = Color{0.0, 0.1, 0.0, 1.0}
View Source
var Green20 = Color{0.0, 0.2, 0.0, 1.0}
View Source
var Green30 = Color{0.0, 0.3, 0.0, 1.0}
View Source
var Green40 = Color{0.0, 0.4, 0.0, 1.0}
View Source
var Green50 = Color{0.0, 0.5, 0.0, 1.0}
View Source
var Green60 = Color{0.0, 0.6, 0.0, 1.0}
View Source
var Green70 = Color{0.0, 0.7, 0.0, 1.0}
View Source
var Green80 = Color{0.0, 0.8, 0.0, 1.0}
View Source
var Green90 = Color{0.0, 0.9, 0.0, 1.0}
View Source
var Red = Color{1.0, 0.0, 0.0, 1.0}
View Source
var Red10 = Color{0.1, 0.0, 0.0, 1.0}
View Source
var Red20 = Color{0.2, 0.0, 0.0, 1.0}
View Source
var Red30 = Color{0.3, 0.0, 0.0, 1.0}
View Source
var Red40 = Color{0.4, 0.0, 0.0, 1.0}
View Source
var Red50 = Color{0.5, 0.0, 0.0, 1.0}
View Source
var Red60 = Color{0.6, 0.0, 0.0, 1.0}
View Source
var Red70 = Color{0.7, 0.0, 0.0, 1.0}
View Source
var Red80 = Color{0.8, 0.0, 0.0, 1.0}
View Source
var Red90 = Color{0.9, 0.0, 0.0, 1.0}
View Source
var Transparent = Color{0.0, 0.0, 0.0, 0.0}
View Source
var TransparentBrush = CreateBrush(Transparent)
View Source
var White = Color{1.0, 1.0, 1.0, 1.0}
View Source
var WhiteBrush = CreateBrush(White)
View Source
var Yellow = Color{1.0, 1.0, 0.0, 1.0}

Functions

func BreadcrumbsAt(p Container, pnt math.Point) string

func ChildToParent

func ChildToParent(coord math.Point, from Control, to Parent) math.Point

func Dump

func Dump(c interface{})

func FunctionName

func FunctionName(i interface{}) string

func ParentToChild

func ParentToChild(coord math.Point, from Parent, to Control) math.Point

func Path

func Path(p interface{}) string

func RuneArrayToString

func RuneArrayToString(arr []rune) string

func SetFocus

func SetFocus(focusable Focusable)

func StringToRuneArray

func StringToRuneArray(str string) []rune

func TransformCoordinate

func TransformCoordinate(coord math.Point, from, to Control) math.Point

func ValidateHierarchy

func ValidateHierarchy(p Parent)

func WhileAttached

func WhileAttached(c Control, event, callback interface{})

WhileAttached binds the function callback to event for the duration of c being attached. event can either be:

  • A event of the signature: event(callback)
  • A function of the signature: func(callback) EventSubscription

func WindowToChild

func WindowToChild(coord math.Point, to Control) math.Point

Types

type AdapterBase

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

func (*AdapterBase) DataChanged

func (a *AdapterBase) DataChanged(recreateControls bool)

func (*AdapterBase) DataReplaced

func (a *AdapterBase) DataReplaced()

func (*AdapterBase) OnDataChanged

func (a *AdapterBase) OnDataChanged(f func(recreateControls bool)) EventSubscription

func (*AdapterBase) OnDataReplaced

func (a *AdapterBase) OnDataReplaced(f func()) EventSubscription

type AdapterItem

type AdapterItem interface{}

AdapterItem is a user defined type that can be used to uniquely identify a single item in an adapter. The type must support equality and be hashable.

type AspectMode

type AspectMode int

type Brush

type Brush struct {
	Color Color
}

func CreateBrush

func CreateBrush(color Color) Brush

type BubbleOverlay

type BubbleOverlay interface {
	Control
	Show(control Control, target math.Point)
	Hide()
}

type Button

type Button interface {
	LinearLayout
	Text() string
	SetText(string)
	Type() ButtonType
	SetType(ButtonType)
	IsChecked() bool
	SetChecked(bool)
}

type ButtonType

type ButtonType int
const (
	PushButton ButtonType = iota
	ToggleButton
)

type Canvas

type Canvas interface {
	Size() math.Size
	IsComplete() bool
	Complete()
	Push()
	Pop()
	AddClip(math.Rect)
	Clear(Color)
	DrawCanvas(c Canvas, position math.Point)
	DrawTexture(t Texture, bounds math.Rect)
	DrawRunes(font Font, runes []rune, points []math.Point, color Color)
	DrawLines(Polygon, Pen)
	DrawPolygon(Polygon, Pen, Brush)
	DrawRect(math.Rect, Brush)
	DrawRoundedRect(rect math.Rect, tl, tr, bl, br float32, p Pen, b Brush)
}

type ChanneledEvent

type ChanneledEvent struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func (*ChanneledEvent) Fire

func (e *ChanneledEvent) Fire(args ...interface{})

func (*ChanneledEvent) Listen

func (e *ChanneledEvent) Listen(listener interface{}) EventSubscription

func (*ChanneledEvent) ParameterTypes

func (e *ChanneledEvent) ParameterTypes() []reflect.Type

type Child

type Child struct {
	Control Control
	Offset  math.Point
}

func (*Child) Bounds

func (c *Child) Bounds() math.Rect

Bounds returns the Child bounds relative to the parent.

func (*Child) Layout

func (c *Child) Layout(rect math.Rect)

Layout sets the Child size and offset relative to the parent. Layout should only be called by the Child's parent.

func (*Child) String

func (c *Child) String() string

String returns a string describing the child type and bounds.

type Children

type Children []*Child

Children is a list of Child pointers.

func (Children) Find

func (c Children) Find(control Control) *Child

Find returns and returns the Child pointer for the given Control, or nil if the child is not in this Children list.

func (Children) IndexOf

func (c Children) IndexOf(control Control) int

IndexOf returns and returns the index of the child control, or -1 if the child is not in this Children list.

func (Children) String

func (c Children) String() string

String returns a string describing the child type and bounds.

type CodeEditor

type CodeEditor interface {
	TextBox
	SyntaxLayers() CodeSyntaxLayers
	SetSyntaxLayers(CodeSyntaxLayers)
	TabWidth() int
	SetTabWidth(int)
	TabSpaces() bool
	SetTabSpaces(bool)
	SuggestionProvider() CodeSuggestionProvider
	SetSuggestionProvider(CodeSuggestionProvider)
	ShowSuggestionList()
	HideSuggestionList()
}

type CodeSuggestion

type CodeSuggestion interface {
	Name() string
	Code() string
}

type CodeSuggestionProvider

type CodeSuggestionProvider interface {
	SuggestionsAt(runeIndex int) []CodeSuggestion
}

type CodeSyntaxLayer

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

func CreateCodeSyntaxLayer

func CreateCodeSyntaxLayer() *CodeSyntaxLayer

func (*CodeSyntaxLayer) Add

func (l *CodeSyntaxLayer) Add(start, count int)

func (*CodeSyntaxLayer) AddData

func (l *CodeSyntaxLayer) AddData(start, count int, data interface{})

func (*CodeSyntaxLayer) AddSpan

func (l *CodeSyntaxLayer) AddSpan(span interval.IntData)

func (*CodeSyntaxLayer) BackgroundColor

func (l *CodeSyntaxLayer) BackgroundColor() *Color

func (*CodeSyntaxLayer) BorderColor

func (l *CodeSyntaxLayer) BorderColor() *Color

func (*CodeSyntaxLayer) Clear

func (l *CodeSyntaxLayer) Clear()

func (*CodeSyntaxLayer) ClearBackgroundColor

func (l *CodeSyntaxLayer) ClearBackgroundColor()

func (*CodeSyntaxLayer) ClearBorderColor

func (l *CodeSyntaxLayer) ClearBorderColor()

func (*CodeSyntaxLayer) ClearColor

func (l *CodeSyntaxLayer) ClearColor()

func (*CodeSyntaxLayer) Color

func (l *CodeSyntaxLayer) Color() *Color

func (*CodeSyntaxLayer) Data

func (l *CodeSyntaxLayer) Data() interface{}

func (*CodeSyntaxLayer) SetBackgroundColor

func (l *CodeSyntaxLayer) SetBackgroundColor(color Color)

func (*CodeSyntaxLayer) SetBorderColor

func (l *CodeSyntaxLayer) SetBorderColor(color Color)

func (*CodeSyntaxLayer) SetColor

func (l *CodeSyntaxLayer) SetColor(color Color)

func (*CodeSyntaxLayer) SetData

func (l *CodeSyntaxLayer) SetData(data interface{})

func (*CodeSyntaxLayer) SpanAt

func (l *CodeSyntaxLayer) SpanAt(runeIndex int) *interval.IntData

func (*CodeSyntaxLayer) Spans

func (*CodeSyntaxLayer) UpdateSpans

func (l *CodeSyntaxLayer) UpdateSpans(runeCount int, edits []TextBoxEdit)

type CodeSyntaxLayers

type CodeSyntaxLayers []*CodeSyntaxLayer

func (*CodeSyntaxLayers) Clear

func (l *CodeSyntaxLayers) Clear()

func (*CodeSyntaxLayers) Get

func (l *CodeSyntaxLayers) Get(idx int) *CodeSyntaxLayer

type Color

type Color struct {
	R, G, B, A float32
}

func ColorFromHex

func ColorFromHex(hex uint32) Color

func (Color) MulRGB

func (c Color) MulRGB(s float32) Color

func (Color) Saturate

func (c Color) Saturate() Color

type Container

type Container interface {
	Parent
	AddChild(child Control) *Child
	AddChildAt(index int, child Control) *Child
	RemoveChild(child Control)
	RemoveChildAt(index int)
	RemoveAll()
	Padding() math.Spacing
	SetPadding(math.Spacing)
}

type Control

type Control interface {
	// Size returns the size of the control. If the control is not attached, then
	// the returned size is undefined.
	Size() math.Size

	// SetSize sets the size of the control to the specified value.
	// SetSize should only be called by the parent of the control during layout.
	SetSize(math.Size)

	// Draw draws the control's visual apperance into the returned, new canvas.
	// Draw is typically called by the parent of the control - calling Draw will
	// not issue a re-draw of an attached control.
	Draw() Canvas

	// Parent returns the parent of the control.
	Parent() Parent

	// SetParent sets the parent of the control.
	// SetParent should only be called by the new parent of the control.
	SetParent(Parent)

	// Attached returns true if the control is directly or indirectly attached
	// to a window.
	Attached() bool

	// Attach is called when the control is directly or indirectly attached to a
	// window.
	// Attach should only be called by the parent of the control.
	Attach()

	// Detach is called when the control is directly or indirectly detached from a
	// window.
	// Detach should only be called by the parent of the control.
	Detach()

	// DesiredSize returns the desired size of the control based on the min and
	// max size limits. The parent control may ignore the desired size.
	DesiredSize(min, max math.Size) math.Size

	// Margin returns the desired spacing between sibling controls.
	Margin() math.Spacing

	// SetMargin set the desired spacing between sibling controls, issuing a
	// relayout if the margin has changed.
	SetMargin(math.Spacing)

	// IsVisible returns true if the control is visible.
	IsVisible() bool

	// SetVisible sets the visibility of the control.
	SetVisible(bool)

	// ContainsPoint returns true if the specified local-space point is considered
	// within the control.
	ContainsPoint(math.Point) bool

	// IsMouseOver returns true if the mouse cursor was last reported within the
	// control.
	IsMouseOver() bool

	// IsMouseDown returns true if button was last reported pressed on the
	// control.
	IsMouseDown(button MouseButton) bool

	// Click is called when the mouse is pressed and released on the control.
	// If Click returns true, then the click event is consumed by the control,
	// otherwise the next control below the should be considered for the click
	// event.
	Click(MouseEvent) (consume bool)

	// DoubleClick is called when the mouse is double-clicked on the control.
	// If DoubleClick returns true, then the double-click event is consumed by the
	// control, otherwise the next control below the should be considered for the
	// double-click event.
	DoubleClick(MouseEvent) (consume bool)

	// KeyPress is called when a keyboard key is pressed while the control (or
	// non-consuming child) has focus. If KeyPress returns true, then the
	// key-press event is consumed by the control, otherwise the parent control
	// should be considered for the key-press event.
	KeyPress(KeyboardEvent) (consume bool)

	// KeyStroke is called when a key-storke is made while the control (or
	// non-consuming child) has focus. If KeyStroke returns true, then the
	// key-stroke event is consumed by the control, otherwise the parent control
	// should be considered for the key-stroke event.
	KeyStroke(KeyStrokeEvent) (consume bool)

	// MouseScroll is called when a mouse scroll is made while the control (or
	// non-consuming child) has focus. If MouseScroll returns true, then the
	// mouse-scroll event is consumed by the control, otherwise the parent control
	// should be considered for the key-stroke event.
	MouseScroll(MouseEvent) (consume bool)

	// MouseMove is called when the mouse cursor moves over the control.
	MouseMove(MouseEvent)

	// MouseEnter is called when the mouse cursor transitions from outside to
	// inside the bounds of the control.
	MouseEnter(MouseEvent)

	// MouseExit is called when the mouse cursor transitions from inside to
	// outside the bounds of the control.
	MouseExit(MouseEvent)

	// MouseDown is called when a mouse button is pressed while the mouse cursor
	// is over the control.
	MouseDown(MouseEvent)

	// MouseUp is called when a mouse button is released while the mouse cursor
	// is over the control.
	MouseUp(MouseEvent)

	// KeyDown is called when a keyboard button is pressed while the control (or
	// child control) has focus.
	KeyDown(KeyboardEvent)

	// KeyUp is called when a keyboard button is released while the control (or
	// child control) has focus.
	KeyUp(KeyboardEvent)

	// KeyRepeat is called when a keyboard button held long enough for a
	// repeat-key event while the control (or child control) has focus.
	KeyRepeat(KeyboardEvent)

	// OnAttach subscribes f to be called whenever the control is attached.
	OnAttach(f func()) EventSubscription

	// OnDetach subscribes f to be called whenever the control is detached.
	OnDetach(f func()) EventSubscription

	// OnKeyPress subscribes f to be called whenever the control receives a
	// key-press event.
	OnKeyPress(f func(KeyboardEvent)) EventSubscription

	// OnKeyStroke subscribes f to be called whenever the control receives a
	// key-stroke event.
	OnKeyStroke(f func(KeyStrokeEvent)) EventSubscription

	// OnClick subscribes f to be called whenever the control receives a click
	// event.
	OnClick(f func(MouseEvent)) EventSubscription

	// OnDoubleClick subscribes f to be called whenever the control receives a
	// double-click event.
	OnDoubleClick(f func(MouseEvent)) EventSubscription

	// OnMouseMove subscribes f to be called whenever the control receives a
	// mouse-move event.
	OnMouseMove(f func(MouseEvent)) EventSubscription

	// OnMouseEnter subscribes f to be called whenever the control receives a
	// mouse-enter event.
	OnMouseEnter(f func(MouseEvent)) EventSubscription

	// OnMouseExit subscribes f to be called whenever the control receives a
	// mouse-exit event.
	OnMouseExit(f func(MouseEvent)) EventSubscription

	// OnMouseDown subscribes f to be called whenever the control receives a
	// mouse-down event.
	OnMouseDown(f func(MouseEvent)) EventSubscription

	// OnMouseUp subscribes f to be called whenever the control receives a
	// mouse-up event.
	OnMouseUp(f func(MouseEvent)) EventSubscription

	// OnMouseScroll subscribes f to be called whenever the control receives a
	// mouse-scroll event.
	OnMouseScroll(f func(MouseEvent)) EventSubscription

	// OnKeyDown subscribes f to be called whenever the control receives a
	// key-down event.
	OnKeyDown(f func(KeyboardEvent)) EventSubscription

	// OnKeyUp subscribes f to be called whenever the control receives a
	// key-up event.
	OnKeyUp(f func(KeyboardEvent)) EventSubscription

	// OnKeyRepeat subscribes f to be called whenever the control receives a
	// key-repeat event.
	OnKeyRepeat(f func(KeyboardEvent)) EventSubscription
}

Control is the interface exposed by all UI control elements.

func FindControl

func FindControl(root Parent, test func(Control) (found bool)) Control

FindControl performs a depth-first search of the controls starting from root, calling test with each visited control. If test returns true then the search is stopped and FindControl returns the Control passed to test. If no call to test returns true then FindControl returns nil.

type ControlList

type ControlList []Control

func (ControlList) Contains

func (l ControlList) Contains(c Control) bool

type ControlPoint

type ControlPoint struct {
	C Control
	P math.Point
}

type ControlPointList

type ControlPointList []ControlPoint

func ControlsUnder

func ControlsUnder(p math.Point, c Parent) ControlPointList

func TopControlsUnder

func TopControlsUnder(p math.Point, c Parent) ControlPointList

func (ControlPointList) Contains

func (l ControlPointList) Contains(c Control) bool

func (ControlPointList) Find

func (l ControlPointList) Find(c Control) (math.Point, bool)

type DefaultAdapter

type DefaultAdapter struct {
	AdapterBase
	// contains filtered or unexported fields
}

func CreateDefaultAdapter

func CreateDefaultAdapter() *DefaultAdapter

func (*DefaultAdapter) Count

func (a *DefaultAdapter) Count() int

func (*DefaultAdapter) Create

func (a *DefaultAdapter) Create(theme Theme, index int) Control

func (*DefaultAdapter) ItemAt

func (a *DefaultAdapter) ItemAt(index int) AdapterItem

func (*DefaultAdapter) ItemIndex

func (a *DefaultAdapter) ItemIndex(item AdapterItem) int

func (*DefaultAdapter) Items

func (a *DefaultAdapter) Items() interface{}

func (*DefaultAdapter) SetItems

func (a *DefaultAdapter) SetItems(items interface{})

func (*DefaultAdapter) SetSize

func (a *DefaultAdapter) SetSize(s math.Size)

func (*DefaultAdapter) SetSizeAsLargest

func (a *DefaultAdapter) SetSizeAsLargest(theme Theme)

func (*DefaultAdapter) SetStyleLabel

func (a *DefaultAdapter) SetStyleLabel(f func(Theme, Label))

func (*DefaultAdapter) Size

func (a *DefaultAdapter) Size(theme Theme) math.Size

type Direction

type Direction int
const (
	TopToBottom Direction = iota
	LeftToRight
	BottomToTop
	RightToLeft
)

func (Direction) BottomToTop

func (d Direction) BottomToTop() bool

func (Direction) Flip

func (d Direction) Flip() Direction

func (Direction) LeftToRight

func (d Direction) LeftToRight() bool

func (Direction) Orientation

func (d Direction) Orientation() Orientation

func (Direction) RightToLeft

func (d Direction) RightToLeft() bool

func (Direction) TopToBottom

func (d Direction) TopToBottom() bool

type Driver

type Driver interface {
	// Call queues f to be run on the UI go-routine, returning before f may have
	// been called. Call returns false if the driver has been terminated, in which
	// case f may not be called.
	Call(f func()) bool

	// CallSync queues and then blocks for f to be run on the UI go-routine.
	// Call returns false if the driver has been terminated, in which case f may
	// not be called.
	CallSync(f func()) bool

	Terminate()
	SetClipboard(str string)
	GetClipboard() (string, error)

	// CreateFont loads a font from the provided TrueType bytes.
	CreateFont(data []byte, size int) (Font, error)

	// CreateWindowedViewport creates a new windowed Viewport with the specified
	// width and height in device independent pixels.
	CreateWindowedViewport(width, height int, name string) Viewport

	// CreateFullscreenViewport creates a new fullscreen Viewport with the
	// specified width and height in device independent pixels. If width or
	// height is 0, then the viewport adopts the current screen resolution.
	CreateFullscreenViewport(width, height int, name string) Viewport

	CreateCanvas(math.Size) Canvas
	CreateTexture(img image.Image, pixelsPerDip float32) Texture

	// Debug function used to verify that the caller is executing on the UI
	// go-routine. If the caller is not on the UI go-routine then the function
	// panics.
	AssertUIGoroutine()
}
type DropDownList interface {
	Focusable
	Container
	SetBubbleOverlay(BubbleOverlay)
	BubbleOverlay() BubbleOverlay
	Adapter() ListAdapter
	SetAdapter(ListAdapter)
	BorderPen() Pen
	SetBorderPen(Pen)
	BackgroundBrush() Brush
	SetBackgroundBrush(Brush)
	Selected() AdapterItem
	Select(AdapterItem)
	OnSelectionChanged(func(AdapterItem)) EventSubscription
	OnShowList(func()) EventSubscription
	OnHideList(func()) EventSubscription
}

type Event

type Event interface {
	Fire(args ...interface{})
	Listen(interface{}) EventSubscription
	ParameterTypes() []reflect.Type
}

func CreateChanneledEvent

func CreateChanneledEvent(signature interface{}, queue EventQueue) Event

func CreateEvent

func CreateEvent(signature interface{}) Event

type EventBase

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

func (*EventBase) Fire

func (e *EventBase) Fire(args ...interface{})

func (*EventBase) InvokeListeners

func (e *EventBase) InvokeListeners(args []interface{})

func (*EventBase) Listen

func (e *EventBase) Listen(listener interface{}) EventSubscription

Event compliance

func (*EventBase) ParameterTypes

func (e *EventBase) ParameterTypes() []reflect.Type

func (*EventBase) String

func (e *EventBase) String() string

func (*EventBase) VerifyArguments

func (e *EventBase) VerifyArguments(args []interface{})

func (*EventBase) VerifySignature

func (e *EventBase) VerifySignature(argTys []reflect.Type, isVariadic bool)

type EventListener

type EventListener struct {
	Id       int
	Function reflect.Value
}

type EventQueue

type EventQueue interface {
	Inject(func())
}

type EventSubscription

type EventSubscription interface {
	Unlisten()
}

type FilteredListAdapter

type FilteredListAdapter struct {
	DefaultAdapter
	// contains filtered or unexported fields
}

func (*FilteredListAdapter) SetItems

func (a *FilteredListAdapter) SetItems(items []FilteredListItem)

func (*FilteredListAdapter) Sort

func (a *FilteredListAdapter) Sort(partial string)

type FilteredListItem

type FilteredListItem struct {
	Name string
	Data interface{}
}

type FocusController

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

func CreateFocusController

func CreateFocusController(window Window) *FocusController

func (*FocusController) Focus

func (c *FocusController) Focus() Focusable

func (*FocusController) FocusNext

func (c *FocusController) FocusNext()

func (*FocusController) FocusPrev

func (c *FocusController) FocusPrev()

func (*FocusController) Focusable

func (c *FocusController) Focusable(ctrl Control) Focusable

func (*FocusController) NextChildFocusable

func (c *FocusController) NextChildFocusable(p Parent, after Control, forwards bool) Focusable

func (*FocusController) NextFocusable

func (c *FocusController) NextFocusable(after Control, forwards bool) Focusable

func (*FocusController) SetFocus

func (c *FocusController) SetFocus(f Focusable)

func (*FocusController) SetFocusCount

func (c *FocusController) SetFocusCount() int

type Focusable

type Focusable interface {
	Control

	// IsFocusable returns true if the control is currently in a state where it
	// can acquire focus.
	IsFocusable() bool

	// HasFocus returns true when the control has focus.
	HasFocus() bool

	// GainedFocus is called when the Focusable gains focus.
	// This method is called by the FocusManager should not be called by the user.
	GainedFocus()

	// LostFocus is called when the Focusable loses focus.
	// This method is called by the FocusManager should not be called by the user.
	LostFocus()

	// OnGainedFocus subscribes f to be called whenever the control gains focus.
	OnGainedFocus(f func()) EventSubscription

	// OnLostFocus subscribes f to be called whenever the control loses focus.
	OnLostFocus(f func()) EventSubscription
}

Focusable is the optional interface implmented by controls that have the ability to acquire focus. A control with focus will receive keyboard input first.

type Font

type Font interface {
	LoadGlyphs(first, last rune)
	Size() int
	GlyphMaxSize() math.Size
	Measure(*TextBlock) math.Size
	Layout(*TextBlock) (offsets []math.Point)
	Index(rune) truetype.Index
}

A Font represents a TrueType font loaded by the GXUI driver.

type HorizontalAlignment

type HorizontalAlignment int
const (
	AlignLeft HorizontalAlignment = iota
	AlignCenter
	AlignRight
)

func (HorizontalAlignment) AlignCenter

func (a HorizontalAlignment) AlignCenter() bool

func (HorizontalAlignment) AlignLeft

func (a HorizontalAlignment) AlignLeft() bool

func (HorizontalAlignment) AlignRight

func (a HorizontalAlignment) AlignRight() bool

type Image

type Image interface {
	Control
	Texture() Texture
	SetTexture(Texture)
	Canvas() Canvas
	SetCanvas(Canvas)
	BorderPen() Pen
	SetBorderPen(Pen)
	BackgroundBrush() Brush
	SetBackgroundBrush(Brush)
	ScalingMode() ScalingMode
	SetScalingMode(ScalingMode)
	SetExplicitSize(math.Size)
	AspectMode() AspectMode
	SetAspectMode(AspectMode)
	PixelAt(math.Point) (math.Point, bool) // TODO: Remove
}

type KeyStrokeEvent

type KeyStrokeEvent struct {
	Character rune
	Modifier  KeyboardModifier
}

type KeyboardController

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

func CreateKeyboardController

func CreateKeyboardController(w Window) *KeyboardController

type KeyboardEvent

type KeyboardEvent struct {
	Key      KeyboardKey
	Modifier KeyboardModifier
}

type KeyboardKey

type KeyboardKey int
const (
	KeyUnknown KeyboardKey = iota
	KeySpace
	KeyApostrophe
	KeyComma
	KeyMinus
	KeyPeriod
	KeySlash
	Key0
	Key1
	Key2
	Key3
	Key4
	Key5
	Key6
	Key7
	Key8
	Key9
	KeySemicolon
	KeyEqual
	KeyA
	KeyB
	KeyC
	KeyD
	KeyE
	KeyF
	KeyG
	KeyH
	KeyI
	KeyJ
	KeyK
	KeyL
	KeyM
	KeyN
	KeyO
	KeyP
	KeyQ
	KeyR
	KeyS
	KeyT
	KeyU
	KeyV
	KeyW
	KeyX
	KeyY
	KeyZ
	KeyLeftBracket
	KeyBackslash
	KeyRightBracket
	KeyGraveAccent
	KeyWorld1
	KeyWorld2
	KeyEscape
	KeyEnter
	KeyTab
	KeyBackspace
	KeyInsert
	KeyDelete
	KeyRight
	KeyLeft
	KeyDown
	KeyUp
	KeyPageUp
	KeyPageDown
	KeyHome
	KeyEnd
	KeyCapsLock
	KeyScrollLock
	KeyNumLock
	KeyPrintScreen
	KeyPause
	KeyF1
	KeyF2
	KeyF3
	KeyF4
	KeyF5
	KeyF6
	KeyF7
	KeyF8
	KeyF9
	KeyF10
	KeyF11
	KeyF12
	KeyKp0
	KeyKp1
	KeyKp2
	KeyKp3
	KeyKp4
	KeyKp5
	KeyKp6
	KeyKp7
	KeyKp8
	KeyKp9
	KeyKpDecimal
	KeyKpDivide
	KeyKpMultiply
	KeyKpSubtract
	KeyKpAdd
	KeyKpEnter
	KeyKpEqual
	KeyLeftShift
	KeyLeftControl
	KeyLeftAlt
	KeyLeftSuper
	KeyRightShift
	KeyRightControl
	KeyRightAlt
	KeyRightSuper
	KeyMenu
	KeyLast
)

func (KeyboardKey) String

func (k KeyboardKey) String() string

type KeyboardModifier

type KeyboardModifier int
const (
	ModNone    KeyboardModifier = 0
	ModShift   KeyboardModifier = 1
	ModControl KeyboardModifier = 2
	ModAlt     KeyboardModifier = 4
	ModSuper   KeyboardModifier = 8
)

func (KeyboardModifier) Alt

func (m KeyboardModifier) Alt() bool

func (KeyboardModifier) Control

func (m KeyboardModifier) Control() bool

func (KeyboardModifier) Shift

func (m KeyboardModifier) Shift() bool

func (KeyboardModifier) Super

func (m KeyboardModifier) Super() bool

type Label

type Label interface {
	Control
	Text() string
	SetText(string)
	Font() Font
	SetFont(Font)
	Color() Color
	SetColor(Color)
	Multiline() bool
	SetMultiline(bool)
	SetHorizontalAlignment(HorizontalAlignment)
	HorizontalAlignment() HorizontalAlignment
	SetVerticalAlignment(VerticalAlignment)
	VerticalAlignment() VerticalAlignment
}

type LinearLayout

type LinearLayout interface {
	// LinearLayout extends the Control interface.
	Control

	// LinearLayout extends the Container interface.
	Container

	// Direction returns the direction of layout for this LinearLayout.
	Direction() Direction

	// Direction sets the direction of layout for this LinearLayout.
	SetDirection(Direction)

	// SizeMode returns the desired size behaviour for this LinearLayout.
	SizeMode() SizeMode

	// SetSizeMode sets the desired size behaviour for this LinearLayout.
	SetSizeMode(SizeMode)

	// HorizontalAlignment returns the alignment of the child Controls when laying
	// out TopToBottom or BottomToTop. It has no effect when the layout direction
	// is LeftToRight or RightToLeft.
	HorizontalAlignment() HorizontalAlignment

	// SetHorizontalAlignment sets the alignment of the child Controls when laying
	// out TopToBottom or BottomToTop. It has no effect when the layout direction
	// is LeftToRight or RightToLeft.
	SetHorizontalAlignment(HorizontalAlignment)

	// VerticalAlignment returns the alignment of the child Controls when laying
	// out LeftToRight or RightToLeft. It has no effect when the layout direction
	// is TopToBottom or BottomToTop.
	VerticalAlignment() VerticalAlignment

	// SetVerticalAlignment returns the alignment of the child Controls when
	// laying out LeftToRight or RightToLeft. It has no effect when the layout
	// direction is TopToBottom or BottomToTop.
	SetVerticalAlignment(VerticalAlignment)

	// BorderPen returns the Pen used to draw the LinearLayout's border.
	BorderPen() Pen

	// SetBorderPen sets the Pen used to draw the LinearLayout's border.
	SetBorderPen(Pen)

	// BackgroundBrush returns the Brush used to fill the LinearLayout's
	// background.
	BackgroundBrush() Brush

	// SetBackgroundBrush sets the Brush used to fill the LinearLayout's
	// background.
	SetBackgroundBrush(Brush)
}

LinearLayout is a Container that lays out its child Controls into a column or row. The layout will always start by positioning the first (0'th) child, and then depending on the direction, will position each successive child either to the left, top, right or bottom of the preceding child Control. LinearLayout makes no effort to distribute remaining space evenly between the children - an child control that is laid out before others will reduce the remaining space given to the later children, even to the point that there is zero space remaining.

type List

type List interface {
	Focusable
	Parent
	Adapter() ListAdapter
	SetAdapter(ListAdapter)
	SetOrientation(Orientation)
	Orientation() Orientation
	BorderPen() Pen
	SetBorderPen(Pen)
	BackgroundBrush() Brush
	SetBackgroundBrush(Brush)
	ScrollTo(AdapterItem)
	IsItemVisible(AdapterItem) bool
	ItemControl(AdapterItem) Control
	Selected() AdapterItem
	Select(AdapterItem) bool
	OnSelectionChanged(func(AdapterItem)) EventSubscription
	OnItemClicked(func(MouseEvent, AdapterItem)) EventSubscription
}

type ListAdapter

type ListAdapter interface {
	// Count returns the total number of items.
	Count() int

	// ItemAt returns the AdapterItem for the item at index i. It is important
	// for the Adapter to return consistent AdapterItems for the same data, so
	// that selections can be persisted, or re-ordering animations can be played
	// when the dataset changes.
	// The AdapterItem returned must be equality-unique across all indices.
	ItemAt(index int) AdapterItem

	// ItemIndex returns the index of item, or -1 if the adapter does not contain
	// item.
	ItemIndex(item AdapterItem) int

	// Create returns a Control visualizing the item at the specified index.
	Create(theme Theme, index int) Control

	// Size returns the size that each of the item's controls will be displayed
	// at for the given theme.
	Size(Theme) math.Size

	// OnDataChanged registers f to be called when there is a partial change in
	// the items of the adapter. Scroll positions and selections should be
	// preserved if possible.
	// If recreateControls is true then each of the visible controls should be
	// recreated by re-calling Create().
	OnDataChanged(f func(recreateControls bool)) EventSubscription

	// OnDataReplaced registers f to be called when there is a complete
	// replacement of items in the adapter.
	OnDataReplaced(f func()) EventSubscription
}

ListAdapter is an interface used to visualize a flat set of items. Users of the ListAdapter should presume the data is unchanged until the OnDataChanged or OnDataReplaced events are fired.

type MouseButton

type MouseButton int
const (
	MouseButtonInvalid MouseButton = iota
	MouseButtonLeft
	MouseButtonMiddle
	MouseButtonRight
)

type MouseController

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

func CreateMouseController

func CreateMouseController(w Window, focusController *FocusController) *MouseController

type MouseEvent

type MouseEvent struct {
	Button           MouseButton
	State            MouseState
	Point            math.Point // Local to the event receiver
	WindowPoint      math.Point
	Window           Window
	ScrollX, ScrollY int
	Modifier         KeyboardModifier
}

type MouseState

type MouseState int

func (MouseState) IsDown

func (s MouseState) IsDown(b MouseButton) bool

type Orientation

type Orientation int
const (
	Vertical Orientation = iota
	Horizontal
)

func (Orientation) Flip

func (o Orientation) Flip() Orientation

func (Orientation) Horizontal

func (o Orientation) Horizontal() bool

func (Orientation) Major

func (o Orientation) Major(x, y int) int

func (Orientation) Minor

func (o Orientation) Minor(x, y int) int

func (Orientation) Vertical

func (o Orientation) Vertical() bool

type PanelHolder

type PanelHolder interface {
	Control
	AddPanel(panel Control, name string)
	AddPanelAt(panel Control, name string, index int)
	RemovePanel(panel Control)
	Select(int)
	PanelCount() int
	PanelIndex(Control) int
	Panel(int) Control
	Tab(int) Control
}

type Parent

type Parent interface {
	Children() Children
	Relayout()
	Redraw()
}

func CommonAncestor

func CommonAncestor(a, b Control) Parent

type ParentPoint

type ParentPoint struct {
	C Parent
	P math.Point
}

type Pen

type Pen struct {
	Width float32
	Color Color
}
var DefaultPen Pen = CreatePen(1.0, Black)
var TransparentPen Pen = CreatePen(0.0, Transparent)
var WhitePen Pen = CreatePen(1.0, White)

func CreatePen

func CreatePen(width float32, color Color) Pen

type Polygon

type Polygon []PolygonVertex

type PolygonVertex

type PolygonVertex struct {
	Position      math.Point
	RoundedRadius float32
}

type ProgressBar

type ProgressBar interface {
	Control
	SetDesiredSize(math.Size)
	SetProgress(int)
	Progress() int
	SetTarget(int)
	Target() int
}

type ScalingMode

type ScalingMode int
const (
	Scaling1to1 ScalingMode = iota
	ScalingExpandGreedy
	ScalingExplicitSize
)

type ScrollBar

type ScrollBar interface {
	Control

	OnScroll(func(from, to int)) EventSubscription
	ScrollPosition() (from, to int)
	SetScrollPosition(from, to int)
	ScrollLimit() int
	SetScrollLimit(l int)
	AutoHide() bool
	SetAutoHide(l bool)
	Orientation() Orientation
	SetOrientation(Orientation)
}

type ScrollLayout

type ScrollLayout interface {
	Control
	Parent
	SetChild(Control)
	Child() Control
	SetScrollAxis(horizontal, vertical bool)
	ScrollAxis() (horizontal, vertical bool)
	BorderPen() Pen
	SetBorderPen(Pen)
	BackgroundBrush() Brush
	SetBackgroundBrush(Brush)
}

type SelectionTransform

type SelectionTransform func(TextSelection) TextSelection

type SimpleEvent

type SimpleEvent struct {
	EventBase
}

type SizeMode

type SizeMode int
const (
	ExpandToContent SizeMode = iota
	Fill
)

func (SizeMode) ExpandToContent

func (s SizeMode) ExpandToContent() bool

func (SizeMode) Fill

func (s SizeMode) Fill() bool

type SplitterLayout

type SplitterLayout interface {
	Control
	Container
	ChildWeight(Control) float32
	SetChildWeight(Control, float32)
	Orientation() Orientation
	SetOrientation(Orientation)
}

type Stringer

type Stringer interface {
	String() string
}

type TableLayout

type TableLayout interface {
	Control

	Parent

	SetGrid(rows, columns int)
	// Add child at cell {x, y} with size of {w, h}
	SetChildAt(x, y, w, h int, child Control) *Child
	RemoveChild(child Control)
}

type TextBlock

type TextBlock struct {
	Runes     []rune
	AlignRect math.Rect
	H         HorizontalAlignment
	V         VerticalAlignment
}

TextBlock is a sequence of runes to be laid out.

type TextBox

type TextBox interface {
	Focusable
	Controller() *TextBoxController
	OnSelectionChanged(func()) EventSubscription
	OnTextChanged(func([]TextBoxEdit)) EventSubscription
	Padding() math.Spacing
	SetPadding(math.Spacing)
	Runes() []rune
	Text() string
	SetText(string)
	Font() Font
	SetFont(Font)
	Multiline() bool
	SetMultiline(bool)
	DesiredWidth() int
	SetDesiredWidth(desiredWidth int)
	TextColor() Color
	SetTextColor(Color)
	Select(TextSelectionList)
	SelectAll()
	Carets() []int
	RuneIndexAt(p math.Point) (idx int, found bool)
	TextAt(s, e int) string
	WordAt(runeIndex int) string
	ScrollToLine(int)
	ScrollToRune(int)
	LineIndex(runeIndex int) int
	LineStart(line int) int
	LineEnd(line int) int
}

type TextBoxController

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

func CreateTextBoxController

func CreateTextBoxController() *TextBoxController

func (*TextBoxController) AddCaret

func (t *TextBoxController) AddCaret(c int)

func (*TextBoxController) AddCarets

func (t *TextBoxController) AddCarets(transform SelectionTransform)

func (*TextBoxController) AddCaretsDown

func (t *TextBoxController) AddCaretsDown()

func (*TextBoxController) AddCaretsUp

func (t *TextBoxController) AddCaretsUp()

func (*TextBoxController) AddSelection

func (t *TextBoxController) AddSelection(s TextSelection)

func (*TextBoxController) Backspace

func (t *TextBoxController) Backspace()

func (*TextBoxController) Caret

func (t *TextBoxController) Caret(i int) int

func (*TextBoxController) Carets

func (t *TextBoxController) Carets() []int

func (*TextBoxController) ClearSelections

func (t *TextBoxController) ClearSelections()

func (*TextBoxController) Delete

func (t *TextBoxController) Delete()

func (*TextBoxController) Deselect

func (t *TextBoxController) Deselect(moveCaretToStart bool) (deselected bool)

func (*TextBoxController) FirstCaret

func (t *TextBoxController) FirstCaret() int

func (*TextBoxController) FirstSelection

func (t *TextBoxController) FirstSelection() TextSelection

func (*TextBoxController) GrowSelections

func (t *TextBoxController) GrowSelections(transform SelectionTransform)

func (*TextBoxController) Indent

func (t *TextBoxController) Indent() string

func (*TextBoxController) IndentSelection

func (t *TextBoxController) IndentSelection()

func (*TextBoxController) IndexDown

func (t *TextBoxController) IndexDown(sel TextSelection) TextSelection

func (*TextBoxController) IndexEnd

func (*TextBoxController) IndexFirst

func (t *TextBoxController) IndexFirst(sel TextSelection) TextSelection

func (*TextBoxController) IndexHome

func (t *TextBoxController) IndexHome(sel TextSelection) TextSelection

func (*TextBoxController) IndexLast

func (t *TextBoxController) IndexLast(sel TextSelection) TextSelection

func (*TextBoxController) IndexLeft

func (t *TextBoxController) IndexLeft(sel TextSelection) TextSelection

func (*TextBoxController) IndexRight

func (t *TextBoxController) IndexRight(sel TextSelection) TextSelection

func (*TextBoxController) IndexUp

func (*TextBoxController) IndexWordLeft

func (t *TextBoxController) IndexWordLeft(sel TextSelection) TextSelection

func (*TextBoxController) IndexWordRight

func (t *TextBoxController) IndexWordRight(sel TextSelection) TextSelection

func (*TextBoxController) LastCaret

func (t *TextBoxController) LastCaret() int

func (*TextBoxController) LastSelection

func (t *TextBoxController) LastSelection() TextSelection

func (*TextBoxController) Line

func (t *TextBoxController) Line(i int) string

func (*TextBoxController) LineAndRow

func (t *TextBoxController) LineAndRow(index int) (line, row int)

func (*TextBoxController) LineCount

func (t *TextBoxController) LineCount() int

func (*TextBoxController) LineEnd

func (t *TextBoxController) LineEnd(i int) int

func (*TextBoxController) LineIndent

func (t *TextBoxController) LineIndent(lineIndex int) int

func (*TextBoxController) LineIndex

func (t *TextBoxController) LineIndex(p int) int

func (*TextBoxController) LineRunes

func (t *TextBoxController) LineRunes(i int) []rune

func (*TextBoxController) LineStart

func (t *TextBoxController) LineStart(i int) int

func (*TextBoxController) MoveDown

func (t *TextBoxController) MoveDown()

func (*TextBoxController) MoveEnd

func (t *TextBoxController) MoveEnd()

func (*TextBoxController) MoveFirst

func (t *TextBoxController) MoveFirst()

func (*TextBoxController) MoveHome

func (t *TextBoxController) MoveHome()

func (*TextBoxController) MoveLast

func (t *TextBoxController) MoveLast()

func (*TextBoxController) MoveLeft

func (t *TextBoxController) MoveLeft()

func (*TextBoxController) MoveLeftByWord

func (t *TextBoxController) MoveLeftByWord()

func (*TextBoxController) MoveRight

func (t *TextBoxController) MoveRight()

func (*TextBoxController) MoveRightByWord

func (t *TextBoxController) MoveRightByWord()

func (*TextBoxController) MoveSelections

func (t *TextBoxController) MoveSelections(transform SelectionTransform)

func (*TextBoxController) MoveUp

func (t *TextBoxController) MoveUp()

func (*TextBoxController) OnSelectionChanged

func (t *TextBoxController) OnSelectionChanged(f func()) EventSubscription

func (*TextBoxController) OnTextChanged

func (t *TextBoxController) OnTextChanged(f func([]TextBoxEdit)) EventSubscription

func (*TextBoxController) Replace

func (t *TextBoxController) Replace(f func(sel TextSelection) string)

func (*TextBoxController) ReplaceAll

func (t *TextBoxController) ReplaceAll(str string)

func (*TextBoxController) ReplaceAllRunes

func (t *TextBoxController) ReplaceAllRunes(str []rune)

func (*TextBoxController) ReplaceAt

func (t *TextBoxController) ReplaceAt(text []rune, s, e int, replacement []rune) ([]rune, TextBoxEdit)

func (*TextBoxController) ReplaceRunes

func (t *TextBoxController) ReplaceRunes(f func(sel TextSelection) []rune)

func (*TextBoxController) ReplaceWithNewline

func (t *TextBoxController) ReplaceWithNewline()

func (*TextBoxController) ReplaceWithNewlineKeepIndent

func (t *TextBoxController) ReplaceWithNewlineKeepIndent()

func (*TextBoxController) RestoreNextSelections

func (t *TextBoxController) RestoreNextSelections()

func (*TextBoxController) RestorePreviousSelections

func (t *TextBoxController) RestorePreviousSelections()

func (*TextBoxController) RuneInWord

func (t *TextBoxController) RuneInWord(r rune) bool

func (*TextBoxController) SelectAll

func (t *TextBoxController) SelectAll()

func (*TextBoxController) SelectDown

func (t *TextBoxController) SelectDown()

func (*TextBoxController) SelectEnd

func (t *TextBoxController) SelectEnd()

func (*TextBoxController) SelectFirst

func (t *TextBoxController) SelectFirst()

func (*TextBoxController) SelectHome

func (t *TextBoxController) SelectHome()

func (*TextBoxController) SelectLast

func (t *TextBoxController) SelectLast()

func (*TextBoxController) SelectLeft

func (t *TextBoxController) SelectLeft()

func (*TextBoxController) SelectLeftByWord

func (t *TextBoxController) SelectLeftByWord()

func (*TextBoxController) SelectRight

func (t *TextBoxController) SelectRight()

func (*TextBoxController) SelectRightByWord

func (t *TextBoxController) SelectRightByWord()

func (*TextBoxController) SelectUp

func (t *TextBoxController) SelectUp()

func (*TextBoxController) Selection

func (t *TextBoxController) Selection(i int) TextSelection

func (*TextBoxController) SelectionCount

func (t *TextBoxController) SelectionCount() int

func (*TextBoxController) SelectionLineText

func (t *TextBoxController) SelectionLineText(i int) string

func (*TextBoxController) SelectionText

func (t *TextBoxController) SelectionText(i int) string

func (*TextBoxController) Selections

func (t *TextBoxController) Selections() TextSelectionList

func (*TextBoxController) SetCaret

func (t *TextBoxController) SetCaret(c int)

func (*TextBoxController) SetIndent

func (t *TextBoxController) SetIndent(indent string)

func (*TextBoxController) SetSelection

func (t *TextBoxController) SetSelection(s TextSelection)

func (*TextBoxController) SetSelections

func (t *TextBoxController) SetSelections(s TextSelectionList)

func (*TextBoxController) SetText

func (t *TextBoxController) SetText(str string)

func (*TextBoxController) SetTextEdits

func (t *TextBoxController) SetTextEdits(text []rune, edits []TextBoxEdit)

func (*TextBoxController) SetTextRunes

func (t *TextBoxController) SetTextRunes(text []rune)

func (*TextBoxController) StoreCaretLocations

func (t *TextBoxController) StoreCaretLocations()

func (*TextBoxController) Text

func (t *TextBoxController) Text() string

func (*TextBoxController) TextRange

func (t *TextBoxController) TextRange(s, e int) string

func (*TextBoxController) TextRunes

func (t *TextBoxController) TextRunes() []rune

func (*TextBoxController) UnindentSelection

func (t *TextBoxController) UnindentSelection()

func (*TextBoxController) WordAt

func (t *TextBoxController) WordAt(runeIdx int) (s, e int)

type TextBoxEdit

type TextBoxEdit struct {
	At, Delta int
	Old, New  []rune
}

type TextSelection

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

func CreateTextSelection

func CreateTextSelection(start, end int, caretAtStart bool) TextSelection

func (TextSelection) Caret

func (i TextSelection) Caret() int

func (TextSelection) CaretAtStart

func (i TextSelection) CaretAtStart() bool

func (TextSelection) End

func (i TextSelection) End() int

func (TextSelection) First

func (i TextSelection) First() int

func (TextSelection) From

func (i TextSelection) From() int

func (TextSelection) Last

func (i TextSelection) Last() int

func (TextSelection) Length

func (i TextSelection) Length() int

func (TextSelection) Offset

func (t TextSelection) Offset(i int) TextSelection

func (TextSelection) Range

func (i TextSelection) Range() (start, end int)

func (TextSelection) Span

func (i TextSelection) Span() (start, end uint64)

func (TextSelection) Start

func (i TextSelection) Start() int

func (TextSelection) Store

func (i TextSelection) Store() TextSelection

func (TextSelection) Stored

func (i TextSelection) Stored() (start, end int)

type TextSelectionList

type TextSelectionList []TextSelection

func (TextSelectionList) Cap

func (l TextSelectionList) Cap() int

func (TextSelectionList) Copy

func (l TextSelectionList) Copy(to, from, count int)

func (*TextSelectionList) GrowTo

func (l *TextSelectionList) GrowTo(length, capacity int)

func (TextSelectionList) Interval

func (l TextSelectionList) Interval(index int) (start, end uint64)

func (TextSelectionList) Len

func (l TextSelectionList) Len() int

func (TextSelectionList) MergeData

func (l TextSelectionList) MergeData(index int, i interval.Node)

func (TextSelectionList) SetInterval

func (l TextSelectionList) SetInterval(index int, start, end uint64)

func (*TextSelectionList) SetLen

func (l *TextSelectionList) SetLen(len int)

func (TextSelectionList) Transform

func (TextSelectionList) TransformCarets

func (l TextSelectionList) TransformCarets(transform SelectionTransform) TextSelectionList

type Texture

type Texture interface {
	Image() image.Image
	Size() math.Size
	SizePixels() math.Size
	FlipY() bool
	SetFlipY(bool)
}

type Theme

type Theme interface {
	Driver() Driver
	DefaultFont() Font
	SetDefaultFont(Font)
	DefaultMonospaceFont() Font
	SetDefaultMonospaceFont(Font)
	CreateBubbleOverlay() BubbleOverlay
	CreateButton() Button
	CreateCodeEditor() CodeEditor
	CreateDropDownList() DropDownList
	CreateImage() Image
	CreateLabel() Label
	CreateLinearLayout() LinearLayout
	CreateList() List
	CreatePanelHolder() PanelHolder
	CreateProgressBar() ProgressBar
	CreateScrollBar() ScrollBar
	CreateScrollLayout() ScrollLayout
	CreateSplitterLayout() SplitterLayout
	CreateTableLayout() TableLayout
	CreateTextBox() TextBox
	CreateTree() Tree
	CreateWindow(width, height int, title string) Window
}

type ToolTipController

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

func CreateToolTipController

func CreateToolTipController(bubbleOverlay BubbleOverlay, driver Driver) *ToolTipController

func (*ToolTipController) AddToolTip

func (c *ToolTipController) AddToolTip(control Control, delaySeconds float32, creator ToolTipCreator)

func (*ToolTipController) ShowToolTip

func (c *ToolTipController) ShowToolTip(toolTip Control, at math.Point)

type ToolTipCreator

type ToolTipCreator func(math.Point) Control

type Tree

type Tree interface {
	Focusable

	// SetAdapter binds the specified TreeAdapter to this Tree control, replacing
	// any previously bound adapter.
	SetAdapter(TreeAdapter)

	// TreeAdapter returns the currently bound adapter.
	Adapter() TreeAdapter

	// Show makes the specified item visible, expanding the tree if necessary.
	Show(AdapterItem)

	// ExpandAll expands all tree nodes.
	ExpandAll()

	// CollapseAll collapses all tree nodes.
	CollapseAll()

	// Selected returns the currently selected item.
	Selected() AdapterItem

	// Select makes the specified item selected. The tree will not automatically
	// expand to the newly selected item. If the Tree does not contain the
	// specified item, then Select returns false and the previous selection
	// remains unaltered.
	Select(AdapterItem) bool

	// OnSelectionChanged registers the function f to be called when the selection
	// changes.
	OnSelectionChanged(f func(AdapterItem)) EventSubscription
}

Tree is the interface of all controls that visualize a hierarchical tree structure of items.

type TreeAdapter

type TreeAdapter interface {
	TreeNodeContainer

	// Size returns the size that each of the item's controls will be displayed
	// at for the given theme.
	Size(Theme) math.Size

	// OnDataChanged registers f to be called when there is a partial change in
	// the items of the adapter. Scroll positions and selections should be
	// preserved if possible.
	// If recreateControls is true then each of the visible controls should be
	// recreated by re-calling Create().
	OnDataChanged(f func(recreateControls bool)) EventSubscription

	// OnDataReplaced registers f to be called when there is a complete
	// replacement of items in the adapter.
	OnDataReplaced(f func()) EventSubscription
}

TreeAdapter is an interface used to visualize a set of hierarchical items. Users of the TreeAdapter should presume the data is unchanged until the OnDataChanged or OnDataReplaced events are fired.

type TreeNode

type TreeNode interface {
	TreeNodeContainer

	// Item returns the AdapterItem this node.
	// It is important for the TreeNode to return consistent AdapterItems for
	// the same data, so that selections can be persisted, or re-ordering
	// animations can be played when the dataset changes.
	// The AdapterItem returned must be equality-unique across the entire Adapter.
	Item() AdapterItem

	// Create returns a Control visualizing this node.
	Create(theme Theme) Control
}

TreeNode is the interface used by nodes in the tree.

type TreeNodeContainer

type TreeNodeContainer interface {
	// Count returns the number of immediate child nodes.
	Count() int

	// Node returns the i'th child TreeNode.
	NodeAt(i int) TreeNode

	// ItemIndex returns the index of the child equal to item, or the index of the
	// child that indirectly contains item, or if the item is not found under this
	// node, -1.
	ItemIndex(item AdapterItem) int
}

TreeNodeContainer is the interface used by nodes that can hold sub-nodes in the tree.

type VerticalAlignment

type VerticalAlignment int
const (
	AlignTop VerticalAlignment = iota
	AlignMiddle
	AlignBottom
)

func (VerticalAlignment) AlignBottom

func (a VerticalAlignment) AlignBottom() bool

func (VerticalAlignment) AlignMiddle

func (a VerticalAlignment) AlignMiddle() bool

func (VerticalAlignment) AlignTop

func (a VerticalAlignment) AlignTop() bool

type Viewer

type Viewer interface {
	View(t Theme) Control
}

type Viewport

type Viewport interface {
	// SizeDips returns the size of the viewport in device-independent pixels.
	// The ratio of pixels to DIPs is based on the screen density and scale
	// adjustments made with the SetScale method.
	SizeDips() math.Size

	// SetSizeDips sets the size of the viewport in device-independent pixels.
	// The ratio of pixels to DIPs is based on the screen density and scale
	// adjustments made with the SetScale method.
	SetSizeDips(math.Size)

	// SizePixels returns the size of the viewport in pixels.
	SizePixels() math.Size

	// Scale returns the display scaling for this viewport.
	// A scale of 1 is unscaled, 2 is twice the regular scaling.
	Scale() float32

	// SetScale alters the display scaling for this viewport.
	// A scale of 1 is unscaled, 2 is twice the regular scaling.
	SetScale(float32)

	// Fullscreen returns true if the viewport was created full-screen.
	Fullscreen() bool

	// Title returns the title of the window.
	// This is usually the text displayed at the top of the window.
	Title() string

	// SetTitle changes the title of the window.
	SetTitle(string)

	// Position returns position of the window.
	Position() math.Point

	// SetPosition changes position of the window.
	SetPosition(math.Point)

	// SetCursor sets the cursor to c.
	SetCursor(*glfw.Cursor)

	// Show makes the window visible.
	Show()

	// Hide makes the window invisible.
	Hide()

	// Close destroys the window.
	// Once the window is closed, no further calls should be made to it.
	Close()

	// SetCanvas changes the displayed content of the viewport to the specified
	// Canvas. As canvases are immutable once completed, every visual update of a
	// viewport will require a call to SetCanvas.
	SetCanvas(Canvas)

	// OnClose subscribes f to be called when the viewport closes.
	OnClose(f func()) EventSubscription

	// OnResize subscribes f to be called whenever the viewport changes size.
	OnResize(f func()) EventSubscription

	// OnMouseMove subscribes f to be called whenever the mouse cursor moves over
	// the viewport.
	OnMouseMove(f func(MouseEvent)) EventSubscription

	// OnMouseEnter subscribes f to be called whenever the mouse cursor enters the
	// viewport.
	OnMouseEnter(f func(MouseEvent)) EventSubscription

	// OnMouseEnter subscribes f to be called whenever the mouse cursor leaves the
	// viewport.
	OnMouseExit(f func(MouseEvent)) EventSubscription

	// OnMouseDown subscribes f to be called whenever a mouse button is pressed
	// while the cursor is inside the viewport.
	OnMouseDown(f func(MouseEvent)) EventSubscription

	// OnMouseUp subscribes f to be called whenever a mouse button is released
	// while the cursor is inside the viewport.
	OnMouseUp(f func(MouseEvent)) EventSubscription

	// OnMouseScroll subscribes f to be called whenever the mouse scroll wheel
	// turns while the cursor is inside the viewport.
	OnMouseScroll(f func(MouseEvent)) EventSubscription

	// OnKeyDown subscribes f to be called whenever a keyboard key is pressed
	// while the viewport has focus.
	OnKeyDown(f func(KeyboardEvent)) EventSubscription

	// OnKeyUp subscribes f to be called whenever a keyboard key is released
	// while the viewport has focus.
	OnKeyUp(f func(KeyboardEvent)) EventSubscription

	// OnKeyRepeat subscribes f to be called whenever a keyboard key-repeat event
	// is raised while the viewport has focus.
	OnKeyRepeat(f func(KeyboardEvent)) EventSubscription

	// OnKeyStroke subscribes f to be called whenever a keyboard key-stroke event
	// is raised while the viewport has focus.
	OnKeyStroke(f func(KeyStrokeEvent)) EventSubscription
}

type Window

type Window interface {
	Container

	// Title returns the title of the window.
	// This is usually the text displayed at the top of the window.
	Title() string

	// SetTitle changes the title of the window.
	SetTitle(string)

	// Scale returns the display scaling for this window.
	// A scale of 1 is unscaled, 2 is twice the regular scaling.
	Scale() float32

	// SetScale alters the display scaling for this window.
	// A scale of 1 is unscaled, 2 is twice the regular scaling.
	SetScale(float32)

	// Size returns the size of this window
	Size() math.Size

	// SetSize sets the window's size
	SetSize(math.Size)

	// Position returns position of the window.
	Position() math.Point

	// SetPosition changes position of the window.
	SetPosition(math.Point)

	// Fullscreen returns true if the window is currently full-screen.
	Fullscreen() bool

	// SetFullscreen makes the window either full-screen or windowed.
	SetFullscreen(bool)

	// Viewport returns this window's viewport.
	Viewport() Viewport

	// Show makes the window visible.
	Show()

	// Hide makes the window invisible.
	Hide()

	// Close destroys the window.
	// Once the window is closed, no further calls should be made to it.
	Close()

	// Focus returns the control currently with focus.
	Focus() Focusable

	// SetFocus gives the specified control Focus, returning true on success or
	// false if the control cannot be given focus.
	SetFocus(Control) bool

	// BackgroundBrush returns the brush used to draw the window background.
	BackgroundBrush() Brush

	// SetBackgroundBrush sets the brush used to draw the window background.
	SetBackgroundBrush(Brush)

	// BorderPen returns the pen used to draw the window border.
	BorderPen() Pen

	// SetBorderPen sets the pen used to draw the window border.
	SetBorderPen(Pen)

	Click(MouseEvent)
	DoubleClick(MouseEvent)
	KeyPress(KeyboardEvent)
	KeyStroke(KeyStrokeEvent)

	// Events
	OnClose(func()) EventSubscription
	OnResize(func()) EventSubscription
	OnClick(func(MouseEvent)) EventSubscription
	OnDoubleClick(func(MouseEvent)) EventSubscription
	OnMouseMove(func(MouseEvent)) EventSubscription
	OnMouseEnter(func(MouseEvent)) EventSubscription
	OnMouseExit(func(MouseEvent)) EventSubscription
	OnMouseDown(func(MouseEvent)) EventSubscription
	OnMouseUp(func(MouseEvent)) EventSubscription
	OnMouseScroll(func(MouseEvent)) EventSubscription
	OnKeyDown(func(KeyboardEvent)) EventSubscription
	OnKeyUp(func(KeyboardEvent)) EventSubscription
	OnKeyRepeat(func(KeyboardEvent)) EventSubscription
	OnKeyStroke(func(KeyStrokeEvent)) EventSubscription
}

func WindowContaining

func WindowContaining(c Control) Window

Directories

Path Synopsis
drivers
gl
Package gl contains an OpenGL implementation of the gxui.Driver interface.
Package gl contains an OpenGL implementation of the gxui.Driver interface.
Package gxfont provides default fonts.
Package gxfont provides default fonts.
samples
flags
Package flags holds command line options common to all GXUI samples.
Package flags holds command line options common to all GXUI samples.
themes

Jump to

Keyboard shortcuts

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