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

📄 sdl_ph_events.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
        {            SDL_keysym keysym;            posted = 0;            keyEvent = PhGetData( event );            if (Pk_KF_Key_Down & keyEvent->key_flags)            {                posted = SDL_PrivateKeyboard(SDL_PRESSED, ph_TranslateKey(keyEvent, &keysym));            }            else /* must be key release */            {                 /* Ignore repeated key release events */                 /* if (! Pk_KF_Key_Repeat & keyEvent->key_flags ) */                posted = SDL_PrivateKeyboard(SDL_RELEASED, ph_TranslateKey( keyEvent, &keysym));            }        }        break;    }    return(posted);}/* perform a blocking read if no events available */int ph_Pending(_THIS){	/* Flush the display connection and look to see if events are queued */	PgFlush();     while( 1 )      {   //note this is a non-blocking call          switch( PhEventPeek( event, EVENT_SIZE ) )           {              case Ph_EVENT_MSG:                                  return 1;                 break;              case -1:                 perror( "PhEventNext failed" );                 break;              default:             	                  return 0;       }   }	/* Oh well, nothing is ready .. */	return(0);}/*SAMPLE EVENT PUMP=================static void update( int block ){    int ch,fl;    PhKeyEvent_t *key;    for( ;; ){        if( block ){            do{                fl=PhEventNext( event,EVENT_SIZE );            }while( fl!=Ph_EVENT_MSG );            block=0;        }else{            do{                fl=PhEventPeek( event,EVENT_SIZE );                if( !fl ) return;            }while( fl!=Ph_EVENT_MSG );        }        switch( event->type ){        case Ph_EV_KEY:            key=PhGetData( event );            ch=key->key_cap;    // & 127;            fl=key->key_flags;            if( ch<32 || ch>127 ) break;            if( fl & Pk_KF_Key_Down ){                if( !(fl & Pk_KF_Key_Repeat) ){                    if( queput-queget<QUE_SIZE ) keyque[ queput++ & QUE_MASK ]=ch;                    keyMatrix[ch]=1;                }            }else{                keyMatrix[ch]=0;            }            break;        default:            PtEventHandler( event );        }    }}*/void ph_PumpEvents(_THIS){	int pending;	/* Keep processing pending events */	pending = 0;	while ( ph_Pending(this) ) {		ph_DispatchEvent(this);		++pending;	}	if ( switch_waiting ) {		Uint32 now;		now  = SDL_GetTicks();#if 0		if ( pending || !SDL_VideoSurface ) {			/* Try again later... */			if ( switch_waiting & SDL_FULLSCREEN ) {				switch_time = now + 1500;			} else {				switch_time = now + 200;			}		} else if ( now >= switch_time ) {			Uint32 go_fullscreen;			go_fullscreen = switch_waiting & SDL_FULLSCREEN;			switch_waiting = 0;			if ( SDL_VideoSurface->flags & SDL_FULLSCREEN ) {				if ( go_fullscreen ) {					ph_EnterFullScreen(this);				} else {					ph_LeaveFullScreen(this);				}			}			/* Handle focus in/out when grabbed *//*			if ( go_fullscreen ) {				ph_GrabInputNoLock(this, this->input_grab);			} else {				ph_GrabInputNoLock(this, SDL_GRAB_OFF);			}*/		}#endif	}}void ph_InitKeymap(void){	int i;	/* Odd keys used in international keyboards */	for ( i=0; i<SDL_TABLESIZE(ODD_keymap); ++i )		ODD_keymap[i] = SDLK_UNKNOWN;	/* Map the miscellaneous keys */	for ( i=0; i<SDL_TABLESIZE(MISC_keymap); ++i )		MISC_keymap[i] = SDLK_UNKNOWN;	MISC_keymap[Pk_BackSpace&0xFF] = SDLK_BACKSPACE;	MISC_keymap[Pk_Tab&0xFF] = SDLK_TAB;	MISC_keymap[Pk_Clear&0xFF] = SDLK_CLEAR;	MISC_keymap[Pk_Return&0xFF] = SDLK_RETURN;	MISC_keymap[Pk_Pause&0xFF] = SDLK_PAUSE;	MISC_keymap[Pk_Escape&0xFF] = SDLK_ESCAPE;	MISC_keymap[Pk_Delete&0xFF] = SDLK_DELETE;	MISC_keymap[Pk_KP_0&0xFF] = SDLK_KP0;	MISC_keymap[Pk_KP_1&0xFF] = SDLK_KP1;	MISC_keymap[Pk_KP_2&0xFF] = SDLK_KP2;	MISC_keymap[Pk_KP_3&0xFF] = SDLK_KP3;	MISC_keymap[Pk_KP_4&0xFF] = SDLK_KP4;	MISC_keymap[Pk_KP_5&0xFF] = SDLK_KP5;	MISC_keymap[Pk_KP_6&0xFF] = SDLK_KP6;	MISC_keymap[Pk_KP_7&0xFF] = SDLK_KP7;	MISC_keymap[Pk_KP_8&0xFF] = SDLK_KP8;	MISC_keymap[Pk_KP_9&0xFF] = SDLK_KP9;	MISC_keymap[Pk_KP_Decimal&0xFF] = SDLK_KP_PERIOD;	MISC_keymap[Pk_KP_Divide&0xFF] = SDLK_KP_DIVIDE;	MISC_keymap[Pk_KP_Multiply&0xFF] = SDLK_KP_MULTIPLY;	MISC_keymap[Pk_KP_Subtract&0xFF] = SDLK_KP_MINUS;	MISC_keymap[Pk_KP_Add&0xFF] = SDLK_KP_PLUS;	MISC_keymap[Pk_KP_Enter&0xFF] = SDLK_KP_ENTER;	MISC_keymap[Pk_KP_Equal&0xFF] = SDLK_KP_EQUALS;	MISC_keymap[Pk_Up&0xFF] = SDLK_UP;	MISC_keymap[Pk_Down&0xFF] = SDLK_DOWN;	MISC_keymap[Pk_Right&0xFF] = SDLK_RIGHT;	MISC_keymap[Pk_Left&0xFF] = SDLK_LEFT;	MISC_keymap[Pk_Insert&0xFF] = SDLK_INSERT;	MISC_keymap[Pk_Home&0xFF] = SDLK_HOME;	MISC_keymap[Pk_End&0xFF] = SDLK_END;	MISC_keymap[Pk_Pg_Up&0xFF] = SDLK_PAGEUP;	MISC_keymap[Pk_Pg_Down&0xFF] = SDLK_PAGEDOWN;	MISC_keymap[Pk_F1&0xFF] = SDLK_F1;	MISC_keymap[Pk_F2&0xFF] = SDLK_F2;	MISC_keymap[Pk_F3&0xFF] = SDLK_F3;	MISC_keymap[Pk_F4&0xFF] = SDLK_F4;	MISC_keymap[Pk_F5&0xFF] = SDLK_F5;	MISC_keymap[Pk_F6&0xFF] = SDLK_F6;	MISC_keymap[Pk_F7&0xFF] = SDLK_F7;	MISC_keymap[Pk_F8&0xFF] = SDLK_F8;	MISC_keymap[Pk_F9&0xFF] = SDLK_F9;	MISC_keymap[Pk_F10&0xFF] = SDLK_F10;	MISC_keymap[Pk_F11&0xFF] = SDLK_F11;	MISC_keymap[Pk_F12&0xFF] = SDLK_F12;	MISC_keymap[Pk_F13&0xFF] = SDLK_F13;	MISC_keymap[Pk_F14&0xFF] = SDLK_F14;	MISC_keymap[Pk_F15&0xFF] = SDLK_F15;	MISC_keymap[Pk_Num_Lock&0xFF] = SDLK_NUMLOCK;	MISC_keymap[Pk_Caps_Lock&0xFF] = SDLK_CAPSLOCK;	MISC_keymap[Pk_Scroll_Lock&0xFF] = SDLK_SCROLLOCK;	MISC_keymap[Pk_Shift_R&0xFF] = SDLK_RSHIFT;	MISC_keymap[Pk_Shift_L&0xFF] = SDLK_LSHIFT;	MISC_keymap[Pk_Control_R&0xFF] = SDLK_RCTRL;	MISC_keymap[Pk_Control_L&0xFF] = SDLK_LCTRL;	MISC_keymap[Pk_Alt_R&0xFF] = SDLK_RALT;	MISC_keymap[Pk_Alt_L&0xFF] = SDLK_LALT;	MISC_keymap[Pk_Meta_R&0xFF] = SDLK_RMETA;	MISC_keymap[Pk_Meta_L&0xFF] = SDLK_LMETA;	MISC_keymap[Pk_Super_L&0xFF] = SDLK_LSUPER; /* Left "Windows" */	MISC_keymap[Pk_Super_R&0xFF] = SDLK_RSUPER; /* Right "Windows */	MISC_keymap[Pk_Mode_switch&0xFF] = SDLK_MODE; /* "Alt Gr" key */	MISC_keymap[Pk_Help&0xFF] = SDLK_HELP;	MISC_keymap[Pk_Print&0xFF] = SDLK_PRINT;//	MISC_keymap[Pk_Sys_Req] = SDLK_SYSREQ;	MISC_keymap[Pk_Break&0xFF] = SDLK_BREAK;	MISC_keymap[Pk_Menu&0xFF] = SDLK_MENU;	MISC_keymap[Pk_Hyper_R&0xFF] = SDLK_MENU;   /* Windows "Menu" key */}static unsigned long cap;SDL_keysym *ph_TranslateKey(PhKeyEvent_t *key, SDL_keysym *keysym){/*		'sym' is set to the value of the key with modifiers applied to it. 	This member is valid only if Pk_KF_Sym_Valid is set in the key_flags.	We will assume it is valid.*/	/* FIXME: This needs to check whether the cap & scancode is valid */	cap = key->key_cap;	switch (cap>>8) {            case 0x00:  /* Latin 1 */            case 0x01:  /* Latin 2 */            case 0x02:  /* Latin 3 */            case 0x03:  /* Latin 4 */            case 0x04:  /* Katakana */            case 0x05:  /* Arabic */            case 0x06:  /* Cyrillic */            case 0x07:  /* Greek */            case 0x08:  /* Technical */            case 0x0A:  /* Publishing */            case 0x0C:  /* Hebrew */            case 0x0D:  /* Thai */                keysym->sym = (SDLKey)(cap&0xFF);                /* Map capital letter syms to lowercase */                if ((keysym->sym >= 'A')&&(keysym->sym <= 'Z'))                    keysym->sym += ('a'-'A');                break;//            case 0xFE://                keysym->sym = ODD_keymap[sym&0xFF];//                break;            case 0xF0:                keysym->sym = MISC_keymap[cap&0xFF];                break;            default:/*                fprintf(stderr,"Photon: Unknown key_cap, cap = 0x%.4x\n", (unsigned int)cap); */		keysym->sym = SDLK_UNKNOWN;                                break;	}	keysym->scancode = key->key_scan;	keysym->unicode = 0;	if( SDL_TranslateUNICODE )	{		char utf8[MB_CUR_MAX];		int utf8len;		wchar_t unicode;		utf8len = PhKeyToMb( utf8, key );		if( utf8len > 0 )		{			utf8len = mbtowc( &unicode, utf8, utf8len );			if( utf8len > 0)				keysym->unicode = unicode;		}	}	return (keysym);}void ph_InitOSKeymap(_THIS){	ph_InitKeymap();}

⌨️ 快捷键说明

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