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

📄 embeddedapp.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        player = window->console->audio_player;    }        return player;    }static ginthxembedded_window_popup_menu(HXEmbeddedWindow* window,                              GdkEvent* event,                              GtkWidget* /* widget */){    GdkEventButton *event_button;    if(!window->enable_context_menu)    {        return FALSE;    }            if (event->type == GDK_BUTTON_PRESS)    {        event_button = (GdkEventButton *) event;        if (event_button->button == 3)	{            g_assert(window->image_window != NULL);            hx_context_menu_popup(window->image_window->context_menu, &event->button);            return TRUE;	}    }        return FALSE; // propagate}static HXPlayer*hxembedded_window_get_player(HXEmbeddedWindow* window){    HXPlayer* player = hxembedded_window_get_player_no_create(window);    if(!player)    {        GtkWidget* widget = hx_player_new();        player = HX_PLAYER(widget);        g_signal_connect_swapped(G_OBJECT(player),                                 "button_press_event",                                 G_CALLBACK(hxembedded_window_popup_menu),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "hxerror",                                 G_CALLBACK(hepw_hxerror),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "request_upgrade",                                 G_CALLBACK(hepw_request_upgrade),                                 window);        g_signal_connect_swapped(G_OBJECT(player),                                 "request_authentication",                                 G_CALLBACK(hepw_request_authentication),                                 window);        g_signal_connect_swapped(G_OBJECT(player),                                 "has_feature",                                 G_CALLBACK(hxcommon_player_has_feature),                                 player);            g_signal_connect_swapped(G_OBJECT(player),                                 "play",                                 G_CALLBACK(hepw_play_buffer_contact),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "buffering",                                 G_CALLBACK(hepw_play_buffer_contact),                                 window);        g_signal_connect_swapped(G_OBJECT(player),                                 "contacting",                                 G_CALLBACK(hepw_play_buffer_contact),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "pause",                                 G_CALLBACK(hepw_pause),                                 window);        g_signal_connect_swapped(G_OBJECT(player),                                 "stop",                                 G_CALLBACK(hepw_stop),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "mute_changed",                                 G_CALLBACK(hepw_mute_changed),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "volume_changed",                                 G_CALLBACK(hepw_volume_changed),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "goto_url",                                 G_CALLBACK(hepw_goto_url),                                 window);                g_signal_connect_swapped(G_OBJECT(player),                                 "open_window",                                 G_CALLBACK(hepw_open_window),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "start_seeking",                                 G_CALLBACK(hepw_start_seeking),                                 window);            g_signal_connect_swapped(G_OBJECT(player),                                 "stop_seeking",                                 G_CALLBACK(hepw_stop_seeking),                                 window);            hxcommon_show_status_in_player_widget(HX_PLAYER(player));        if(window->image_window)        {            window->image_window->player = player;            window->console->image_window_player = player;        }        else        {            window->console->audio_player = player;        }        hxembedded_console_adopt_player(window->console);    }    return player;}HXContentStateTypehxembedded_window_get_content_state(HXEmbeddedWindow* window){    HXPlayer* player;                player = hxembedded_window_get_player(window);    g_return_val_if_fail(player != NULL, HX_CONTENT_STATE_NOT_LOADED);            return hx_player_get_content_state (HX_PLAYER(player));}voidhxembedded_window_unset_console(HXEmbeddedWindow* window){    if(!window->console)    {        /* No console to unset */        return;    }        /* This window currently has a console set. Remove it... */    window->console->windows_list =         g_list_remove(window->console->windows_list, window);    if(g_list_length(window->console->windows_list) == 0)    {        /* Remove this console */        g_hxembedded_app.consoles_list =             g_list_remove(g_hxembedded_app.consoles_list, window->console);        if(strcasecmp(window->console->name, "_master") == 0)        {            g_hxembedded_app.master_console = NULL;        }        g_free(window->console);        if(g_list_length(g_hxembedded_app.consoles_list) == 0)        {            /* XXXRGG: We might want to quit here. The mozilla plugin should be               able to restart the embedded player when it needs a console again.               Requires some thought & testing, though, so keep running for now. */                        printf("All consoles have been closed\n");        }    }    else     {        /* Rebuild console */        hxembedded_console_build_players_from_windows(window->console);    }    window->console = NULL;    }voidhxembedded_window_set_console(HXEmbeddedWindow* window, const gchar* console_name){    GList* iter = NULL;    HXEmbeddedConsole* console = NULL;    if(window->attr.console)    {        if(window->console && strcmp(window->attr.console, console_name) == 0)        {            /* Console name is the same -- no change needed */            return;        }    }        if(window->console)    {        hxembedded_window_unset_console(window);    }    if(window->attr.console != console_name)    {        if(window->attr.console)        {            g_free(window->attr.console);        }        window->attr.console = g_strdup(console_name);    }        if(strcasecmp(window->attr.console, "_unique") != 0)    {        /* See if there's already a console with the same name */        iter = g_hxembedded_app.consoles_list;        while(iter)        {            console = (HXEmbeddedConsole*)iter->data;            if(strcmp(window->attr.console, console->name) == 0)            {                break;            }            iter = g_list_next(iter);        }    }    if(!iter)    {        /* No existing console with this name. Create a new one. */        console = g_new0(HXEmbeddedConsole, 1);        g_hxembedded_app.consoles_list =            g_list_append(g_hxembedded_app.consoles_list, console);        console->name = g_strdup(console_name);        if(strcasecmp(window->attr.console, "_master") == 0)        {            g_hxembedded_app.master_console = console;        }    }    window->console = console;        console->windows_list =         g_list_append(console->windows_list, window);            hxembedded_console_build_players_from_windows(window->console);}ginthxembedded_window_attach(HXEmbeddedWindowAttributes* attr){    HXEmbeddedWindow* window = NULL;        window = g_new0(HXEmbeddedWindow, 1);    /* Initialize */    window->enable_original_size = TRUE;    window->enable_context_menu = TRUE;    window->enable_error_events = FALSE; // Pop up error dialogs by default    window->enable_seek = TRUE;    /* We're taking ownership of all strings allocated within the attr struct */    memcpy(&window->attr, attr, sizeof(*attr));        window->id = g_hxembedded_app.next_window_id;    g_hxembedded_app.next_window_id++;    hxembedded_window_set_console(window, attr->console);        /* Some pages embed an audio player by using an ImageWindow with       height 0. We won't get a SetWindow for this window (in Mozilla,       anyway), so handle creating this player here. */    if((window->attr.controls & HX_CONTROLS_IMAGE_WINDOW) &&       (window->attr.height == 0 || window->attr.width == 0))    {        /* Audio-only player */        window->is_window_set = TRUE;        create_controls_image_window(window);    }        return window->id;}voidhxembedded_window_add_ipc_callbacks(HXEmbeddedWindow* window, HXCallbackFlags flags){    if(window->attr.name != NULL)    {        window->attr.scriptcallbacks = (HXCallbackFlags)(window->attr.scriptcallbacks | flags);        hxembedded_window_hookup_ipc_callbacks(window);    }}voidhxembedded_window_remove_ipc_callbacks(HXEmbeddedWindow* window, HXCallbackFlags flags){    window->attr.scriptcallbacks = (HXCallbackFlags)(window->attr.scriptcallbacks & ~flags);    hxembedded_window_hookup_ipc_callbacks(window);}static gbooleanhxembedded_window_call_pos_len_callbacks(gpointer data){    guint pos;    guint len;    HXContentStateType state;        HXEmbeddedWindow* window = (HXEmbeddedWindow*)data;    HXPlayer* player = hxembedded_window_get_player(window);        /* See if this callback is still active */    if(!(window->attr.scriptcallbacks & HX_CALLBACK_ON_POS_LENGTH))    {        window->player_handlers.on_pos_length.is_enabled = FALSE;    }    if(!(window->attr.scriptcallbacks & HX_CALLBACK_ON_POSITION_CHANGE))    {        window->player_handlers.on_position_change.is_enabled = FALSE;    }    if(!(window->player_handlers.on_position_change.is_enabled ||         window->player_handlers.on_pos_length.is_enabled))    {        /* no timer required */        return FALSE;    }    state = hx_player_get_content_state(player);    if(state != HX_CONTENT_STATE_PLAYING)    {        /* no timer required */        return FALSE;    }        /* call callbacks */    pos = hx_player_get_position(player);    len = hx_player_get_length(player);    if(window->player_handlers.on_pos_length.is_enabled)    {        playeripc_on_pos_length(window, pos, len);    }    if(window->player_handlers.on_position_change.is_enabled)    {        playeripc_on_position_change(window, pos, len);    }    /* Keep timer callback */    return TRUE;}static voidhookup_window_ipc_callbacks(HXEmbeddedWindow* window){    struct    {        guint mask;        gchar* name;        GCallback callback;        HXWindowSigInfo* siginfo;    } window_signal_map[8];    guint i;    /* window signals */    window_signal_map[0].mask     = HX_CALLBACK_ON_KEY_DOWN;    window_signal_map[0].name     = "key_press_event";    window_signal_map[0].callback = G_CALLBACK(playeripc_on_key_down);    window_signal_map[0].siginfo  = &window->window_handlers.on_key_down;    window_signal_map[1].mask     = HX_CALLBACK_ON_KEY_PRESS;    window_signal_map[1].name     = "key_press_event";    window_signal_map[1].callback = G_CALLBACK(playeripc_on_key_press);    window_signal_map[1].siginfo  = &window->window_handlers.on_key_press;    window_signal_map[2].mask     = HX_CALLBACK_ON_KEY_UP;    window_signal_map[2].name     = "key_release_event";    window_signal_map[2].callback = G_CALLBACK(playeripc_on_key_up);    window_signal_map[2].siginfo  = &window->window_handlers.on_key_up;    window_signal_map[3].mask     = HX_CALLBACK_ON_LBUTTON_DOWN;    window_signal_map[3].name     = "button_press_event";    window_signal_map[3].callback = G_CALLBACK(playeripc_on_lbutton_down);    window_signal_map[3].siginfo  = &window->window_handlers.on_lbutton_down;        window_signal_map[4].mask     = HX_CALLBACK_ON_LBUTTON_UP;    window_signal_map[4].name     = "button_release_event";    window_signal_map[4].callback = G_CALLBACK(playeripc_on_lbutton_up);    window_signal_map[4].siginfo  = &window->window_handlers.on_lbutton_up;    window_signal_map[5].mask     = HX_CALLBACK_ON_MOUSE_MOVE;

⌨️ 快捷键说明

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