[epiphany/gtk-style-context: 2/2] Port to gtk+ master's GtkStyleContext



commit 69c217a857bbe89ea71d51ca09c288e1a1b93e93
Author: Matthias Clasen <mclasen redhat com>
Date:   Tue Nov 16 00:27:37 2010 -0500

    Port to gtk+ master's GtkStyleContext
    
    Updates all our uses of GtkStyle stuff to the newer GtkStyleContext API.
    ephy-web-view porting done by Matthias Clasen <mclasen redhat com>
    
    Bug #636501

 embed/ephy-web-view.c                |   37 ++++++------
 lib/widgets/ephy-location-entry.c    |  106 ++++++++++++++++------------------
 src/bookmarks/ephy-bookmark-action.c |    3 +-
 src/ephy-find-toolbar.c              |    4 +-
 src/ephy-notebook.c                  |   27 +++++----
 5 files changed, 89 insertions(+), 88 deletions(-)
---
diff --git a/embed/ephy-web-view.c b/embed/ephy-web-view.c
index 44ac2b8..67b6577 100644
--- a/embed/ephy-web-view.c
+++ b/embed/ephy-web-view.c
@@ -1162,7 +1162,7 @@ _ephy_web_view_draw_statusbar (GtkWidget *widget, cairo_t *cr)
   guint border_width, statusbar_border_width;
   PangoLayout *layout;
   GtkAllocation allocation;
-  GtkStyle *style;
+  GtkStyleContext *context;
   EphyWebViewPrivate *priv;
 
   priv = EPHY_WEB_VIEW (widget)->priv;
@@ -1177,8 +1177,6 @@ _ephy_web_view_draw_statusbar (GtkWidget *widget, cairo_t *cr)
 
   border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
 
-  style = gtk_widget_get_style (widget);
-
   statusbar_border_width = 4; /* FIXME: what should we use here? */
 
   priv->text_rectangle.x = border_width;
@@ -1186,20 +1184,25 @@ _ephy_web_view_draw_statusbar (GtkWidget *widget, cairo_t *cr)
   priv->text_rectangle.width = width + (statusbar_border_width * 2);
   priv->text_rectangle.height = height + (statusbar_border_width * 2);
 
-  gtk_paint_box (style, cr,
-                 GTK_STATE_NORMAL, GTK_SHADOW_IN,
-                 widget, NULL,
-                 priv->text_rectangle.x,
-                 priv->text_rectangle.y,
-                 priv->text_rectangle.width,
-                 priv->text_rectangle.height);
-
-  gtk_paint_layout (style, cr,
-                    GTK_STATE_NORMAL, FALSE,
-                    widget, NULL,
-                    priv->text_rectangle.x + statusbar_border_width,
-                    priv->text_rectangle.y + statusbar_border_width,
-                    layout);
+  context = gtk_widget_get_style_context (widget);
+  gtk_style_context_save (context);
+  gtk_style_context_set_state (context, GTK_STATE_FLAG_ACTIVE);
+  gtk_render_background (context, cr,
+                         priv->text_rectangle.x,
+                         priv->text_rectangle.y,
+                         priv->text_rectangle.width,
+                         priv->text_rectangle.height);
+  gtk_render_frame (context, cr,
+                    priv->text_rectangle.x,
+                    priv->text_rectangle.y,
+                    priv->text_rectangle.width,
+                    priv->text_rectangle.height);
+  gtk_style_context_restore (context);
+
+  gtk_render_layout (context, cr,
+                     priv->text_rectangle.x + statusbar_border_width,
+                     priv->text_rectangle.y + statusbar_border_width,
+                     layout);
 
   g_object_unref (layout);
 }
diff --git a/lib/widgets/ephy-location-entry.c b/lib/widgets/ephy-location-entry.c
index 9df8fcf..38df08f 100644
--- a/lib/widgets/ephy-location-entry.c
+++ b/lib/widgets/ephy-location-entry.c
@@ -54,8 +54,8 @@ struct _EphyLocationEntryPrivate
 	GtkWidget *entry;
 	char *lock_stock_id;
 	GdkPixbuf *favicon;
