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

📄 vlcplugin.cpp

📁 VLC Player Source Code
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    if( '/' == *p  )                    {                        /* relative url starts with './' */                        url = ++p;                        continue;                    }                    if( '.' != *p )                        break;                    ++p;                    if( '\0' == *p )                    {                        /* relative url is '..' */                    }                    else                    {                        if( '/' != *p )                            break;                        /* relative url starts with '../' */                        ++p;                    }                    url = p;                    do                    {                        --pathend;                    }                    while( '/' != *pathend );                }                /* skip over '/' separator */                ++pathend;                /* concatenate remaining base URL and relative URL */                strcpy(pathend, url);            }            return href;        }    }    return NULL;}#if XP_UNIXint  VlcPlugin::setSize(unsigned width, unsigned height){    int diff = (width != i_width) || (height != i_height);    i_width = width;    i_height = height;    /* return size */    return diff;}#define BTN_SPACE ((unsigned int)4)void VlcPlugin::showToolbar(){    const NPWindow& window = getWindow();    Window control = getControlWindow();    Window video = getVideoWindow();    Display *p_display = ((NPSetWindowCallbackStruct *)window.ws_info)->display;    unsigned int i_height = 0, i_width = BTN_SPACE;    /* load icons */    if( !p_btnPlay )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/play.xpm",                            &p_btnPlay, NULL, NULL);    if( p_btnPlay )    {        i_height = __MAX( i_height, p_btnPlay->height );    }    if( !p_btnPause )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/pause.xpm",                            &p_btnPause, NULL, NULL);    if( p_btnPause )    {        i_height = __MAX( i_height, p_btnPause->height );    }    i_width += __MAX( p_btnPause->width, p_btnPlay->width );    if( !p_btnStop )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/stop.xpm",                            &p_btnStop, NULL, NULL );    if( p_btnStop )    {        i_height = __MAX( i_height, p_btnStop->height );        i_width += BTN_SPACE + p_btnStop->width;    }    if( !p_timeline )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/time_line.xpm",                            &p_timeline, NULL, NULL);    if( p_timeline )    {        i_height = __MAX( i_height, p_timeline->height );        i_width += BTN_SPACE + p_timeline->width;    }    if( !p_btnTime )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/time_icon.xpm",                            &p_btnTime, NULL, NULL);    if( p_btnTime )    {        i_height = __MAX( i_height, p_btnTime->height );        i_width += BTN_SPACE + p_btnTime->width;    }    if( !p_btnFullscreen )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/fullscreen.xpm",                            &p_btnFullscreen, NULL, NULL);    if( p_btnFullscreen )    {        i_height = __MAX( i_height, p_btnFullscreen->height );        i_width += BTN_SPACE + p_btnFullscreen->width;    }    if( !p_btnMute )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/volume_max.xpm",                            &p_btnMute, NULL, NULL);    if( p_btnMute )    {        i_height = __MAX( i_height, p_btnMute->height );    }    if( !p_btnUnmute )        XpmReadFileToImage( p_display, DATA_PATH "/mozilla/volume_mute.xpm",                            &p_btnUnmute, NULL, NULL);    if( p_btnUnmute )    {        i_height = __MAX( i_height, p_btnUnmute->height );    }    i_width += BTN_SPACE + __MAX( p_btnUnmute->width, p_btnMute->width );    setToolbarSize( i_width, i_height );    if( !p_btnPlay || !p_btnPause || !p_btnStop || !p_timeline ||        !p_btnTime || !p_btnFullscreen || !p_btnMute || !p_btnUnmute )        fprintf(stderr, "Error: some button images not found in %s\n", DATA_PATH );    /* reset panels position and size */    /* XXX  use i_width */    XResizeWindow( p_display, video, window.width, window.height - i_height);    XMoveWindow( p_display, control, 0, window.height - i_height );    XResizeWindow( p_display, control, window.width, i_height -1);    b_toolbar = 1; /* says toolbar is now shown */    redrawToolbar();}void VlcPlugin::hideToolbar(){    const NPWindow& window = getWindow();    Display *p_display = ((NPSetWindowCallbackStruct *)window.ws_info)->display;    Window control = getControlWindow();    Window video = getVideoWindow();    i_tb_width = i_tb_height = 0;    if( p_btnPlay )  XDestroyImage( p_btnPlay );    if( p_btnPause ) XDestroyImage( p_btnPause );    if( p_btnStop )  XDestroyImage( p_btnStop );    if( p_timeline ) XDestroyImage( p_timeline );    if( p_btnTime )  XDestroyImage( p_btnTime );    if( p_btnFullscreen ) XDestroyImage( p_btnFullscreen );    if( p_btnMute )  XDestroyImage( p_btnMute );    if( p_btnUnmute ) XDestroyImage( p_btnUnmute );    p_btnPlay = NULL;    p_btnPause = NULL;    p_btnStop = NULL;    p_timeline = NULL;    p_btnTime = NULL;    p_btnFullscreen = NULL;    p_btnMute = NULL;    p_btnUnmute = NULL;    /* reset panels position and size */    /* XXX  use i_width */    XResizeWindow( p_display, video, window.width, window.height );    XMoveWindow( p_display, control, 0, window.height-1 );    XResizeWindow( p_display, control, window.width, 1 );    b_toolbar = 0; /* says toolbar is now hidden */    redrawToolbar();}void VlcPlugin::redrawToolbar(){    libvlc_media_player_t *p_md = NULL;    libvlc_exception_t ex;    float f_position = 0.0;    int i_playing = 0;    bool b_mute = false;    unsigned int dst_x, dst_y;    GC gc;    XGCValues gcv;    unsigned int i_tb_width, i_tb_height;    /* This method does nothing if toolbar is hidden. */    if( !b_toolbar )        return;    const NPWindow& window = getWindow();    Window control = getControlWindow();    Display *p_display = ((NPSetWindowCallbackStruct *)window.ws_info)->display;    getToolbarSize( &i_tb_width, &i_tb_height );    /* get media instance */    libvlc_exception_init( &ex );    p_md = libvlc_playlist_get_media_player( getVLC(), &ex );    libvlc_exception_clear( &ex );    /* get isplaying */    i_playing = libvlc_playlist_isplaying( getVLC(), &ex );    libvlc_exception_clear( &ex );    /* get mute info */    b_mute = libvlc_audio_get_mute( getVLC(), &ex );    libvlc_exception_clear( &ex );    /* get movie position in % */    if( i_playing == 1 )    {        f_position = libvlc_media_player_get_position( p_md, &ex ) * 100;        libvlc_exception_clear( &ex );    }    libvlc_media_player_release( p_md );    gcv.foreground = BlackPixel( p_display, 0 );    gc = XCreateGC( p_display, control, GCForeground, &gcv );    XFillRectangle( p_display, control, gc,                    0, 0, window.width, i_tb_height );    gcv.foreground = WhitePixel( p_display, 0 );    XChangeGC( p_display, gc, GCForeground, &gcv );    /* position icons */    dst_x = BTN_SPACE;    dst_y = i_tb_height >> 1; /* baseline = vertical middle */    if( p_btnPause && (i_playing == 1) )    {        XPutImage( p_display, control, gc, p_btnPause, 0, 0, dst_x,                   dst_y - (p_btnPause->height >> 1),                   p_btnPause->width, p_btnPause->height );        dst_x += BTN_SPACE + p_btnPause->width;    }    else if( p_btnPlay )    {        XPutImage( p_display, control, gc, p_btnPlay, 0, 0, dst_x,                   dst_y - (p_btnPlay->height >> 1),                   p_btnPlay->width, p_btnPlay->height );        dst_x += BTN_SPACE + p_btnPlay->width;    }    if( p_btnStop )        XPutImage( p_display, control, gc, p_btnStop, 0, 0, dst_x,                   dst_y - (p_btnStop->height >> 1),                   p_btnStop->width, p_btnStop->height );    dst_x += BTN_SPACE + ( p_btnStop ? p_btnStop->width : 0 );    if( p_btnFullscreen )        XPutImage( p_display, control, gc, p_btnFullscreen, 0, 0, dst_x,                   dst_y - (p_btnFullscreen->height >> 1),                   p_btnFullscreen->width, p_btnFullscreen->height );    dst_x += BTN_SPACE + ( p_btnFullscreen ? p_btnFullscreen->width : 0 );    if( p_btnUnmute && b_mute )    {        XPutImage( p_display, control, gc, p_btnUnmute, 0, 0, dst_x,                   dst_y - (p_btnUnmute->height >> 1),                   p_btnUnmute->width, p_btnUnmute->height );        dst_x += BTN_SPACE + ( p_btnUnmute ? p_btnUnmute->width : 0 );    }    else if( p_btnMute )    {        XPutImage( p_display, control, gc, p_btnMute, 0, 0, dst_x,                   dst_y - (p_btnMute->height >> 1),                   p_btnMute->width, p_btnMute->height );        dst_x += BTN_SPACE + ( p_btnMute ? p_btnMute->width : 0 );    }    if( p_timeline )        XPutImage( p_display, control, gc, p_timeline, 0, 0, dst_x,                   dst_y - (p_timeline->height >> 1),                   (window.width-(dst_x+BTN_SPACE)), p_timeline->height );    if( f_position > 0 )        i_last_position = (int)( f_position *                        ( ((float)(window.width-(dst_x+BTN_SPACE))) / 100.0 ));    if( p_btnTime )        XPutImage( p_display, control, gc, p_btnTime,                   0, 0, (dst_x+i_last_position),                   dst_y - (p_btnTime->height >> 1),                   p_btnTime->width, p_btnTime->height );    XFreeGC( p_display, gc );}vlc_toolbar_clicked_t VlcPlugin::getToolbarButtonClicked( int i_xpos, int i_ypos ){    unsigned int i_dest = BTN_SPACE;//(i_tb_height >> 1);    int i_playing = 0;    bool b_mute = false;    libvlc_exception_t ex;    fprintf( stderr, "ToolbarButtonClicked:: "                     "trying to match (%d,%d) (%d,%d)\n",             i_xpos, i_ypos, i_tb_height, i_tb_width );    if( i_ypos >= i_tb_width )        return clicked_Unknown;    /* Note: the order of testing is dependend on the original     * drawing positions of the icon buttons. Buttons are tested     * left to right.     */    /* get isplaying */    libvlc_exception_init( &ex );    i_playing = libvlc_playlist_isplaying( getVLC(), &ex );    libvlc_exception_clear( &ex );    /* get mute info */    b_mute = libvlc_audio_get_mute( getVLC(), &ex );    libvlc_exception_clear( &ex );    /* is Pause of Play button clicked */    if( (i_playing != 1) &&        (i_xpos >= (BTN_SPACE>>1)) &&        (i_xpos <= i_dest + p_btnPlay->width + (BTN_SPACE>>1)) )        return clicked_Play;    else if( (i_xpos >= (BTN_SPACE>>1))  &&             (i_xpos <= i_dest + p_btnPause->width) )        return clicked_Pause;    /* is Stop button clicked */    if( i_playing != 1 )        i_dest += (p_btnPlay->width + (BTN_SPACE>>1));    else        i_dest += (p_btnPause->width + (BTN_SPACE>>1));    if( (i_xpos >= i_dest) &&        (i_xpos <= i_dest + p_btnStop->width + (BTN_SPACE>>1)) )        return clicked_Stop;    /* is Fullscreen button clicked */    i_dest += (p_btnStop->width + (BTN_SPACE>>1));    if( (i_xpos >= i_dest) &&        (i_xpos <= i_dest + p_btnFullscreen->width + (BTN_SPACE>>1)) )        return clicked_Fullscreen;    /* is Mute or Unmute button clicked */    i_dest += (p_btnFullscreen->width + (BTN_SPACE>>1));    if( !b_mute && (i_xpos >= i_dest) &&        (i_xpos <= i_dest + p_btnMute->width + (BTN_SPACE>>1)) )        return clicked_Mute;    else if( (i_xpos >= i_dest) &&             (i_xpos <= i_dest + p_btnUnmute->width + (BTN_SPACE>>1)) )        return clicked_Unmute;    /* is timeline clicked */    if( !b_mute )        i_dest += (p_btnMute->width + (BTN_SPACE>>1));    else        i_dest += (p_btnUnmute->width + (BTN_SPACE>>1));    if( (i_xpos >= i_dest) &&        (i_xpos <= i_dest + p_timeline->width + (BTN_SPACE>>1)) )        return clicked_timeline;    /* is time button clicked */    i_dest += (p_timeline->width + (BTN_SPACE>>1));    if( (i_xpos >= i_dest) &&        (i_xpos <= i_dest + p_btnTime->width + (BTN_SPACE>>1)) )        return clicked_Time;    return clicked_Unknown;}#undef BTN_SPACE#endif

⌨️ 快捷键说明

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