Files
MujicaUI/core/overlay_motion.go
T

45 lines
1.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package core
import (
"time"
"github.com/egoist/mygo/ui"
"git.zacharyzhang.com/ZacharyZhang-NY/MujicaUI/theme"
)
// OverlayEnter returns how far, 0 to 1, the popup born with e has entered.
func OverlayEnter(c *ui.Context, e *ui.Element) float32 {
born := ui.Local(e, "mujica.overlay.born", func() time.Time { return c.Now() })
d := Motion(c, theme.PopupDuration)
if d == 0 {
return 1
}
t := float32(c.Now().Sub(*born)) / float32(d)
if t >= 1 {
return 1
}
c.AnimationFrame()
return ui.EaseOut(t)
}
// OverlayStyle gives a popup panel the surface, edge and shadow of the theme.
func OverlayStyle(c *ui.Context, panel *ui.Element, p float32) {
k := Tokens(c)
panel.Background(k.Surface).Border(theme.BorderWidth, k.Border).Radius(theme.PopupRadius).
TextColor(k.Text).Opacity(p).Shadow(0, 6, 18, 0, ui.RGBA(0, 0, 0, 0.16*p))
}
// PlaceOverlay puts a w×h box below anchor a, above when there is no room, inside the window.
func PlaceOverlay(c *ui.Context, a ui.Rect, w, h, gap float32) (x, y float32) {
ww, wh := c.Size()
const edge = 4
x, y = a.X, a.Y+a.H+gap
if y+h > wh-edge && a.Y-gap-h >= edge {
y = a.Y - gap - h
}
x = max(edge, min(x, ww-edge-w))
y = max(edge, min(y, wh-edge-h))
return x, y
}