core/popover/placement.go

Functions

Functions

func CalculatePosition

CalculatePosition computes the overlay position given the trigger bounds,

overlay size, and window size. It applies auto-flip logic when the overlay

would overflow the viewport, then clamps to the window bounds.

func CalculatePosition(
	placement Placement,
	triggerBounds geometry.Rect,
	overlaySize geometry.Size,
	windowSize geometry.Size,
	gap float32,
) geometry.Point {
	x, y := computePosition(placement, triggerBounds, overlaySize, gap)

	// Auto-flip if overflows viewport.
	if overflows(x, y, overlaySize, windowSize) {
		fx, fy := computePosition(placement.opposite(), triggerBounds, overlaySize, gap)
		if !overflows(fx, fy, overlaySize, windowSize) {
			x, y = fx, fy
		}
	}

	// Clamp to viewport bounds.
	x, y = clampToViewport(x, y, overlaySize, windowSize)

	return geometry.Pt(x, y)
}

func String

String returns a human-readable name for the placement.

func (p Placement) String() string {
	if int(p) < len(placementNames) {
		return placementNames[p]
	}
	return "Unknown"
}