Skip to content

Commit

Permalink
Doom: Nest bottom row of fullscreen HUD widgets inside a new group
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Dec 19, 2011
1 parent 12713bc commit 4846afb
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 67 deletions.
78 changes: 39 additions & 39 deletions doomsday/plugins/common/src/hu_lib.c
Expand Up @@ -331,37 +331,6 @@ boolean GUI_GameTicTriggerIsSharp(void)
return sharpTic;
}

static void drawWidget(uiwidget_t* obj, int x, int y)
{
assert(obj);
if(!obj->drawer || obj->alpha <= 0) return;

uiRS.pageAlpha = obj->alpha;

DGL_MatrixMode(DGL_MODELVIEW);
DGL_Translatef(x, y, 0);

obj->drawer(obj, 0, 0);

DGL_MatrixMode(DGL_MODELVIEW);
DGL_Translatef(-x, -y, 0);
}

static void drawChildWidgets(uiwidget_t* obj, int x, int y)
{
guidata_group_t* grp = (guidata_group_t*)obj->typedata;
int i;
assert(obj && obj->type == GUI_GROUP);

if(!grp->widgetIdCount) return;

for(i = 0; i < grp->widgetIdCount; ++i)
{
uiwidget_t* child = GUI_MustFindObjectById(grp->widgetIds[i]);
GUI_DrawWidget(child, x + child->geometry.origin.x, y + child->geometry.origin.y);
}
}

void UIGroup_UpdateGeometry(uiwidget_t* obj)
{
guidata_group_t* grp = (guidata_group_t*)obj->typedata;
Expand Down Expand Up @@ -450,24 +419,55 @@ void UIGroup_UpdateGeometry(uiwidget_t* obj)
}
}

void GUI_DrawWidget(uiwidget_t* obj, int x, int y)
static void drawWidget2(uiwidget_t* obj, int x, int y)
{
if(UIWidget_MaximumWidth(obj) == 0 || UIWidget_MaximumHeight(obj) == 0 ||
UIWidget_Alpha(obj) <= 0) return;
assert(obj);
if(!obj->drawer || obj->alpha <= 0) return;

FR_PushAttrib();
FR_LoadDefaultAttrib();
uiRS.pageAlpha = obj->alpha;

obj->drawer(obj, x + obj->geometry.origin.x, y + obj->geometry.origin.y);
}

static void drawWidget(uiwidget_t* obj, int x, int y)
{
assert(obj);

DGL_MatrixMode(DGL_MODELVIEW);
DGL_Translatef(x, y, 0);

// First we draw ourself.
obj->updateGeometry(obj);
drawWidget(obj, x, y);
drawWidget2(obj, 0, 0);

if(obj->type == GUI_GROUP)
{
// Now our children.
drawChildWidgets(obj, x, y);
guidata_group_t* grp = (guidata_group_t*)obj->typedata;
int i;
for(i = 0; i < grp->widgetIdCount; ++i)
{
uiwidget_t* child = GUI_MustFindObjectById(grp->widgetIds[i]);
drawWidget(child, 0, 0);
}
}

DGL_MatrixMode(DGL_MODELVIEW);
DGL_Translatef(-x, -y, 0);
}

void GUI_DrawWidget(uiwidget_t* obj, int x, int y)
{
if(!obj) return;
if(UIWidget_MaximumWidth(obj) < 1 || UIWidget_MaximumHeight(obj) < 1) return;
if(UIWidget_Alpha(obj) <= 0) return;

obj->updateGeometry(obj);

FR_PushAttrib();
FR_LoadDefaultAttrib();

drawWidget(obj, x, y);

FR_PopAttrib();
}

