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" }