12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // SPDX-License-Identifier: Unlicense OR MIT
- package material
- import (
- "gioui.org/io/semantic"
- "gioui.org/layout"
- "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 {
- r := RadioButtonStyle{
- Group: group,
- checkable: checkable{
- Label: label,
- Color: th.Palette.Fg,
- IconColor: th.Palette.ContrastBg,
- TextSize: th.TextSize * 14.0 / 16.0,
- Size: 26,
- shaper: th.Shaper,
- checkedStateIcon: th.Icon.RadioChecked,
- uncheckedStateIcon: th.Icon.RadioUnchecked,
- },
- Key: key,
- }
- r.checkable.Font.Typeface = th.Face
- return r
- }
- // Layout updates enum and displays the radio button.
- func (r RadioButtonStyle) Layout(gtx layout.Context) layout.Dimensions {
- r.Group.Update(gtx)
- hovered, hovering := r.Group.Hovered()
- focus, focused := r.Group.Focused()
- return r.Group.Layout(gtx, r.Key, func(gtx layout.Context) layout.Dimensions {
- semantic.RadioButton.Add(gtx.Ops)
- highlight := hovering && hovered == r.Key || focused && focus == r.Key
- return r.layout(gtx, r.Group.Value == r.Key, highlight)
- })
- }
|