亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rw_x11.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
?? 第 1 頁 / 共 3 頁
字號:
				 None,
				 CurrentTime);

	if (in_dgamouse->value) {
		int MajorVersion, MinorVersion;

		if (!XF86DGAQueryVersion(dpy, &MajorVersion, &MinorVersion)) { 
			// unable to query, probalby not supported
			ri.Con_Printf( PRINT_ALL, "Failed to detect XF86DGA Mouse\n" );
			ri.Cvar_Set( "in_dgamouse", "0" );
		} else {
			dgamouse = true;
			XF86DGADirectVideo(dpy, DefaultScreen(dpy), XF86DGADirectMouse);
			XWarpPointer(dpy, None, win, 0, 0, 0, 0, 0, 0);
		}
	} else
		XWarpPointer(dpy, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);

	XGrabKeyboard(dpy, win,
				  False,
				  GrabModeAsync, GrabModeAsync,
				  CurrentTime);

	mouse_active = true;

	ignorefirst = true;

//	XSync(dpy, True);
}

static void uninstall_grabs(void)
{
	if (!dpy || !win)
		return;

	if (dgamouse) {
		dgamouse = false;
		XF86DGADirectVideo(dpy, DefaultScreen(dpy), 0);
	}

	XUngrabPointer(dpy, CurrentTime);
	XUngrabKeyboard(dpy, CurrentTime);

// inviso cursor
	XUndefineCursor(dpy, win);

	mouse_active = false;
}

static void IN_DeactivateMouse( void ) 
{
	if (!mouse_avail || !dpy || !win)
		return;

	if (mouse_active) {
		uninstall_grabs();
		mouse_active = false;
	}
}

static void IN_ActivateMouse( void ) 
{
	if (!mouse_avail || !dpy || !win)
		return;

	if (!mouse_active) {
		mx = my = 0; // don't spazz
		install_grabs();
		mouse_active = true;
	}
}

void RW_IN_Frame (void)
{
}

void RW_IN_Activate(qboolean active)
{
	if (active)
		IN_ActivateMouse();
	else
		IN_DeactivateMouse ();
}

/*****************************************************************************/

void ResetFrameBuffer(void)
{
	int mem;
	int pwidth;

	if (x_framebuffer[0])
	{
		free(x_framebuffer[0]->data);
		free(x_framebuffer[0]);
	}

// alloc an extra line in case we want to wrap, and allocate the z-buffer
	pwidth = x_visinfo->depth / 8;
	if (pwidth == 3) pwidth = 4;
	mem = ((vid.width*pwidth+7)&~7) * vid.height;

	x_framebuffer[0] = XCreateImage(dpy,
		x_vis,
		x_visinfo->depth,
		ZPixmap,
		0,
		malloc(mem),
		vid.width, vid.height,
		32,
		0);

	if (!x_framebuffer[0])
		Sys_Error("VID: XCreateImage failed\n");

	vid.buffer = (byte*) (x_framebuffer[0]);
}

void ResetSharedFrameBuffers(void)
{
	int size;
	int key;
	int minsize = getpagesize();
	int frm;

	for (frm=0 ; frm<2 ; frm++)
	{
	// free up old frame buffer memory
		if (x_framebuffer[frm])
		{
			XShmDetach(dpy, &x_shminfo[frm]);
			free(x_framebuffer[frm]);
			shmdt(x_shminfo[frm].shmaddr);
		}

	// create the image
		x_framebuffer[frm] = XShmCreateImage(	dpy,
						x_vis,
						x_visinfo->depth,
						ZPixmap,
						0,
						&x_shminfo[frm],
						vid.width,
						vid.height );

	// grab shared memory

		size = x_framebuffer[frm]->bytes_per_line
			* x_framebuffer[frm]->height;
		if (size < minsize)
			Sys_Error("VID: Window must use at least %d bytes\n", minsize);

		key = random();
		x_shminfo[frm].shmid = shmget((key_t)key, size, IPC_CREAT|0777);
		if (x_shminfo[frm].shmid==-1)
			Sys_Error("VID: Could not get any shared memory\n");

		// attach to the shared memory segment
		x_shminfo[frm].shmaddr =
			(void *) shmat(x_shminfo[frm].shmid, 0, 0);

		ri.Con_Printf(PRINT_DEVELOPER, "MITSHM shared memory (id=%d, addr=0x%lx)\n", 
			x_shminfo[frm].shmid, (long) x_shminfo[frm].shmaddr);

		x_framebuffer[frm]->data = x_shminfo[frm].shmaddr;

	// get the X server to attach to it

		if (!XShmAttach(dpy, &x_shminfo[frm]))
			Sys_Error("VID: XShmAttach() failed\n");
		XSync(dpy, 0);
		shmctl(x_shminfo[frm].shmid, IPC_RMID, 0);
	}

}

