x11_common.c

来自「君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图」· C语言 代码 · 共 2,222 行 · 第 1/5 页

C
2,222
字号
    }    mScreen = DefaultScreen(mDisplay);  // screen ID    mRootWin = RootWindow(mDisplay, mScreen);   // root window ID    init_atoms();#ifdef HAVE_XF86VM    {        int clock;        XF86VidModeGetModeLine(mDisplay, mScreen, &clock, &modeline);        if (!vo_screenwidth)            vo_screenwidth = modeline.hdisplay;        if (!vo_screenheight)            vo_screenheight = modeline.vdisplay;    }#endif    {        if (!vo_screenwidth)            vo_screenwidth = DisplayWidth(mDisplay, mScreen);        if (!vo_screenheight)            vo_screenheight = DisplayHeight(mDisplay, mScreen);    }    // get color depth (from root window, or the best visual):    XGetWindowAttributes(mDisplay, mRootWin, &attribs);    depth = attribs.depth;    if (depth != 15 && depth != 16 && depth != 24 && depth != 32)    {        Visual *visual;        depth = vo_find_depth_from_visuals(mDisplay, mScreen, &visual);        if (depth != -1)            mXImage = XCreateImage(mDisplay, visual, depth, ZPixmap,                                   0, NULL, 1, 1, 8, 1);    } else        mXImage =            XGetImage(mDisplay, mRootWin, 0, 0, 1, 1, AllPlanes, ZPixmap);    vo_depthonscreen = depth;   // display depth on screen    // get bits/pixel from XImage structure:    if (mXImage == NULL)    {        mask = 0;    } else    {        /*         * for the depth==24 case, the XImage structures might use         * 24 or 32 bits of data per pixel.  The global variable         * vo_depthonscreen stores the amount of data per pixel in the         * XImage structure!         *         * Maybe we should rename vo_depthonscreen to (or add) vo_bpp?         */        bpp = mXImage->bits_per_pixel;        if ((vo_depthonscreen + 7) / 8 != (bpp + 7) / 8)            vo_depthonscreen = bpp;     // by A'rpi        mask =            mXImage->red_mask | mXImage->green_mask | mXImage->blue_mask;        mp_msg(MSGT_VO, MSGL_V,               "vo: X11 color mask:  %X  (R:%lX G:%lX B:%lX)\n", mask,               mXImage->red_mask, mXImage->green_mask, mXImage->blue_mask);        XDestroyImage(mXImage);    }    if (((vo_depthonscreen + 7) / 8) == 2)    {        if (mask == 0x7FFF)            vo_depthonscreen = 15;        else if (mask == 0xFFFF)            vo_depthonscreen = 16;    }// XCloseDisplay( mDisplay );/* slightly improved local display detection AST */    if (strncmp(dispName, "unix:", 5) == 0)        dispName += 4;    else if (strncmp(dispName, "localhost:", 10) == 0)        dispName += 9;    if (*dispName == ':' && atoi(dispName + 1) < 10)        mLocalDisplay = 1;    else        mLocalDisplay = 0;    mp_msg(MSGT_VO, MSGL_V,           "vo: X11 running at %dx%d with depth %d and %d bpp (\"%s\" => %s display)\n",           vo_screenwidth, vo_screenheight, depth, vo_depthonscreen,           dispName, mLocalDisplay ? "local" : "remote");    vo_wm_type = vo_wm_detect();    vo_fs_type = vo_x11_get_fs_type(vo_wm_type);    fstype_dump(vo_fs_type);    saver_off(mDisplay);    return 1;}void vo_uninit(void){    if (!mDisplay)    {        mp_msg(MSGT_VO, MSGL_V,               "vo: x11 uninit called but X11 not inited..\n");        return;    }// if( !vo_depthonscreen ) return;    mp_msg(MSGT_VO, MSGL_V, "vo: uninit ...\n");    XSetErrorHandler(NULL);    XCloseDisplay(mDisplay);    vo_depthonscreen = 0;    mDisplay = NULL;}#include "osdep/keycodes.h"#include "wskeys.h"#ifdef XF86XK_AudioPausestatic void vo_x11_putkey_ext(int keysym){    switch (keysym)    {        case XF86XK_AudioPause:            mplayer_put_key(KEY_PAUSE);            break;        case XF86XK_AudioStop:            mplayer_put_key(KEY_STOP);            break;        case XF86XK_AudioPrev:            mplayer_put_key(KEY_PREV);            break;        case XF86XK_AudioNext:            mplayer_put_key(KEY_NEXT);            break;        case XF86XK_AudioLowerVolume:            mplayer_put_key(KEY_VOLUME_DOWN);            break;        case XF86XK_AudioRaiseVolume:            mplayer_put_key(KEY_VOLUME_UP);            break;        default:            break;    }}#endifvoid vo_x11_putkey(int key){    switch (key)    {        case wsLeft:            mplayer_put_key(KEY_LEFT);            break;        case wsRight:            mplayer_put_key(KEY_RIGHT);            break;        case wsUp:            mplayer_put_key(KEY_UP);            break;        case wsDown:            mplayer_put_key(KEY_DOWN);            break;        case wsSpace:            mplayer_put_key(' ');            break;        case wsEscape:            mplayer_put_key(KEY_ESC);            break;        case wsTab:            mplayer_put_key(KEY_TAB);            break;        case wsEnter:            mplayer_put_key(KEY_ENTER);            break;        case wsBackSpace:            mplayer_put_key(KEY_BS);            break;        case wsDelete:            mplayer_put_key(KEY_DELETE);            break;        case wsInsert:            mplayer_put_key(KEY_INSERT);            break;        case wsHome:            mplayer_put_key(KEY_HOME);            break;        case wsEnd:            mplayer_put_key(KEY_END);            break;        case wsPageUp:            mplayer_put_key(KEY_PAGE_UP);            break;        case wsPageDown:            mplayer_put_key(KEY_PAGE_DOWN);            break;        case wsF1:            mplayer_put_key(KEY_F + 1);            break;        case wsF2:            mplayer_put_key(KEY_F + 2);            break;        case wsF3:            mplayer_put_key(KEY_F + 3);            break;        case wsF4:            mplayer_put_key(KEY_F + 4);            break;        case wsF5:            mplayer_put_key(KEY_F + 5);            break;        case wsF6:            mplayer_put_key(KEY_F + 6);            break;        case wsF7:            mplayer_put_key(KEY_F + 7);            break;        case wsF8:            mplayer_put_key(KEY_F + 8);            break;        case wsF9:            mplayer_put_key(KEY_F + 9);            break;        case wsF10:            mplayer_put_key(KEY_F + 10);            break;        case wsF11:            mplayer_put_key(KEY_F + 11);            break;        case wsF12:            mplayer_put_key(KEY_F + 12);            break;        case wsMinus:        case wsGrayMinus:            mplayer_put_key('-');            break;        case wsPlus:        case wsGrayPlus:            mplayer_put_key('+');            break;        case wsGrayMul:        case wsMul:            mplayer_put_key('*');            break;        case wsGrayDiv:        case wsDiv:            mplayer_put_key('/');            break;        case wsLess:            mplayer_put_key('<');            break;        case wsMore:            mplayer_put_key('>');            break;        case wsGray0:            mplayer_put_key(KEY_KP0);            break;        case wsGrayEnd:        case wsGray1:            mplayer_put_key(KEY_KP1);            break;        case wsGrayDown:        case wsGray2:            mplayer_put_key(KEY_KP2);            break;        case wsGrayPgDn:        case wsGray3:            mplayer_put_key(KEY_KP3);            break;        case wsGrayLeft:        case wsGray4:            mplayer_put_key(KEY_KP4);            break;        case wsGray5Dup:        case wsGray5:            mplayer_put_key(KEY_KP5);            break;        case wsGrayRight:        case wsGray6:            mplayer_put_key(KEY_KP6);            break;        case wsGrayHome:        case wsGray7:            mplayer_put_key(KEY_KP7);            break;        case wsGrayUp:        case wsGray8:            mplayer_put_key(KEY_KP8);            break;        case wsGrayPgUp:        case wsGray9:            mplayer_put_key(KEY_KP9);            break;        case wsGrayDecimal:            mplayer_put_key(KEY_KPDEC);            break;        case wsGrayInsert:            mplayer_put_key(KEY_KPINS);            break;        case wsGrayDelete:            mplayer_put_key(KEY_KPDEL);            break;        case wsGrayEnter:            mplayer_put_key(KEY_KPENTER);            break;        case wsGrave:            mplayer_put_key('`');            break;        case wsTilde:            mplayer_put_key('~');            break;        case wsExclSign:            mplayer_put_key('!');            break;        case wsAt:            mplayer_put_key('@');            break;        case wsHash:            mplayer_put_key('#');            break;        case wsDollar:            mplayer_put_key('$');            break;        case wsPercent:            mplayer_put_key('%');            break;        case wsCircumflex:            mplayer_put_key('^');            break;        case wsAmpersand:            mplayer_put_key('&');            break;        case wsobracket:            mplayer_put_key('(');            break;        case wscbracket:            mplayer_put_key(')');            break;        case wsUnder:            mplayer_put_key('_');            break;        case wsocbracket:            mplayer_put_key('{');            break;        case wsccbracket:            mplayer_put_key('}');            break;        case wsColon:            mplayer_put_key(':');            break;        case wsSemicolon:            mplayer_put_key(';');            break;        case wsDblQuote:            mplayer_put_key('\"');            break;        case wsAcute:            mplayer_put_key('\'');            break;        case wsComma:            mplayer_put_key(',');            break;        case wsPoint:            mplayer_put_key('.');            break;        case wsQuestSign:            mplayer_put_key('?');            break;        case wsBSlash:            mplayer_put_key('\\');            break;        case wsPipe:            mplayer_put_key('|');            break;        case wsEqual:            mplayer_put_key('=');            break;        case wsosbrackets:            mplayer_put_key('[');            break;        case wscsbrackets:            mplayer_put_key(']');            break;        default:            if ((key >= 'a' && key <= 'z') || (key >= 'A' && key <= 'Z') ||                (key >= '0' && key <= '9'))                mplayer_put_key(key);    }}// ----- Motif header: -------#define MWM_HINTS_FUNCTIONS     (1L << 0)#define MWM_HINTS_DECORATIONS   (1L << 1)#define MWM_HINTS_INPUT_MODE    (1L << 2)#define MWM_HINTS_STATUS        (1L << 3)#define MWM_FUNC_ALL            (1L << 0)#define MWM_FUNC_RESIZE         (1L << 1)#define MWM_FUNC_MOVE           (1L << 2)#define MWM_FUNC_MINIMIZE       (1L << 3)#define MWM_FUNC_MAXIMIZE       (1L << 4)#define MWM_FUNC_CLOSE          (1L << 5)#define MWM_DECOR_ALL           (1L << 0)#define MWM_DECOR_BORDER        (1L << 1)#define MWM_DECOR_RESIZEH       (1L << 2)#define MWM_DECOR_TITLE         (1L << 3)#define MWM_DECOR_MENU          (1L << 4)#define MWM_DECOR_MINIMIZE      (1L << 5)#define MWM_DECOR_MAXIMIZE      (1L << 6)#define MWM_INPUT_MODELESS 0#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1#define MWM_INPUT_SYSTEM_MODAL 2#define MWM_INPUT_FULL_APPLICATION_MODAL 3#define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL#define MWM_TEAROFF_WINDOW      (1L<<0)typedef struct{    long flags;    long functions;    long decorations;    long input_mode;    long state;} MotifWmHints;static MotifWmHints vo_MotifWmHints;static Atom vo_MotifHints = None;void vo_x11_decoration(Display * vo_Display, Window w, int d){    static unsigned int olddecor = MWM_DECOR_ALL;    static unsigned int oldfuncs =        MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE |        MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE;    Atom mtype;    int mformat;    unsigned long mn, mb;    if (!WinID)

⌨️ 快捷键说明

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