theme/devtools/dropdown.go

Functions Structs

Functions

func PaintMenu

PaintMenu renders a dropdown menu according to DevTools design specifications.

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
}