[four-in-a-row] Use GtkBuilder.
- From: Michael Catanzaro <mcatanzaro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [four-in-a-row] Use GtkBuilder.
- Date: Mon, 15 Sep 2014 23:23:41 +0000 (UTC)
commit 992dc39a9c8cf99438bfa69b1c68ad6995e41410
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date: Wed Aug 20 02:09:52 2014 +0200
Use GtkBuilder.
https://bugzilla.gnome.org/show_bug.cgi?id=735073
data/Makefile.am | 8 ++-
data/four-in-a-row.ui | 126 +++++++++++++++++++++++++++++++++++++++++++++++++
po/POTFILES.in | 1 +
src/main.c | 77 +++++++++---------------------
4 files changed, 156 insertions(+), 56 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index dab9951..7176972 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -3,6 +3,9 @@ SUBDIRS = icons
gsettings_SCHEMAS = org.gnome.four-in-a-row.gschema.xml
@GSETTINGS_RULES@
+uidir = $(datadir)/four-in-a-row
+ui_DATA = four-in-a-row.ui
+
pixmapdir = $(datadir)/four-in-a-row
pixmap_DATA = \
tileset_50x50_hcontrast.svg \
@@ -31,9 +34,10 @@ appdata_DATA = $(appdata_in_files:.xml.in=.xml)
man_MANS = four-in-a-row.6
-EXTRA_DIST = $(pixmap_DATA) \
+EXTRA_DIST = $(ui_DATA) \
+ $(pixmap_DATA) \
$(sounds_DATA) \
- $(appdata_in_files) \
+ $(appdata_in_files) \
$(desktop_in_files) \
$(gsettings_SCHEMAS) \
$(man_MANS)
diff --git a/data/four-in-a-row.ui b/data/four-in-a-row.ui
new file mode 100644
index 0000000..4753453
--- /dev/null
+++ b/data/four-in-a-row.ui
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.12 -->
+ <requires lib="gtk+" version="3.12"/>
+ <object class="GtkApplicationWindow" id="fiar-window">
+ <property name="title" translatable="yes">Four-in-a-row</property>
+ <property name="border-width">25</property>
+ <child type="titlebar">
+ <object class="GtkHeaderBar" id="headerbar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_close_button">True</property>
+ <property name="title" translatable="yes">Four-in-a-row</property>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="valign">center</property>
+ <property name="tooltip-text" translatable="yes">Undo your most recent move</property>
+ <property name="can_focus">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="action-name">app.undo-move</property>
+ <style>
+ <class name="image-button"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="icon_name">edit-undo-symbolic</property>
+ <property name="visible">True</property>
+ <property name="icon_size">1</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkAspectFrame">
+ <property name="visible">True</property>
+ <property name="shadow-type">GTK_SHADOW_NONE</property>
+ <property name="obey-child">false</property>
+ <property name="ratio">1.4</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="orientation">horizontal</property>
+ <property name="spacing">25</property>
+ <child>
+ <object class="GtkAspectFrame" id="frame">
+ <property name="visible">True</property>
+ <property name="shadow-type">GTK_SHADOW_NONE</property>
+ <property name="obey-child">false</property>
+ <property name="ratio">1</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="padding">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButtonBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <property name="valign">end</property>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Hint</property>
+ <property name="halign">fill</property>
+ <property name="valign">center</property>
+ <property name="action-name">app.hint</property>
+ <property name="tooltip-text" translatable="yes">Receive a hint for your next
move</property>
+ <property name="width-request">120</property>
+ <property name="height-request">60</property>
+ </object>
+ <packing>
+ <property name="pack-type">start</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton">
+ <property name="visible">True</property>
+ <property name="use_underline">True</property>
+ <property name="label" translatable="yes">_Start Over</property>
+ <property name="halign">fill</property>
+ <property name="valign">center</property>
+ <property name="action-name">app.new-game</property>
+ <property name="tooltip-text" translatable="yes">Start a new game</property>
+ <property name="width-request">120</property>
+ <property name="height-request">60</property>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="pack-type">end</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="padding">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 5c68103..8024722 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -3,6 +3,7 @@
[encoding: UTF-8]
data/four-in-a-row.appdata.xml.in
data/four-in-a-row.desktop.in
+[type: gettext/glade]data/four-in-a-row.ui
data/org.gnome.four-in-a-row.gschema.xml
src/games-controls.c
src/gfx.c
diff --git a/src/main.c b/src/main.c
index b89608c..275654c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1161,33 +1161,30 @@ static gboolean
create_app (void)
{
GtkWidget *frame;
- GtkWidget *hbox, *vbox;
- GtkWidget *image;
- GtkWidget *new_game_button;
- GtkWidget *undo_button;
- GtkWidget *hint_button;
GMenu *app_menu, *section;
- window = gtk_application_window_new (application);
- gtk_window_set_application (GTK_WINDOW (window), application);
- gtk_window_set_title (GTK_WINDOW (window), _(APPNAME_LONG));
- gtk_container_set_border_width (GTK_CONTAINER (window), 25);
- gtk_window_set_default_size (GTK_WINDOW (window), DEFAULT_WIDTH, DEFAULT_HEIGHT);
+ GtkBuilder *builder = NULL;
+ GtkCssProvider *css_provider = NULL;
+ GError *error = NULL;
+
gtk_window_set_default_icon_name ("four-in-a-row");
- headerbar = gtk_header_bar_new ();
- gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), _("Four-in-a-row"));
- gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbar), TRUE);
- gtk_widget_show (headerbar);
- gtk_window_set_titlebar (GTK_WINDOW (window), headerbar);
+ css_provider = gtk_css_provider_get_default ();
+ gtk_css_provider_load_from_data (css_provider, "GtkButtonBox{-GtkButtonBox-child-internal-pad-x:0;}\0",
-1, &error);
+ if (G_UNLIKELY (error != NULL)) {
+ fprintf (stderr, "Could not load UI: %s\n", error->message);
+ g_clear_error (&error);
+ return;
+ }
+ gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), css_provider,
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+ builder = gtk_builder_new_from_file (DATA_DIRECTORY "/four-in-a-row.ui");
+
+ window = gtk_builder_get_object (builder, "fiar-window");
+ gtk_window_set_application (GTK_WINDOW (window), application);
+ gtk_window_set_default_size (GTK_WINDOW (window), DEFAULT_WIDTH, DEFAULT_HEIGHT); // TODO save size &
state
- undo_button = gtk_button_new_from_icon_name ("edit-undo-symbolic", GTK_ICON_SIZE_BUTTON);
- gtk_widget_set_valign (undo_button, GTK_ALIGN_CENTER);
- gtk_widget_set_halign (undo_button, GTK_ALIGN_CENTER);
- gtk_actionable_set_action_name (GTK_ACTIONABLE (undo_button), "app.undo-move");
- gtk_widget_set_tooltip_text (undo_button, _("Undo your most recent move"));
- gtk_widget_show (undo_button);
- gtk_header_bar_pack_start (GTK_HEADER_BAR (headerbar), undo_button);
+ headerbar = gtk_builder_get_object (builder, "headerbar");
g_action_map_add_action_entries (G_ACTION_MAP (application), app_entries, G_N_ELEMENTS (app_entries),
application);
gtk_application_add_accelerator (application, "<Primary>n", "app.new-game", NULL);
@@ -1214,17 +1211,14 @@ create_app (void)
gtk_application_set_app_menu (GTK_APPLICATION (application), G_MENU_MODEL (app_menu));
- frame = gtk_aspect_frame_new (NULL, 0.5, 0.5, 1.45, FALSE);
- gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE);
- gtk_container_add (GTK_CONTAINER (window), frame);
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 25);
- gtk_container_add (GTK_CONTAINER (frame), hbox);
+ frame = gtk_builder_get_object (builder, "frame");
drawarea = gtk_drawing_area_new ();
/* set a min size to avoid pathological behavior of gtk when scaling down */
gtk_widget_set_size_request (drawarea, 350, 350);
- gtk_box_pack_start (GTK_BOX (hbox), drawarea, TRUE, TRUE, 0);
+ gtk_widget_set_halign (drawarea, GTK_ALIGN_FILL);
+ gtk_widget_set_valign (drawarea, GTK_ALIGN_FILL);
+ gtk_container_add (GTK_CONTAINER (frame), drawarea);
gtk_widget_set_events (drawarea, GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK);
g_signal_connect (G_OBJECT (drawarea), "configure_event",
@@ -1239,31 +1233,6 @@ create_app (void)
/* We do our own double-buffering. */
gtk_widget_set_double_buffered (GTK_WIDGET (drawarea), FALSE);
- vbox = gtk_button_box_new (GTK_ORIENTATION_VERTICAL);
- gtk_box_set_spacing (GTK_BOX (vbox), 6);
- gtk_widget_set_valign (vbox, GTK_ALIGN_END);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, TRUE, 0);
-
- hint_button = gtk_button_new ();
- gtk_button_set_label (GTK_BUTTON (hint_button), _("_Hint"));
- gtk_button_set_use_underline (GTK_BUTTON (hint_button), TRUE);
- gtk_widget_set_valign (hint_button, GTK_ALIGN_CENTER);
- gtk_widget_set_halign (hint_button, GTK_ALIGN_FILL);
- gtk_widget_set_size_request (hint_button, 120, 60);
- gtk_actionable_set_action_name (GTK_ACTIONABLE (hint_button), "app.hint");
- gtk_widget_set_tooltip_text (hint_button, _("Receive a hint for your next move"));
- gtk_box_pack_end (GTK_BOX (vbox), hint_button, FALSE, FALSE, 0);
-
- new_game_button = gtk_button_new ();
- gtk_button_set_label (GTK_BUTTON (new_game_button), _("_Start Over"));
- gtk_button_set_use_underline (GTK_BUTTON (new_game_button), TRUE);
- gtk_widget_set_valign (new_game_button, GTK_ALIGN_CENTER);
- gtk_widget_set_halign (new_game_button, GTK_ALIGN_FILL);
- gtk_widget_set_size_request (new_game_button, 120, 60);
- gtk_actionable_set_action_name (GTK_ACTIONABLE (new_game_button), "app.new-game");
- gtk_widget_set_tooltip_text (new_game_button, _("Start a new game"));
- gtk_box_pack_end (GTK_BOX (vbox), new_game_button, FALSE, FALSE, 0);
-
g_simple_action_set_enabled (G_SIMPLE_ACTION (hint_action), FALSE);
g_simple_action_set_enabled (G_SIMPLE_ACTION (undo_action), FALSE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]