widget/geom.go

88 lines
1.8 KiB
Go

package widget
/*
2D geometry values
There are lots of issues when supporting multiple toolkit plugin
geometries. The geometries vary widely especially between the
graphical displays and the serial console ones.
To simplyfy this, we stick to using the concepts:
------------------------------ ^
| top | |
| | |
| left right | height
| | |
| bottom | |
------------------------------ v
<----------- width ---------->
This way, width & height are always positive numbers.
The qustion of (top,bottom) & (left,right) becomes problematic.
In almost every toolkit, right > left. However, top & bottom
vary and a choice can not be made easily. Luckily, we maybe do
not have to make that decision here and can pass that determination
to the toolkits. So, we use excusively:
geom(left, right, top, bottom)
size(width, height)
*/
type Geom struct {
Left any
Right any
Top any
Bottom any
}
type Size struct {
Width any
Height any
}
/*
Horizontal means layout widgets like books on a bookshelf
---------------------------------
| W | W | W | W | W | W | W | W |
| i | i | i | i | i | i | i | i |
| d | d | d | d | d | d | d | d |
| g | g | g | g | g | g | g | g |
| e | e | e | e | e | e | e | e |
| t | t | t | t | t | t | t | t |
---------------------------------
Vertical means layout widgets like books in a stack
----------
| Widget |
----------
| Widget |
----------
| Widget |
----------
| Widget |
----------
*/
type Orientation int
const (
Horizontal Orientation = iota
Vertical
)
func (s Orientation) String() string {
switch s {
case Horizontal:
return "Horizontal"
case Vertical:
return "Vertical"
default:
return "Horizontal"
}
return "Horizontal"
}