mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
d82be97a71
To make the semantic relation between the enum widget and its content, the content must be laid out inside the enum clip rect. This is an API change. Users of Enum.Layout must provide a content widget. Signed-off-by: Elias Naur <mail@eliasnaur.com>
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
// SPDX-License-Identifier: Unlicense OR MIT
|
|
|
|
package material
|
|
|
|
import (
|
|
"gioui.org/layout"
|
|
"gioui.org/unit"
|
|
"gioui.org/widget"
|
|
)
|
|
|
|
type RadioButtonStyle struct {
|
|
checkable
|
|
Key string
|
|
Group *widget.Enum
|
|
}
|
|
|
|
// RadioButton returns a RadioButton with a label. The key specifies
|
|
// the value for the Enum.
|
|
func RadioButton(th *Theme, group *widget.Enum, key, label string) RadioButtonStyle {
|
|
return RadioButtonStyle{
|
|
Group: group,
|
|
checkable: checkable{
|
|
Label: label,
|
|
|
|
Color: th.Palette.Fg,
|
|
IconColor: th.Palette.ContrastBg,
|
|
TextSize: th.TextSize.Scale(14.0 / 16.0),
|
|
Size: unit.Dp(26),
|
|
shaper: th.Shaper,
|
|
checkedStateIcon: th.Icon.RadioChecked,
|
|
uncheckedStateIcon: th.Icon.RadioUnchecked,
|
|
},
|
|
Key: key,
|
|
}
|
|
}
|
|
|
|
// Layout updates enum and displays the radio button.
|
|
func (r RadioButtonStyle) Layout(gtx layout.Context) layout.Dimensions {
|
|
hovered, hovering := r.Group.Hovered()
|
|
return r.Group.Layout(gtx, r.Key, func(gtx layout.Context) layout.Dimensions {
|
|
return r.layout(gtx, r.Group.Value == r.Key, hovering && hovered == r.Key)
|
|
})
|
|
}
|