/* ================== MenuField_Draw ================== */ void MenuField_Draw( menufield_s *f ) { int x; int y; int w; int style; qboolean focus; float *color; x = f->generic.x; y = f->generic.y; if (f->generic.flags & QMF_SMALLFONT) { w = SMALLCHAR_WIDTH; style = UI_SMALLFONT; } else { w = BIGCHAR_WIDTH; style = UI_BIGFONT; } if (Menu_ItemAtCursor( f->generic.parent ) == f) { focus = qtrue; style |= UI_PULSE; } else { focus = qfalse; } if (f->generic.flags & QMF_GRAYED) color = text_color_disabled; else if (focus) color = text_color_highlight; else color = text_color_normal; if ( focus ) { // draw cursor CG_FillRect( f->generic.left, f->generic.top, f->generic.right-f->generic.left+1, f->generic.bottom-f->generic.top+1, listbar_color ); UI_DrawChar( x, y, 13, UI_CENTER|UI_BLINK|style, color); } if ( f->generic.name ) { UI_DrawString( x - w, y, f->generic.name, style|UI_RIGHT, color ); } UI_Field_Draw( &f->field, x + w, y, style, color ); }
/* ================= UI_DrawMenu ================= */ void UI_DrawMenu( menuFramework_s *menu ) { static long statusFadeTime; static menuCommon_s *lastItem; menuCommon_s *item; int i; // draw contents for( i = 0; i < menu->numItems; i++ ) { item = (menuCommon_s *)menu->items[i]; if( item->flags & QMF_HIDDEN ) continue; if( item->ownerdraw ) { // total subclassing, owner draws everything item->ownerdraw( item ); continue; } switch( item->type ) { case QMTYPE_SCROLLLIST: UI_ScrollList_Draw((menuScrollList_s *)item ); break; case QMTYPE_SPINCONTROL: UI_SpinControl_Draw((menuSpinControl_s *)item ); break; case QMTYPE_CHECKBOX: UI_CheckBox_Draw((menuCheckBox_s *)item ); break; case QMTYPE_SLIDER: UI_Slider_Draw((menuSlider_s *)item ); break; case QMTYPE_FIELD: UI_Field_Draw((menuField_s *)item ); break; case QMTYPE_ACTION: UI_Action_Draw((menuAction_s *)item ); break; case QMTYPE_BITMAP: UI_Bitmap_Draw((menuBitmap_s *)item ); break; case QMTYPE_BM_BUTTON: UI_PicButton_Draw((menuPicButton_s *)item ); break; } } // draw status bar item = (menuCommon_s *)UI_ItemAtCursor( menu ); if( item != lastItem ) { // flash on selected button (like in GoldSrc) if( item ) item->lastFocusTime = uiStatic.realTime; statusFadeTime = uiStatic.realTime; lastItem = item; } if( item && ( item->flags & QMF_HASMOUSEFOCUS && !( item->flags & QMF_NOTIFY )) && ( item->statusText != NULL )) { // fade it in, but wait a second int alpha = bound( 0, ((( uiStatic.realTime - statusFadeTime ) - 1000 ) * 0.001f ) * 255, 255 ); int r, g, b, x, len; GetConsoleStringSize( item->statusText, &len, NULL ); UnpackRGB( r, g, b, uiColorHelp ); TextMessageSetColor( r, g, b, alpha ); x = ( ScreenWidth - len ) * 0.5; // centering DrawConsoleString( x, 720 * uiStatic.scaleY, item->statusText ); } else statusFadeTime = uiStatic.realTime; }