[eog] Set transparency fill color using GSettings
- From: Felix Riemann <friemann src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [eog] Set transparency fill color using GSettings
- Date: Sun, 18 Jul 2010 17:54:01 +0000 (UTC)
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]