added label-button widget (#989)

Co-authored-by: M. Sz <mszeptuch@protonmail.com>
This commit is contained in:
gucio321 2021-01-07 06:45:05 +01:00 committed by GitHub
parent 68d2486fbb
commit b77d793698
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 121 additions and 0 deletions

121
d2core/d2ui/label_button.go Normal file
View 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
}
}