Expand Down
43 changes: 15 additions & 28 deletions doomsday/plugins/jdoom/src/st_stuff.c
Expand Up @@ -161,6 +161,7 @@ typedef enum {
enum {
UWG_STATUSBAR = 0,
UWG_MAPNAME,
UWG_BOTTOM,
UWG_BOTTOMLEFT,
UWG_BOTTOMLEFT2,
UWG_BOTTOMRIGHT,
Expand Down Expand Up @@ -2133,15 +2134,17 @@ void Face_Drawer(uiwidget_t* obj, int x, int y)
DGL_Enable(DGL_TEXTURE_2D);

DGL_Color4f(1, 1, 1, iconAlpha);
x = -(SCREENWIDTH/2 - ST_FACESX);
y = -1;
if(R_GetPatchInfo(pFaceBackground[cfg.playerColor[obj->player]], &bgInfo))
{
if(IS_NETGAME)
{
GL_DrawPatch2(bgInfo.id, x, y, ALIGN_BOTTOM);
GL_DrawPatch2(bgInfo.id, 0, 0, ALIGN_BOTTOM);
}
y -= bgInfo.geometry.size.height;
}
GL_DrawPatch(pFace, x - (SCREENWIDTH/2 - ST_FACESX), y - 1);
GL_DrawPatch(pFace, x, y);

DGL_Disable(DGL_TEXTURE_2D);
DGL_MatrixMode(DGL_MODELVIEW);
Expand Down Expand Up @@ -2848,46 +2851,22 @@ void ST_Drawer(int player)
drawnSize.height = UIWidget_Geometry(obj)->size.height;
}

alpha = hud->alpha * (1-hud->hideAmount);
alpha = /**\kludge: clamp*/MIN_OF(1.0f, hud->alpha)/**kludge end*/ * (1-hud->hideAmount);
x += PADDING;
y += PADDING;
width -= PADDING*2;
height -= PADDING*2;

if(!hud->statusbarActive)
{
int h = 0;

obj = GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOMLEFT]);
UIWidget_SetAlpha(obj, alpha);
size.width = width; size.height = height;
UIWidget_SetMaximumSize(obj, &size);
GUI_DrawWidget(obj, x, y);

drawnSize.width = UIWidget_Geometry(obj)->size.width;
drawnSize.height = UIWidget_Geometry(obj)->size.height;
if(drawnSize.height > h) h = drawnSize.height;

obj = GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOMCENTER]);
obj = GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOM]);
UIWidget_SetAlpha(obj, alpha);
size.width = width; size.height = height;
UIWidget_SetMaximumSize(obj, &size);
GUI_DrawWidget(obj, x, y);

drawnSize.width = UIWidget_Geometry(obj)->size.width;
drawnSize.height = UIWidget_Geometry(obj)->size.height;
if(drawnSize.height > h) h = drawnSize.height;

obj = GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOMRIGHT]);
UIWidget_SetAlpha(obj, alpha);
size.width = width; size.height = height;
UIWidget_SetMaximumSize(obj, &size);
GUI_DrawWidget(obj, x, y);

drawnSize.width = UIWidget_Geometry(obj)->size.width;
drawnSize.height = UIWidget_Geometry(obj)->size.height;
if(drawnSize.height > h) h = drawnSize.height;
drawnSize.height = h;
}

if(!hud->statusbarActive)
Expand Down Expand Up @@ -3250,6 +3229,7 @@ void ST_BuildWidgets(int player)
{ 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_BOTTOM, UWGF_LEFTTORIGHT },
{ UWG_TOP, ALIGN_TOPLEFT, UWGF_VERTICAL|UWGF_LEFTTORIGHT, PADDING },
{ UWG_COUNTERS, ALIGN_LEFT, UWGF_VERTICAL|UWGF_RIGHTTOLEFT, PADDING },
{ UWG_AUTOMAP, ALIGN_TOPLEFT }
Expand Down Expand Up @@ -3314,6 +3294,13 @@ void ST_BuildWidgets(int player)
UIGroup_AddWidget(GUI_MustFindObjectById(hud->widgetGroupIds[def->group]), GUI_FindObjectById(id));
}

UIGroup_AddWidget(GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOM]),
GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOMLEFT]));
UIGroup_AddWidget(GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOM]),
GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOMCENTER]));
UIGroup_AddWidget(GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOM]),
GUI_MustFindObjectById(hud->widgetGroupIds[UWG_BOTTOMRIGHT]));

hud->logWidgetId = GUI_CreateWidget(GUI_LOG, player, FID(GF_FONTA), 1, UILog_UpdateGeometry, UILog_Drawer, UILog_Ticker, &hud->log);
UIGroup_AddWidget(GUI_MustFindObjectById(hud->widgetGroupIds[UWG_TOP]), GUI_FindObjectById(hud->logWidgetId));

Expand Down

0 comments on commit 4846afb

Please sign in to comment.