// ========================================================================
// Tragic death handler
// ========================================================================

void TragicDeath(int signal_num)
{
//	XAutoRepeatOn(dpy);
	XCloseDisplay(dpy);
	Sys_Error("This death brought to you by the number %d\n", signal_num);
}

int XLateKey(XKeyEvent *ev)
{

	int key;
	char buf[64];
	KeySym keysym;

	key = 0;

	XLookupString(ev, buf, sizeof buf, &keysym, 0);

	switch(keysym)
	{
		case XK_KP_Page_Up:	 key = K_KP_PGUP; break;
		case XK_Page_Up:	 key = K_PGUP; break;

		case XK_KP_Page_Down: key = K_KP_PGDN; break;
		case XK_Page_Down:	 key = K_PGDN; break;

		case XK_KP_Home: key = K_KP_HOME; break;
		case XK_Home:	 key = K_HOME; break;

		case XK_KP_End:  key = K_KP_END; break;
		case XK_End:	 key = K_END; break;

		case XK_KP_Left: key = K_KP_LEFTARROW; break;
		case XK_Left:	 key = K_LEFTARROW; break;

		case XK_KP_Right: key = K_KP_RIGHTARROW; break;
		case XK_Right:	key = K_RIGHTARROW;		break;

		case XK_KP_Down: key = K_KP_DOWNARROW; break;
		case XK_Down:	 key = K_DOWNARROW; break;

		case XK_KP_Up:   key = K_KP_UPARROW; break;
		case XK_Up:		 key = K_UPARROW;	 break;

		case XK_Escape: key = K_ESCAPE;		break;

		case XK_KP_Enter: key = K_KP_ENTER;	break;
		case XK_Return: key = K_ENTER;		 break;

		case XK_Tab:		key = K_TAB;			 break;

		case XK_F1:		 key = K_F1;				break;

		case XK_F2:		 key = K_F2;				break;

		case XK_F3:		 key = K_F3;				break;

		case XK_F4:		 key = K_F4;				break;

		case XK_F5:		 key = K_F5;				break;

		case XK_F6:		 key = K_F6;				break;

		case XK_F7:		 key = K_F7;				break;

		case XK_F8:		 key = K_F8;				break;

		case XK_F9:		 key = K_F9;				break;

		case XK_F10:		key = K_F10;			 break;

		case XK_F11:		key = K_F11;			 break;

		case XK_F12:		key = K_F12;			 break;

		case XK_BackSpace: key = K_BACKSPACE; break;

		case XK_KP_Delete: key = K_KP_DEL; break;
		case XK_Delete: key = K_DEL; break;

		case XK_Pause:	key = K_PAUSE;		 break;

		case XK_Shift_L:
		case XK_Shift_R:	key = K_SHIFT;		break;

		case XK_Execute: 
		case XK_Control_L: 
		case XK_Control_R:	key = K_CTRL;		 break;

		case XK_Alt_L:	
		case XK_Meta_L: 
		case XK_Alt_R:	
		case XK_Meta_R: key = K_ALT;			break;

		case XK_KP_Begin: key = K_KP_5;	break;

		case XK_Insert:key = K_INS; break;
		case XK_KP_Insert: key = K_KP_INS; break;

		case XK_KP_Multiply: key = '*'; break;
		case XK_KP_Add:  key = K_KP_PLUS; break;
		case XK_KP_Subtract: key = K_KP_MINUS; break;
		case XK_KP_Divide: key = K_KP_SLASH; break;

#if 0
		case 0x021: key = '1';break;/* [!] */
		case 0x040: key = '2';break;/* [@] */
		case 0x023: key = '3';break;/* [#] */
		case 0x024: key = '4';break;/* [$] */
		case 0x025: key = '5';break;/* [%] */
		case 0x05e: key = '6';break;/* [^] */
		case 0x026: key = '7';break;/* [&] */
		case 0x02a: key = '8';break;/* [*] */
		case 0x028: key = '9';;break;/* [(] */
		case 0x029: key = '0';break;/* [)] */
		case 0x05f: key = '-';break;/* [_] */
		case 0x02b: key = '=';break;/* [+] */
		case 0x07c: key = '\'';break;/* [|] */
		case 0x07d: key = '[';break;/* [}] */
		case 0x07b: key = ']';break;/* [{] */
		case 0x022: key = '\'';break;/* ["] */
		case 0x03a: key = ';';break;/* [:] */
		case 0x03f: key = '/';break;/* [?] */
		case 0x03e: key = '.';break;/* [>] */
		case 0x03c: key = ',';break;/* [<] */
#endif

		default:
			key = *(unsigned char*)buf;
			if (key >= 'A' && key <= 'Z')
				key = key - 'A' + 'a';
			break;
	} 

	return key;
}

