1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-26 09:05:24 +00:00

d2ui improvement: added NewCustomButton method to d2ui

This commit is contained in:
M. Sz 2021-01-14 15:36:12 +01:00
parent d74e171313
commit abee77968d

View File

@ -789,6 +789,37 @@ type Button struct {
// NewButton creates an instance of Button // NewButton creates an instance of Button
func (ui *UIManager) NewButton(buttonType ButtonType, text string) *Button { func (ui *UIManager) NewButton(buttonType ButtonType, text string) *Button {
buttonLayout := getButtonLayouts()[buttonType]
btn := ui.createButton(buttonLayout, text)
return btn
}
func (ui *UIManager) NewCustomButton(path string, frame int) *Button {
layout := ButtonLayout{
XSegments: 1,
YSegments: 1,
DisabledFrame: -1,
DisabledColor: whiteAlpha100,
ResourceName: path,
PaletteName: d2resource.PaletteSky,
BaseFrame: frame,
Toggleable: true,
FontPath: d2resource.Font16,
AllowFrameChange: true,
HasImage: true,
FixedWidth: ButtonNoFixedWidth,
FixedHeight: ButtonNoFixedHeight,
}
btn := ui.createButton(layout, "")
return btn
}
// createButton creates button using input layout and text
func (ui *UIManager) createButton(layout ButtonLayout, text string) *Button {
base := NewBaseWidget(ui) base := NewBaseWidget(ui)
base.SetVisible(true) base.SetVisible(true)
@ -798,24 +829,23 @@ func (ui *UIManager) NewButton(buttonType ButtonType, text string) *Button {
pressed: false, pressed: false,
} }
buttonLayout := getButtonLayouts()[buttonType] btn.buttonLayout = layout
btn.buttonLayout = buttonLayout
lbl := ui.NewLabel(buttonLayout.FontPath, d2resource.PaletteUnits)
lbl := ui.NewLabel(layout.FontPath, d2resource.PaletteUnits)
lbl.SetText(text) lbl.SetText(text)
lbl.Color[0] = d2util.Color(buttonLayout.LabelColor) lbl.Color[0] = d2util.Color(layout.LabelColor)
lbl.Alignment = HorizontalAlignCenter lbl.Alignment = HorizontalAlignCenter
buttonSprite, err := ui.NewSprite(buttonLayout.ResourceName, buttonLayout.PaletteName) buttonSprite, err := ui.NewSprite(layout.ResourceName, layout.PaletteName)
if err != nil { if err != nil {
ui.Error(err.Error()) ui.Error(err.Error())
return nil return nil
} }
if buttonLayout.FixedWidth > 0 { if layout.FixedWidth > 0 {
btn.width = buttonLayout.FixedWidth btn.width = layout.FixedWidth
} else { } else {
for i := 0; i < buttonLayout.XSegments; i++ { for i := 0; i < layout.XSegments; i++ {
w, _, frameSizeErr := buttonSprite.GetFrameSize(i) w, _, frameSizeErr := buttonSprite.GetFrameSize(i)
if frameSizeErr != nil { if frameSizeErr != nil {
ui.Error(frameSizeErr.Error()) ui.Error(frameSizeErr.Error())
@ -826,11 +856,11 @@ func (ui *UIManager) NewButton(buttonType ButtonType, text string) *Button {
} }
} }
if buttonLayout.FixedHeight > 0 { if layout.FixedHeight > 0 {
btn.height = buttonLayout.FixedHeight btn.height = layout.FixedHeight
} else { } else {
for i := 0; i < buttonLayout.YSegments; i++ { for i := 0; i < layout.YSegments; i++ {
_, h, frameSizeErr := buttonSprite.GetFrameSize(i * buttonLayout.YSegments) _, h, frameSizeErr := buttonSprite.GetFrameSize(i * layout.YSegments)
if frameSizeErr != nil { if frameSizeErr != nil {
ui.Error(frameSizeErr.Error()) ui.Error(frameSizeErr.Error())
return nil return nil
@ -849,7 +879,7 @@ func (ui *UIManager) NewButton(buttonType ButtonType, text string) *Button {
ui.addWidget(btn) // important that this comes before prerenderStates! ui.addWidget(btn) // important that this comes before prerenderStates!
btn.prerenderStates(buttonSprite, &buttonLayout, lbl) btn.prerenderStates(buttonSprite, &layout, lbl)
return btn return btn
} }