void gnibbles_properties_destroy (GnibblesProperties * props) { int i; for (i = 0; i < NUMWORMS; i++) g_slice_free (GnibblesWormProps, props->wormprops[i]); g_signal_handler_disconnect (games_conf_get_default (), props->conf_notify_id); g_slice_free (GnibblesProperties, props); }
GnibblesProperties * gnibbles_properties_new (void) { GnibblesProperties *props; props = g_slice_new0 (GnibblesProperties); props->conf_notify_id = g_signal_connect (games_conf_get_default (), "value-changed", G_CALLBACK (conf_value_changed_cb), props); gnibbles_properties_update (props); return props; }
Tetris::~Tetris() { delete field; delete preview; delete scoreFrame; delete high_scores; if (bgimage) g_object_unref (G_OBJECT (bgimage)); if (bgPixmap) g_free(bgPixmap); if (defaultPixmap) g_free(defaultPixmap); if (confNotifyID != 0) g_signal_handler_disconnect (games_conf_get_default (), confNotifyID); }
Tetris::Tetris(int cmdlLevel): themeno (0), field(0), paused(false), timeoutId(0), onePause(false), inPlay(false), useTarget(false), bgimage(0), setupdialog(0), cmdlineLevel(cmdlLevel), fastFall(false), dropBlock(false) { GtkUIManager *ui_manager; GtkAccelGroup *accel_group; GtkActionGroup *action_group; GtkWidget *vbox; GtkWidget *aspect_frame; GtkWidget *menubar; gchar *outdir; const char *dname; const GtkTargetEntry targets[] = {{(gchar*) "text/uri-list", 0, URI_LIST}, {(gchar*) "property/bgimage", 0, URI_LIST}, {(gchar*) "text/plain", 0, TEXT_PLAIN}, {(gchar*) "STRING", 0, TEXT_PLAIN}, {(gchar*) "application/x-color", 0, COLOUR}, {(gchar*) "x-special/gnome-reset-background", 0, RESET}}; const GtkActionEntry actions[] = { { "GameMenu", NULL, N_("_Game") }, { "SettingsMenu", NULL, N_("_Settings") }, { "HelpMenu", NULL, N_("_Help") }, { "NewGame", GAMES_STOCK_NEW_GAME, NULL, NULL, NULL, G_CALLBACK (gameNew) }, { "Pause", GAMES_STOCK_PAUSE_GAME, NULL, NULL, NULL, G_CALLBACK (gamePause) }, { "Resume", GAMES_STOCK_RESUME_GAME, NULL, NULL, NULL, G_CALLBACK (gamePause) }, { "Scores", GAMES_STOCK_SCORES, NULL, NULL, NULL, G_CALLBACK (gameTopTen) }, { "EndGame", GAMES_STOCK_END_GAME, NULL, NULL, NULL, G_CALLBACK (gameEnd) }, { "Quit", GTK_STOCK_QUIT, NULL, NULL, NULL, G_CALLBACK (gameQuit) }, { "Preferences", GTK_STOCK_PREFERENCES, NULL, NULL, NULL, G_CALLBACK (gameProperties) }, #ifdef WITH_GAMEPLAYDOC { "Contents", GAMES_STOCK_CONTENTS, NULL, NULL, NULL, G_CALLBACK (gameHelp) }, #endif { "About", GTK_STOCK_ABOUT, NULL, NULL, NULL, G_CALLBACK (gameAbout) } }; const char ui_description[] = "<ui>" " <menubar name='MainMenu'>" " <menu action='GameMenu'>" " <menuitem action='NewGame'/>" " <menuitem action='Pause'/>" " <menuitem action='Resume'/>" " <separator/>" " <menuitem action='Scores'/>" " <menuitem action='EndGame'/>" " <separator/>" " <menuitem action='Quit'/>" " </menu>" " <menu action='SettingsMenu'>" " <menuitem action='Preferences'/>" " </menu>" " <menu action='HelpMenu'>" #ifdef WITH_GAMEPLAYDOC " <menuitem action='Contents'/>" #endif " <menuitem action='About'/>" " </menu>" " </menubar>" "</ui>"; /* Locate our background image. */ outdir = g_build_filename (g_get_user_data_dir (), "gnometris", NULL); if (!g_file_test (outdir, G_FILE_TEST_EXISTS)) #ifdef _WIN32 mkdir (outdir); #else mkdir (outdir, 0700); #endif bgPixmap = g_build_filename (outdir, "background.bin", NULL); g_free (outdir); /* Use default background image, if none found in user's home dir.*/ if (!g_file_test (bgPixmap, G_FILE_TEST_EXISTS)) { dname = games_runtime_get_directory (GAMES_RUNTIME_GAME_PIXMAP_DIRECTORY); defaultPixmap = g_build_filename (dname, "gnometris.svg", NULL); default_bgimage = true; } w = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (w), _("Gnometris")); g_signal_connect (w, "delete_event", G_CALLBACK (gameQuit), this); gtk_drag_dest_set (w, GTK_DEST_DEFAULT_ALL, targets, G_N_ELEMENTS(targets), GDK_ACTION_MOVE); g_signal_connect (G_OBJECT (w), "drag_data_received", G_CALLBACK (dragDrop), this); g_signal_connect (G_OBJECT (w), "focus_out_event", G_CALLBACK (focusOut), this); line_fill_height = 0; line_fill_prob = 5; gtk_window_set_default_size (GTK_WINDOW (w), DEFAULT_WIDTH, DEFAULT_HEIGHT); games_conf_add_window (GTK_WINDOW (w), KEY_SAVED_GROUP); preview = new Preview (); field = new Field(); field->setUseTarget (false); initOptions (); /* prepare menus */ games_stock_init (); action_group = gtk_action_group_new ("MenuActions"); gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions (action_group, actions, G_N_ELEMENTS (actions), this); ui_manager = gtk_ui_manager_new (); gtk_ui_manager_insert_action_group (ui_manager, action_group, 0); gtk_ui_manager_add_ui_from_string (ui_manager, ui_description, -1, NULL); accel_group = gtk_ui_manager_get_accel_group (ui_manager); gtk_window_add_accel_group (GTK_WINDOW (w), accel_group); new_game_action = gtk_action_group_get_action (action_group, "NewGame"); pause_action = gtk_action_group_get_action (action_group, "Pause"); resume_action = gtk_action_group_get_action (action_group, "Resume"); scores_action = gtk_action_group_get_action (action_group, "Scores"); end_game_action = gtk_action_group_get_action (action_group, "EndGame"); preferences_action = gtk_action_group_get_action (action_group, "Preferences"); games_stock_set_pause_actions (pause_action, resume_action); menubar = gtk_ui_manager_get_widget (ui_manager, "/MainMenu"); GtkWidget * hb = gtk_hbox_new(FALSE, 0); vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (w), vbox); gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hb, TRUE, TRUE, 0); aspect_frame = gtk_aspect_frame_new (NULL, 0.5, 0.5, (float) COLUMNS / (float) LINES, FALSE); gtk_frame_set_shadow_type (GTK_FRAME (aspect_frame), GTK_SHADOW_NONE); gtk_container_add (GTK_CONTAINER (aspect_frame), field->getWidget()); gtk_widget_set_events(w, gtk_widget_get_events(w) | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); GtkWidget *vb1 = gtk_vbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(vb1), 10); gtk_box_pack_start(GTK_BOX(vb1), aspect_frame, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hb), vb1, TRUE, TRUE, 0); setupPixmap(); g_signal_connect (w, "key_press_event", G_CALLBACK (keyPressHandler), this); g_signal_connect (w, "key_release_event", G_CALLBACK (keyReleaseHandler), this); GtkWidget *vb2 = gtk_vbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(vb2), 10); gtk_box_pack_end(GTK_BOX(hb), vb2, 0, 0, 0); gtk_box_pack_start(GTK_BOX(vb2), preview->getWidget(), FALSE, FALSE, 0); scoreFrame = new ScoreFrame(cmdlineLevel); gtk_box_pack_end(GTK_BOX(vb2), scoreFrame->getWidget(), TRUE, FALSE, 0); high_scores = new HighScores (); setOptions (); themeList = NULL; gtk_widget_show(vbox); gtk_widget_show(hb); gtk_widget_show(vb1); gtk_widget_show(vb2); gtk_widget_show(aspect_frame); gtk_widget_show(field->getWidget()); gtk_widget_show(preview->getWidget()); scoreFrame->show(); gtk_widget_show(w); gtk_action_set_sensitive(pause_action, FALSE); gtk_action_set_sensitive(end_game_action, FALSE); gtk_action_set_sensitive(preferences_action, TRUE); confNotifyID = g_signal_connect (games_conf_get_default (), "value-changed", G_CALLBACK (confNotify), this); }