| @@ -234,25 +234,25 @@ typedef enum UIitemState { | |||
| // layout flags | |||
| typedef enum UIlayoutFlags { | |||
| // anchor to left item or left side of parent | |||
| UI_LEFT = 1, | |||
| UI_LEFT = 0x01, | |||
| // anchor to top item or top side of parent | |||
| UI_TOP = 2, | |||
| UI_TOP = 0x02, | |||
| // anchor to right item or right side of parent | |||
| UI_RIGHT = 4, | |||
| UI_RIGHT = 0x04, | |||
| // anchor to bottom item or bottom side of parent | |||
| UI_DOWN = 8, | |||
| UI_DOWN = 0x08, | |||
| // anchor to both left and right item or parent borders | |||
| UI_HFILL = 5, | |||
| UI_HFILL = 0x05, | |||
| // anchor to both top and bottom item or parent borders | |||
| UI_VFILL = 10, | |||
| UI_VFILL = 0x0A, | |||
| // center horizontally, with left margin as offset | |||
| UI_HCENTER = 0, | |||
| UI_HCENTER = 0x00, | |||
| // center vertically, with top margin as offset | |||
| UI_VCENTER = 0, | |||
| UI_VCENTER = 0x00, | |||
| // center in both directions, with left/top margin as offset | |||
| UI_CENTER = 0, | |||
| UI_CENTER = 0x00, | |||
| // anchor to all four directions | |||
| UI_FILL = 15, | |||
| UI_FILL = 0x0F, | |||
| } UIlayoutFlags; | |||
| // event flags | |||
| @@ -286,10 +286,15 @@ typedef enum UIevent { | |||
| // item is focused and has received a character event | |||
| // the respective character can be queried using uiGetKey() | |||
| UI_CHAR = 0x0100, | |||
| // if this flag is true, all events will propagate to the parent; | |||
| // if this flag is set, all events will propagate to the parent; | |||
| // the original item firing this event can be retrieved using | |||
| // uiGetEventItem() | |||
| UI_PROPAGATE = 0x0200, | |||
| // after computing the horizontal size of the element, the vertical | |||
| // size needs adjustment. | |||
| // the handler is called after the horizontal layout step, and can make | |||
| // modifications to the items height using uiSetSize() | |||
| UI_ADJUST_HEIGHT = 0x0400, | |||
| } UIevent; | |||
| // handler callback; event is one of UI_EVENT_* | |||
| @@ -1032,6 +1037,16 @@ int uiItem() { | |||
| return idx; | |||
| } | |||
| void uiNotifyAllItems(UIevent event) { | |||
| assert(ui_context); | |||
| for (int i = 0; i < ui_context->count; ++i) { | |||
| UIitem *pitem = ui_context->items + i; | |||
| if (pitem->handler && (pitem->event_flags & event)) { | |||
| pitem->handler(i, event); | |||
| } | |||
| } | |||
| } | |||
| void uiNotifyItem(int item, UIevent event) { | |||
| assert(ui_context); | |||
| ui_context->event_item = item; | |||
| @@ -1472,6 +1487,9 @@ void uiLayout() { | |||
| uiItemPtr(0)->rect.x = uiItemPtr(0)->margins[0]; | |||
| uiLayoutItem(0,0); | |||
| // give items a chance to adjust their height | |||
| uiNotifyAllItems(UI_ADJUST_HEIGHT); | |||
| // compute heights | |||
| uiComputeBestSize(0,1); | |||
| // position root element rect | |||