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

📄 commonapp.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
            {                g_hxcommon_app.package_data_dir = g_strdup(resolved_exec_path);                g_hxcommon_app.package = g_strdup("share");                found = TRUE;            }            g_free(resource_test_filename);#ifdef _GNU_SOURCE            /* allocated by canonicalize_file_name */            free(resolved_exec_filename);#endif        }    }#endif /* G_OS_UNIX */    if(!found)    {        gchar* resource_test_filename;        resource_test_filename = g_strdup_printf("share/%s", test_file);                                                         /* Try the working directory */        if(g_file_test(resource_test_filename, G_FILE_TEST_EXISTS))        {            g_hxcommon_app.package_data_dir = g_strdup(".");            g_hxcommon_app.package = g_strdup("share");            found = TRUE;        }        g_free(resource_test_filename);    }    if(!found)    {        /* Try using the path passed to us in argv[0] */                gchar* exec_filename = g_strdup(resolved_argv0);        gchar* exec_path = g_path_get_dirname(exec_filename);        gchar* resource_test_filename =            g_strdup_printf("%s/share/%s", exec_path, test_file);        if(g_file_test(resource_test_filename, G_FILE_TEST_EXISTS))        {            g_hxcommon_app.package_data_dir = g_strdup(exec_path);            g_hxcommon_app.package = g_strdup("share");            found = TRUE;        }        g_free(exec_filename);        g_free(resource_test_filename);    }        if(resolved_argv0)    {        g_free(resolved_argv0);    }    return found;}/* Control the status text at the bottom of the player widget */static voidset_buffering_status_text(HXPlayer* player,                          HXBufferingReason /* reason */,                          guint percent){    gchar* text;    if (percent == 100)    {	// blank the display when we hit 100	hx_player_set_status_text(player, NULL);    }    else    {    text = g_strdup_printf("Buffering (%d%%)", percent);    hx_player_set_status_text(player, text);    }}static voidset_contacting_status_text(HXPlayer* player,                           const gchar* contacting_text){    if(!contacting_text)    {        contacting_text = _("Contacting server...");    }    hx_player_set_status_text(player, contacting_text);}static voidunset_status_text(HXPlayer* player){    hx_player_set_status_text(player, NULL);    }voidhxcommon_show_status_in_player_widget(HXPlayer* player){    g_signal_connect(G_OBJECT(player),		     "buffering",		     G_CALLBACK(set_buffering_status_text),		     NULL);        g_signal_connect(G_OBJECT(player),		     "contacting",		     G_CALLBACK(set_contacting_status_text),		     NULL);        g_signal_connect(G_OBJECT(player),		     "play",		     G_CALLBACK(unset_status_text),		     NULL);    g_signal_connect(G_OBJECT(player),		     "pause",		     G_CALLBACK(unset_status_text),		     NULL);    g_signal_connect(G_OBJECT(player),		     "stop",		     G_CALLBACK(unset_status_text),		     NULL);}intmain(int argc, char *argv[]) {    HXCommandLineOptions cmd;    int i;    gchar* version_error;    gboolean result;    memset(&g_hxcommon_app, 0, sizeof(g_hxcommon_app));#ifdef G_OS_UNIX    char* hxplayer_x_init_threads;    /* Possible values are: normal, delayed, none */    hxplayer_x_init_threads = getenv("HXPLAYER_X_INIT_THREADS");    if(!hxplayer_x_init_threads)    {        hxplayer_x_init_threads = "after";    }#endif#ifdef ENABLE_NLS    /* Initialize gettext */    setlocale (LC_ALL, "");    bindtextdomain (PACKAGE, LOCALEDIR);#ifdef HAVE_BIND_TEXTDOMAIN_CODESET    bind_textdomain_codeset(PACKAGE, "UTF-8");#endif    textdomain (PACKAGE);#endif    #ifdef G_OS_UNIX    if(strcmp(hxplayer_x_init_threads, "before") == 0)    {        Status status;        status = XInitThreads();        if(!status)        {            g_warning("X libraries appear to have been compiled without multithreaded support.");        }    }#endif            /* Check the gtk version */    version_error = gtk_check_version(GTK_MAJOR_VERSION,                                      0,  /* GTK_MINOR_VERSION */                                      0); /* GTK_MICRO_VERSION */    if(version_error)    {        g_error("%s (expecting >= %d.%d.%d, using %d.%d.%d)",                version_error,                GTK_MAJOR_VERSION,                0, /* GTK_MINOR_VERSION */                0, /* GTK_MICRO_VERSION */                gtk_major_version,                gtk_minor_version,                gtk_micro_version);    }        /* If we're running in embedded mode, close all       open FD's we inherit, other than the command_fd,       and std[in|out|err]. Inspired by bash. Also see fcloseall       in glibc, though there are some fd's we want to keep open. */    cmd.run_embedded = FALSE;    /* Parse command line options */    parse_command_line(&cmd, &argc, &argv);#ifdef G_OS_UNIX    int fd_table_size;    if(cmd.run_embedded)    {	fd_table_size = getdtablesize ();	if (fd_table_size > 1024)	{	    /* clamp to a reasonable value */	    fd_table_size = 1024;	}        /* Start at 3 to skip stdout, stdin, stderr */	for (i = 3; i < fd_table_size; i++)	{	    if((i != cmd.command_fd) && (i != cmd.callbacks_fd))	    {		close (i);	    }	}    }#endif        winutils_screensaver_init();    // This is a glib2.2 function    // g_set_application_name(APP_NAME_FULL);    if(!locate_resources(argv[0]))    {        g_error("Could not find resources\n");    }    #ifdef USE_GNOME    gnome_program_init("helixplayer", TARVER_STRING_VERSION,		       LIBGNOME_MODULE,		       argc, argv, 		       // GNOME_PARAM_POPT_TABLE, options, 		       GNOME_PARAM_HUMAN_READABLE_NAME, "Media Player", 		       // GNOME_PROGRAM_STANDARD_PROPERTIES,                       GNOME_PARAM_APP_PREFIX, PREFIX,                       GNOME_PARAM_APP_SYSCONFDIR, SYSCONFDIR,                       // GNOME_PARAM_APP_DATADIR, DATADIR,                       GNOME_PARAM_APP_DATADIR, g_hxapp.package_data_dir,                       GNOME_PARAM_APP_LIBDIR, LIBDIR		       );#endif    if (!gtk_init_check(&argc, &argv))    {        /* g_error will call abort */	g_error("Unable to open display");    }    #ifdef G_OS_UNIX    if(strcmp(hxplayer_x_init_threads, "after") == 0)    {        Status status;        status = XInitThreads();        if(!status)        {            g_warning("X libraries appear to have been compiled without multithreaded support.");        }    }#endif            glade_init();    if(argc > 1)    {        cmd.location = strdup(argv[1]);        if(argc > 2)        {            printf(_("Ignoring unknown options: "));            for(i = 0; i < argc; i++)            {                printf("%s ", argv[optind++]);            }            printf("\n");        }    }    g_hxcommon_app.is_embedded = cmd.run_embedded;    g_hxcommon_app.save_preferences = TRUE;    HXMainWindow* main_window = NULL;        if(cmd.run_embedded)    {#ifdef HELIX_FEATURE_EMBEDDED_PLAYER        // Use this if you're debugging a forked process#if 0#warning "Don't check in with loop active"        printf("Attach to %d\n", getpid());        int c = 0;         while(c == 0)        {        }#endif	if(!hxembedded_init(&cmd))	{	    return EXIT_FAILURE;	}	#endif /* HELIX_FEATURE_EMBEDDED_PLAYER */    }    else    {        gchar* url = NULL;                if(cmd.location)        {                        if(strstr(cmd.location, "://"))            {                url = g_strdup(cmd.location);            }            else            {                if(g_path_is_absolute(cmd.location))                {                    url = g_strdup_printf("file://%s", cmd.location);                }                else                {                    url = g_strdup_printf("file://%s/%s",                                          g_get_current_dir(),                                          cmd.location);                }            }        }                if (!cmd.open_in_new_player)        {            /* Attempt to open in an existing player first */            const gchar* location = (url)? url: "";            result = hxremote_launch_player (location);            if(result)            {                exit(EXIT_SUCCESS);            }            /* else fall through and open up a new player */        }                main_window = hxwindow_new();	if(!main_window)	{	    return EXIT_FAILURE;	}        if(cmd.location)        {            if(cmd.quit_on_done)            {                hxwindow_set_quit_on_done(main_window, TRUE);            }            if(cmd.fullscreen)            {                hxwindow_fullscreen(main_window);            }            hxwindow_open(main_window, url);        }                g_free(url);        /* Get the web browser preference */        GValue value;        const gchar* value_str;        memset(&value, 0, sizeof(value));                result = hxwindow_get_property(main_window, "WebBrowserPath", &value);        if(result)        {            value_str = g_value_get_string(&value);            g_hxcommon_app.web_browser_command = g_strdup(value_str);        }    }    gtk_main();    if(cmd.run_embedded)    {#ifdef HELIX_FEATURE_EMBEDDED_PLAYER        hxembedded_destroy();#endif    }        g_free(g_hxcommon_app.package_data_dir);    g_free(g_hxcommon_app.package);    if(g_hxcommon_app.restart_on_quit)    {        return EXIT_RESTART_PLAYER;    }    else    {        return EXIT_SUCCESS;    }}GdkPixmap*hxcommon_get_logo_pixmap(GtkWidget* widget,                         GdkWindow* win){    GdkPixmap *pixmap = NULL;    gchar *filename;    GdkPixbuf *pixbuf = NULL;    gint width, height;        /* Set the splash pixmap */    filename = hxcommon_locate_file("logo.png");    if(filename)    {        pixbuf = gdk_pixbuf_new_from_file(filename, NULL);        g_free(filename);    }    if(pixbuf)    {        width = gdk_pixbuf_get_width(pixbuf);        height = gdk_pixbuf_get_height(pixbuf);        pixmap = gdk_pixmap_new(GDK_DRAWABLE(win),                                width,                                height,                                -1);        g_return_val_if_fail(pixmap != NULL, FALSE);//         This is a gtk2.2 function. See below for the 2.0 version//         gdk_draw_pixbuf(GDK_DRAWABLE(pixmap),//                         widget->style->fg_gc[GTK_WIDGET_STATE (widget)],//                         pixbuf,//                         0, 0, // src//                         0, 0, // dest//                         width, height,		    //                         GDK_RGB_DITHER_NORMAL,//                         0, 0  // dither//                         );        gdk_pixbuf_render_to_drawable(pixbuf,                        GDK_DRAWABLE(pixmap),                        widget->style->fg_gc[GTK_WIDGET_STATE (widget)],                        0, 0, // src                        0, 0, // dest                        width, height,		                            GDK_RGB_DITHER_NORMAL,                        0, 0  // dither                        );    }    return pixmap;}gchar*hxcommon_get_rel_app_path(const gchar* path){    const char* libs_path = getenv("HELIX_LIBS");    if (libs_path)    {	if (path)	{	    return g_strdup_printf("%s/%s", libs_path, path);	}	return g_strdup(libs_path);    }    return g_strdup(path);}G_CONST_RETURN gchar*hxcommon_get_distcode_language(void){    static const struct    {        gchar* gettext_lang;        gchar* distcode_lang;    } lang_map[] =    {        { "C",     "EN" },        { "en",    "EN" },        { "de",    "DE" },        { "es",    "ES" },        { "fr",    "FR" },        { "it",    "IT" },        { "ja",    "JA" },        { "ko",    "KO" },        { "pt_BR", "PT" },        { "zh_CN", "CN" },        { "zh_TW", "TW" }    };    guint i;    const gchar* lang = hxcommon_get_gettext_language();    gchar* distcode_lang = NULL;    if(lang)    {        for(i = 0; i < sizeof(lang_map) / sizeof(*lang_map); i++)        {            if(strncmp(lang, lang_map[i].gettext_lang, strlen(lang_map[i].gettext_lang)) == 0)            {                distcode_lang = lang_map[i].distcode_lang;                break;            }        }    }    else    {        distcode_lang = "EN";    }    if(!distcode_lang)    {        distcode_lang = "XX";    }        return distcode_lang;}G_CONST_RETURN gchar*hxcommon_get_gettext_language(void){    const gchar *lang;    // Priority LANGUAGE > LC_ALL > LC_MESSAGE > LANG > NULL    lang = getenv ("LANGUAGE");    if (lang == NULL || lang[0] == '\0')    {        lang = getenv ("LC_ALL");        if (lang == NULL || lang[0] == '\0')        {            lang = getenv ("LC_MESSAGES");            if (lang == NULL || lang[0] == '\0')            {                lang = getenv ("LANG");                if (lang == NULL || lang[0] == '\0')                    lang = NULL;            }        }    }    return lang;}

⌨️ 快捷键说明

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