| @@ -900,18 +900,17 @@ UI_INLINE void uiComputeSizeDim(UIitem *pitem, int dim) { | |||||
| } | } | ||||
| } | } | ||||
| static void uiComputeBestSize(int item) { | |||||
| static void uiComputeBestSize(int item, int dim) { | |||||
| UIitem *pitem = uiItemPtr(item); | UIitem *pitem = uiItemPtr(item); | ||||
| pitem->visited = 0; | pitem->visited = 0; | ||||
| // children expand the size | // children expand the size | ||||
| int kid = uiFirstChild(item); | int kid = uiFirstChild(item); | ||||
| while (kid >= 0) { | while (kid >= 0) { | ||||
| uiComputeBestSize(kid); | |||||
| uiComputeBestSize(kid, dim); | |||||
| kid = uiNextSibling(kid); | kid = uiNextSibling(kid); | ||||
| } | } | ||||
| uiComputeSizeDim(pitem, 0); | |||||
| uiComputeSizeDim(pitem, 1); | |||||
| uiComputeSizeDim(pitem, dim); | |||||
| } | } | ||||
| static void uiLayoutChildItem(UIitem *pparent, UIitem *pitem, int *dyncount, int dim) { | static void uiLayoutChildItem(UIitem *pparent, UIitem *pitem, int *dyncount, int dim) { | ||||
| @@ -991,15 +990,14 @@ UI_INLINE void uiLayoutItemDim(UIitem *pitem, int dim) { | |||||
| } | } | ||||
| } | } | ||||
| static void uiLayoutItem(int item) { | |||||
| static void uiLayoutItem(int item, int dim) { | |||||
| UIitem *pitem = uiItemPtr(item); | UIitem *pitem = uiItemPtr(item); | ||||
| uiLayoutItemDim(pitem, 0); | |||||
| uiLayoutItemDim(pitem, 1); | |||||
| uiLayoutItemDim(pitem, dim); | |||||
| int kid = uiFirstChild(item); | int kid = uiFirstChild(item); | ||||
| while (kid >= 0) { | while (kid >= 0) { | ||||
| uiLayoutItem(kid); | |||||
| uiLayoutItem(kid, dim); | |||||
| kid = uiNextSibling(kid); | kid = uiNextSibling(kid); | ||||
| } | } | ||||
| } | } | ||||
| @@ -1113,11 +1111,19 @@ int uiFindItem(int item, int x, int y, int ox, int oy) { | |||||
| void uiProcess() { | void uiProcess() { | ||||
| if (!ui_context->count) return; | if (!ui_context->count) return; | ||||
| uiComputeBestSize(0); | |||||
| // compute widths | |||||
| uiComputeBestSize(0,0); | |||||
| // position root element rect | // position root element rect | ||||
| uiItemPtr(0)->rect.x = uiItemPtr(0)->margins[0]; | uiItemPtr(0)->rect.x = uiItemPtr(0)->margins[0]; | ||||
| uiLayoutItem(0,0); | |||||
| // compute heights | |||||
| uiComputeBestSize(0,1); | |||||
| // position root element rect | |||||
| uiItemPtr(0)->rect.y = uiItemPtr(0)->margins[1]; | uiItemPtr(0)->rect.y = uiItemPtr(0)->margins[1]; | ||||
| uiLayoutItem(0); | |||||
| uiLayoutItem(0,1); | |||||
| int hot = uiFindItem(0, | int hot = uiFindItem(0, | ||||
| ui_context->cursor.x, ui_context->cursor.y, 0, 0); | ui_context->cursor.x, ui_context->cursor.y, 0, 0); | ||||