コード例 #1
0
ファイル: ui_subsystem.c プロジェクト: Kiln707/KMQuake2
/*
=================
UI_ForceMenuOff
=================
*/
void UI_ForceMenuOff (void)
{
	// Knightmare- added Psychospaz's mouse support
	UI_RefreshCursorLink();
	m_drawfunc = 0;
	m_keyfunc = 0;
	cls.key_dest = key_game;
	m_menudepth = 0;
	Key_ClearStates ();
	if (!cls.consoleActive && Cvar_VariableValue ("maxclients") == 1 && Com_ServerState()) // Knightmare added
		Cvar_Set ("paused", "0");
}
コード例 #2
0
/*
 * =================
 * UI_PushMenu
 * =================
 */
void UI_PushMenu(void (*draw)(void), const char *(*key)(int k))
{
    int i;

    if ((Cvar_VariableValue("maxclients") == 1) && Com_ServerState() && !cls.consoleActive)     // Knightmare added
    {
        Cvar_Set("paused", "1");
    }

    // Knightmare- if just opened menu, and ingame and not DM, grab screen first
    if ((cls.key_dest != key_menu) && !Cvar_VariableValue("deathmatch") &&
        (Com_ServerState() == 2))          //ss_game
    {           //&& !cl.cinematictime && Com_ServerState())
        R_GrabScreen();
    }

    // if this menu is already present, drop back to that level
    // to avoid stacking menus by hotkeys
    for (i = 0; i < m_menudepth; i++)
    {
        if ((m_layers[i].draw == draw) &&
            (m_layers[i].key == key))
        {
            m_menudepth = i;
        }
    }

    if (i == m_menudepth)
    {
        if (m_menudepth >= MAX_MENU_DEPTH)
        {
            Com_Error(ERR_FATAL, "UI_PushMenu: MAX_MENU_DEPTH");
        }
        m_layers[m_menudepth].draw = m_drawfunc;
        m_layers[m_menudepth].key  = m_keyfunc;
        m_menudepth++;
    }

    m_drawfunc = draw;
    m_keyfunc  = key;

    m_entersound = true;

    // Knightmare- added Psychospaz's mouse support
    UI_RefreshCursorLink();
    UI_RefreshCursorButtons();

    cls.key_dest = key_menu;
}
コード例 #3
0
ファイル: ui_subsystem.c プロジェクト: Kiln707/KMQuake2
/*
=================
UI_PopMenu
=================
*/
void UI_PopMenu (void)
{
	S_StartLocalSound( menu_out_sound );
	if (m_menudepth < 1)
		Com_Error (ERR_FATAL, "UI_PopMenu: depth < 1");
	m_menudepth--;

	m_drawfunc = m_layers[m_menudepth].draw;
	m_keyfunc = m_layers[m_menudepth].key;

	// Knightmare- added Psychospaz's mouse support
	UI_RefreshCursorLink();
	UI_RefreshCursorButtons();

	if (!m_menudepth)
		UI_ForceMenuOff ();
}
コード例 #4
0
ファイル: in_unix.c プロジェクト: Kiln707/KMQuake2
void IN_Init (void)
{
    in_mouse = Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE);
    in_joystick = Cvar_Get ("in_joystick", "0", CVAR_ARCHIVE);
    m_filter = Cvar_Get ("m_filter", "0", 0);
    in_dgamouse = Cvar_Get ("in_dgamouse", "1", CVAR_ARCHIVE);
    in_menumouse = Cvar_Get ("in_menumouse", "0", CVAR_ARCHIVE);
    
    Cmd_AddCommand ("+mlook", IN_MLookDown);
    Cmd_AddCommand ("-mlook", IN_MLookUp);
    Cmd_AddCommand ("force_centerview", Force_CenterView_f);

    mx = my = 0.0;  
    
    if (in_mouse->value)
		mouse_avail = true;
    else
		mouse_avail = false;

    // Knightmare- added Psychospaz's menu mouse support
    UI_RefreshCursorMenu();
    UI_RefreshCursorLink();
}
コード例 #5
0
/*
 * =================
 * Default_MenuKey
 * =================
 */
