mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-11-18 02:16:23 -05:00
added label-button widget (#989)
Co-authored-by: M. Sz <mszeptuch@protonmail.com>
This commit is contained in:
parent
68d2486fbb
commit
b77d793698
121
d2core/d2ui/label_button.go
Normal file
121
d2core/d2ui/label_button.go
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
package d2ui
|
||||||
|
|
||||||
|
import (
|
||||||
|
"image/color"
|
||||||
|
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2util"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
white = 0xffffffff
|
||||||
|
)
|
||||||
|
|
||||||
|
// static checks to ensure LabelButton implemented Widget and ClickableWidget
|
||||||
|
var _ Widget = &LabelButton{}
|
||||||
|
var _ ClickableWidget = &LabelButton{}
|
||||||
|
|
||||||
|
// LabelButton represents LabelButton
|
||||||
|
type LabelButton struct {
|
||||||
|
*BaseWidget
|
||||||
|
stdColor color.Color
|
||||||
|
hoverColor color.Color
|
||||||
|
onClick func()
|
||||||
|
label *Label
|
||||||
|
|
||||||
|
*d2util.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewLabelButton creates a label-button
|
||||||
|
func (ui *UIManager) NewLabelButton(font, palette string) *LabelButton {
|
||||||
|
base := NewBaseWidget(ui)
|
||||||
|
base.SetVisible(true)
|
||||||
|
|
||||||
|
result := &LabelButton{
|
||||||
|
BaseWidget: base,
|
||||||
|
stdColor: d2util.Color(white),
|
||||||
|
}
|
||||||
|
|
||||||
|
result.label = ui.NewLabel(font, palette)
|
||||||
|
result.label.Alignment = HorizontalAlignCenter
|
||||||
|
result.label.Color[0] = result.stdColor
|
||||||
|
|
||||||
|
ui.addWidget(result)
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetText sets button's text
|
||||||
|
func (b *LabelButton) SetText(text string) {
|
||||||
|
b.label.SetText(text)
|
||||||
|
b.width, b.height = b.label.GetSize()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetColors sets label-button colors (on normal and hovered state)
|
||||||
|
func (b *LabelButton) SetColors(normColor, hoverColor color.Color) {
|
||||||
|
b.stdColor = normColor
|
||||||
|
b.hoverColor = hoverColor
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSize returns label's size
|
||||||
|
func (b *LabelButton) GetSize() (x, y int) {
|
||||||
|
return b.label.GetSize()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPosition returns real position (including offset for the alignment)
|
||||||
|
func (b *LabelButton) GetPosition() (x, y int) {
|
||||||
|
return b.x - b.label.getAlignOffset(b.width), b.y
|
||||||
|
}
|
||||||
|
|
||||||
|
// OnActivated defines the callback handler for the activate event
|
||||||
|
func (b *LabelButton) OnActivated(cb func()) {
|
||||||
|
b.onClick = cb
|
||||||
|
}
|
||||||
|
|
||||||
|
// Activate calls the on activated callback handler, if any
|
||||||
|
func (b *LabelButton) Activate() {
|
||||||
|
if b.onClick == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
b.onClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetEnabled sets the enabled state
|
||||||
|
func (b *LabelButton) SetEnabled(_ bool) {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnabled returns the enabled state
|
||||||
|
func (b *LabelButton) GetEnabled() bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPressed sets the pressed state of the button
|
||||||
|
func (b *LabelButton) SetPressed(_ bool) {
|
||||||
|
// noop
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPressed returns the pressed state of the button
|
||||||
|
func (b *LabelButton) GetPressed() bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Advance advances the label-button
|
||||||
|
func (b *LabelButton) Advance(_ float64) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Render renders label-button
|
||||||
|
func (b *LabelButton) Render(target d2interface.Surface) {
|
||||||
|
target.PushTranslation(b.GetPosition())
|
||||||
|
defer target.Pop()
|
||||||
|
|
||||||
|
b.label.Render(target)
|
||||||
|
|
||||||
|
if b.isHovered() {
|
||||||
|
b.label.Color[0] = b.hoverColor
|
||||||
|
} else {
|
||||||
|
b.label.Color[0] = b.stdColor
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user