void HandleEvents(void)
{
	XEvent event;
	int b;
	qboolean dowarp = false;
	int mwx = vid.width/2;
	int mwy = vid.height/2;
   
	while (XPending(dpy)) {

		XNextEvent(dpy, &event);

		switch(event.type) {
		case KeyPress:
		case KeyRelease:
			if (in_state && in_state->Key_Event_fp)
				in_state->Key_Event_fp (XLateKey(&event.xkey), event.type == KeyPress);
			break;

		case MotionNotify:
			if (ignorefirst) {
				ignorefirst = false;
				break;
			}

			if (mouse_active) {
				if (dgamouse) {
					mx += (event.xmotion.x + win_x) * 2;
					my += (event.xmotion.y + win_y) * 2;
				} 
				else 
				{
					mx += ((int)event.xmotion.x - mwx) * 2;
					my += ((int)event.xmotion.y - mwy) * 2;
					mwx = event.xmotion.x;
					mwy = event.xmotion.y;

					if (mx || my)
						dowarp = true;
				}
			}
			break;


			break;

		case ButtonPress:
			b=-1;
			if (event.xbutton.button == 1)
				b = 0;
			else if (event.xbutton.button == 2)
				b = 2;
			else if (event.xbutton.button == 3)
				b = 1;
			if (b>=0)
				mouse_buttonstate |= 1<<b;
			break;

		case ButtonRelease:
			b=-1;
			if (event.xbutton.button == 1)
				b = 0;
			else if (event.xbutton.button == 2)
				b = 2;
			else if (event.xbutton.button == 3)
				b = 1;
			if (b>=0)
				mouse_buttonstate &= ~(1<<b);
			break;
		
		case CreateNotify :
			ri.Cvar_Set( "vid_xpos", va("%d", event.xcreatewindow.x));
			ri.Cvar_Set( "vid_ypos", va("%d", event.xcreatewindow.y));
			vid_xpos->modified = false;
			vid_ypos->modified = false;
			win_x = event.xcreatewindow.x;
			win_y = event.xcreatewindow.y;
			break;

		case ConfigureNotify :
			ri.Cvar_Set( "vid_xpos", va("%d", event.xcreatewindow.x));
			ri.Cvar_Set( "vid_ypos", va("%d", event.xcreatewindow.y));
			vid_xpos->modified = false;
			vid_ypos->modified = false;
			win_x = event.xconfigure.x;
			win_y = event.xconfigure.y;
			config_notify_width = event.xconfigure.width;
			config_notify_height = event.xconfigure.height;
			if (config_notify_width != vid.width ||
				config_notify_height != vid.height)
				XMoveResizeWindow(dpy, win, win_x, win_y, vid.width, vid.height);
			config_notify = 1;
			break;

		default:
			if (doShm && event.type == x_shmeventtype)
				oktodraw = true;
			if (event.type == Expose && !event.xexpose.count)
				exposureflag = true;
		}
	}
	   
	if (dowarp) {
		/* move the mouse to the window center again */
		XWarpPointer(dpy,None,win,0,0,0,0, vid.width/2,vid.height/2);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美中文字幕一区二区三区 | 99精品久久只有精品| 久久久青草青青国产亚洲免观| 国产精品亚洲人在线观看| 久久久亚洲精华液精华液精华液 | 国产高清无密码一区二区三区| 精品国产精品一区二区夜夜嗨| 狠狠色丁香婷婷综合| 国产精品入口麻豆九色| 91视频观看视频| 天天色综合天天| 欧美不卡一区二区三区四区| 国v精品久久久网| 亚洲日本在线天堂| 欧美精品久久天天躁| 九九在线精品视频| 中文字幕一区二区5566日韩| 欧美三级视频在线| 狠狠狠色丁香婷婷综合久久五月| 中文一区在线播放| 欧美日韩另类国产亚洲欧美一级| 久久精品99国产精品| 国产精品久久777777| 欧美视频自拍偷拍| 国产精品一区二区在线播放| 亚洲欧美激情插| 欧美一区二区啪啪| 成人av在线资源| 偷拍自拍另类欧美| 国产日韩精品一区| 欧美人与性动xxxx| 99久久国产综合精品女不卡| 日韩主播视频在线| 中文字幕日韩欧美一区二区三区| 欧美三级日韩三级| 成人手机电影网| 日韩国产一二三区| 国产精品久久久99| 欧美v日韩v国产v| 欧美天堂一区二区三区| 国产成人综合亚洲网站| 日本麻豆一区二区三区视频| 国产精品欧美一区喷水| 日韩欧美亚洲另类制服综合在线| jlzzjlzz欧美大全| 韩国欧美国产一区| 偷拍一区二区三区四区| 亚洲欧美日韩系列| 欧美国产国产综合| 精品国产乱码久久久久久蜜臀| 在线亚洲免费视频| 不卡电影免费在线播放一区| 国产在线乱码一区二区三区| 五月激情六月综合| 一区二区三区成人| 国产精品人人做人人爽人人添| 日韩一级片在线播放| 欧美性生交片4| 高清不卡在线观看| 国产在线国偷精品产拍免费yy| 肉肉av福利一精品导航| 亚洲女同女同女同女同女同69| 日本一区二区视频在线观看| 亚洲精品一区二区三区99| 日韩一区二区三区四区| 欧美日韩国产首页| 欧美性猛交xxxx黑人交| 在线观看网站黄不卡| 不卡av在线网| 91日韩一区二区三区| 波多野结衣91| 北岛玲一区二区三区四区| 国产91丝袜在线18| 国产成人免费视频网站| 国产91精品一区二区麻豆网站 | 国产性做久久久久久| 精品国产区一区| 精品日韩欧美一区二区| 欧美不卡一区二区三区| 精品国产乱码久久久久久影片| 精品1区2区在线观看| 日韩一区二区三区在线| 精品国产免费久久| 久久亚洲一区二区三区明星换脸| www久久久久| 久久久综合视频| 欧美国产综合一区二区| 国产精品国产三级国产有无不卡| 国产精品久久久久aaaa樱花| 亚洲欧美另类图片小说| 五月天欧美精品| 久久国产精品免费| 国产传媒日韩欧美成人| 99久久久国产精品免费蜜臀| 色婷婷激情一区二区三区| 欧美日韩亚洲综合一区| 欧美电影影音先锋| 欧美成人性战久久| 国产日韩欧美一区二区三区综合| 欧美激情一区二区三区在线| 亚洲色图第一区| 午夜影院久久久| 韩国欧美一区二区| 99re这里只有精品视频首页| 91福利资源站| 精品美女一区二区三区| 中文一区二区在线观看| 亚洲午夜久久久| 六月丁香婷婷久久| 成人高清视频免费观看| 欧美日韩中文国产| 精品国产伦一区二区三区观看方式| 中文字幕+乱码+中文字幕一区| 一区二区三区国产精品| 国产在线播放一区| 色丁香久综合在线久综合在线观看| 欧美日韩国产成人在线91| 久久综合九色综合欧美就去吻 | 欧美日本一区二区三区| 亚洲精品在线观看网站| 亚洲色欲色欲www在线观看| 美日韩一级片在线观看| 国产成人精品免费一区二区| 欧美日韩三级视频| 欧美国产日韩亚洲一区| 日韩黄色免费电影| www.亚洲人| 日韩免费视频一区二区| 夜夜亚洲天天久久| 国产精品99久久久久久久vr| 欧洲av一区二区嗯嗯嗯啊| 国产视频一区在线播放| 石原莉奈在线亚洲三区| av成人动漫在线观看| 26uuu欧美| 日韩电影在线一区| 91国产成人在线| 中文字幕中文字幕一区二区| 美女视频黄免费的久久| 在线视频一区二区免费| 国产精品视频yy9299一区| 美女网站视频久久| 欧美伊人久久久久久久久影院| 国产欧美一区视频| 精品一二三四区| 69久久99精品久久久久婷婷| 综合色中文字幕| 国产一区二区三区视频在线播放| 欧美人伦禁忌dvd放荡欲情| 日韩毛片高清在线播放| 成人免费高清在线| 久久综合色婷婷| 精彩视频一区二区三区| 日韩美女视频一区二区在线观看| 亚洲国产精品欧美一二99| 91蝌蚪国产九色| 中文字幕一区二区5566日韩| 东方欧美亚洲色图在线| 国产亚洲欧美激情| 激情五月婷婷综合| 欧美mv和日韩mv国产网站| 麻豆精品视频在线观看免费| 制服丝袜亚洲网站| 亚洲国产wwwccc36天堂| 欧美三日本三级三级在线播放| 亚洲欧美一区二区三区极速播放 | 亚洲福利一区二区| 91玉足脚交白嫩脚丫在线播放| 中文一区一区三区高中清不卡| 国产成人在线视频网站| 久久精品视频在线看| 国产精品123| 国产精品久久久久婷婷二区次| 99精品国产视频| 亚洲欧美激情小说另类| 欧美色国产精品| 日本欧美一区二区| 日韩欧美的一区| 国产激情视频一区二区在线观看 | 亚洲国产色一区| 欧美日韩一区久久| 美日韩一区二区三区| 久久久精品国产免大香伊| 国产一区二区在线视频| 国产精品福利影院| 色婷婷综合久久久中文一区二区| 亚洲精品免费在线观看| 欧美群妇大交群的观看方式| 丝袜诱惑制服诱惑色一区在线观看| 日韩你懂的在线观看| 成人一道本在线| 亚洲欧美另类小说| 91精品国产一区二区| 国产精品一级二级三级| 国产精品激情偷乱一区二区∴| 欧美亚洲综合网| 日本不卡视频一二三区| 国产午夜亚洲精品不卡| 一本到一区二区三区| 日韩高清国产一区在线|