d2/lib/textmeasure/rect.go
Anmol Sethi c4ef432daf
Move textmeasure into lib
It's not a d2renderer.
2022-12-01 06:51:17 -08:00

51 lines
867 B
Go

package textmeasure
import (
"math"
"oss.terrastruct.com/d2/lib/geo"
)
type rect struct {
tl *geo.Point
br *geo.Point
}
func newRect() *rect {
return &rect{
tl: geo.NewPoint(0, 0),
br: geo.NewPoint(0, 0),
}
}
func (r rect) w() float64 {
return r.br.X - r.tl.X
}
func (r rect) h() float64 {
return r.br.Y - r.tl.Y
}
// norm returns the Rect in normal form, such that Max is component-wise greater or equal than Min.
func (r rect) norm() *rect {
return &rect{
tl: geo.NewPoint(
math.Min(r.tl.X, r.br.X),
math.Min(r.tl.Y, r.br.Y),
),
br: geo.NewPoint(
math.Max(r.tl.X, r.br.X),
math.Max(r.tl.Y, r.br.Y),
),
}
}
func (r1 *rect) union(r2 *rect) *rect {
r := newRect()
r.tl.X = math.Min(r1.tl.X, r2.tl.X)
r.tl.Y = math.Min(r1.tl.Y, r2.tl.Y)
r.br.X = math.Max(r1.br.X, r2.br.X)
r.br.Y = math.Max(r1.br.Y, r2.br.Y)
return r
}