/*
=================
UI_Draw
=================
*/
void UI_Draw (void)
{
	if (cls.key_dest != key_menu)
		return;

	// scaled menu stuff
	//SCR_InitScreenScale();

	// repaint everything next frame
	SCR_DirtyScreen ();

	// dim everything behind it down
	if (cl.cinematictime > 0 || cls.state == ca_disconnected)
	{
		//bc removing this background!!!
		/*
		if (R_DrawFindPic("/gfx/menu_background.pcx")) {
			R_DrawStretchPic (0, 0, viddef.width, viddef.height, "/gfx/menu_background.pcx", 1.0);
			//R_DrawFadeScreen ();
		}
		else*/
			R_DrawFill2 (0,0,viddef.width, viddef.height, 0,0,0,255);
	}
	// ingame menu uses alpha
	//else if (R_DrawFindPic("/gfx/menu_background.pcx"))
	//	R_DrawStretchPic (0, 0, viddef.width, viddef.height, "/gfx/menu_background.pcx", menu_alpha->value);
	else
		R_DrawFadeScreen ();

	// Knigthmare- added Psychospaz's mouse support
	UI_RefreshCursorMenu();

	m_drawfunc ();

	// delay playing the enter sound until after the
	// menu has been drawn, to avoid delay while
	// caching images
	if (m_entersound)
	{
		S_StartLocalSound( menu_in_sound );
		m_entersound = false;
	}

	// Knigthmare- added Psychospaz's mouse support
	//menu cursor for mouse usage :)
	UI_Draw_Cursor();
}
Esempio n. 2
0
/*
==============
SCR_TileClear

Clear any parts of the tiled background that were drawn on last frame
==============
*/
void SCR_TileClear (void)
{
	int		i;
	int		top, bottom, left, right;
	dirty_t	clear;

	if (scr_drawall->value)
		SCR_DirtyScreen ();	// for power vr or broken page flippers...

	if (scr_con_current == 1.0)
		return;		// full screen console
	if (scr_viewsize->value == 100)
		return;		// full screen rendering
	if (cl.cinematictime > 0)
		return;		// full screen cinematic

	// erase rect will be the union of the past three frames
	// so tripple buffering works properly
	clear = scr_dirty;
	for (i=0 ; i<2 ; i++)
	{
		if (scr_old_dirty[i].x1 < clear.x1)
			clear.x1 = scr_old_dirty[i].x1;
		if (scr_old_dirty[i].x2 > clear.x2)
			clear.x2 = scr_old_dirty[i].x2;
		if (scr_old_dirty[i].y1 < clear.y1)
			clear.y1 = scr_old_dirty[i].y1;
		if (scr_old_dirty[i].y2 > clear.y2)
			clear.y2 = scr_old_dirty[i].y2;
	}

	scr_old_dirty[1] = scr_old_dirty[0];
	scr_old_dirty[0] = scr_dirty;

	scr_dirty.x1 = 9999;
	scr_dirty.x2 = -9999;
	scr_dirty.y1 = 9999;
	scr_dirty.y2 = -9999;

	// don't bother with anything convered by the console)
	top = scr_con_current*viddef.height;
	if (top >= clear.y1)
		clear.y1 = top;

	if (clear.y2 <= clear.y1)
		return;		// nothing disturbed

	top = scr_vrect.y;
	bottom = top + scr_vrect.height-1;
	left = scr_vrect.x;
	right = left + scr_vrect.width-1;

	if (clear.y1 < top)
	{	// clear above view screen
		i = clear.y2 < top-1 ? clear.y2 : top-1;
		re.DrawTileClear (clear.x1 , clear.y1,
			clear.x2 - clear.x1 + 1, i - clear.y1+1, "backtile");
		clear.y1 = top;
	}
	if (clear.y2 > bottom)
	{	// clear below view screen
		i = clear.y1 > bottom+1 ? clear.y1 : bottom+1;
		re.DrawTileClear (clear.x1, i,
			clear.x2-clear.x1+1, clear.y2-i+1, "backtile");
		clear.y2 = bottom;
	}
	if (clear.x1 < left)
	{	// clear left of view screen
		i = clear.x2 < left-1 ? clear.x2 : left-1;
		re.DrawTileClear (clear.x1, clear.y1,
			i-clear.x1+1, clear.y2 - clear.y1 + 1, "backtile");
		clear.x1 = left;
	}
	if (clear.x2 > right)
	{	// clear left of view screen
		i = clear.x1 > right+1 ? clear.x1 : right+1;
		re.DrawTileClear (i, clear.y1,
			clear.x2-i+1, clear.y2 - clear.y1 + 1, "backtile");
		clear.x2 = right;
	}

}
Esempio n. 3
0
File: cl_inv.c Progetto: ZwS/qudos
void
CL_DrawInventory(void)
{
	int		i, j;
	int		num, selected_num, item;
	int		index[MAX_ITEMS];
	char		string[1024];
	int		x, y;
	char		binding[1024];
	char           *bind;
	int		selected;
	int		top;

	selected = cl.frame.playerstate.stats[STAT_SELECTED_ITEM];

	num = 0;
	selected_num = 0;
	for (i = 0; i < MAX_ITEMS; i++) {
		if (i == selected)
			selected_num = num;
		if (cl.inventory[i]) {
			index[num] = i;
			num++;
		}
	}

	/* determine scroll point */
	top = selected_num - DISPLAY_ITEMS / 2;
	if (num - top < DISPLAY_ITEMS)
		top = num - DISPLAY_ITEMS;
	if (top < 0)
		top = 0;

	x = (viddef.width - 256) / 2;
	y = (viddef.height - 240) / 2;

	/* repaint everything next frame */
	SCR_DirtyScreen();

	re.DrawPic(x, y + 8, "inventory", cl_hudalpha->value);

	y += 24;
	x += 24;
	Inv_DrawString(x, y, "hotkey ### item");
	Inv_DrawString(x, y + 8, "------ --- ----");
	y += 16;
	for (i = top; i < num && i < top + DISPLAY_ITEMS; i++) {
		item = index[i];
		/* search for a binding */
		Com_sprintf(binding, sizeof(binding), "use %s", cl.configstrings[CS_ITEMS + item]);
		bind = "";
		for (j = 0; j < 256; j++)
			if (keybindings[j] && !Q_stricmp(keybindings[j], binding)) {
				bind = Key_KeynumToString(j);
				break;
			}
		Com_sprintf(string, sizeof(string), "%6s %3i %s", bind, cl.inventory[item],
		    cl.configstrings[CS_ITEMS + item]);
		if (item != selected)
			SetStringHighBit(string);
		else {		/* draw a blinky cursor by the selected item */
			if ((int)(cls.realtime * 10) & 1)
				re.DrawChar(x - 8, y, 15, 256);
		}
		Inv_DrawString(x, y, string);
		y += 8;
	}
	
}
Esempio n. 4
0
/*
====================
MainWndProc

main window procedure
====================
*/
LONG WINAPI MainWndProc (
    HWND    hWnd,
    UINT    uMsg,
    WPARAM  wParam,
    LPARAM  lParam)
{
	LONG			lRet = 0;

	if ( uMsg == MSH_MOUSEWHEEL )
	{
		if ( ( ( int ) wParam ) > 0 )
		{
			Key_Event( K_MWHEELUP, true, sys_msg_time );
			Key_Event( K_MWHEELUP, false, sys_msg_time );
		}
		else
		{
			Key_Event( K_MWHEELDOWN, true, sys_msg_time );
			Key_Event( K_MWHEELDOWN, false, sys_msg_time );
		}
        return DefWindowProc (hWnd, uMsg, wParam, lParam);
	}

	switch (uMsg)
	{
	case WM_MOUSEWHEEL:
		/*
		** this chunk of code theoretically only works under NT4 and Win98
		** since this message doesn't exist under Win95
		*/
		if ( ( short ) HIWORD( wParam ) > 0 )
		{
			Key_Event( K_MWHEELUP, true, sys_msg_time );
			Key_Event( K_MWHEELUP, false, sys_msg_time );
		}
		else
		{
			Key_Event( K_MWHEELDOWN, true, sys_msg_time );
			Key_Event( K_MWHEELDOWN, false, sys_msg_time );
		}
		break;

	case WM_HOTKEY:
		return 0;

	case WM_CREATE:
		cl_hwnd = hWnd;

		MSH_MOUSEWHEEL = RegisterWindowMessage("MSWHEEL_ROLLMSG"); 
        return DefWindowProc (hWnd, uMsg, wParam, lParam);

	case WM_PAINT:
		SCR_DirtyScreen ();	// force entire screen to update next frame
        return DefWindowProc (hWnd, uMsg, wParam, lParam);

	case WM_DESTROY:
		// let sound and input know about this?
		cl_hwnd = NULL;
        return DefWindowProc (hWnd, uMsg, wParam, lParam);

	case WM_ACTIVATE:
		{
			int	fActive, fMinimized;

			// KJB: Watch this for problems in fullscreen modes with Alt-tabbing.
			fActive = LOWORD(wParam);
			fMinimized = (BOOL) HIWORD(wParam);

			AppActivate( fActive != WA_INACTIVE, fMinimized);

			if ( reflib_active )
				GLimp_AppActivate( !( fActive == WA_INACTIVE ) );
		}
        return DefWindowProc (hWnd, uMsg, wParam, lParam);

	case WM_MOVE:
		{
			int		xPos, yPos;
			RECT r;
			int		style;

			if (!vid_fullscreen->value)
			{
				xPos = (short) LOWORD(lParam);    // horizontal position 
				yPos = (short) HIWORD(lParam);    // vertical position 

				r.left   = 0;
				r.top    = 0;
				r.right  = 1;
				r.bottom = 1;

				style = GetWindowLong( hWnd, GWL_STYLE );
				AdjustWindowRect( &r, style, FALSE );

				Cvar_SetValue( "vid_xpos", xPos + r.left);
				Cvar_SetValue( "vid_ypos", yPos + r.top);
				vid_xpos->modified = false;
				vid_ypos->modified = false;
				if (ActiveApp)
					IN_Activate (true);
			}
		}
        return DefWindowProc (hWnd, uMsg, wParam, lParam);

// this is complicated because Win32 seems to pack multiple mouse events into
// one update sometimes, so we always check all states and look for events
	case WM_LBUTTONDOWN:
	case WM_LBUTTONUP:
	case WM_RBUTTONDOWN:
	case WM_RBUTTONUP:
	case WM_MBUTTONDOWN:
	case WM_MBUTTONUP:
#ifdef ENABLE_MOUSE4_MOUSE5 // mattx86: mouse4_mouse5
	case WM_XBUTTONDOWN:
	case WM_XBUTTONUP:
#endif
	case WM_MOUSEMOVE:
		{
			int	temp;

			temp = 0;

			if (wParam & MK_LBUTTON)
				temp |= 1;

			if (wParam & MK_RBUTTON)
				temp |= 2;

			if (wParam & MK_MBUTTON)
				temp |= 4;

#ifdef ENABLE_MOUSE4_MOUSE5 // mattx86: mouse4_mouse5
			if (wParam & MK_XBUTTON1)
				temp |= 8;

			if (wParam & MK_XBUTTON2)
				temp |= 16;
#endif

			IN_MouseEvent (temp);
		}
		break;

	case WM_SYSCOMMAND:
		if ( wParam == SC_SCREENSAVE )
			return 0;
        return DefWindowProc (hWnd, uMsg, wParam, lParam);
	case WM_SYSKEYDOWN:
		if ( wParam == 13 )
		{
			if ( vid_fullscreen )
			{
				Cvar_SetValue( "vid_fullscreen", !vid_fullscreen->value );
			}
			return 0;
		}
		// fall through
	case WM_KEYDOWN:
		Key_Event( MapKey( lParam ), true, sys_msg_time);
		break;

	case WM_SYSKEYUP:
	case WM_KEYUP:
		Key_Event( MapKey( lParam ), false, sys_msg_time);
		break;

	case MM_MCINOTIFY:
		{
			LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
			lRet = CDAudio_MessageHandler (hWnd, uMsg, wParam, lParam);
		}
		break;

	default:	// pass all unhandled messages to DefWindowProc
        return DefWindowProc (hWnd, uMsg, wParam, lParam);
    }

    /* return 0 if handled message, 1 if not */
    return DefWindowProc( hWnd, uMsg, wParam, lParam );
}
Esempio n. 5
0
LONG WINAPI MainWndProc (
    HWND    hWnd,
    UINT    uMsg,
    WPARAM  wParam,
    LPARAM  lParam)
{
	LONG		lRet = 0;
	static qboolean newwindow = true;
	static qboolean minimized = false;

	if (uMsg == MSH_MOUSEWHEEL)
	{
		if (((int)wParam) > 0)
		{
			Key_Event(K_MWHEELUP, true, sys_msg_time);
			Key_Event(K_MWHEELUP, false, sys_msg_time);
		}
		else
		{
			Key_Event(K_MWHEELDOWN, true, sys_msg_time);
			Key_Event(K_MWHEELDOWN, false, sys_msg_time);
		}
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
	}

	//Com_Printf("%x\n", uMsg);

	switch (uMsg)
	{
	case WM_MOUSEWHEEL:
		/*
		** this chunk of code theoretically only works under NT4 and Win98
		** since this message doesn't exist under Win95
		*/
		if ((short)HIWORD(wParam) > 0)
		{
			Key_Event(K_MWHEELUP, true, sys_msg_time);
			Key_Event(K_MWHEELUP, false, sys_msg_time);
		}
		else
		{
			Key_Event(K_MWHEELDOWN, true, sys_msg_time);
			Key_Event(K_MWHEELDOWN, false, sys_msg_time);
		}
		break;

	case WM_HOTKEY:
		return 0;

	case WM_CREATE:
		cl_hwnd = hWnd;
		newwindow = true;
		MSH_MOUSEWHEEL = RegisterWindowMessage("MSWHEEL_ROLLMSG"); 
        return DefWindowProc (hWnd, uMsg, wParam, lParam);

	case WM_PAINT:
		SCR_DirtyScreen();	// force entire screen to update next frame
        return DefWindowProc(hWnd, uMsg, wParam, lParam);

	case WM_DESTROY:
		// let sound and input know about this?
		cl_hwnd = NULL;
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
/*
	case WM_KILLFOCUS: // jit - make sure mouse is deactivated if another window takes focus
		AppActivate(false, minimized, newwindow);

		if (reflib_active)
			re.AppActivate(false);

		return DefWindowProc(hWnd, uMsg, wParam, lParam);

	case WM_NCACTIVATE:
		AppActivate(wParam, minimized, newwindow);

		if (reflib_active)
			re.AppActivate(wParam);

		return DefWindowProc(hWnd, uMsg, wParam, lParam);
*/
	/*case WM_ACTIVATEAPP:
		AppActivate(wParam, minimized, newwindow);

		if (reflib_active)
			re.AppActivate(wParam);

		return DefWindowProc(hWnd, uMsg, wParam, lParam);*/
/* jit - disabled this because we run CheckActive() every frame because we aren't getting appropriate events when the game loses focus/foreground, sometimes.
	case WM_ACTIVATE:
		{
			int	fActive;
			qboolean active;
			HWND foregroundWindow = GetForegroundWindow();

			// KJB: Watch this for problems in fullscreen modes with Alt-tabbing.
			fActive = LOWORD(wParam);
			minimized = (BOOL)HIWORD(wParam); 
			active = (fActive != WA_INACTIVE);

			//if (foregroundWindow != hWnd)
			//	active = false;

			Com_Printf("\nForeground: %d hWnd: %d\n\n", foregroundWindow, hWnd);
			AppActivate(active, minimized, newwindow);

			if (reflib_active)
				re.AppActivate(active);

			newwindow = false;
			return DefWindowProc(hWnd, uMsg, wParam, lParam);
		}
/*
	case WM_WINDOWPOSCHANGED: // jit - handle another case of losing app focus
		{
			LPWINDOWPOS windowpos = (LPWINDOWPOS)lParam;

			if (windowpos->flags & 0x800) // SWP_STATECHANGED
			{
				HWND foregroundWindow = GetForegroundWindow();
				qboolean active = (foregroundWindow == hWnd);

				AppActivate(active, minimized, newwindow);

				if (reflib_active)
					re.AppActivate(active);
			}

			Com_Printf("\nWindowposchanged flags %x\n", windowpos->flags);
			return DefWindowProc(hWnd, uMsg, wParam, lParam);
		}
*/
	case WM_MOVE:
		{
			int		xPos, yPos;
			RECT	r;
			int		style;

			if (!vid_fullscreen->value)
			{
				xPos = (short)LOWORD(lParam);    // horizontal position 
				yPos = (short)HIWORD(lParam);    // vertical position 
				r.left   = 0;
				r.top    = 0;
				r.right  = 1;
				r.bottom = 1;
				style = GetWindowLong(hWnd, GWL_STYLE);
				AdjustWindowRect(&r, style, FALSE);
				Cvar_SetValue("vid_xpos", xPos + r.left);
				Cvar_SetValue("vid_ypos", yPos + r.top);
				vid_xpos->modified = false;
				vid_ypos->modified = false;
			}

			// jitmouse - force mouse to recenter properly
			if (ActiveApp)
				IN_Activate(true);
		}

        return DefWindowProc(hWnd, uMsg, wParam, lParam);

// this is complicated because Win32 seems to pack multiple mouse events into
// one update sometimes, so we always check all states and look for events
	case WM_LBUTTONDOWN:
	case WM_LBUTTONUP:
	case WM_RBUTTONDOWN:
	case WM_RBUTTONUP:
	case WM_MBUTTONDOWN:
	case WM_MBUTTONUP:
	case WM_MOUSEMOVE:
	case WM_XBUTTONDOWN: // jitmouse
	case WM_XBUTTONUP: // jitmouse
		{
			int	temp = 0;

			if (wParam & MK_LBUTTON)
				temp |= 1;

			if (wParam & MK_RBUTTON)
				temp |= 2;

			if (wParam & MK_MBUTTON)
				temp |= 4;

			// === jitmouse
			if (wParam & MK_XBUTTON1)
				temp |= 8;

			if (wParam & MK_XBUTTON2)
				temp |= 16;
			// ===

			IN_MouseEvent(temp);

			// ++ ARTHUR [9/04/03] - Mouse movement emulates keystroke
			Key_Event(K_MOUSEMOVE, true, sys_msg_time);
			// -- ARTHUR	
		}
		break;

	case WM_INPUT: // jitmouse
		if (m_rawinput->value && !(cls.key_dest == key_console || g_windowed && M_MenuActive())) // Don't accumulate in-game mouse input when at the console or menu
		{
			UINT dwSize = 40;
			static BYTE lpb[40];
			RAWINPUT *raw;
			GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));
			raw = (RAWINPUT*)lpb;

			if (raw->header.dwType == RIM_TYPEMOUSE) 
			{
				extern int g_raw_mouse_x, g_raw_mouse_y;

				g_raw_mouse_x += raw->data.mouse.lLastX;
				g_raw_mouse_y += raw->data.mouse.lLastY;
			}
		}
		break;

	case WM_SYSCOMMAND:
		if (wParam == SC_SCREENSAVE)
			return 0;

        return DefWindowProc(hWnd, uMsg, wParam, lParam);

	case WM_SYSKEYDOWN:

		if (wParam == 13) // alt-enter toggles fullscreen
		{
			if (!win_noaltenter || !win_noaltenter->value) // jitkeyboard
			{
				if (vid_fullscreen)
					Cvar_SetValue("vid_fullscreen", !vid_fullscreen->value);

				return 0;
			}
		}

		// fall through

	case WM_KEYDOWN:
		Key_Event(Sys_MapKeyModified(wParam, lParam), true, sys_msg_time);
		break;

	case WM_SYSKEYUP:
	case WM_KEYUP:
		Key_Event(Sys_MapKeyModified(wParam, lParam), false, sys_msg_time);
		break;

	case WM_SIZE:
		if (lParam) // This is 0 when minimized?
		{
			M_RefreshMenu(); // jitmenu
			re.DrawResizeWindow(LOWORD(lParam), HIWORD(lParam));
			VID_NewWindow(LOWORD(lParam), HIWORD(lParam));
		}

		if (wParam == SIZE_MINIMIZED) // jit
			minimized = true;
		else
			minimized = false;
		break;

	case WM_CLOSE:
	case WM_QUIT:
		Com_Quit();
		break;

	case WM_APPCOMMAND:

	#ifdef OGG_SUPPORT
		if(ogg_started)
			switch(GET_APPCOMMAND_LPARAM(lParam))
			{
			case APPCOMMAND_MEDIA_PLAY_PAUSE:
				Cbuf_AddText("ogg_playpause\n");
				return 1;
			case APPCOMMAND_MEDIA_NEXTTRACK:
				Cbuf_AddText("ogg_play >\n");
				return 1;
			case APPCOMMAND_MEDIA_PREVIOUSTRACK:
				Cbuf_AddText("ogg_play <\n");
				return 1;
			case APPCOMMAND_MEDIA_STOP:
				Cbuf_AddText("ogg_stop\n");
				return 1;
			}
		break;
	#endif

	case MM_MCINOTIFY:
		{
			LONG CDAudio_MessageHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
			lRet = CDAudio_MessageHandler(hWnd, uMsg, wParam, lParam);
		}
		break;

	default:	// pass all unhandled messages to DefWindowProc
        return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }

	//CheckActive(hWnd);

    // return 0 if handled message, 1 if not
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}