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

📄 sdl_ph_events.c

📁 SDL库 在进行视频显示程序spcaview安装时必须的库文件
💻 C
📖 第 1 页 / 共 2 页
字号:
                        current_overlay->hwdata->locked=1;                        src.x = 0;                        src.y = 0;                        src.w = current_overlay->w;                        src.y = current_overlay->h;                        dst.x=current_overlay->hwdata->CurrentViewPort.pos.x;                        dst.y=current_overlay->hwdata->CurrentViewPort.pos.y;                        dst.w=current_overlay->hwdata->CurrentViewPort.size.w;                        dst.h=current_overlay->hwdata->CurrentViewPort.size.h;                        current_overlay->hwdata->forcedredraw=1;                        error=ph_DisplayYUVOverlay(this, current_overlay, &src, &dst);                        if (!error)                        {                            current_overlay->hwdata->forcedredraw=0;                            current_overlay->hwdata->locked=lockedstate;                        }                    }                }            }        }	break;        case Ph_EV_KEY:        {            SDL_keysym keysym;            posted = 0;            keyEvent = PhGetData(phevent);            if (Pk_KF_Key_Down & keyEvent->key_flags)            {                /* split the wheel events from real key events */                if ((keyEvent->key_cap==Pk_Up) && (keyEvent->key_scan==0) && ((keyEvent->key_flags & Pk_KF_Scan_Valid)==Pk_KF_Scan_Valid))                {                   posted = SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_WHEELUP, 0, 0);                   break;                }                if ((keyEvent->key_cap==Pk_Down) && (keyEvent->key_scan==0) && ((keyEvent->key_flags & Pk_KF_Scan_Valid)==Pk_KF_Scan_Valid))                {                   posted = SDL_PrivateMouseButton(SDL_PRESSED, SDL_BUTTON_WHEELDOWN, 0, 0);                   break;                }                posted = SDL_PrivateKeyboard(SDL_PRESSED, ph_TranslateKey(keyEvent, &keysym));            }            else /* must be key release */            {                /* split the wheel events from real key events */                if ((keyEvent->key_cap==Pk_Up) && (keyEvent->key_scan==0) && ((keyEvent->key_flags & Pk_KF_Scan_Valid)==Pk_KF_Scan_Valid))                {                   posted = SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_WHEELUP, 0, 0);                   break;                }                if ((keyEvent->key_cap==Pk_Down) && (keyEvent->key_scan==0) && ((keyEvent->key_flags & Pk_KF_Scan_Valid)==Pk_KF_Scan_Valid))                {                   posted = SDL_PrivateMouseButton(SDL_RELEASED, SDL_BUTTON_WHEELDOWN, 0, 0);                   break;                }                posted = SDL_PrivateKeyboard(SDL_RELEASED, ph_TranslateKey( keyEvent, &keysym));            }        }        break;                case Ph_EV_INFO:        {           if (phevent->subtype==Ph_OFFSCREEN_INVALID)           {              unsigned long* EvInfoData;              EvInfoData=(unsigned long*)PhGetData(phevent);              switch (*EvInfoData)              {                 case Pg_VIDEO_MODE_SWITCHED:                      {                      }                      break;                 case Pg_ENTERED_DIRECT:                      {                      }                      break;                 case Pg_EXITED_DIRECT:                      {                      }                      break;                 case Pg_DRIVER_STARTED:                      {                      }                      break;              }           }        }        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)    {        switch(PhEventPeek(phevent, EVENT_SIZE))        {            case Ph_EVENT_MSG:                 return 1;            case -1:                 SDL_SetError("ph_Pending(): PhEventNext failed.\n");                 return 0;            default:                 return 0;        }    }    /* Oh well, nothing is ready .. */    return(0);}void ph_PumpEvents(_THIS){    /* Flush the display connection and look to see if events are queued */    PgFlush();    while (ph_Pending(this))    {        PtEventHandler(phevent);        ph_DispatchEvent(this);    }}void ph_InitKeymap(void){    int i;    /* Odd keys used in international keyboards */    for (i=0; i<SDL_arraysize(ODD_keymap); ++i)    {        ODD_keymap[i] = SDLK_UNKNOWN;    }    /* Map the miscellaneous keys */    for (i=0; i<SDL_arraysize(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;    MISC_keymap[Pk_Super_R&0xFF] = SDLK_RSUPER;    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_Break&0xFF] = SDLK_BREAK;    MISC_keymap[Pk_Menu&0xFF] = SDLK_MENU;        /* Windows "Menu" key */    MISC_keymap[Pk_Hyper_R&0xFF] = SDLK_RSUPER;   /* Right "Windows" */    /* Left "Windows" key, but it can't be catched by application */    MISC_keymap[Pk_Hyper_L&0xFF] = SDLK_LSUPER;}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 0xF0:                   keysym->sym = MISC_keymap[cap&0xFF];                   break;        default:                   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;        switch (keysym->scancode)        {           /* Esc key */           case 0x01: keysym->unicode = 27;                      break;           /* BackSpace key */           case 0x0E: keysym->unicode = 127;                      break;           /* Enter key */           case 0x1C: keysym->unicode = 10;                      break;           default:                      utf8len = PhKeyToMb(utf8, key);                      if (utf8len > 0)                      {                         utf8len = mbtowc(&unicode, utf8, utf8len);                         if (utf8len > 0)                         {                             keysym->unicode = unicode;                         }                      }                      break;        }    }    return (keysym);}void ph_InitOSKeymap(_THIS){    ph_InitKeymap();}

⌨️ 快捷键说明

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