theme/cupertino/dropdown.go

Functions Structs

Functions

func PaintMenu

PaintMenu renders a dropdown menu according to Apple HIG 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 rounded corners (iOS popover).
	canvas.DrawRoundRect(st.Bounds, colors.MenuBg, cupDDMenuRadius)
	canvas.StrokeRoundRect(st.Bounds, colors.MenuBorder, cupDDMenuRadius, cupDDBorderWidth)

	canvas.PushClip(st.Bounds)
	defer canvas.PopClip()

	endIndex := st.ScrollOffset + st.VisibleCount
	if endIndex > len(st.Items) {
		endIndex = 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),
		}

		cupDDPaintMenuItem(canvas, itemRect, item, i, st.HighlightedIndex, st.SelectedIndex, colors)
	}
}

func PaintTrigger

PaintTrigger renders a dropdown trigger according to Apple HIG 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()
	}

	cupDDPaintTriggerBg(canvas, st, colors)
	cupDDPaintTriggerBorder(canvas, st, colors)
	cupDDPaintTriggerText(canvas, st, colors)
	cupDDPaintTriggerChevron(canvas, st, colors)

	if st.Focused && !st.Disabled {
		cupDDDrawFocusRing(canvas, st.Bounds, colors)
	}
}

Structs

type DropdownPainter struct

DropdownPainter renders dropdowns using Apple HIG design tokens.

Cupertino dropdowns use rounded popover menus with subtle shadows

and a chevron indicator following iOS picker conventions.

 

If Theme is nil, DropdownPainter falls back to the default system blue palette.

type DropdownPainter struct {
	Theme *Theme	// nil uses default system blue fallback
}