[eog] Set transparency fill color using GSettings



commit 2a4e4c30e4a41a1f4b7b452243a56851cdebe442
Author: Felix Riemann <friemann gnome org>
Date:   Sun Jul 18 19:22:06 2010 +0200

    Set transparency fill color using GSettings
    
    Saves some callbacks from EogWindow.

 src/eog-scroll-view.c |   69 +++++++++++++++++++++++++++++++++++++------------
 src/eog-scroll-view.h |    3 +-
 src/eog-window.c      |   58 +++--------------------------------------
 3 files changed, 58 insertions(+), 72 deletions(-)
---
diff --git a/src/eog-scroll-view.c b/src/eog-scroll-view.c
index b78211b..d1a6616 100644
--- a/src/eog-scroll-view.c
+++ b/src/eog-scroll-view.c
@@ -77,6 +77,7 @@ enum {
 	PROP_0,
 	PROP_BACKGROUND_COLOR,
 	PROP_SCROLLWHEEL_ZOOM,
+	PROP_TRANSP_COLOR,
 	PROP_USE_BG_COLOR,
 	PROP_ZOOM_MULTIPLIER
 };
@@ -1933,13 +1934,28 @@ eog_scroll_view_set_antialiasing_out (EogScrollView *view, gboolean state)
 	}
 }
 
+static void
+_transp_background_changed (EogScrollView *view)
+{
+	EogScrollViewPrivate *priv = view->priv;
+
+	if (priv->pixbuf != NULL && gdk_pixbuf_get_has_alpha (priv->pixbuf)) {
+		if (priv->background_surface) {
+			cairo_surface_destroy (priv->background_surface);
+			/* Will be recreated if needed during redraw */
+			priv->background_surface = NULL;
+		}
+		gtk_widget_queue_draw (GTK_WIDGET (priv->display));
+	}
+
+}
+
 void
