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); }
static void setup_window (void) { GtkWidget *vbox; GtkWidget *packing; GtkWidget *menubar; GtkUIManager *ui_manager; GtkAccelGroup *accel_group; ClutterColor stage_color = {0x00,0x00,0x00,0xff}; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); clutter_widget = gtk_clutter_embed_new (); stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (clutter_widget)); clutter_stage_set_color (CLUTTER_STAGE(stage), &stage_color); clutter_actor_set_size (CLUTTER_ACTOR (stage), properties->tilesize * BOARDWIDTH, properties->tilesize * BOARDHEIGHT); clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), FALSE); board = gnibbles_board_new (); gtk_window_set_title (GTK_WINDOW (window), _("Nibbles")); gtk_window_set_default_size (GTK_WINDOW (window), DEFAULT_WIDTH, DEFAULT_HEIGHT); games_conf_add_window (GTK_WINDOW (window), KEY_PREFERENCES_GROUP); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_cb), NULL); g_signal_connect (G_OBJECT (window), "window_state_event", G_CALLBACK (window_state_cb), NULL); gtk_widget_realize (window); vbox = gtk_vbox_new (FALSE, 0); games_stock_init (); ui_manager = gtk_ui_manager_new (); create_menus (ui_manager); set_fullscreen_actions (FALSE); notebook = gtk_notebook_new (); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE); accel_group = gtk_ui_manager_get_accel_group (ui_manager); gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); menubar = gtk_ui_manager_get_widget (ui_manager, "/MainMenu"); gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0); packing = games_grid_frame_new (BOARDWIDTH, BOARDHEIGHT); gtk_widget_show (packing); gtk_container_add (GTK_CONTAINER (packing), clutter_widget); #ifdef GGZ_CLIENT chat = create_chat_widget (); gtk_box_pack_start (GTK_BOX (vbox), chat, FALSE, TRUE, 0); #endif g_signal_connect (G_OBJECT (clutter_widget), "configure_event", G_CALLBACK (configure_event_cb), NULL); g_signal_connect (G_OBJECT (window), "focus_out_event", G_CALLBACK (show_cursor_cb), NULL); gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0); gtk_notebook_append_page (GTK_NOTEBOOK (notebook), packing, NULL); gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), MAIN_PAGE); statusbar = gtk_statusbar_new (); gtk_box_pack_start (GTK_BOX (vbox), statusbar, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show_all (window); #ifdef GGZ_CLIENT gtk_widget_hide (chat); #endif scoreboard = gnibbles_scoreboard_new (statusbar); }