-	GdkColor secure_bg_colour;
-	GdkColor secure_fg_colour;
+	GdkRGBA secure_bg_color;
+	GdkRGBA secure_fg_color;
 
 	GSList *search_terms;
 
@@ -77,7 +77,7 @@ struct _EphyLocationEntryPrivate
 	guint block_update : 1;
 	guint original_address : 1;
 	guint secure : 1;
-	guint apply_colours : 1;
+	guint apply_colors : 1;
 	guint needs_reset : 1;
 	guint show_lock : 1;
 };
@@ -89,8 +89,8 @@ static const GtkTargetEntry url_drag_types [] =
 	{ EPHY_DND_TEXT_TYPE,       0, 2 }
 };
 
-static const GdkColor fallback_bg_colour = { 0, 0xf7f7, 0xf7f7, 0xbebe }; /* yellow-ish */
-static const GdkColor fallback_fg_colour = { 0, 0, 0, 0 }; /* black */
+static const GdkRGBA fallback_bg_color = { 0, 0xf7f7, 0xf7f7, 0xbebe }; /* yellow-ish */
+static const GdkRGBA fallback_fg_color = { 0, 0, 0, 0 }; /* black */
 
 static void ephy_location_entry_class_init (EphyLocationEntryClass *klass);
 static void ephy_location_entry_init (EphyLocationEntry *le);
@@ -120,57 +120,48 @@ static gint signals[LAST_SIGNAL] = { 0 };
 G_DEFINE_TYPE (EphyLocationEntry, ephy_location_entry, GTK_TYPE_TOOL_ITEM)
 
 static void
