diff options
author | Chris Lumens <clumens@redhat.com> | 2012-12-11 17:07:04 -0500 |
---|---|---|
committer | Chris Lumens <clumens@redhat.com> | 2012-12-12 10:14:50 -0500 |
commit | 801fe3e280e170c90f0c8f2bf4f7cfeea4d52160 (patch) | |
tree | 1a6aada1f4dc883d4bdac3156a34e89ab6f6011b | |
parent | 7c75486cb60b1c766b15b0ad8dc0708999e6baf2 (diff) | |
download | anaconda-801fe3e280e170c90f0c8f2bf4f7cfeea4d52160.tar.gz anaconda-801fe3e280e170c90f0c8f2bf4f7cfeea4d52160.tar.xz anaconda-801fe3e280e170c90f0c8f2bf4f7cfeea4d52160.zip |
Add a gradient background to spoke headers (mizmo, clumens).
The idea here is that by adding a gradient up top, the "Done" button looks
more like it belongs with the header than with the widgets down in the
spoke. It also subtly makes the spoke look like a subpart of the hub.
Adding this required adding an additional internal widget, which means also
changing all existing glade files to include this internal widget. Make sure
to build new glade support and install locally (or use the proper makefile
targets) before editing.
-rw-r--r-- | data/pixmaps/anaconda_spoke_header.png | bin | 0 -> 185 bytes | |||
-rw-r--r-- | pyanaconda/ui/gui/hubs/progress.glade | 14 | ||||
-rw-r--r-- | pyanaconda/ui/gui/hubs/summary.glade | 14 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/custom.glade | 28 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/datetime_spoke.glade | 20 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/keyboard.glade | 10 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/network.glade | 30 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/password.glade | 16 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/software.glade | 10 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/source.glade | 10 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/storage.glade | 10 | ||||
-rw-r--r-- | pyanaconda/ui/gui/spokes/welcome.glade | 44 | ||||
-rwxr-xr-x | scripts/makeupdates | 2 | ||||
-rw-r--r-- | widgets/glade/AnacondaWidgets.xml | 12 | ||||
-rw-r--r-- | widgets/src/BaseWindow.c | 26 | ||||
-rw-r--r-- | widgets/src/BaseWindow.h | 1 | ||||
-rw-r--r-- | widgets/src/SpokeWindow.c | 35 |
17 files changed, 199 insertions, 83 deletions
diff --git a/data/pixmaps/anaconda_spoke_header.png b/data/pixmaps/anaconda_spoke_header.png Binary files differnew file mode 100644 index 000000000..f1feefc06 --- /dev/null +++ b/data/pixmaps/anaconda_spoke_header.png diff --git a/pyanaconda/ui/gui/hubs/progress.glade b/pyanaconda/ui/gui/hubs/progress.glade index 37bd0bb39..11e29f550 100644 --- a/pyanaconda/ui/gui/hubs/progress.glade +++ b/pyanaconda/ui/gui/hubs/progress.glade @@ -11,11 +11,15 @@ <object class="GtkBox" id="AnacondaHubWindow-main_box1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaHubWindow-nav_area1"> - <property name="can_focus">False</property> - <child> - <placeholder/> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaHubWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaHubWindow-nav_area1"> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + </object> </child> </object> <packing> diff --git a/pyanaconda/ui/gui/hubs/summary.glade b/pyanaconda/ui/gui/hubs/summary.glade index 2fd406563..36b7aef34 100644 --- a/pyanaconda/ui/gui/hubs/summary.glade +++ b/pyanaconda/ui/gui/hubs/summary.glade @@ -13,11 +13,15 @@ <object class="GtkBox" id="AnacondaHubWindow-main_box1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaHubWindow-nav_area1"> - <property name="can_focus">False</property> - <child> - <placeholder/> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaHubWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaHubWindow-nav_area1"> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + </object> </child> </object> <packing> diff --git a/pyanaconda/ui/gui/spokes/custom.glade b/pyanaconda/ui/gui/spokes/custom.glade index 67f41e5e6..9bf53d5da 100644 --- a/pyanaconda/ui/gui/spokes/custom.glade +++ b/pyanaconda/ui/gui/spokes/custom.glade @@ -326,18 +326,22 @@ use. Try something else?</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> - <property name="margin_left">6</property> - <property name="margin_right">6</property> - <property name="margin_top">6</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> </child> <child internal-child="alignment"> <object class="GtkAlignment" id="AnacondaSpokeWindow-alignment1"> diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.glade b/pyanaconda/ui/gui/spokes/datetime_spoke.glade index ecff05120..d30264518 100644 --- a/pyanaconda/ui/gui/spokes/datetime_spoke.glade +++ b/pyanaconda/ui/gui/spokes/datetime_spoke.glade @@ -35,14 +35,18 @@ <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> - <property name="margin_left">6</property> - <property name="margin_right">6</property> - <property name="margin_top">6</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + </object> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/keyboard.glade b/pyanaconda/ui/gui/spokes/keyboard.glade index 9ca9aaf5e..6f63d8dbb 100644 --- a/pyanaconda/ui/gui/spokes/keyboard.glade +++ b/pyanaconda/ui/gui/spokes/keyboard.glade @@ -185,9 +185,13 @@ <object class="GtkBox" id="AnacondaSpokeWindow-main_box1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + </object> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/network.glade b/pyanaconda/ui/gui/spokes/network.glade index 27afea80a..5fc0613e1 100644 --- a/pyanaconda/ui/gui/spokes/network.glade +++ b/pyanaconda/ui/gui/spokes/network.glade @@ -41,14 +41,18 @@ <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area5"> - <property name="can_focus">False</property> - <property name="margin_left">6</property> - <property name="margin_right">6</property> - <property name="margin_top">6</property> - <child> - <placeholder/> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaStandaloneWindow-nav_box5"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area5"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + <child> + <placeholder/> + </child> + </object> </child> </object> <packing> @@ -109,9 +113,13 @@ updates available for you.</property> <object class="GtkBox" id="AnacondaSpokeWindow-main_box1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + </object> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/password.glade b/pyanaconda/ui/gui/spokes/password.glade index 31f07406b..043f0ada1 100644 --- a/pyanaconda/ui/gui/spokes/password.glade +++ b/pyanaconda/ui/gui/spokes/password.glade @@ -13,12 +13,16 @@ <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> - <property name="margin_left">6</property> - <property name="margin_right">6</property> - <property name="margin_top">6</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + </object> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/software.glade b/pyanaconda/ui/gui/spokes/software.glade index 4f049fb8b..676c14d77 100644 --- a/pyanaconda/ui/gui/spokes/software.glade +++ b/pyanaconda/ui/gui/spokes/software.glade @@ -37,9 +37,13 @@ <property name="hexpand">True</property> <property name="vexpand">True</property> <property name="orientation">vertical</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + </object> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/source.glade b/pyanaconda/ui/gui/spokes/source.glade index f80f2f8a5..07fc23d5c 100644 --- a/pyanaconda/ui/gui/spokes/source.glade +++ b/pyanaconda/ui/gui/spokes/source.glade @@ -830,9 +830,13 @@ TeXlive 2012 repository</col> <object class="GtkBox" id="AnacondaSpokeWindow-main_box1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + </object> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/storage.glade b/pyanaconda/ui/gui/spokes/storage.glade index 68461f76c..8d7c47081 100644 --- a/pyanaconda/ui/gui/spokes/storage.glade +++ b/pyanaconda/ui/gui/spokes/storage.glade @@ -851,9 +851,13 @@ <property name="vexpand">True</property> <property name="orientation">vertical</property> <property name="spacing">6</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + </object> + </child> </object> <packing> <property name="expand">False</property> diff --git a/pyanaconda/ui/gui/spokes/welcome.glade b/pyanaconda/ui/gui/spokes/welcome.glade index 3a3135b2e..a10c136d2 100644 --- a/pyanaconda/ui/gui/spokes/welcome.glade +++ b/pyanaconda/ui/gui/spokes/welcome.glade @@ -136,12 +136,16 @@ <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">6</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> - <property name="can_focus">False</property> - <property name="margin_left">6</property> - <property name="margin_right">6</property> - <property name="margin_top">6</property> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaSpokeWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaSpokeWindow-nav_area1"> + <property name="can_focus">False</property> + <property name="margin_left">6</property> + <property name="margin_right">6</property> + <property name="margin_top">6</property> + </object> + </child> </object> <packing> <property name="expand">False</property> @@ -205,18 +209,22 @@ <object class="GtkBox" id="AnacondaStandaloneWindow-main_box1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> - <child internal-child="nav_area"> - <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area1"> - <property name="can_focus">False</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> + <child internal-child="nav_box"> + <object class="GtkEventBox" id="AnacondaStandaloneWindow-nav_box1"> + <child internal-child="nav_area"> + <object class="GtkGrid" id="AnacondaStandaloneWindow-nav_area1"> + <property name="can_focus">False</property> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> </child> <child internal-child="alignment"> <object class="GtkAlignment" id="AnacondaStandaloneWindow-alignment1"> diff --git a/scripts/makeupdates b/scripts/makeupdates index 1c482a4f0..c69cd0a22 100755 --- a/scripts/makeupdates +++ b/scripts/makeupdates @@ -165,6 +165,8 @@ def copyUpdatedFiles(tag, updates, cwd): install_to_dir(file, "usr/sbin") elif file == "data/70-anaconda.rules": install_to_dir(file, "lib/udev/rules.d") + elif file.startswith("data/pixmaps"): + install_to_dir(file, "usr/share/anaconda/pixmaps") elif file.startswith("data/ui/"): install_to_dir(file, "usr/share/anaconda/ui") elif file.startswith("data/post-scripts/"): diff --git a/widgets/glade/AnacondaWidgets.xml b/widgets/glade/AnacondaWidgets.xml index e0074cfba..1ede27520 100644 --- a/widgets/glade/AnacondaWidgets.xml +++ b/widgets/glade/AnacondaWidgets.xml @@ -38,7 +38,9 @@ <internal-children> <object name="main_box"> - <object name="nav_area" /> + <object name="nav_box"> + <object name="nav_area" /> + </object> <object name="alignment"> <object name="action_area" /> </object> @@ -58,7 +60,9 @@ <internal-children> <object name="main_box"> - <object name="nav_area" /> + <object name="nav_box"> + <object name="nav_area" /> + </object> <object name="alignment"> <object name="action_area"> <object name="scrolled_window" /> @@ -80,7 +84,9 @@ <internal-children> <object name="main_box"> - <object name="nav_area" /> + <object name="nav_box"> + <object name="nav_area" /> + </object> <object name="alignment"> <object name="action_area" /> </object> diff --git a/widgets/src/BaseWindow.c b/widgets/src/BaseWindow.c index 510572249..23b9998e1 100644 --- a/widgets/src/BaseWindow.c +++ b/widgets/src/BaseWindow.c @@ -90,7 +90,7 @@ struct _AnacondaBaseWindowPrivate { gboolean is_beta, info_shown; GtkWidget *main_box, *event_box, *info_bar; GtkWidget *alignment; - GtkWidget *nav_area, *action_area; + GtkWidget *nav_box, *nav_area, *action_area; GtkWidget *name_label, *distro_label, *beta_label; /* Untranslated versions of various things. */ @@ -209,13 +209,19 @@ static void anaconda_base_window_init(AnacondaBaseWindow *win) { /* Then the navigation area that sits as the first item in the main box * for every Window class. */ + + win->priv->nav_box = gtk_event_box_new(); + gtk_widget_set_app_paintable(win->priv->nav_box, TRUE); + gtk_box_pack_start(GTK_BOX(win->priv->main_box), win->priv->nav_box, FALSE, FALSE, 0); + win->priv->nav_area = gtk_grid_new(); gtk_grid_set_row_homogeneous(GTK_GRID(win->priv->nav_area), FALSE); gtk_grid_set_column_homogeneous(GTK_GRID(win->priv->nav_area), FALSE); gtk_widget_set_margin_left(win->priv->nav_area, 6); gtk_widget_set_margin_right(win->priv->nav_area, 6); gtk_widget_set_margin_top(win->priv->nav_area, 6); - gtk_box_pack_start(GTK_BOX(win->priv->main_box), win->priv->nav_area, FALSE, FALSE, 0); + + gtk_container_add(GTK_CONTAINER(win->priv->nav_box), win->priv->nav_area); /* Second in the main box is an alignment, because we want to be able * to control the amount of space the Window's content takes up on the @@ -375,6 +381,20 @@ GtkWidget *anaconda_base_window_get_nav_area(AnacondaBaseWindow *win) { } /** + * anaconda_base_window_get_nav_area_background_window: + * @win: a #AnacondaBaseWindow + * + * Returns the event box that houses background window of the navigation area of @win. + * + * Returns: (transfer none): The event box + * + * Since: 1.0 + */ +GtkWidget *anaconda_base_window_get_nav_area_background_window(AnacondaBaseWindow *win) { + return win->priv->nav_box; +} + +/** * anaconda_base_window_get_main_box: * @win: a #AnacondaBaseWindow * @@ -576,6 +596,8 @@ anaconda_base_window_buildable_get_internal_child (GtkBuildable *buildable, return G_OBJECT(anaconda_base_window_get_main_box(ANACONDA_BASE_WINDOW(buildable))); else if (!strcmp(childname, "nav_area")) return G_OBJECT(ANACONDA_BASE_WINDOW(buildable)->priv->nav_area); + else if (!strcmp(childname, "nav_box")) + return G_OBJECT(ANACONDA_BASE_WINDOW(buildable)->priv->nav_box); else if (!strcmp(childname, "alignment")) return G_OBJECT(ANACONDA_BASE_WINDOW(buildable)->priv->alignment); else if (!strcmp(childname, "action_area")) diff --git a/widgets/src/BaseWindow.h b/widgets/src/BaseWindow.h index ef9c21068..6c08ee8c4 100644 --- a/widgets/src/BaseWindow.h +++ b/widgets/src/BaseWindow.h @@ -80,6 +80,7 @@ GtkWidget *anaconda_base_window_get_action_area (AnacondaBaseWindow *win); GtkWidget *anaconda_base_window_get_alignment (AnacondaBaseWindow *win); GtkWidget *anaconda_base_window_get_main_box (AnacondaBaseWindow *win); GtkWidget *anaconda_base_window_get_nav_area (AnacondaBaseWindow *win); +GtkWidget *anaconda_base_window_get_nav_area_background_window (AnacondaBaseWindow *win); G_END_DECLS diff --git a/widgets/src/SpokeWindow.c b/widgets/src/SpokeWindow.c index bafc5ab1f..16ce3f87a 100644 --- a/widgets/src/SpokeWindow.c +++ b/widgets/src/SpokeWindow.c @@ -124,12 +124,45 @@ GtkWidget *anaconda_spoke_window_new() { } static void anaconda_spoke_window_init(AnacondaSpokeWindow *win) { - GtkWidget *nav_area; + GError *error; + GtkWidget *nav_area, *nav_box; + GdkPixbuf *pixbuf; + cairo_pattern_t *pattern; + cairo_surface_t *surface; + cairo_t *cr; win->priv = G_TYPE_INSTANCE_GET_PRIVATE(win, ANACONDA_TYPE_SPOKE_WINDOW, AnacondaSpokeWindowPrivate); + /* Set the background gradient in the header. If we fail to load the + * background for any reason, just print an error message and display the + * header without an image. + */ + error = NULL; + pixbuf = gdk_pixbuf_new_from_file("/usr/share/anaconda/pixmaps/anaconda_spoke_header.png", &error); + if (!pixbuf) { + fprintf(stderr, "could not load header background: %s\n", error->message); + g_error_free(error); + } else { + nav_box = anaconda_base_window_get_nav_area_background_window(ANACONDA_BASE_WINDOW(win)); + gtk_widget_set_size_request(nav_box, -1, gdk_pixbuf_get_height (pixbuf)); + gtk_widget_realize(nav_box); + + surface = gdk_window_create_similar_surface(gtk_widget_get_window(nav_box), CAIRO_CONTENT_COLOR_ALPHA, + gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf)); + cr = cairo_create(surface); + + gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); + cairo_paint(cr); + cairo_destroy(cr); + pattern = cairo_pattern_create_for_surface(surface); + cairo_surface_destroy(surface); + + cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT); + gdk_window_set_background_pattern(gtk_widget_get_window(nav_box), pattern); + } + /* Set some default properties. */ gtk_window_set_modal(GTK_WINDOW(win), TRUE); |