core/popover/placement.go
Functions
func CalculatePosition
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"
}
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.