-ephy_location_entry_style_set (GtkWidget *widget,
-			       GtkStyle *previous_style)
+ephy_location_entry_style_updated (GtkWidget *widget)
 {
 	EphyLocationEntry *entry = EPHY_LOCATION_ENTRY (widget);
 	EphyLocationEntryPrivate *priv = entry->priv;
 	GtkSettings *settings;
-	GdkColor *bg_colour = NULL, *fg_colour = NULL;
-	GdkColor title_fg_colour;
+
+	GtkStyleContext *style;
+	GdkRGBA *bg_color = NULL;
+	GdkRGBA *fg_color = NULL;
+
 	char *theme;
 	gboolean is_a11y_theme;
 
-	if (GTK_WIDGET_CLASS (ephy_location_entry_parent_class)->style_set)
+	if (GTK_WIDGET_CLASS (ephy_location_entry_parent_class)->style_updated)
 	{
-		GTK_WIDGET_CLASS (ephy_location_entry_parent_class)->style_set (widget, previous_style);
+		GTK_WIDGET_CLASS (ephy_location_entry_parent_class)->style_updated (widget);
 	}
 
-	title_fg_colour = gtk_widget_get_style (widget)->text[GTK_STATE_INSENSITIVE];
-
 	settings = gtk_settings_get_for_screen (gtk_widget_get_screen (widget));
 	g_object_get (settings, "gtk-theme-name", &theme, NULL);
 	is_a11y_theme = strstr (theme, "HighContrast") != NULL ||
 			strstr (theme, "LowContrast") != NULL;
 	g_free (theme);
 
-	gtk_widget_style_get (widget,
-			      "secure-fg-color", &fg_colour,
-			      "secure-bg-color", &bg_colour,
-			      NULL);
+	style = gtk_widget_get_style_context (widget);
+	gtk_style_context_get_style (style,
+				     "secure-fg-color", &fg_color,
+				     "secure-bg-color", &bg_color,
+				     NULL);
 
-	/* We only use the fallback colours when we don't have an a11y theme */
-	priv->apply_colours = !is_a11y_theme || (fg_colour != NULL && bg_colour != NULL);
+	/* We only use the fallback colors when we don't have an a11y theme */
+	priv->apply_colors = !is_a11y_theme || (fg_color != NULL && bg_color != NULL);
 
-	if (fg_colour != NULL)
-	{
-		priv->secure_fg_colour = *fg_colour;
-		gdk_color_free (fg_colour);
-	}
+	if (fg_color != NULL)
+		priv->secure_fg_color = *fg_color;
 	else
-	{
-		priv->secure_fg_colour = fallback_fg_colour;
-	}
+		priv->secure_fg_color = fallback_fg_color;
 
-	if (bg_colour != NULL)
-	{
-		priv->secure_bg_colour = *bg_colour;
-		gdk_color_free (bg_colour);
-	}
+	if (bg_color != NULL)
+		priv->secure_bg_color = *bg_color;
 	else
-	{
-		priv->secure_bg_colour = fallback_bg_colour;
-	}
+		priv->secure_bg_color = fallback_bg_color;
 
 	/* Apply the new style */
 	ephy_location_entry_set_secure (entry, priv->secure);
@@ -218,7 +209,7 @@ ephy_location_entry_class_init (EphyLocationEntryClass *klass)
 
 	object_class->finalize = ephy_location_entry_finalize;
 
-	widget_class->style_set = ephy_location_entry_style_set;
+	widget_class->style_updated = ephy_location_entry_style_updated;
 
        /**
 	* EphyLocationEntry::user-changed:
@@ -299,14 +290,14 @@ ephy_location_entry_class_init (EphyLocationEntryClass *klass)
 						 g_param_spec_boxed ("secure-bg-color",
 								     "Secure background colour",
 								     "Background colour to use for secure sites",
-								     GDK_TYPE_COLOR,
+								     GDK_TYPE_RGBA,
 								     G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
 
 	gtk_widget_class_install_style_property (widget_class,
 						 g_param_spec_boxed ("secure-fg-color",
 								     "Secure foreground Colour",
 								     "Foreground colour to use for secure sites",
-								     GDK_TYPE_COLOR,
+								     GDK_TYPE_RGBA,
 								     G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
 
 	g_type_class_add_private (object_class, sizeof (EphyLocationEntryPrivate));
@@ -745,7 +736,7 @@ favicon_create_drag_surface (EphyLocationEntry *entry,
 	EphyLocationEntryPrivate *priv = entry->priv;
 	char *title = NULL, *address = NULL;
 	GString *text;
-	GtkStyle *style;
+	GtkStyleContext *style;
 	cairo_surface_t *surface;
 	PangoContext *context;
 	PangoLayout  *layout;
@@ -755,9 +746,10 @@ favicon_create_drag_surface (EphyLocationEntry *entry,
 	int icon_width = 0, icon_height = 0, favicon_offset_x = 0;
 	int char_width;
 	cairo_t *cr;
-	GtkStateType state;
+	GtkStateFlags state;
+	GdkRGBA color;
 
-	state = gtk_widget_get_state (widget);
+	state = gtk_widget_get_state_flags (widget);
 
 	g_signal_emit (entry, signals[GET_LOCATION], 0, &address);
 	g_signal_emit (entry, signals[GET_TITLE], 0, &title);
@@ -787,9 +779,9 @@ favicon_create_drag_surface (EphyLocationEntry *entry,
 	context = gtk_widget_get_pango_context (widget);
 	layout = pango_layout_new (context);
 
-	style = gtk_widget_get_style (widget);
+	style = gtk_widget_get_style_context (priv->entry);
 	metrics = pango_context_get_metrics (context,
-					     style->font_desc,
+		                             gtk_style_context_get_font (style, GTK_STATE_FLAG_ACTIVE),
 					     pango_context_get_language (context));
 
 	char_width = pango_font_metrics_get_approximate_digit_width (metrics);
@@ -823,7 +815,8 @@ favicon_create_drag_surface (EphyLocationEntry *entry,
 	cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
 	cairo_stroke_preserve (cr);
 
-	gdk_cairo_set_source_color (cr, &style->bg[state]);
+	gtk_style_context_get_background_color (style, state, &color);
+	gdk_cairo_set_source_rgba (cr, &color);
 	cairo_fill (cr);
 
 	if (priv->favicon != NULL)
@@ -841,7 +834,8 @@ favicon_create_drag_surface (EphyLocationEntry *entry,
 	cairo_move_to (cr,
 		       1 + DRAG_ICON_LAYOUT_PADDING + favicon_offset_x,
 		       1 + DRAG_ICON_LAYOUT_PADDING);
-	gdk_cairo_set_source_color (cr, &style->text[state]);
+	gtk_style_context_get_color (style, state, &color);
+	gdk_cairo_set_source_rgba (cr, &color);
 	pango_cairo_show_layout (cr, layout);
 
 	cairo_destroy (cr);
@@ -1061,8 +1055,8 @@ textcell_data_func (GtkCellLayout *cell_layout,
 	char *title;
 	char *url;
 
-	GtkStyle *style;
-	GdkColor color;
+	GtkStyleContext *style;
+	GdkRGBA color;
 
 	GValue text = { 0, };
 
@@ -1078,8 +1072,9 @@ textcell_data_func (GtkCellLayout *cell_layout,
 	{
 		ctext = g_strdup_printf ("%s\n%s", title, url);
 
-		style = gtk_widget_get_style (priv->entry);
-		color = style->text[GTK_STATE_INSENSITIVE];
+		style = gtk_widget_get_style_context (priv->entry);
+		gtk_style_context_get_color (style, GTK_STATE_FLAG_INSENSITIVE,
+					     &color);
 
 		att = pango_attr_foreground_new
 			(color.red, color.green, color.blue);
@@ -1564,18 +1559,17 @@ ephy_location_entry_set_secure (EphyLocationEntry *entry,
 
 	priv->secure = secure;
 
-	/* We have to set the colour of the GtkEntry in the EphyIconEntry */
-	if (priv->secure && priv->apply_colours)
+	/* We have to set the color of the GtkEntry in the EphyIconEntry */
+	if (priv->secure && priv->apply_colors)
 	{
-		gtk_widget_modify_text (gentry, GTK_STATE_NORMAL, &priv->secure_fg_colour);
-		gtk_widget_modify_base (gentry, GTK_STATE_NORMAL, &priv->secure_bg_colour);
+		gtk_widget_override_color (gentry, GTK_STATE_FLAG_ACTIVE, &priv->secure_fg_color);
+		gtk_widget_override_background_color (gentry, GTK_STATE_FLAG_ACTIVE, &priv->secure_bg_color);
 	}
 	else
 	{
-		gtk_widget_modify_text (gentry, GTK_STATE_NORMAL, NULL);
-		gtk_widget_modify_base (gentry, GTK_STATE_NORMAL, NULL);
+		gtk_widget_override_color (gentry, GTK_STATE_FLAG_ACTIVE, NULL);
+		gtk_widget_override_background_color (gentry, GTK_STATE_FLAG_ACTIVE, NULL);
 	}
-
 	gtk_widget_queue_draw (widget);
 }
 
