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

📄 ncurses.c

📁 uclinux 下的vlc播放器源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
            else                p_sys->i_box_type = BOX_LOG;            return 1;        case 'P':            if( p_sys->i_box_type == BOX_PLAYLIST )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_PLAYLIST;            return 1;        case 'B':            if( p_sys->i_box_type == BOX_BROWSE )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_BROWSE;            return 1;        case 'h':        case 'H':            if( p_sys->i_box_type == BOX_HELP )                p_sys->i_box_type = BOX_NONE;            else                p_sys->i_box_type = BOX_HELP;            p_sys->i_box_lines_total = 0;            return 1;        case '/':            if( p_sys->i_box_type != BOX_SEARCH )            {                if( p_sys->psz_search_chain == NULL )                {                    return 1;                }                p_sys->psz_search_chain[0] = '\0';                p_sys->b_box_plidx_follow = VLC_FALSE;                p_sys->i_before_search = p_sys->i_box_plidx;                p_sys->i_box_type = BOX_SEARCH;            }            return 1;        case 'A': /* Open */            if( p_sys->i_box_type != BOX_OPEN )            {                if( p_sys->psz_open_chain == NULL )                {                    return 1;                }                p_sys->psz_open_chain[0] = '\0';                p_sys->i_box_type = BOX_OPEN;            }            return 1;        /* Navigation */        case KEY_RIGHT:            p_sys->f_slider += 1.0;            if( p_sys->f_slider > 99.9 ) p_sys->f_slider = 99.9;            ManageSlider( p_intf );            return 1;        case KEY_LEFT:            p_sys->f_slider -= 1.0;            if( p_sys->f_slider < 0.0 ) p_sys->f_slider = 0.0;            ManageSlider( p_intf );            return 1;        /* Common control */        case 'f':        {            if( p_intf->p_sys->p_input )            {                vout_thread_t *p_vout;                p_vout = vlc_object_find( p_intf->p_sys->p_input,                                          VLC_OBJECT_VOUT, FIND_CHILD );                if( p_vout )                {                    var_Get( p_vout, "fullscreen", &val );                    val.b_bool = !val.b_bool;                    var_Set( p_vout, "fullscreen", val );                    vlc_object_release( p_vout );                }                else                {                    playlist_t *p_playlist;                    p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,                                                  FIND_ANYWHERE );                    if( p_playlist )                    {                        var_Get( p_playlist, "fullscreen", &val );                        val.b_bool = !val.b_bool;                        var_Set( p_playlist, "fullscreen", val );                        vlc_object_release( p_playlist );                    }                }            }            return 0;        }        case ' ':            PlayPause( p_intf );            return 1;        case 's':            if( p_intf->p_sys->p_playlist )            {                playlist_Stop( p_intf->p_sys->p_playlist );            }            return 1;        case 'e':            Eject( p_intf );            return 1;        case '[':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "prev-title", val );            }            return 1;        case ']':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "next-title", val );            }            return 1;        case '<':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "prev-chapter", val );            }            return 1;        case '>':            if( p_sys->p_input )            {                val.b_bool = VLC_TRUE;                var_Set( p_sys->p_input, "next-chapter", val );            }            return 1;        case 'p':            if( p_intf->p_sys->p_playlist )            {                playlist_Prev( p_intf->p_sys->p_playlist );            }            clear();            return 1;        case 'n':            if( p_intf->p_sys->p_playlist )            {                playlist_Next( p_intf->p_sys->p_playlist );            }            clear();            return 1;        case 'a':            aout_VolumeUp( p_intf, 1, NULL );            clear();            return 1;        case 'z':            aout_VolumeDown( p_intf, 1, NULL );            clear();            return 1;        /*         * ^l should clear and redraw the screen         */        case 0x0c:            clear();            return 1;        default:            return 0;    }}static void ManageSlider( intf_thread_t *p_intf ){    intf_sys_t     *p_sys = p_intf->p_sys;    input_thread_t *p_input = p_sys->p_input;    vlc_value_t     val;    if( p_input == NULL )    {        return;    }    var_Get( p_input, "state", &val );    if( val.i_int != PLAYING_S )    {        return;    }    var_Get( p_input, "position", &val );    if( p_sys->f_slider == p_sys->f_slider_old )    {        p_sys->f_slider =        p_sys->f_slider_old = 100 * val.f_float;    }    else    {        p_sys->f_slider_old = p_sys->f_slider;        val.f_float = p_sys->f_slider / 100.0;        var_Set( p_input, "position", val );    }}static void SearchPlaylist( intf_thread_t *p_intf, char *psz_searchstring ){    int i_max;    int i_first = 0 ;    int i_item = -1;    intf_sys_t *p_sys = p_intf->p_sys;    playlist_t *p_playlist = p_sys->p_playlist;    if( p_sys->i_before_search >= 0 )    {        i_first = p_sys->i_before_search;    }    if( ( ! psz_searchstring ) ||  strlen( psz_searchstring ) <= 0 )    {        p_sys->i_box_plidx = p_sys->i_before_search;        return;    }    i_max = p_sys->i_current_view == VIEW_ALL ?                p_playlist->i_size : p_sys->i_plist_entries;    i_item = SubSearchPlaylist( p_intf, psz_searchstring, i_first + 1, i_max );    if( i_item < 0 )    {        i_item = SubSearchPlaylist( p_intf, psz_searchstring, 0, i_first );    }    if( i_item < 0 || i_item >= i_max ) return;    p_sys->i_box_plidx = i_item;}static int SubSearchPlaylist( intf_thread_t *p_intf, char *psz_searchstring,                              int i_start, int i_stop ){    intf_sys_t *p_sys = p_intf->p_sys;    playlist_t *p_playlist = p_sys->p_playlist;    int i, i_item = -1;    if( p_sys->i_current_view == VIEW_ALL )    {        for( i = i_start + 1; i < i_stop; i++ )        {            if( strcasestr( p_playlist->pp_items[i]->input.psz_name,                            psz_searchstring ) != NULL                || strcasestr( p_playlist->pp_items[i]->input.psz_uri,                               psz_searchstring ) != NULL )            {                i_item = i;                break;            }        }    }    else    {        for( i = i_start + 1; i < i_stop; i++ )        {            if( strcasestr( p_sys->pp_plist[i]->psz_display,                            psz_searchstring ) != NULL )            {                i_item = i;                break;            }        }    }    return i_item;}static void mvnprintw( int y, int x, int w, const char *p_fmt, ... ){    va_list  vl_args;    char    *p_buf = NULL;    int      i_len;    va_start( vl_args, p_fmt );    vasprintf( &p_buf, p_fmt, vl_args );    va_end( vl_args );    if( p_buf == NULL )    {        return;    }    if(  w > 0 )    {        if( ( i_len = strlen( p_buf ) ) > w )        {            char *psz_local;            int i_cut = i_len - w;            int x1 = i_len/2 - i_cut/2;            int x2 = x1 + i_cut;            if( i_len > x2 )            {                memmove( &p_buf[x1], &p_buf[x2], i_len - x2 );            }            p_buf[w] = '\0';            if( w > 7 )            {                p_buf[w/2-1] = '.';                p_buf[w/2  ] = '.';                p_buf[w/2+1] = '.';            }            psz_local = ToLocale( p_buf );            mvprintw( y, x, "%s", psz_local );            LocaleFree( p_buf );        }        else        {            char *psz_local = ToLocale( p_buf );            mvprintw( y, x, "%s", psz_local );            LocaleFree( p_buf );            mvhline( y, x + i_len, ' ', w - i_len );        }    }}static void MainBoxWrite( intf_thread_t *p_intf, int l, int x, const char *p_fmt, ... ){    intf_sys_t     *p_sys = p_intf->p_sys;    va_list  vl_args;    char    *p_buf = NULL;    if( l < p_sys->i_box_start || l - p_sys->i_box_start >= p_sys->i_box_lines )    {        return;    }    va_start( vl_args, p_fmt );    vasprintf( &p_buf, p_fmt, vl_args );    va_end( vl_args );    if( p_buf == NULL )    {        return;    }    mvnprintw( p_sys->i_box_y + l - p_sys->i_box_start, x, COLS - x - 1, "%s", p_buf );}static void Redraw( intf_thread_t *p_intf, time_t *t_last_refresh ){    intf_sys_t     *p_sys = p_intf->p_sys;    input_thread_t *p_input = p_sys->p_input;    int y = 0;    int h;    int y_end;    //clear();    /* Title */    attrset( A_REVERSE );    mvnprintw( y, 0, COLS, "VLC media player" " (ncurses interface) [ h for help ]" );    attroff( A_REVERSE );    y += 2;    /* Infos */    if( p_input && !p_input->b_dead )    {        char buf1[MSTRTIME_MAX_SIZE];        char buf2[MSTRTIME_MAX_SIZE];        vlc_value_t val;        vlc_value_t val_list;        /* Source */        mvnprintw( y++, 0, COLS, " Source   : %s",                   p_input->input.p_item->psz_uri );        /* State */        var_Get( p_input, "state", &val );        if( val.i_int == PLAYING_S )        {            mvnprintw( y++, 0, COLS, " State    : Playing" );        }        else if( val.i_int == PAUSE_S )        {            mvnprintw( y++, 0, COLS, " State    : Paused" );        }        else        {            y++;        }        if( val.i_int != INIT_S && val.i_int != END_S )        {            audio_volume_t i_volume;            /* Position */            var_Get( p_input, "time", &val );            msecstotimestr( buf1, val.i_time / 1000 );            var_Get( p_input, "length", &val );            msecstotimestr( buf2, val.i_time / 1000 );            mvnprintw( y++, 0, COLS, " Position : %s/%s (%.2f%%)", buf1, buf2, p_sys->f_slider );            /* Volume */            aout_VolumeGet( p_intf, &i_volume );            mvnprintw( y++, 0, COLS, " Volume   : %i%%", i_volume*200/AOUT_VOLUME_MAX );            /* Title */            if( !var_Get( p_input, "title", &val ) )            {                var_Change( p_input, "title", VLC_VAR_GETCHOICES, &val_list, NULL );                if( val_list.p_list->i_count > 0 )                {                    mvnprintw( y++, 0, COLS, " Title    : %d/%d", val.i_int, val_list.p_list->i_count );                }                var_Change( p_input, "title", VLC_VAR_FREELIST, &val_list, NULL );            }

⌨️ 快捷键说明

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