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

📄 hxplayer.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
            XCloseDisplay(g_dpy);            g_dpy = NULL;        }    }    player->window->window = NULL;    player->window->display = NULL;#endif    }static voidhx_player_finalize(GObject* object){    HXPlayerClass* klass;    HXPlayer* player;    klass = HX_PLAYER_GET_CLASS(object);    player = HX_PLAYER(object);        g_free(player->group_title_buf);    player->group_title_buf = NULL;    g_free(player->title_buf);    player->title_buf = NULL;    g_free(player->last_opened_url_buf);    player->last_opened_url_buf = NULL;    g_players_list = g_list_remove(g_players_list, player);        g_free(player->window);    player->window = NULL;}static voidhx_player_set_property(GObject*      object,                       guint         prop_id,                       const GValue* value,                       GParamSpec*   pspec){    HXPlayer* player;        player = HX_PLAYER(object);    g_return_if_fail(player != NULL);        switch(prop_id)    {                case PROP_LOOP:            player->loop = g_value_get_boolean(value);            break;                    case PROP_LOOP_COUNT:            player->loop_count = g_value_get_uint(value);            break;                    case PROP_SHUFFLE:            player->shuffle = g_value_get_boolean(value);            break;        default:            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);            break;     }}static voidhx_player_get_property(GObject*    object,                       guint       prop_id,                       GValue*     value,                       GParamSpec* pspec){    HXPlayer* player;    player = HX_PLAYER(object);    g_return_if_fail(player != NULL);        switch(prop_id)    {                case PROP_LOOP_COUNT:            g_value_set_uint(value, player->loop_count);            break;                case PROP_SHUFFLE:            g_value_set_boolean(value, player->shuffle);            break;        default:            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);            break;     }}static voidhx_player_realize(GtkWidget* widget){    HXPlayer* player;    GdkWindowAttr attributes;    gint attributes_mask;        player = HX_PLAYER(widget);    g_return_if_fail(player != NULL);    g_return_if_fail(HX_IS_PLAYER(player));    // Create a window    GTK_WIDGET_SET_FLAGS(widget, GTK_REALIZED);    attributes.x = widget->allocation.x;    attributes.y = widget->allocation.y;    attributes.width = widget->allocation.width;    attributes.height = widget->allocation.height;    attributes.wclass = GDK_INPUT_OUTPUT;    attributes.window_type = GDK_WINDOW_CHILD;    /* The core enables all events when it creates a window,       so we will too. */    attributes.event_mask = GDK_ALL_EVENTS_MASK;    attributes.visual = gtk_widget_get_visual(widget);    attributes.colormap = gtk_widget_get_colormap(widget);    attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;    widget->window = gdk_window_new(widget->parent->window, &attributes, attributes_mask);#if defined(G_OS_UNIX)    gdk_window_add_filter(widget->window,                          hx_player_event_filter,                          widget);        widget->style = gtk_style_attach(widget->style, widget->window);    gdk_window_set_user_data(widget->window, player);    g_assert(g_dpy != NULL);        player->window->display = g_dpy;    player->window->window = (void*)GDK_DRAWABLE_XID(widget->window);#elif defined(G_OS_WIN32)    player->window->window = (void*)GDK_WINDOW_HWND(widget->window);#else# error "Unsupported platform"#endif    gtk_widget_set_double_buffered(widget, FALSE);}static gbooleanhx_player_expose(GtkWidget*      widget,                 GdkEventExpose* event){    HXPlayer* player;        player = HX_PLAYER(widget);        g_return_val_if_fail(widget != NULL, FALSE);     g_return_val_if_fail(HX_IS_PLAYER(player), FALSE);         if (!hx_player_has_visual_content(player) && player->logo_pixmap)    {        /* Draw the logo */        gdk_draw_drawable(widget->window,                          widget->style->fg_gc[GTK_WIDGET_STATE(widget)],                          player->logo_pixmap,                          event->area.x, event->area.y,                          event->area.x, event->area.y,                          event->area.width, event->area.height);    }    else    {        /* Otherwise, the expose event was passed onto           the core by the event filter */    }    return FALSE; // propagate}static voidhx_player_size_allocate(GtkWidget*     widget,                        GtkAllocation* allocation){    HXPlayer* player;        player = HX_PLAYER(widget);        g_return_if_fail(widget != NULL);    g_return_if_fail(HX_IS_PLAYER(player));    g_return_if_fail(allocation != NULL);    widget->allocation =* allocation;        /* Update the HXxWindow -- used by the hxclientkit */        player->window->width = allocation->width;        player->window->height = allocation->height;        ClientPlayerSetSize(player->player,                            allocation->width,                            allocation->height);            if (GTK_WIDGET_REALIZED(widget))    {        player = HX_PLAYER(widget);        gdk_window_move_resize(widget->window,                               allocation->x, allocation->y,                               allocation->width, allocation->height);    }}static gbooleanhx_player_motion_notify_event(GtkWidget*      widget,                              GdkEventMotion* /* event */){    gint x, y;    /* Acknowedge the motion event */    gdk_window_get_pointer(widget->window, &x, &y, NULL);    return FALSE;}/** * hx_player_set_logo_pixmap: * @player: a #HXPlayer * @pixmap: the pixmap to use * * Set the pixmap to be displayed in the widget's location * when video is not being played. * **/voidhx_player_set_logo_pixmap(HXPlayer*  player,                          GdkPixmap* pixmap){    if(player->logo_pixmap)    {        g_object_unref(G_OBJECT(player->logo_pixmap));    }    player->logo_pixmap = pixmap;    if(pixmap)    {        g_object_ref(G_OBJECT(player->logo_pixmap));                gdk_drawable_get_size(GDK_DRAWABLE (pixmap),                              &player->logo_width,                              &player->logo_height);    }    else    {        player->logo_width = 0;        player->logo_height = 0;    }    gtk_widget_queue_resize(GTK_WIDGET(player));}/** * hx_player_get_title: * @player: a #HXPlayer * * @returns: title of clip being played, or NULL if there * is no title * **/G_CONST_RETURN gchar*hx_player_get_title(HXPlayer* player){    const char* szTitle;    g_return_val_if_fail(player != NULL, NULL);        g_free(player->title_buf);    player->title_buf = NULL;        szTitle = ClientPlayerGetTitle(player->player);    if(szTitle)    {        if(g_utf8_validate(szTitle, -1, NULL))        {            player->title_buf = g_strdup(szTitle);        }        else        {            gsize in;            gsize out;                    in = strlen(szTitle) + 1;            out = 0;            player->title_buf = g_convert(szTitle, in - 1, "UTF-8", "ISO-8859-1", &in, &out, NULL);        }    }    return player->title_buf;}/** * hx_player_get_group_title: * @player: a #HXPlayer * * @returns: title of group with the given index, or NULL if there * is no title * **/G_CONST_RETURN gchar*hx_player_get_group_title(HXPlayer* player,                          guint     group){    UInt32 buf_desired = 0;    UInt32 buf_used;    gchar* buf;    bool result;    g_return_val_if_fail(player != NULL, NULL);    g_return_val_if_fail(HX_IS_PLAYER(player), NULL);        g_free(player->group_title_buf);    player->group_title_buf = NULL;            /* Get the size */    ClientPlayerGetGroupTitle(player->player, group, NULL, 0, &buf_desired);    if(buf_desired == 0)    {        return NULL;    }        buf = (gchar*)g_try_malloc(buf_desired + 1);    g_return_val_if_fail(buf, NULL);        /* Get the data */    result = ClientPlayerGetGroupTitle(player->player, group, buf, buf_desired, &buf_used);    if(!result)    {        return NULL;    }    g_assert(buf_used == buf_desired);    buf[buf_used] = '\0';    if(g_utf8_validate(buf, -1, NULL))    {        player->group_title_buf = buf;    }    else    {        /* Convert to utf-8 */        gsize in;        gsize out;        in = strlen(buf) + 1;        out = 0;        player->group_title_buf = g_convert(buf, in - 1, "UTF-8", "ISO-8859-1", &in, &out, NULL);        g_free(buf);    }        return player->group_title_buf;}gbooleanhx_player_get_statistic(HXPlayer*    player,                        const gchar* key,                        GValue*      value){            UInt32 buf_used;    UInt32 buf_desired = 0;    int value_type;    gint int_value;    gchar* str_value;    bool result = FALSE;    gsize in;    gsize out;    gchar *utf8_val;    g_return_val_if_fail(player != NULL, FALSE);    g_return_val_if_fail(HX_IS_PLAYER(player), FALSE);    g_return_val_if_fail(key != NULL, FALSE);    g_return_val_if_fail(value != NULL, FALSE);    /* Get the size */    ClientPlayerGetStatistic(player->player, key, NULL, 0, &value_type, &buf_desired);    if(buf_desired == 0)    {        return FALSE;    }        /* Get the data */    switch(value_type)    {        case kValueType32BitSignedInt:            result = ClientPlayerGetStatistic(player->player, key, (unsigned char*)&int_value, sizeof(int_value), &value_type, &buf_used);            if(!result)            {                break;            }            g_assert(buf_used == buf_desired);            g_value_init(value, G_TYPE_INT);            g_value_set_int(value, int_value);            break;        case kValueTypeString:            str_value = (gchar*)g_try_malloc(buf_desired + 1);            g_return_val_if_fail(str_value != FALSE, FALSE);                        result = ClientPlayerGetStatistic(player->player, key, (unsigned char*)str_value, buf_desired, &value_type, &buf_used);            if(!result)            {                break;            }            g_assert(buf_used == buf_desired);            str_value[buf_used] = '\0';            if(g_utf8_validate(str_value, -1, NULL))            {                utf8_val = str_value;            }            else            {                in = buf_used + 1;                out = 0;                utf8_val = g_convert(str_value, buf_used, "UTF-8", "ISO-8859-1", &in, &out, NULL);                g_assert(utf8_val);                g_free(str_value);            }                        g_value_init(value, G_TYPE_STRING);            g_value_set_string_take_ownership(value, utf8_val);            break;                    default:            g_assert_not_reached();            break;    }        return result;}#ifdef G_OS_UNIXstatic GdkFilterReturnhx_player_event_filter(GdkXEvent* gxevent,                       GdkEvent*  /* event */,                       gpointer   /* widget */){    ClientEngineProcessXEvent((XEvent*)gxevent);    return GDK_FILTER_CONTINUE;}static gbooleanhx_player_pump(gpointer /* unused */){    ClientEngineProcessXEvent(NULL);        /* Process any events in the display queue */        if(g_dpy)    {        XEvent xevent;        int x_event_available;        memset(&xevent, 0, sizeof(xevent));                    do   

⌨️ 快捷键说明

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