diff --git a/src/bookmarks/ephy-bookmark-action.c b/src/bookmarks/ephy-bookmark-action.c
index f6a432f..ebe9ac3 100644
--- a/src/bookmarks/ephy-bookmark-action.c
+++ b/src/bookmarks/ephy-bookmark-action.c
@@ -269,8 +269,7 @@ ephy_bookmark_action_sync_icon (GtkAction *action,
 
 		if (pixbuf == NULL && icon_location == NULL)
 		{
-			pixbuf = gtk_widget_render_icon (proxy, EPHY_STOCK_BOOKMARK,
-							 GTK_ICON_SIZE_MENU, NULL);
+			pixbuf = gtk_widget_render_icon_pixbuf (proxy, EPHY_STOCK_BOOKMARK, GTK_ICON_SIZE_MENU);
 		}
 
 		gtk_image_set_from_pixbuf (icon, pixbuf);
diff --git a/src/ephy-find-toolbar.c b/src/ephy-find-toolbar.c
index a3ebd9c..14c6c9d 100644
--- a/src/ephy-find-toolbar.c
+++ b/src/ephy-find-toolbar.c
@@ -127,7 +127,7 @@ set_status_notfound_cb (EphyFindToolbar *toolbar)
 	priv = toolbar->priv;
 
 	pango_desc = pango_font_description_new ();
-	gtk_widget_modify_font (priv->status_label, pango_desc);
+	gtk_widget_override_font (priv->status_label, pango_desc);
 	pango_font_description_free (pango_desc);
 
 	priv->source_id = 0;
@@ -154,7 +154,7 @@ set_status (EphyFindToolbar *toolbar,
 
 				pango_desc = pango_font_description_new ();
 				pango_font_description_set_weight (pango_desc, PANGO_WEIGHT_BOLD);
-				gtk_widget_modify_font (priv->status_label, pango_desc);
+				gtk_widget_override_font (priv->status_label, pango_desc);
 				pango_font_description_free (pango_desc);
 
 				gtk_widget_error_bell (GTK_WIDGET (priv->window));
diff --git a/src/ephy-notebook.c b/src/ephy-notebook.c
index b9a2e24..5753500 100644
--- a/src/ephy-notebook.c
+++ b/src/ephy-notebook.c
@@ -160,15 +160,6 @@ ephy_notebook_class_init (EphyNotebookClass *klass)
 	container_class->remove = ephy_notebook_remove;
 
 	notebook_class->insert_page = ephy_notebook_insert_page;
-	
-	gtk_rc_parse_string ("style \"ephy-tab-close-button-style\"\n"
-			     "{\n"
-			       "GtkWidget::focus-padding = 0\n"
-			       "GtkWidget::focus-line-width = 0\n"
-			       "xthickness = 0\n"
-			       "ythickness = 0\n"
-			     "}\n"
-			     "widget \"*.ephy-tab-close-button\" style \"ephy-tab-close-button-style\"");
 
 	signals[TAB_CLOSE_REQUEST] =
 		g_signal_new ("tab-close-request",
@@ -564,14 +555,15 @@ tab_label_style_set_cb (GtkWidget *hbox,
 {
 	PangoFontMetrics *metrics;
 	PangoContext *context;
+	GtkStyleContext *style;
 	GtkWidget *button;
 	int char_width, h, w;
 
 	context = gtk_widget_get_pango_context (hbox);
+	style = gtk_widget_get_style_context (hbox);
 	metrics = pango_context_get_metrics (context,
-					     gtk_widget_get_style (hbox)->font_desc,
+					     gtk_style_context_get_font (style, GTK_STATE_FLAG_ACTIVE),
 					     pango_context_get_language (context));
-
 	char_width = pango_font_metrics_get_approximate_digit_width (metrics);
 	pango_font_metrics_unref (metrics);
 
@@ -590,6 +582,7 @@ build_tab_label (EphyNotebook *nb, EphyEmbed *embed)
 {
 	GtkWidget *hbox, *label, *close_button, *image, *spinner, *icon;
 	EphyWebView *view;
+	GtkCssProvider *provider;
 
 	/* set hbox spacing and label padding (see below) so that there's an
 	 * equal amount of space around the label */
@@ -623,6 +616,18 @@ build_tab_label (EphyNotebook *nb, EphyEmbed *embed)
 
 	gtk_widget_set_name (close_button, "ephy-tab-close-button");
 
+	provider = gtk_css_provider_new ();
+	gtk_css_provider_load_from_data (provider,
+					 "#ephy-tab-close-button {"
+					 " -GtkWidget-focus-padding: 0;"
+					 " -GtkWidget-focus-line-width: 0;"
+					 " margin: 0; }",
+					 -1, NULL);
+
+	gtk_style_context_add_provider (gtk_widget_get_style_context (close_button),
+					GTK_STYLE_PROVIDER (provider),
+					GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
 	image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
 	gtk_widget_set_tooltip_text (close_button, _("Close tab"));
 	g_signal_connect (close_button, "clicked",



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]