diff --git a/doomsday/plugins/common/include/hu_lib.h b/doomsday/plugins/common/include/hu_lib.h index 47e1063162..8dd18dc644 100644 --- a/doomsday/plugins/common/include/hu_lib.h +++ b/doomsday/plugins/common/include/hu_lib.h @@ -870,18 +870,31 @@ void UIWidget_SetMaximumSize(uiwidget_t* obj, const Size2Raw* size); void UIWidget_SetMaximumWidth(uiwidget_t* obj, int width); /** - * @defgroup uiWidgetGroupFlags UI Widget Group Flags. + * @defgroup orderFlags Order Flags */ -/*@{*/ -#define UWGF_LEFTTORIGHT 0x0001 -#define UWGF_RIGHTTOLEFT 0x0002 +///@{ +#define ORDER_LEFTTORIGHT 0x0001 +#define ORDER_RIGHTTOLEFT 0x0002 +///@} + +/** + * @defgroup uiWidgetGroupFlags UIWidget Group Flags + */ +///@{ #define UWGF_VERTICAL 0x0004 -/*@}*/ +///@} typedef struct { + /// @ref orderFlags + int orderFlags; + + /// @ref uiWidgetGroupFlags int flags; + int padding; + int widgetIdCount; + uiwidgetid_t* widgetIds; } guidata_group_t; @@ -1069,7 +1082,7 @@ uiwidgetid_t GUI_CreateWidget(guiwidgettype_t type, int player, int alignFlags, void (*updateGeometry) (uiwidget_t* obj), void (*drawer) (uiwidget_t* obj, const Point2Raw* offset), void (*ticker) (uiwidget_t* obj, timespan_t ticLength), void* typedata); -uiwidgetid_t GUI_CreateGroup(int groupFlags, int player, int alignFlags, int padding); +uiwidgetid_t GUI_CreateGroup(int groupFlags, int player, int alignFlags, int orderFlags, int padding); typedef struct ui_rendstate_s { float pageAlpha; diff --git a/doomsday/plugins/common/src/hu_lib.c b/doomsday/plugins/common/src/hu_lib.c index 40d602c5d9..042da9f6f8 100644 --- a/doomsday/plugins/common/src/hu_lib.c +++ b/doomsday/plugins/common/src/hu_lib.c @@ -276,7 +276,7 @@ uiwidgetid_t GUI_CreateWidget(guiwidgettype_t type, int player, int alignFlags, return obj->id; } -uiwidgetid_t GUI_CreateGroup(int groupFlags, int player, int alignFlags, int padding) +uiwidgetid_t GUI_CreateGroup(int groupFlags, int player, int alignFlags, int orderFlags, int padding) { uiwidget_t* obj; guidata_group_t* grp; @@ -285,6 +285,7 @@ uiwidgetid_t GUI_CreateGroup(int groupFlags, int player, int alignFlags, int pad obj = createWidget(GUI_GROUP, player, alignFlags, 1, 0, UIGroup_UpdateGeometry, NULL, NULL, NULL); grp = (guidata_group_t*)obj->typedata; grp->flags = groupFlags; + grp->orderFlags = orderFlags; grp->padding = padding; return obj->id; @@ -400,14 +401,14 @@ void UIGroup_UpdateGeometry(uiwidget_t* obj) childGeometry = UIWidget_Geometry(child); if(Rect_Width(childGeometry) > 0 && Rect_Height(childGeometry) > 0) { - if(grp->flags & UWGF_RIGHTTOLEFT) + if(grp->orderFlags & ORDER_RIGHTTOLEFT) { if(!(grp->flags & UWGF_VERTICAL)) x -= Rect_Width(childGeometry) + grp->padding; else y -= Rect_Height(childGeometry) + grp->padding; } - else if(grp->flags & UWGF_LEFTTORIGHT) + else if(grp->orderFlags & ORDER_LEFTTORIGHT) { if(!(grp->flags & UWGF_VERTICAL)) x += Rect_Width(childGeometry) + grp->padding; diff --git a/doomsday/plugins/jdoom/src/st_stuff.c b/doomsday/plugins/jdoom/src/st_stuff.c index 77e3741a98..0c6a894e94 100644 --- a/doomsday/plugins/jdoom/src/st_stuff.c +++ b/doomsday/plugins/jdoom/src/st_stuff.c @@ -2880,6 +2880,7 @@ void ST_BuildWidgets(int player) typedef struct { int group; int alignFlags; + int orderFlags; int groupFlags; int padding; } uiwidgetgroupdef_t; @@ -2899,13 +2900,13 @@ typedef struct { const uiwidgetgroupdef_t widgetGroupDefs[] = { { UWG_STATUSBAR, ALIGN_BOTTOM }, { UWG_MAPNAME, ALIGN_BOTTOMLEFT }, - { UWG_BOTTOMLEFT, ALIGN_BOTTOMLEFT, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOMLEFT2, ALIGN_BOTTOMLEFT, UWGF_LEFTTORIGHT, PADDING }, - { UWG_BOTTOMRIGHT, ALIGN_BOTTOMRIGHT, UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOMCENTER, ALIGN_BOTTOM, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOM, ALIGN_BOTTOMLEFT, UWGF_LEFTTORIGHT }, - { UWG_TOPCENTER, ALIGN_TOPLEFT, UWGF_VERTICAL|UWGF_LEFTTORIGHT, PADDING }, - { UWG_COUNTERS, ALIGN_LEFT, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING }, + { UWG_BOTTOMLEFT, ALIGN_BOTTOMLEFT, ORDER_RIGHTTOLEFT, UWGF_VERTICAL, PADDING }, + { UWG_BOTTOMLEFT2, ALIGN_BOTTOMLEFT, ORDER_LEFTTORIGHT, 0, PADDING }, + { UWG_BOTTOMRIGHT, ALIGN_BOTTOMRIGHT, ORDER_RIGHTTOLEFT, 0, PADDING }, + { UWG_BOTTOMCENTER, ALIGN_BOTTOM, ORDER_RIGHTTOLEFT, UWGF_VERTICAL, PADDING }, + { UWG_BOTTOM, ALIGN_BOTTOMLEFT, ORDER_LEFTTORIGHT }, + { UWG_TOPCENTER, ALIGN_TOPLEFT, ORDER_LEFTTORIGHT, UWGF_VERTICAL, PADDING }, + { UWG_COUNTERS, ALIGN_LEFT, ORDER_RIGHTTOLEFT, UWGF_VERTICAL, PADDING }, { UWG_AUTOMAP, ALIGN_TOPLEFT } }; const uiwidgetdef_t widgetDefs[] = { @@ -2958,7 +2959,7 @@ typedef struct { for(i = 0; i < sizeof(widgetGroupDefs)/sizeof(widgetGroupDefs[0]); ++i) { const uiwidgetgroupdef_t* def = &widgetGroupDefs[i]; - hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, def->padding); + hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, def->orderFlags, def->padding); } UIGroup_AddWidget(GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOMLEFT]), diff --git a/doomsday/plugins/jdoom64/src/st_stuff.c b/doomsday/plugins/jdoom64/src/st_stuff.c index 0c0871049c..2f2f2e3530 100644 --- a/doomsday/plugins/jdoom64/src/st_stuff.c +++ b/doomsday/plugins/jdoom64/src/st_stuff.c @@ -799,7 +799,7 @@ void ST_BuildWidgets(int player) for(i = 0; i < sizeof(widgetGroupDefs)/sizeof(widgetGroupDefs[0]); ++i) { const uiwidgetgroupdef_t* def = &widgetGroupDefs[i]; - hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, def->padding); + hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, 0, def->padding); } hud->automapWidgetId = GUI_CreateWidget(GUI_AUTOMAP, player, 0, FID(GF_FONTB), 1, UIAutomap_UpdateGeometry, UIAutomap_Drawer, UIAutomap_Ticker, &hud->automap); diff --git a/doomsday/plugins/jheretic/src/st_stuff.c b/doomsday/plugins/jheretic/src/st_stuff.c index 0a83f7ff5a..9bbbec18ed 100644 --- a/doomsday/plugins/jheretic/src/st_stuff.c +++ b/doomsday/plugins/jheretic/src/st_stuff.c @@ -2732,6 +2732,7 @@ void ST_BuildWidgets(int player) typedef struct { int group; int alignFlags; + int orderFlags; int groupFlags; int padding; // In fixed 320x200 pixels. } uiwidgetgroupdef_t; @@ -2751,16 +2752,16 @@ typedef struct { const uiwidgetgroupdef_t widgetGroupDefs[] = { { UWG_STATUSBAR, ALIGN_BOTTOM }, { UWG_MAPNAME, ALIGN_BOTTOMLEFT }, - { UWG_TOP, ALIGN_TOPLEFT, UWGF_LEFTTORIGHT }, - { UWG_TOPCENTER, ALIGN_TOP, UWGF_VERTICAL|UWGF_LEFTTORIGHT, PADDING }, - { UWG_TOPLEFT, ALIGN_TOPLEFT, UWGF_LEFTTORIGHT, PADDING }, - { UWG_TOPRIGHT, ALIGN_TOPRIGHT, UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOMLEFT, ALIGN_BOTTOMLEFT, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOMLEFT2, ALIGN_BOTTOMLEFT, UWGF_LEFTTORIGHT, PADDING }, - { UWG_BOTTOMRIGHT, ALIGN_BOTTOMRIGHT, UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOMCENTER, ALIGN_BOTTOM, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOM, ALIGN_BOTTOMLEFT, UWGF_LEFTTORIGHT }, - { UWG_COUNTERS, ALIGN_LEFT, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING }, + { UWG_TOP, ALIGN_TOPLEFT, ORDER_LEFTTORIGHT }, + { UWG_TOPCENTER, ALIGN_TOP, ORDER_LEFTTORIGHT, UWGF_VERTICAL, PADDING }, + { UWG_TOPLEFT, ALIGN_TOPLEFT, ORDER_LEFTTORIGHT, 0, PADDING }, + { UWG_TOPRIGHT, ALIGN_TOPRIGHT, ORDER_RIGHTTOLEFT, 0, PADDING }, + { UWG_BOTTOMLEFT, ALIGN_BOTTOMLEFT, ORDER_RIGHTTOLEFT, UWGF_VERTICAL, PADDING }, + { UWG_BOTTOMLEFT2, ALIGN_BOTTOMLEFT, ORDER_LEFTTORIGHT, 0, PADDING }, + { UWG_BOTTOMRIGHT, ALIGN_BOTTOMRIGHT, ORDER_RIGHTTOLEFT, 0, PADDING }, + { UWG_BOTTOMCENTER, ALIGN_BOTTOM, ORDER_RIGHTTOLEFT, UWGF_VERTICAL, PADDING }, + { UWG_BOTTOM, ALIGN_BOTTOMLEFT, ORDER_LEFTTORIGHT }, + { UWG_COUNTERS, ALIGN_LEFT, ORDER_RIGHTTOLEFT, UWGF_VERTICAL, PADDING }, { UWG_AUTOMAP, ALIGN_TOPLEFT } }; const uiwidgetdef_t widgetDefs[] = { @@ -2803,7 +2804,7 @@ typedef struct { for(i = 0; i < sizeof(widgetGroupDefs)/sizeof(widgetGroupDefs[0]); ++i) { const uiwidgetgroupdef_t* def = &widgetGroupDefs[i]; - hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, def->padding); + hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, def->orderFlags, def->padding); } for(i = 0; widgetDefs[i].type != GUI_NONE; ++i) diff --git a/doomsday/plugins/jhexen/src/st_stuff.c b/doomsday/plugins/jhexen/src/st_stuff.c index d06761b812..0e048a76f6 100644 --- a/doomsday/plugins/jhexen/src/st_stuff.c +++ b/doomsday/plugins/jhexen/src/st_stuff.c @@ -3016,6 +3016,7 @@ void ST_BuildWidgets(int player) typedef struct { int group; int alignFlags; + int orderFlags; int groupFlags; int padding; // In fixed 320x200 pixels. } uiwidgetgroupdef_t; @@ -3035,16 +3036,16 @@ typedef struct { const uiwidgetgroupdef_t widgetGroupDefs[] = { { UWG_STATUSBAR, ALIGN_BOTTOM }, { UWG_MAPNAME, ALIGN_BOTTOMLEFT }, - { UWG_BOTTOMLEFT, ALIGN_BOTTOMLEFT, UWGF_LEFTTORIGHT, PADDING }, - { UWG_BOTTOMRIGHT, ALIGN_BOTTOMRIGHT, UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOMCENTER, ALIGN_BOTTOM, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING }, - { UWG_BOTTOM, ALIGN_BOTTOM, UWGF_LEFTTORIGHT }, - { UWG_TOP, ALIGN_TOPLEFT, UWGF_LEFTTORIGHT }, - { UWG_TOPCENTER, ALIGN_TOP, UWGF_VERTICAL|UWGF_LEFTTORIGHT, PADDING }, - { UWG_TOPLEFT, ALIGN_TOPLEFT, UWGF_LEFTTORIGHT, PADDING }, - { UWG_TOPLEFT2, ALIGN_TOPLEFT, UWGF_LEFTTORIGHT, PADDING }, - { UWG_TOPLEFT3, ALIGN_TOPLEFT, UWGF_LEFTTORIGHT, PADDING }, - { UWG_TOPRIGHT, ALIGN_TOPRIGHT, UWGF_RIGHTTOLEFT, PADDING }, + { UWG_BOTTOMLEFT, ALIGN_BOTTOMLEFT, ORDER_LEFTTORIGHT, 0, PADDING }, + { UWG_BOTTOMRIGHT, ALIGN_BOTTOMRIGHT, ORDER_RIGHTTOLEFT, 0, PADDING }, + { UWG_BOTTOMCENTER, ALIGN_BOTTOM, ORDER_RIGHTTOLEFT, UWGF_VERTICAL, PADDING }, + { UWG_BOTTOM, ALIGN_BOTTOM, ORDER_LEFTTORIGHT }, + { UWG_TOP, ALIGN_TOPLEFT, ORDER_LEFTTORIGHT }, + { UWG_TOPCENTER, ALIGN_TOP, ORDER_LEFTTORIGHT, UWGF_VERTICAL, PADDING }, + { UWG_TOPLEFT, ALIGN_TOPLEFT, ORDER_LEFTTORIGHT, 0, PADDING }, + { UWG_TOPLEFT2, ALIGN_TOPLEFT, ORDER_LEFTTORIGHT, 0, PADDING }, + { UWG_TOPLEFT3, ALIGN_TOPLEFT, ORDER_LEFTTORIGHT, 0, PADDING }, + { UWG_TOPRIGHT, ALIGN_TOPRIGHT, ORDER_RIGHTTOLEFT, 0, PADDING }, { UWG_AUTOMAP, ALIGN_TOPLEFT } }; const uiwidgetdef_t widgetDefs[] = { @@ -3091,7 +3092,7 @@ typedef struct { for(i = 0; i < sizeof(widgetGroupDefs)/sizeof(widgetGroupDefs[0]); ++i) { const uiwidgetgroupdef_t* def = &widgetGroupDefs[i]; - hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, def->padding); + hud->widgetGroupIds[def->group] = GUI_CreateGroup(def->groupFlags, player, def->alignFlags, def->orderFlags, def->padding); } for(i = 0; widgetDefs[i].type != GUI_NONE; ++i)