Files
RPG_City_Maker_Reborn/custom_widgets.go
T

88 lines
2.1 KiB
Go
Raw Normal View History

2026-01-28 12:35:10 -06:00
package main
import (
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/widget"
)
// TextOverlayProgressBar is a custom widget that displays a progress bar with text overlay.
type TextOverlayProgressBar struct {
widget.BaseWidget
progressBar *widget.ProgressBar
label *widget.Label
}
// NewTextOverlayProgressBar creates a new TextOverlayProgressBar.
func NewTextOverlayProgressBar() *TextOverlayProgressBar {
p := &TextOverlayProgressBar{
progressBar: widget.NewProgressBar(),
label: widget.NewLabel(""),
}
p.ExtendBaseWidget(p)
return p
}
// SetValue sets the progress value.
func (p *TextOverlayProgressBar) SetValue(v float64) {
p.progressBar.SetValue(v)
}
// SetText sets the text to be displayed on the progress bar.
func (p *TextOverlayProgressBar) SetText(text string) {
p.label.SetText(text)
}
// CreateRenderer returns a new renderer for the widget.
func (p *TextOverlayProgressBar) CreateRenderer() fyne.WidgetRenderer {
return &textOverlayProgressBarRenderer{
progressBar: p.progressBar,
label: p.label,
objects: []fyne.CanvasObject{p.progressBar, p.label},
}
}
type textOverlayProgressBarRenderer struct {
progressBar *widget.ProgressBar
label *widget.Label
objects []fyne.CanvasObject
}
func (r *textOverlayProgressBarRenderer) Layout(size fyne.Size) {
r.progressBar.Resize(size)
r.label.Resize(size)
r.label.Move(fyne.NewPos(0, 0))
}
func (r *textOverlayProgressBarRenderer) MinSize() fyne.Size {
return r.progressBar.MinSize()
}
func (r *textOverlayProgressBarRenderer) Refresh() {
r.progressBar.Refresh()
r.label.Refresh()
}
func (r *textOverlayProgressBarRenderer) Objects() []fyne.CanvasObject {
return r.objects
}
func (r *textOverlayProgressBarRenderer) Destroy() {}
// CustomTheme is a custom theme to make the progress bar thinner.
type CustomTheme struct {
fyne.Theme
}
// NewCustomTheme creates a new CustomTheme.
func NewCustomTheme(theme fyne.Theme) *CustomTheme {
return &CustomTheme{Theme: theme}
}
// Size returns the size for a given themeable item.
func (t *CustomTheme) Size(name fyne.ThemeSizeName) float32 {
if name == "progressBar.height" {
return 10
}
return t.Theme.Size(name)
}