2023-04-12 21:21:34 -06:00
|
|
|
package tomo
|
|
|
|
|
|
|
|
import "image"
|
2023-04-13 00:22:54 -06:00
|
|
|
import "git.tebibyte.media/sashakoshka/tomo/canvas"
|
2023-04-12 21:21:34 -06:00
|
|
|
|
|
|
|
// Entity is a handle given to elements by the backend. Different types of
|
|
|
|
// entities may be assigned to elements that support different capabilities.
|
|
|
|
type Entity interface {
|
|
|
|
// Invalidate marks the element's current visual as invalid. At the end
|
|
|
|
// of every event, the backend will ask all invalid entities to redraw
|
|
|
|
// themselves.
|
|
|
|
Invalidate ()
|
|
|
|
|
|
|
|
// Bounds returns the bounds of the element to be used for drawing and
|
|
|
|
// layout.
|
|
|
|
Bounds () image.Rectangle
|
|
|
|
|
|
|
|
// Window returns the window that the element is in.
|
|
|
|
Window () Window
|
|
|
|
|
|
|
|
// SetMinimumSize reports to the system what the element's minimum size
|
|
|
|
// can be. The minimum size of child elements should be taken into
|
|
|
|
// account when calculating this.
|
|
|
|
SetMinimumSize (width, height int)
|
|
|
|
|
|
|
|
// DrawBackground asks the parent element to draw its background pattern
|
|
|
|
// within the specified rectangle. This should be used for transparent
|
|
|
|
// elements like text labels.
|
2023-04-13 00:22:54 -06:00
|
|
|
DrawBackground (destination canvas.Canvas, bounds image.Rectangle)
|
2023-04-12 21:21:34 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
// ContainerEntity is given to elements that support the Container interface.
|
|
|
|
type ContainerEntity interface {
|
|
|
|
Entity
|
|
|
|
|
2023-04-13 00:22:54 -06:00
|
|
|
// InvalidateLayout marks the element's layout as invalid. At the end of
|
|
|
|
// every event, the backend will ask all invalid containers to
|
|
|
|
// recalculate their layouts.
|
|
|
|
InvalidateLayout ()
|
|
|
|
|
2023-04-12 21:21:34 -06:00
|
|
|
// Adopt adds an element as a child.
|
|
|
|
Adopt (child Element)
|
|
|
|
|
|
|
|
// Insert inserts an element in the child list at the specified
|
|
|
|
// location.
|
|
|
|
Insert (index int, child Element)
|
|
|
|
|
|
|
|
// Disown removes the child at the specified index.
|
|
|
|
Disown (index int)
|
|
|
|
|
|
|
|
// IndexOf returns the index of the specified child.
|
|
|
|
IndexOf (child Element) int
|
|
|
|
|
|
|
|
// Child returns the child at the specified index.
|
|
|
|
Child (index int) Element
|
|
|
|
|
|
|
|
// CountChildren returns the amount of children the element has.
|
|
|
|
CountChildren () int
|
|
|
|
|
|
|
|
// PlaceChild sets the size and position of the child at the specified
|
|
|
|
// index to a bounding rectangle.
|
|
|
|
PlaceChild (index int, bounds image.Rectangle)
|
|
|
|
|
|
|
|
// ChildMinimumSize returns the minimum size of the child at the
|
|
|
|
// specified index.
|
|
|
|
ChildMinimumSize (index int) (width, height int)
|
|
|
|
}
|
|
|
|
|
|
|
|
// FocusableEntity is given to elements that support the Focusable interface.
|
|
|
|
type FocusableEntity interface {
|
|
|
|
Entity
|
|
|
|
|
|
|
|
// Focused returns whether the element currently has input focus.
|
|
|
|
Focused () bool
|
|
|
|
|
|
|
|
// Focus sets this element as focused. If this succeeds, the element will
|
|
|
|
// recieve a HandleFocus call.
|
|
|
|
Focus ()
|
|
|
|
|
|
|
|
// FocusNext causes the focus to move to the next element. If this
|
|
|
|
// succeeds, the element will recieve a HandleUnfocus call.
|
|
|
|
FocusNext ()
|
|
|
|
|
|
|
|
// FocusPrevious causes the focus to move to the next element. If this
|
|
|
|
// succeeds, the element will recieve a HandleUnfocus call.
|
|
|
|
FocusPrevious ()
|
|
|
|
}
|
|
|
|
|
|
|
|
// FlexibleEntity is given to elements that support the Flexible interface.
|
|
|
|
type FlexibleEntity interface {
|
|
|
|
Entity
|
|
|
|
|
|
|
|
// NotifyFlexibleHeightChange notifies the system that the parameters
|
|
|
|
// affecting a child's flexible height have changed. This method is
|
|
|
|
// expected to be called by flexible child element when their content
|
|
|
|
// changes.
|
|
|
|
NotifyFlexibleHeightChange (child Flexible)
|
|
|
|
}
|
|
|
|
|
|
|
|
// ScrollableEntity is given to elements that support the Scrollable interface.
|
|
|
|
type ScrollableEntity interface {
|
|
|
|
Entity
|
|
|
|
|
|
|
|
// NotifyScrollBoundsChange notifies the parent that a child's scroll
|
|
|
|
// content bounds or viewport bounds have changed. This is expected to
|
|
|
|
// be called by child elements when they change their supported scroll
|
|
|
|
// axes, their scroll position (either autonomously or as a result of a
|
|
|
|
// call to ScrollTo()), or their content size.
|
|
|
|
NotifyScrollBoundsChange (child Scrollable)
|
|
|
|
}
|