-
Notifications
You must be signed in to change notification settings - Fork 0
/
axis.go
66 lines (57 loc) · 1.49 KB
/
axis.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package axis
import (
"image"
"github.com/cybriq/pokaz/constraints"
)
// Axis defines the direction of a widget with multiple elements
type Axis uint8
const (
Horizontal Axis = iota
Vertical
)
// Convert a point in (x, y) coordinates to (main, cross) coordinates, or vice
// versa. Specifically, Convert((x, y)) returns (x, y) unchanged for the
// horizontal axis, or (y, x) for the vertical axis.
func (a Axis) Convert(pt image.Point) image.Point {
if a == Horizontal {
return pt
}
return image.Pt(pt.Y, pt.X)
}
// MainConstraint returns the min and max main Constraints for axis a
func (a Axis) MainConstraint(cs constraints.Constraints) (int, int) {
if a == Horizontal {
return cs.Min.X, cs.Max.X
}
return cs.Min.Y, cs.Max.Y
}
// CrossConstraint returns the min and max cross Constraints for axis a
func (a Axis) CrossConstraint(cs constraints.Constraints) (int, int) {
if a == Horizontal {
return cs.Min.Y, cs.Max.Y
}
return cs.Min.X, cs.Max.X
}
// Constraints return the Constraints for axis a
func (a Axis) Constraints(mainMin, mainMax, crossMin, crossMax int) constraints.Constraints {
if a == Horizontal {
return constraints.Constraints{
Min: image.Pt(mainMin, crossMin),
Max: image.Pt(mainMax, crossMax),
}
}
return constraints.Constraints{
Min: image.Pt(crossMin, mainMin),
Max: image.Pt(crossMax, mainMax),
}
}
func (a Axis) String() string {
switch a {
case Horizontal:
return "Horizontal"
case Vertical:
return "Vertical"
default:
panic("unreachable")
}
}