const char *Default_MenuKey(menuframework_s *m, int key)
{
    const char   *sound = NULL;
    menucommon_s *item;

    if (m)
    {
        if ((item = Menu_ItemAtCursor(m)) != 0)
        {
            if (item->type == MTYPE_FIELD)
            {
                if (Field_Key(( menufield_s * )item, key))
                {
                    return NULL;
                }
            }
        }
    }

    switch (key)
    {
    case K_ESCAPE:
        UI_PopMenu();
        return menu_out_sound;

    case K_KP_UPARROW:
    case K_UPARROW:
        if (m)
        {
            m->cursor--;
            // Knightmare- added Psychospaz's mouse support
            UI_RefreshCursorLink();

            Menu_AdjustCursor(m, -1);
            sound = menu_move_sound;
        }
        break;

    case K_TAB:
    case K_KP_DOWNARROW:
    case K_DOWNARROW:
        if (m)
        {
            m->cursor++;
            // Knightmare- added Psychospaz's mouse support

            UI_RefreshCursorLink();
            Menu_AdjustCursor(m, 1);
            sound = menu_move_sound;
        }
        break;

    case K_KP_LEFTARROW:
    case K_LEFTARROW:
        if (m)
        {
            Menu_SlideItem(m, -1);
            sound = menu_move_sound;
        }
        break;

    case K_KP_RIGHTARROW:
    case K_RIGHTARROW:
        if (m)
        {
            Menu_SlideItem(m, 1);
            sound = menu_move_sound;
        }
        break;

    /*case K_MOUSE1:
    *  case K_MOUSE2:
    *  case K_MOUSE3:
    *  //Knightmare 12/22/2001
    *  case K_MOUSE4:
    *  case K_MOUSE5:*/
    //end Knightmare
    case K_JOY1:
    case K_JOY2:
    case K_JOY3:
    case K_JOY4:
    case K_AUX1:
    case K_AUX2:
    case K_AUX3:
    case K_AUX4:
    case K_AUX5:
    case K_AUX6:
    case K_AUX7:
    case K_AUX8:
    case K_AUX9:
    case K_AUX10:
    case K_AUX11:
    case K_AUX12:
    case K_AUX13:
    case K_AUX14:
    case K_AUX15:
    case K_AUX16:
    case K_AUX17:
    case K_AUX18:
    case K_AUX19:
    case K_AUX20:
    case K_AUX21:
    case K_AUX22:
    case K_AUX23:
    case K_AUX24:
    case K_AUX25:
    case K_AUX26:
    case K_AUX27:
    case K_AUX28:
    case K_AUX29:
    case K_AUX30:
    case K_AUX31:
    case K_AUX32:

    case K_KP_ENTER:
    case K_ENTER:
        if (m)
        {
            Menu_SelectItem(m);
        }
        sound = menu_move_sound;
        break;
    }

    return sound;
}
コード例 #6
0
ファイル: ui_backend.c プロジェクト: Kiln707/KMQuake2
/*
==========================
Menu_Draw
==========================
*/
void Menu_Draw (menuframework_s *menu)
{
	int i;
	menucommon_s *item;

	//
	// draw contents
	//
	for (i = 0; i < menu->nitems; i++)
	{
		// skip hidden items
		if ( ((menucommon_s *)menu->items[i])->flags & QMF_HIDDEN )
			continue;

		switch ( ((menucommon_s *)menu->items[i])->type )
		{
		case MTYPE_FIELD:
			Field_Draw( ( menufield_s * )menu->items[i] );
			break;
		case MTYPE_SLIDER:
			Slider_Draw( (menuslider_s *)menu->items[i] );
			break;
		case MTYPE_LIST:
			MenuList_Draw( (menulist_s *)menu->items[i] );
			break;
		case MTYPE_SPINCONTROL:
			SpinControl_Draw( (menulist_s *)menu->items[i] );
			break;
		case MTYPE_ACTION:
			Action_Draw( (menuaction_s *)menu->items[i] );
			break;
		case MTYPE_SEPARATOR:
			Separator_Draw( (menuseparator_s *)menu->items[i] );
			break;
		}
	}

	// added Psychspaz's mouse support
	//
	// now check mouseovers - psychospaz
	//
	cursor.menu = menu;

	if (cursor.mouseaction)
	{
		menucommon_s *lastitem = cursor.menuitem;
		UI_RefreshCursorLink();

		for (i = menu->nitems; i >= 0 ; i--)
		{
			int		type, len;
			int		min[2], max[2];
			float	x1, y1, w1, h1;

			item = ((menucommon_s * )menu->items[i]);

			if (!item || item->type == MTYPE_SEPARATOR)
				continue;

			x1 = menu->x + item->x + RCOLUMN_OFFSET; // + 2 chars for space + cursor
			y1 = menu->y + item->y;
			w1 = 0;			h1 = MENU_FONT_SIZE;
			SCR_AdjustFrom640 (&x1, &y1, &w1, &h1, ALIGN_CENTER);
			min[0] = x1;	max[0] = x1+w1;
			min[1] = y1;	max[1] = y1+h1;
		//	max[0] = min[0] = SCR_ScaledVideo(menu->x + item->x + RCOLUMN_OFFSET); //+ 2 chars for space + cursor
		//	max[1] = min[1] = SCR_ScaledVideo(menu->y + item->y);
		//	max[1] += SCR_ScaledVideo(MENU_FONT_SIZE);

			switch (item->type)
			{
				case MTYPE_ACTION:
					{
						len = strlen(item->name);
						
						if (item->flags & QMF_LEFT_JUSTIFY)
						{
							min[0] += SCR_ScaledVideo(LCOLUMN_OFFSET*2);
							max[0] = min[0] + SCR_ScaledVideo(len*MENU_FONT_SIZE);
						}
						else
							min[0] -= SCR_ScaledVideo(len*MENU_FONT_SIZE + MENU_FONT_SIZE*3);

						type = MENUITEM_ACTION;
					}
					break;
				case MTYPE_SLIDER:
					{
						if (item->name)
						{
							len = strlen(item->name);
							min[0] -= SCR_ScaledVideo(len*MENU_FONT_SIZE - LCOLUMN_OFFSET*2);
						}
						else
							min[0] -= SCR_ScaledVideo(16);
						max[0] += SCR_ScaledVideo((SLIDER_RANGE + 4)*MENU_FONT_SIZE);
						type = MENUITEM_SLIDER;
					}
					break;
				case MTYPE_LIST:
				case MTYPE_SPINCONTROL:
					{
						int len;
						menulist_s *spin = menu->items[i];


						if (item->name)
						{
							len = strlen(item->name);
							min[0] -= SCR_ScaledVideo(len*MENU_FONT_SIZE - LCOLUMN_OFFSET*2);
						}

						len = strlen(spin->itemnames[spin->curvalue]);
						max[0] += SCR_ScaledVideo(len*MENU_FONT_SIZE);

						type = MENUITEM_ROTATE;
					}
					break;
				case MTYPE_FIELD:
					{
						menufield_s *text = menu->items[i];

						len = text->visible_length + 2;

						max[0] += SCR_ScaledVideo(len*MENU_FONT_SIZE);
						type = MENUITEM_TEXT;
					}
					break;
				default:
					continue;
			}

			if (cursor.x>=min[0] && 
				cursor.x<=max[0] &&
				cursor.y>=min[1] && 
				cursor.y<=max[1])
			{
				// new item
				if (lastitem!=item)
				{
					int j;

					for (j=0; j<MENU_CURSOR_BUTTON_MAX; j++)
					{
						cursor.buttonclicks[j] = 0;
						cursor.buttontime[j] = 0;
					}
				}

				cursor.menuitem = item;
				cursor.menuitemtype = type;
				
				menu->cursor = i;

				break;
			}
		}
	}

	cursor.mouseaction = false;
	// end mouseover code

	item = Menu_ItemAtCursor(menu);

	if (item && item->cursordraw)
	{
		item->cursordraw(item);
	}
	else if (menu->cursordraw)
	{
		menu->cursordraw(menu);
	}
	else if (item && item->type != MTYPE_FIELD)
	{
		if (item->flags & QMF_LEFT_JUSTIFY)
		{
			SCR_DrawChar (menu->x+item->x+item->cursor_offset-24, menu->y+item->y,
						ALIGN_CENTER, 12+((int)(Sys_Milliseconds()/250)&1),
						255,255,255,255, false, true);
		}
		else
		{
			SCR_DrawChar (menu->x+item->cursor_offset, menu->y+item->y,
						ALIGN_CENTER, 12+((int)(Sys_Milliseconds()/250)&1),
						255,255,255,255, false, true);
		}
	}

	if (item)
	{
		if (item->statusbarfunc)
			item->statusbarfunc ( (void *)item );
		else if (item->statusbar)
			Menu_DrawStatusBar (item->statusbar);
		else
			Menu_DrawStatusBar (menu->statusbar);
	}
	else
		Menu_DrawStatusBar( menu->statusbar );
}