static void theme_change_cb(GtkWidget * widget, G_GNUC_UNUSED void *data) { gint index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget)); MapTheme *theme = g_list_nth_data(theme_get_list(), index); if (theme != theme_get_current()) { config_set_string("settings/theme", theme->name); theme_set_current(theme); if (gmap->pixmap != NULL) { g_object_unref(gmap->pixmap); gmap->pixmap = NULL; } theme_rescale(2 * gmap->x_point); } }
int main(int argc, char *argv[]) { int result = ACTION_NONE; int leave = 0; char *editor_file = 0; char path[512]; SDL_Surface *loading; #ifdef __unix__ gid_t realgid; hi_dir_chart_file = fopen(HI_DIR "/" CHART_FILE_NAME, "r+"); /* This is where we drop our setuid/setgid privileges. */ realgid = getgid(); if (setresgid(-1, realgid, realgid) != 0) { perror("Could not drop setgid privileges. Aborting."); exit(1); } #endif /* i18n */ #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); #endif #ifdef _WIN32 /* Get Windows to open files in binary mode instead of default text mode */ _fmode = _O_BINARY; #endif /* lbreakout info */ printf( "LBreakout2 %s\nCopyright 2001-2010 Michael Speck\nPublished under GNU GPL\n---\n", VERSION ); printf( "Looking up data in: %s\n", SRC_DIR ); printf( "Looking up highscores in: %s\n", HI_DIR ); printf( "Looking up custom levels in: %s/%s/lbreakout2-levels\n", (getenv( "HOME" )?getenv( "HOME" ):"."), CONFIG_DIR_NAME ); #ifndef AUDIO_ENABLED printf( "Compiled without sound and music\n" ); #endif set_random_seed(); /* set random seed */ config_load(); stk_init( SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK ); if ( config.fullscreen ) stk_display_open( SDL_SWSURFACE | SDL_FULLSCREEN, 640, 480, 16 ); else stk_display_open( SDL_SWSURFACE, 640, 480, 16 ); stk_audio_open( 0,0,0,config.audio_buffer_size ); SDL_WM_SetCaption( "LBreakout2", 0 ); SDL_SetEventFilter( event_filter ); stk_audio_enable_sound( config.sound ); stk_audio_set_sound_volume( config.volume * 16 ); /* load a little loading pic */ stk_surface_set_path( SRC_DIR "/gfx" ); loading = stk_surface_load( SDL_SWSURFACE, "loading.png" ); stk_surface_blit( loading, 0,0,-1,-1, stk_display, (stk_display->w-loading->w)/2, (stk_display->h-loading->h)/2 ); stk_display_update( STK_UPDATE_ALL ); /* load the GUI graphics from SRC_DIR/gui_theme */ stk_surface_set_path( SRC_DIR ); stk_audio_set_path( SRC_DIR ); gui_init( "gui_theme" ); stk_surface_set_path( SRC_DIR "/gfx" ); stk_audio_set_path( SRC_DIR "/sounds" ); /* load resources */ /* for simplicity all functions are kept but anything * that is now themeable is loaded in * theme_load instead of the original function * (deleting resources works analouge) */ theme_get_list(); if ( config.theme_count != theme_count ) { if ( config.theme_id >= theme_count ) config.theme_id = 0; config.theme_count = theme_count; } theme_load( theme_names[config.theme_id] ); /* old functions still with initialzations of * lists or variables */ client_game_create(); hint_load_res(); chart_load(); manager_create(); client_create(); exp_load(); editor_create(); help_create(); /* run game */ manager_fade( STK_FADE_IN ); while( !leave && !stk_quit_request ) { result = manager_run(); switch( result ) { case ACTION_QUIT: leave = 1; break; case ACTION_RESUME_0: manager_fade( STK_FADE_OUT ); if ( client_game_resume_local( 0 ) ) client_game_run(); client_game_finalize(); manager_fade( STK_FADE_IN ); break; case ACTION_PLAY_LBR: manager_fade( STK_FADE_OUT ); gameSeed = rand(); /* set random seed for next FREAKOUT/BonusLevels */ if ( client_game_init_local( "LBreakout2" ) ) client_game_run(); client_game_finalize(); manager_fade( STK_FADE_IN ); break; case ACTION_PLAY_CUSTOM: manager_fade( STK_FADE_OUT ); gameSeed = rand(); /* set random seed for next FREAKOUT/BonusLevels */ if (gameSeed==0) gameSeed=1; /* not allowed because.... A HACK!!! 0 means to have no bonus levels to save a parameter */ if ( client_game_init_local( levelset_names_local[config.levelset_id_local] ) ) client_game_run(); client_game_finalize(); manager_fade( STK_FADE_IN ); break; case ACTION_EDIT: /* new set? */ if ( strequal( NEW_SET, edit_set ) ) { editor_file = calloc( 16, sizeof( char ) ); snprintf( path, sizeof(path)-1, "%s/%s/lbreakout2-levels", getenv( "HOME" )? getenv("HOME"):".", CONFIG_DIR_NAME ); if ( !enter_string( font, _("Set Name:"), editor_file, 12 ) || !file_check( path, editor_file, "w" ) ) { free( editor_file ); break; } else manager_update_set_list(); } else editor_file = strdup( edit_set ); if ( editor_init( editor_file ) ) { manager_fade( STK_FADE_OUT ); editor_run(); editor_clear(); manager_fade( STK_FADE_IN ); } free( editor_file ); editor_file = 0; break; case ACTION_QUICK_HELP: help_run(); break; case ACTION_CLIENT: manager_fade( STK_FADE_OUT ); client_run(); manager_fade( STK_FADE_IN ); break; default: break; } } manager_fade( STK_FADE_OUT ); /* delete stuff */ help_delete(); manager_delete(); chart_save(); chart_delete(); editor_delete(); exp_delete(); client_game_delete(); hint_delete_res(); theme_delete(); theme_delete_list(); stk_surface_free( &loading ); config_save(); if (hi_dir_chart_file) fclose(hi_dir_chart_file); return EXIT_SUCCESS; }
static void preferences_cb(void) { GtkWidget *silent_mode_widget; GtkWidget *widget; GtkWidget *dlg_vbox; GtkWidget *theme_label; GtkWidget *theme_list; GtkWidget *layout; guint row; gint color_summary; GList *theme_elt; int i; if (preferences_dlg != NULL) { gtk_window_present(GTK_WINDOW(preferences_dlg)); return; }; /* Caption of preferences dialog */ preferences_dlg = gtk_dialog_new_with_buttons(_("" "Pioneers Preferences"), GTK_WINDOW (app_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); gtk_dialog_set_default_response(GTK_DIALOG(preferences_dlg), GTK_RESPONSE_CLOSE); g_signal_connect(G_OBJECT(preferences_dlg), "destroy", G_CALLBACK(gtk_widget_destroyed), &preferences_dlg); g_signal_connect(G_OBJECT(preferences_dlg), "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_widget_show(preferences_dlg); dlg_vbox = GTK_DIALOG(preferences_dlg)->vbox; gtk_widget_show(dlg_vbox); layout = gtk_table_new(6, 2, FALSE); gtk_widget_show(layout); gtk_box_pack_start(GTK_BOX(dlg_vbox), layout, FALSE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(layout), 5); row = 0; theme_list = gtk_combo_box_new_text(); /* Label for changing the theme, in the preferences dialog */ theme_label = gtk_label_new(_("Theme:")); gtk_misc_set_alignment(GTK_MISC(theme_label), 0, 0.5); gtk_widget_show(theme_list); gtk_widget_show(theme_label); for (i = 0, theme_elt = theme_get_list(); theme_elt != NULL; ++i, theme_elt = g_list_next(theme_elt)) { MapTheme *theme = theme_elt->data; gtk_combo_box_append_text(GTK_COMBO_BOX(theme_list), theme->name); if (theme == theme_get_current()) gtk_combo_box_set_active(GTK_COMBO_BOX(theme_list), i); } g_signal_connect(G_OBJECT(theme_list), "changed", G_CALLBACK(theme_change_cb), NULL); gtk_table_attach_defaults(GTK_TABLE(layout), theme_label, 0, 1, row, row + 1); gtk_table_attach_defaults(GTK_TABLE(layout), theme_list, 1, 2, row, row + 1); gtk_widget_set_tooltip_text(theme_list, /* Tooltip for changing the theme in the preferences dialog */ _("Choose one of the themes")); row++; /* Label for the option to show the legend */ widget = gtk_check_button_new_with_label(_("Show legend")); gtk_widget_show(widget); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), legend_page_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(show_legend_cb), NULL); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to show the legend */ _("" "Show the legend as a page beside the map")); row++; /* Label for the option to display log messages in color */ widget = gtk_check_button_new_with_label(_("Messages with color")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_messages_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(message_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display log messages in color */ _("Show new messages with color")); row++; widget = gtk_check_button_new_with_label( /* Label for the option to display chat in color of player */ _("" "Chat in color of player")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_chat_enabled); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(chat_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display chat in color of player */ _("" "Show new chat messages in the color of the player")); row++; /* Label for the option to display the summary with colors */ widget = gtk_check_button_new_with_label(_("Summary with color")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); color_summary = config_get_int_with_default("settings/color_summary", TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), color_summary); /* @todo RC use correct variable */ g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(summary_color_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display the summary with colors */ _("Use colors in the player summary")); row++; widget = /* Label for the option to display keyboard accelerators in the toolbar */ gtk_check_button_new_with_label(_("Toolbar with shortcuts")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), toolbar_show_accelerators); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toolbar_shortcuts_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to display keyboard accelerators in the toolbar */ _("" "Show keyboard shortcuts in the toolbar")); row++; silent_mode_widget = /* Label for the option to disable all sounds */ gtk_check_button_new_with_label(_("Silent mode")); gtk_widget_show(silent_mode_widget); gtk_table_attach_defaults(GTK_TABLE(layout), silent_mode_widget, 0, 2, row, row + 1); gtk_widget_set_tooltip_text(silent_mode_widget, /* Tooltip for the option to disable all sounds */ _("" "In silent mode no sounds are made")); row++; widget = /* Label for the option to announce when players/viewers enter */ gtk_check_button_new_with_label(_("Announce new players")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), get_announce_player()); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(announce_player_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for the option to use sound when players/viewers enter */ _("" "Make a sound when a new player or viewer enters the game")); row++; /* Silent mode widget is connected an initialized after the announce button */ g_signal_connect(G_OBJECT(silent_mode_widget), "toggled", G_CALLBACK(silent_mode_cb), widget); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(silent_mode_widget), get_silent_mode()); /* Label for the option to use the 16:9 layout. */ widget = gtk_check_button_new_with_label(_("Use 16:9 layout")); gtk_widget_show(widget); gtk_table_attach_defaults(GTK_TABLE(layout), widget, 0, 2, row, row + 1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), get_16_9_layout()); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(toggle_16_9_cb), NULL); gtk_widget_set_tooltip_text(widget, /* Tooltip for 16:9 option. */ _("" "Use a 16:9 friendly layout for the window")); row++; }