theme/devtools/dropdown.go
Functions
func PaintMenu
func (p DropdownPainter) PaintMenu(canvas widget.Canvas, st *dropdown.MenuPaintState) {
if st.Bounds.IsEmpty() {
return
}
colors := st.ColorScheme
if colors == (dropdown.DropdownColorScheme{}) {
colors = p.resolveColors()
}
// Menu background with border.
canvas.DrawRoundRect(st.Bounds, colors.MenuBg, dtDDMenuRadius)
canvas.StrokeRoundRect(st.Bounds, colors.MenuBorder, dtDDMenuRadius, dtDDBorderWidth)
canvas.PushClip(st.Bounds)
defer canvas.PopClip()
endIndex := min(st.ScrollOffset+st.VisibleCount, len(st.Items))
for i := st.ScrollOffset; i < endIndex; i++ {
item := st.Items[i]
row := i - st.ScrollOffset
itemRect := geometry.Rect{
Min: geometry.Pt(st.Bounds.Min.X, st.Bounds.Min.Y+float32(row)*st.ItemHeight),
Max: geometry.Pt(st.Bounds.Max.X, st.Bounds.Min.Y+float32(row+1)*st.ItemHeight),
}
dtDDPaintMenuItem(canvas, itemRect, item, i, st.HighlightedIndex, st.SelectedIndex, colors)
}
}
func PaintTrigger
PaintTrigger renders a dropdown trigger according to DevTools design specifications.
func (p DropdownPainter) PaintTrigger(canvas widget.Canvas, st *dropdown.TriggerPaintState) {
if st.Bounds.IsEmpty() {
return
}
colors := st.ColorScheme
if colors == (dropdown.DropdownColorScheme{}) {
colors = p.resolveColors()
}
dtDDPaintTriggerBg(canvas, st, colors)
dtDDPaintTriggerBorder(canvas, st, colors)
dtDDPaintTriggerText(canvas, st, colors)
dtDDPaintTriggerChevron(canvas, st, colors)
if st.Focused && !st.Disabled {
dtDrawFocusRing(canvas, st.Bounds, dtDDTriggerRadius, colors.FocusRing)
}
}
Structs
type DropdownPainter struct
DropdownPainter renders dropdowns using DevTools design tokens.
DevTools dropdowns use the same InputBackground as text fields,
with SurfaceElevated popup menus and compact spacing.
If Theme is nil, DropdownPainter falls back to the default DevTools dark palette.
type DropdownPainter struct {
Theme *Theme // nil uses default DevTools dark fallback
}
PaintMenu renders a dropdown menu according to DevTools design specifications.