⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 video.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *			GPAC - Multimedia Framework C SDK * *			Copyright (c) Jean Le Feuvre 2000-2005 *					All rights reserved * *  This file is part of GPAC / SDL audio and video module * *  GPAC is free software; you can redistribute it and/or modify *  it under the terms of the GNU Lesser General Public License as published by *  the Free Software Foundation; either version 2, or (at your option) *  any later version. *    *  GPAC is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU Lesser General Public License for more details. *    *  You should have received a copy of the GNU Lesser General Public *  License along with this library; see the file COPYING.  If not, write to *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  *		 */#include "sdl_out.h"#include <gpac/user.h>#ifdef WIN32#include <windows.h>#endif/*cursors data*/static char hand_data[] = {	0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 	0,0,0,0,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,1,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,1,2,2,1,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,1,2,2,1,2,2,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	1,1,1,0,1,2,2,1,2,2,1,2,2,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	1,2,2,1,1,2,2,2,2,2,2,2,2,1,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,1,2,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};static char collide_data[] ={	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 	0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,1,1,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,1,1,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};#define SDLVID()	SDLVidCtx *ctx = (SDLVidCtx *)dr->opaque#if defined(__linux__)#define HAVE_X11#endif#ifdef HAVE_X11#include <X11/Xlib.h>#endifstatic u32 video_modes[] = {	320, 200,	320, 240,	400, 300,	600, 400,	800, 600,	1024, 768,	1152, 864,	1280, 1024};static u32 nb_video_modes = 8;void SDLVid_SetCaption(){	char szName[100];	if (SDL_VideoDriverName(szName, 100)) {		char szCap[1024];		sprintf(szCap, "SDL Video Output (%s)", szName);		SDL_WM_SetCaption(szCap, NULL);	} else {		SDL_WM_SetCaption("SDL Video Output", NULL);	}}SDL_Cursor *SDLVid_LoadCursor(char *maskdata){	s32 ind, i, j;	u8 data[4*32];	u8 mask[4*32];	ind = -1;	for (i=0; i<32; i++) {		for (j=0; j<32; j++) {			if (j%8) {				data[ind] <<= 1;				mask[ind] <<= 1;			} else {				ind++;				data[ind] = mask[ind] = 0;			}			switch (maskdata[j+32*i]) {			/*black*/			case 1:				data[ind] |= 0x01;			/*white*/			case 2:				mask[ind] |= 0x01;				break;			}		}	}	return SDL_CreateCursor(data, mask, 32, 32, 0, 0);}static void sdl_translate_key(u32 SDLkey, GF_EventKey *evt) {	evt->flags = 0;	evt->hw_code = SDLkey;	switch (SDLkey) {	case SDLK_BACKSPACE: evt->key_code = GF_KEY_BACKSPACE; break;	case SDLK_TAB: evt->key_code = GF_KEY_TAB; break;	case SDLK_CLEAR: evt->key_code = GF_KEY_CLEAR; break;	case SDLK_PAUSE: evt->key_code = GF_KEY_PAUSE; break;	case SDLK_ESCAPE: evt->key_code = GF_KEY_ESCAPE; break;	case SDLK_SPACE: evt->key_code = GF_KEY_SPACE; break;	case SDLK_KP_ENTER: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_RETURN: 		evt->key_code = GF_KEY_ENTER; 		break;	case SDLK_KP_MULTIPLY: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_ASTERISK: 		evt->key_code = GF_KEY_STAR; 		break;	case SDLK_KP_PLUS: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_PLUS: 		evt->key_code = GF_KEY_PLUS; 		break;	case SDLK_KP_MINUS: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_MINUS: 		evt->key_code = GF_KEY_HYPHEN; 		break;	case SDLK_KP_DIVIDE: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_SLASH: 		evt->key_code = GF_KEY_SLASH; 		break;	case SDLK_KP0: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_0: 		evt->key_code = GF_KEY_0; 		break;	case SDLK_KP1: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_1: 		evt->key_code = GF_KEY_1; 		break;	case SDLK_KP2: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_2: 		evt->key_code = GF_KEY_2; 		break;	case SDLK_KP3: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_3: 		evt->key_code = GF_KEY_3; 		break;	case SDLK_KP4: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_4: 		evt->key_code = GF_KEY_4; 		break;	case SDLK_KP5: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_5: 		evt->key_code = GF_KEY_5; 		break;	case SDLK_KP6: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_6: 		evt->key_code = GF_KEY_6; 		break;	case SDLK_KP7: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_7: 		evt->key_code = GF_KEY_7; 		break;	case SDLK_KP8: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_8: 		evt->key_code = GF_KEY_8; 		break;	case SDLK_KP9: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_9: 		evt->key_code = GF_KEY_9; 		break;	case SDLK_KP_PERIOD: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_PERIOD:		evt->key_code = GF_KEY_FULLSTOP; 		break;	case SDLK_KP_EQUALS: evt->flags = GF_KEY_EXT_NUMPAD;	case SDLK_EQUALS:		evt->key_code = GF_KEY_EQUALS; 		break;		case SDLK_EXCLAIM: evt->key_code = GF_KEY_EXCLAMATION; break;	case SDLK_QUOTEDBL: evt->key_code = GF_KEY_QUOTATION; break;	case SDLK_HASH: evt->key_code = GF_KEY_NUMBER; break;	case SDLK_DOLLAR: evt->key_code = GF_KEY_DOLLAR; break;	case SDLK_AMPERSAND: evt->key_code = GF_KEY_AMPERSAND; break;	case SDLK_QUOTE: evt->key_code = GF_KEY_APOSTROPHE; break;	case SDLK_LEFTPAREN: evt->key_code = GF_KEY_LEFTPARENTHESIS; break;	case SDLK_RIGHTPAREN: evt->key_code = GF_KEY_RIGHTPARENTHESIS; break;	case SDLK_COMMA: evt->key_code = GF_KEY_COMMA; break;	case SDLK_COLON: evt->key_code = GF_KEY_COLON; break;	case SDLK_SEMICOLON: evt->key_code = GF_KEY_SEMICOLON; break;	case SDLK_LESS: evt->key_code = GF_KEY_LESSTHAN; break;	case SDLK_GREATER: evt->key_code = GF_KEY_GREATERTHAN; break;	case SDLK_QUESTION: evt->key_code = GF_KEY_QUESTION; break;	case SDLK_AT: evt->key_code = GF_KEY_AT; break;	case SDLK_LEFTBRACKET: evt->key_code = GF_KEY_LEFTSQUAREBRACKET; break;	case SDLK_RIGHTBRACKET: evt->key_code = GF_KEY_RIGHTSQUAREBRACKET; break;	case SDLK_BACKSLASH: evt->key_code = GF_KEY_BACKSLASH; break;	case SDLK_UNDERSCORE: evt->key_code = GF_KEY_UNDERSCORE; break;	case SDLK_BACKQUOTE: evt->key_code = GF_KEY_GRAVEACCENT; break;	case SDLK_DELETE: evt->key_code = GF_KEY_DEL; break;	case SDLK_EURO: evt->key_code = GF_KEY_EURO; break;	case SDLK_UNDO: evt->key_code = GF_KEY_UNDO; break;	case SDLK_UP: evt->key_code = GF_KEY_UP; break;	case SDLK_DOWN: evt->key_code = GF_KEY_DOWN; break;	case SDLK_RIGHT: evt->key_code = GF_KEY_RIGHT; break;	case SDLK_LEFT: evt->key_code = GF_KEY_LEFT; break;	case SDLK_INSERT: evt->key_code = GF_KEY_INSERT; break;	case SDLK_HOME: evt->key_code = GF_KEY_HOME; break;	case SDLK_END: evt->key_code = GF_KEY_END; break;	case SDLK_PAGEUP: evt->key_code = GF_KEY_PAGEUP; break;	case SDLK_PAGEDOWN: evt->key_code = GF_KEY_PAGEDOWN; break;	case SDLK_F1: evt->key_code = GF_KEY_F1; break;	case SDLK_F2: evt->key_code = GF_KEY_F2; break;	case SDLK_F3: evt->key_code = GF_KEY_F3; break;	case SDLK_F4: evt->key_code = GF_KEY_F4; break;	case SDLK_F5: evt->key_code = GF_KEY_F5; break;	case SDLK_F6: evt->key_code = GF_KEY_F6; break;	case SDLK_F7: evt->key_code = GF_KEY_F7; break;	case SDLK_F8: evt->key_code = GF_KEY_F8; break;	case SDLK_F9: evt->key_code = GF_KEY_F9; break;	case SDLK_F10: evt->key_code = GF_KEY_F10; break;	case SDLK_F11: evt->key_code = GF_KEY_F11; break;	case SDLK_F12: evt->key_code = GF_KEY_F12; break;	case SDLK_F13: evt->key_code = GF_KEY_F13; break;	case SDLK_F14: evt->key_code = GF_KEY_F14; break;	case SDLK_F15: evt->key_code = GF_KEY_F15; break;	case SDLK_NUMLOCK: evt->key_code = GF_KEY_NUMLOCK; break;	case SDLK_CAPSLOCK: evt->key_code = GF_KEY_CAPSLOCK; break;	case SDLK_SCROLLOCK: evt->key_code = GF_KEY_SCROLL; break;	case SDLK_RSHIFT: 		evt->key_code = GF_KEY_SHIFT;		evt->flags = GF_KEY_EXT_RIGHT;		break;	case SDLK_LSHIFT: 		evt->key_code = GF_KEY_SHIFT;		evt->flags = GF_KEY_EXT_LEFT;		break;	case SDLK_LCTRL: 		evt->key_code = GF_KEY_CONTROL;		evt->flags = GF_KEY_EXT_LEFT;		break;	case SDLK_RCTRL: 		evt->key_code = GF_KEY_CONTROL;		evt->flags = GF_KEY_EXT_RIGHT;		break;	case SDLK_LALT: 		evt->key_code = GF_KEY_ALT;		evt->flags = GF_KEY_EXT_LEFT;		break;	case SDLK_RALT: 		evt->key_code = GF_KEY_ALT;		evt->flags = GF_KEY_EXT_RIGHT;		break;	case SDLK_LSUPER:		evt->key_code = GF_KEY_META;		evt->flags = GF_KEY_EXT_LEFT;		break;	case SDLK_RSUPER:		evt->key_code = GF_KEY_META;		evt->flags = GF_KEY_EXT_RIGHT;		break;	case SDLK_MODE: evt->key_code = GF_KEY_MODECHANGE; break;	case SDLK_COMPOSE: evt->key_code = GF_KEY_COMPOSE; break;	case SDLK_HELP: evt->key_code = GF_KEY_HELP; break;	case SDLK_PRINT: evt->key_code = GF_KEY_PRINTSCREEN; break;/*	SDLK_CARET		= 94,	SDLK_a			= 97,	SDLK_b			= 98,	SDLK_c			= 99,	SDLK_d			= 100,	SDLK_e			= 101,	SDLK_f			= 102,	SDLK_g			= 103,	SDLK_h			= 104,	SDLK_i			= 105,	SDLK_j			= 106,	SDLK_k			= 107,	SDLK_l			= 108,	SDLK_m			= 109,	SDLK_n			= 110,	SDLK_o			= 111,	SDLK_p			= 112,	SDLK_q			= 113,	SDLK_r			= 114,	SDLK_s			= 115,	SDLK_t			= 116,	SDLK_u			= 117,	SDLK_v			= 118,	SDLK_w			= 119,	SDLK_x			= 120,	SDLK_y			= 121,	SDLK_z			= 122,	SDLK_DELETE		= 127,	SDLK_SYSREQ		= 317,	SDLK_POWER		= 320,*/	default:		if ((SDLkey>=0x30) && (SDLkey<=0x39))  evt->key_code = GF_KEY_0 + SDLkey-0x30;		else if ((SDLkey>=0x41) && (SDLkey<=0x5A))  evt->key_code = GF_KEY_A + SDLkey-0x51;		else			evt->key_code = GF_KEY_UNIDENTIFIED;		break;	}}#if 0void SDLVid_SetHack(void *os_handle, Bool set_on){  unsetenv("SDL_WINDOWID=");	if (!os_handle) return;	if (set_on) {		char buf[16];		snprintf(buf, sizeof(buf), "%u", (u32) os_handle);		setenv("SDL_WINDOWID", buf, 1);		sprintf(buf, "SDL_WINDOWID=%u", (u32) os_handle);		putenv(buf);	}}#endifstatic void SDLVid_DestroyObjects(SDLVidCtx *ctx){	if (ctx->back_buffer) SDL_FreeSurface(ctx->back_buffer);	ctx->back_buffer = NULL;}#define SDL_WINDOW_FLAGS			SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL | SDL_RESIZABLE#define SDL_FULLSCREEN_FLAGS		SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL | SDL_FULLSCREEN#define SDL_GL_WINDOW_FLAGS			SDL_HWSURFACE | SDL_OPENGL | SDL_HWACCEL | SDL_RESIZABLE#define SDL_GL_FULLSCREEN_FLAGS		SDL_HWSURFACE | SDL_OPENGL | SDL_HWACCEL | SDL_FULLSCREENvoid SDLVid_ResizeWindow(GF_VideoOutput *dr, u32 width, u32 height) {	SDLVID();	GF_Event evt;	/*lock X mutex to make sure the event queue is not being processed*/	gf_mx_p(ctx->evt_mx);	if (ctx->is_3D_out) {		u32 flags;		if ((ctx->width==width) && (ctx->height==height) ) {			gf_mx_v(ctx->evt_mx);			return;		}		flags = SDL_GL_WINDOW_FLAGS;		if (ctx->os_handle) flags &= ~SDL_RESIZABLE;		if (!ctx->screen) ctx->screen = SDL_SetVideoMode(width, height, 0, flags);		SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);		SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, ctx->screen->format->BitsPerPixel);		SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 0);		SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, 0);		SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, 0);		SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, 0);		SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, 0);		assert(width);		assert(height);		ctx->screen = SDL_SetVideoMode(width, height, 0, flags);		assert(ctx->screen);		ctx->width = width;		ctx->height = height;		evt.type = GF_EVENT_VIDEO_SETUP;		dr->on_event(dr->evt_cbk_hdl, &evt);			} else {		u32 flags = SDL_WINDOW_FLAGS;		if (ctx->os_handle) flags &= ~SDL_RESIZABLE;		ctx->screen = SDL_SetVideoMode(width, height, 0, flags);		assert(ctx->screen);	}	gf_mx_v(ctx->evt_mx);}u32 SDLVid_EventProc(void *par){	u32 flags, last_mouse_move;	Bool cursor_on;	SDL_Event sdl_evt;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -