📄 vlcplugin.cpp
字号:
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 + -