-eog_scroll_view_set_transparency (EogScrollView *view, EogTransparencyStyle style, GdkColor *color)
+eog_scroll_view_set_transparency_color (EogScrollView *view, GdkColor *color)
 {
-	EogScrollViewPrivate *priv;
 	guint32 col = 0;
 	guint32 red, green, blue;
-	gboolean changed = FALSE;
+	EogScrollViewPrivate *priv;
 
 	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
 
@@ -1952,23 +1968,28 @@ eog_scroll_view_set_transparency (EogScrollView *view, EogTransparencyStyle styl
 		col = red + green + blue;
 	}
 
-	if (priv->transp_style != style) {
-		priv->transp_style = style;
-		changed = TRUE;
-	}
-
-	if (priv->transp_style == EOG_TRANSP_COLOR && priv->transp_color != col) {
+	if (priv->transp_color != col) {
 		priv->transp_color = col;
-		changed = TRUE;
+		if (priv->transp_style == EOG_TRANSP_COLOR)
+			_transp_background_changed (view);
+
+		g_object_notify (G_OBJECT (view), "transparency-color");
 	}
+}
 
-	if (changed && priv->pixbuf != NULL && gdk_pixbuf_get_has_alpha (priv->pixbuf)) {
-		if (priv->background_surface) {
-			cairo_surface_destroy (priv->background_surface);
-			/* Will be recreated if needed during redraw */
-			priv->background_surface = NULL;
-		}
-		gtk_widget_queue_draw (GTK_WIDGET (priv->display));
+void
+eog_scroll_view_set_transparency (EogScrollView        *view,
+				  EogTransparencyStyle  style)
+{
+	EogScrollViewPrivate *priv;
+
+	g_return_if_fail (EOG_IS_SCROLL_VIEW (view));
+	
+	priv = view->priv;
+
+	if (priv->transp_style != style) {
+		priv->transp_style = style;
+		_transp_background_changed (view);
 	}
 }
 
@@ -2260,6 +2281,11 @@ eog_scroll_view_init (EogScrollView *view)
 				      G_SETTINGS_BIND_DEFAULT,
 				      sv_string_to_color_mapping,
 				      sv_color_to_string_mapping, NULL, NULL);
+	g_settings_bind_with_mapping (settings, EOG_CONF_VIEW_TRANS_COLOR,
+				      view, "transparency-color",
+				      G_SETTINGS_BIND_GET,
+				      sv_string_to_color_mapping,
+				      sv_color_to_string_mapping, NULL, NULL);
 	g_object_unref (settings);
 
 	priv->override_bg_color = NULL;
@@ -2363,6 +2389,9 @@ eog_scroll_view_set_property (GObject *object, guint property_id,
 	case PROP_SCROLLWHEEL_ZOOM:
 		eog_scroll_view_set_scroll_wheel_zoom (view, g_value_get_boolean (value));
 		break;
+	case PROP_TRANSP_COLOR:
+		eog_scroll_view_set_transparency_color (view, g_value_get_boxed (value));
+		break;
 	case PROP_ZOOM_MULTIPLIER:
 		eog_scroll_view_set_zoom_multiplier (view, g_value_get_double (value));
 		break;
@@ -2426,6 +2455,12 @@ eog_scroll_view_class_init (EogScrollViewClass *klass)
 		g_param_spec_boolean ("scrollwheel-zoom", NULL, NULL, TRUE,
 				      G_PARAM_READWRITE | G_PARAM_STATIC_NAME));
 
+	g_object_class_install_property (
+		gobject_class, PROP_TRANSP_COLOR,
+		g_param_spec_boxed ("transparency-color", NULL, NULL,
+				    GDK_TYPE_COLOR,
+				    G_PARAM_WRITABLE | G_PARAM_STATIC_NAME));
+
 	view_signals [SIGNAL_ZOOM_CHANGED] =
 		g_signal_new ("zoom_changed",
 			      EOG_TYPE_SCROLL_VIEW,
diff --git a/src/eog-scroll-view.h b/src/eog-scroll-view.h
index f00fce6..50803a8 100644
--- a/src/eog-scroll-view.h
+++ b/src/eog-scroll-view.h
@@ -47,7 +47,8 @@ void     eog_scroll_view_set_zoom_upscale (EogScrollView *view, gboolean upscale
 void     eog_scroll_view_set_zoom_multiplier (EogScrollView *view, gdouble multiplier);
 void     eog_scroll_view_set_antialiasing_in (EogScrollView *view, gboolean state);
 void     eog_scroll_view_set_antialiasing_out (EogScrollView *view, gboolean state);
-void     eog_scroll_view_set_transparency (EogScrollView *view, EogTransparencyStyle style, GdkColor *color);
+void	eog_scroll_view_set_transparency_color (EogScrollView *view, GdkColor *color);
+void     eog_scroll_view_set_transparency (EogScrollView *view, EogTransparencyStyle style);
 gboolean eog_scroll_view_scrollbars_visible (EogScrollView *view);
 void	 eog_scroll_view_set_popup (EogScrollView *view, GtkMenu *menu);
 void	 eog_scroll_view_set_background_color (EogScrollView *view,
diff --git a/src/eog-window.c b/src/eog-window.c
index c549f3e..2f9d8da 100644
--- a/src/eog-window.c
+++ b/src/eog-window.c
@@ -286,59 +286,16 @@ eog_window_transparency_changed_cb (GSettings *settings,
 	if (G_UNLIKELY (value == NULL)) {
 		return;
 	} else if (g_ascii_strcasecmp (value, "COLOR") == 0) {
-		GdkColor color;
-		gchar *color_str;
-
-		color_str = g_settings_get_string (settings,
-						   EOG_CONF_VIEW_TRANS_COLOR);
-		if (gdk_color_parse (color_str, &color)) {
-			eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
-							  EOG_TRANSP_COLOR, &color);
-		}
-		g_free (color_str);
+		eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
+							  EOG_TRANSP_COLOR);
 	} else if (g_ascii_strcasecmp (value, "CHECK_PATTERN") == 0) {
 		eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
-						  EOG_TRANSP_CHECKED, NULL);
+						  EOG_TRANSP_CHECKED);
 	} else {
 		eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
-						  EOG_TRANSP_BACKGROUND, NULL);
-	}
-
-	g_free (value);
-}
-
-static void
-eog_window_trans_color_changed_cb (GSettings *settings,
-				   gchar     *key,
-				   gpointer   user_data)
-{
-	EogWindowPrivate *priv;
-	GdkColor color;
-	gchar *color_str = NULL;
-	gchar *value = NULL;
-
-	g_return_if_fail (EOG_IS_WINDOW (user_data));
-
-	eog_debug (DEBUG_PREFERENCES);
-
-	priv = EOG_WINDOW (user_data)->priv;
-
-	g_return_if_fail (EOG_IS_SCROLL_VIEW (priv->view));
-
-	value = g_settings_get_string (settings, EOG_CONF_VIEW_TRANSPARENCY);
-
-	if (!value || g_ascii_strcasecmp (value, "COLOR") != 0) {
-		g_free (value);
-		return;
+						  EOG_TRANSP_BACKGROUND);
 	}
 
-	color_str = g_settings_get_string (settings, key);
-
-	if (gdk_color_parse (color_str, &color)) {
-		eog_scroll_view_set_transparency (EOG_SCROLL_VIEW (priv->view),
-						  EOG_TRANSP_COLOR, &color);
-	}
-	g_free (color_str);
 	g_free (value);
 }
 
@@ -4367,8 +4324,6 @@ eog_window_construct_ui (EogWindow *window)
 					       window);
 	eog_window_transparency_changed_cb (priv->view_settings,
 					    EOG_CONF_VIEW_TRANSPARENCY, window);
-	eog_window_trans_color_changed_cb (priv->view_settings,
-					   EOG_CONF_VIEW_TRANS_COLOR, window);
 	eog_window_gallery_mode_changed_cb (priv->ui_settings,
 					    EOG_CONF_UI_IMAGE_GALLERY_POSITION,
 					    window);
@@ -4430,11 +4385,6 @@ eog_window_init (EogWindow *window)
 			  (GCallback) eog_window_transparency_changed_cb,
 			  window);
 
-	g_signal_connect (priv->view_settings,
-			  "changed::" EOG_CONF_VIEW_TRANS_COLOR,
-			  (GCallback) eog_window_trans_color_changed_cb,
-			  window);
-
 	g_signal_connect (priv->ui_settings,
 			  "changed::" EOG_CONF_UI_IMAGE_GALLERY_POSITION,
 			  (GCallback) eog_window_gallery_mode_changed_cb,



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