2019-11-10 08:51:02 -05:00
|
|
|
package d2ui
|
2019-10-25 18:40:27 -04:00
|
|
|
|
2020-11-06 07:28:24 -05:00
|
|
|
// RenderPriority determines in which order ui elements are drawn.
|
|
|
|
// The higher the number the later an element is drawn.
|
|
|
|
type RenderPriority int
|
|
|
|
|
|
|
|
const (
|
|
|
|
// RenderPriorityBackground is the first element drawn
|
|
|
|
RenderPriorityBackground RenderPriority = iota
|
2020-11-09 12:09:46 -05:00
|
|
|
// RenderPrioritySkilltree is the priority for the skilltree
|
|
|
|
RenderPrioritySkilltree
|
|
|
|
// RenderPrioritySkilltreeIcon is the priority for the skilltree icons
|
|
|
|
RenderPrioritySkilltreeIcon
|
2020-11-06 07:28:24 -05:00
|
|
|
// RenderPriorityForeground is the last element drawn
|
|
|
|
RenderPriorityForeground
|
|
|
|
)
|
|
|
|
|
2019-10-25 18:40:27 -04:00
|
|
|
// Widget defines an object that is a UI widget
|
|
|
|
type Widget interface {
|
2020-01-31 23:18:11 -05:00
|
|
|
Drawable
|
2020-08-06 10:30:23 -04:00
|
|
|
bindManager(ui *UIManager)
|
2020-11-06 05:48:49 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
// ClickableWidget defines an object that can be clicked
|
|
|
|
type ClickableWidget interface {
|
|
|
|
Widget
|
2019-10-25 22:20:36 -04:00
|
|
|
SetEnabled(enabled bool)
|
2019-10-25 23:41:54 -04:00
|
|
|
SetPressed(pressed bool)
|
2020-11-06 05:48:49 -05:00
|
|
|
GetEnabled() bool
|
2019-10-25 23:41:54 -04:00
|
|
|
GetPressed() bool
|
|
|
|
OnActivated(callback func())
|
|
|
|
Activate()
|
2019-10-25 18:40:27 -04:00
|
|
|
}
|
2020-11-06 06:38:20 -05:00
|
|
|
|
|
|
|
// BaseWidget contains default functionality that all widgets share
|
|
|
|
type BaseWidget struct {
|
2020-11-06 07:28:24 -05:00
|
|
|
manager *UIManager
|
|
|
|
x int
|
|
|
|
y int
|
|
|
|
width int
|
|
|
|
height int
|
|
|
|
renderPriority RenderPriority
|
|
|
|
visible bool
|
2020-11-06 06:38:20 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
// NewBaseWidget creates a new BaseWidget with defaults
|
|
|
|
func NewBaseWidget(manager *UIManager) *BaseWidget {
|
|
|
|
return &BaseWidget{
|
2020-11-06 07:28:24 -05:00
|
|
|
manager: manager,
|
|
|
|
x: 0,
|
|
|
|
y: 0,
|
|
|
|
width: 0,
|
|
|
|
height: 0,
|
|
|
|
visible: true,
|
|
|
|
renderPriority: RenderPriorityBackground,
|
2020-11-06 06:38:20 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (b *BaseWidget) bindManager(manager *UIManager) {
|
|
|
|
b.manager = manager
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetSize returns the size of the widget
|
|
|
|
func (b *BaseWidget) GetSize() (width, height int) {
|
|
|
|
return b.width, b.height
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetPosition sets the position of the widget
|
|
|
|
func (b *BaseWidget) SetPosition(x, y int) {
|
|
|
|
b.x, b.y = x, y
|
|
|
|
}
|
|
|
|
|
|
|
|
// OffsetPosition moves the widget by x and y
|
|
|
|
func (b *BaseWidget) OffsetPosition(x, y int) {
|
|
|
|
b.x += x
|
|
|
|
b.y += y
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetPosition returns the position of the widget
|
|
|
|
func (b *BaseWidget) GetPosition() (x, y int) {
|
|
|
|
return b.x, b.y
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetVisible returns whether the widget is visible
|
|
|
|
func (b *BaseWidget) GetVisible() (visible bool) {
|
|
|
|
return b.visible
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetVisible make the widget visible, not visible
|
|
|
|
func (b *BaseWidget) SetVisible(visible bool) {
|
|
|
|
b.visible = visible
|
|
|
|
}
|
2020-11-06 07:28:24 -05:00
|
|
|
|
|
|
|
// GetRenderPriority returns the order in which this widget is rendered
|
|
|
|
func (b *BaseWidget) GetRenderPriority() (prio RenderPriority) {
|
|
|
|
return b.renderPriority
|
|
|
|
}
|
|
|
|
|
|
|
|
// SetRenderPriority sets the order in which this widget is rendered
|
|
|
|
func (b *BaseWidget) SetRenderPriority(prio RenderPriority) {
|
|
|
|
b.renderPriority = prio
|
|
|
|
}
|