diff --git a/ChangeLog b/ChangeLog index db862c466..efffe6e14 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2000-12-18 Bradford Hovinen + + * capplets/new-background-properties/applier.c + (renderer_render_wallpaper): Change the meaning of brightness to + mean opacity + (tile_composite): Implement + (render_gradient_p): Return TRUE if the opacity should be adjusted + + * capplets/new-background-properties/prefs-widget.c: Change + instances of brightness to refer to opacity + + * capplets/new-background-properties/preferences.c: Ditto + 2000-12-17 Bradford Hovinen * capplets/new-background-properties/applier.c diff --git a/capplets/background/applier.c b/capplets/background/applier.c index 79c52b79e..af304d86a 100644 --- a/capplets/background/applier.c +++ b/capplets/background/applier.c @@ -144,6 +144,12 @@ static void render_tiled_image (Pixmap pixmap, GC xgc, GdkPixbuf *pixbuf, gint x, gint y, gint dwidth, gint dheight); +static void tile_composite (GdkPixbuf *dest, GdkPixbuf *src, + gdouble sx, gdouble sy, + gdouble swidth, gdouble sheight, + gdouble dwidth, gdouble dheight, + gdouble scalex, gdouble scaley, + gint alpha_value); static gboolean render_gradient_p (Renderer *renderer, Preferences *prefs); @@ -537,8 +543,8 @@ run_render_pipeline (Renderer *renderer, old_prefs->orientation != new_prefs->orientation || !gdk_color_equal (old_prefs->color1, new_prefs->color1) || !gdk_color_equal (old_prefs->color2, new_prefs->color2) || - old_prefs->adjust_brightness != new_prefs->adjust_brightness || - old_prefs->brightness_value != new_prefs->brightness_value || + old_prefs->adjust_opacity != new_prefs->adjust_opacity || + old_prefs->opacity != new_prefs->opacity || ((wallpaper_pixbuf != NULL || old_prefs->wallpaper_type != new_prefs->wallpaper_type) && render_gradient_p (renderer, new_prefs))) @@ -725,15 +731,13 @@ renderer_render_wallpaper (Renderer *renderer) &renderer->wwidth, &renderer->wheight, &renderer->srcx, &renderer->srcy); - if (renderer->prefs->adjust_brightness) { + if (renderer->prefs->adjust_opacity) { guint alpha_value; - guint32 color; + guint32 colorv; - alpha_value = ABS (renderer->prefs->brightness_value); - alpha_value = 256 - alpha_value * alpha_value / 256; + alpha_value = renderer->prefs->opacity; + alpha_value = alpha_value * alpha_value / 256; alpha_value = CLAMP (alpha_value, 0, 255); - color = (renderer->prefs->brightness_value < 0) ? - 0 : (guint32) -1; if (render_gradient_p (renderer, renderer->prefs)) { scalex = (gdouble) renderer->wwidth / @@ -741,17 +745,37 @@ renderer_render_wallpaper (Renderer *renderer) scaley = (gdouble) renderer->wheight / (gdouble) renderer->pheight; - gdk_pixbuf_composite_color - (renderer->wallpaper_pixbuf, - renderer->pixbuf, - renderer->wx, renderer->wy, - renderer->wwidth, renderer->wheight, - renderer->wx, renderer->wy, - scalex, scaley, - GDK_INTERP_BILINEAR, - alpha_value, 0, 0, 65536, - color, color); + if (renderer->prefs->wallpaper_type != + WPTYPE_TILED) + gdk_pixbuf_composite + (renderer->wallpaper_pixbuf, + renderer->pixbuf, + renderer->wx, renderer->wy, + renderer->wwidth, + renderer->wheight, + renderer->wx, renderer->wy, + scalex, scaley, + GDK_INTERP_BILINEAR, + alpha_value); + else + tile_composite + (renderer->wallpaper_pixbuf, + renderer->pixbuf, + renderer->wx, renderer->wy, + renderer->wwidth, + renderer->wheight, + renderer->width, + renderer->height, + scalex, scaley, + alpha_value); } else { + GdkColor *color; + + color = renderer->prefs->color1; + colorv = ((color->red & 0xff00) << 8) | + (color->green & 0xff00) | + ((color->blue & 0xff00) >> 8); + if (renderer->pixbuf != NULL) gdk_pixbuf_unref (renderer->pixbuf); @@ -761,7 +785,7 @@ renderer_render_wallpaper (Renderer *renderer) renderer->wwidth, renderer->wheight, GDK_INTERP_BILINEAR, alpha_value, 65536, - color, color); + colorv, colorv); } } else if (renderer->wwidth != renderer->pwidth || @@ -1084,6 +1108,27 @@ get_geometry (wallpaper_type_t wallpaper_type, GdkPixbuf *pixbuf, } } +static void +tile_composite (GdkPixbuf *dest, GdkPixbuf *src, + gdouble sx, gdouble sy, + gdouble swidth, gdouble sheight, + gdouble dwidth, gdouble dheight, + gdouble scalex, gdouble scaley, + gint alpha_value) +{ + gdouble cx, cy; + + for (cy = sy; cy < dheight; cy += sheight) + for (cx = sx; cx < dwidth; cx += swidth) + gdk_pixbuf_composite + (dest, src, cx, cy, + MIN (swidth, dwidth - cx), + MIN (sheight, dheight - cy), + cx, cy, scalex, scaley, + GDK_INTERP_BILINEAR, + alpha_value); +} + static void render_tiled_image (Pixmap pixmap, GC xgc, GdkPixbuf *pixbuf, gint x, gint y, gint dwidth, gint dheight) @@ -1111,6 +1156,7 @@ render_gradient_p (Renderer *renderer, Preferences *prefs) { return prefs->gradient_enabled && !(prefs->wallpaper_enabled && + !prefs->adjust_opacity && ((prefs->wallpaper_type == WPTYPE_TILED || prefs->wallpaper_type == WPTYPE_SCALED) || (renderer->pwidth == renderer->width && diff --git a/capplets/background/background-properties.glade b/capplets/background/background-properties.glade index e3861c87a..bac904f62 100644 --- a/capplets/background/background-properties.glade +++ b/capplets/background/background-properties.glade @@ -576,14 +576,14 @@ GtkCheckButton - adjust_brightness_toggle + adjust_opacity_toggle True toggled adjust_brightness_toggled_cb Sun, 17 Dec 2000 23:15:19 GMT - + False True @@ -604,8 +604,8 @@ GtkLabel - brightness_low_label - + opacity_low_label + GTK_JUSTIFY_RIGHT False 1 @@ -630,8 +630,8 @@ GtkLabel - brightness_high_label - + opacity_high_label + GTK_JUSTIFY_LEFT False 0 @@ -656,14 +656,14 @@ GtkHScale - brightness_adjust + opacity_adjust True False GTK_POS_TOP 1 GTK_UPDATE_CONTINUOUS 0 - -255 + 0 255 0 0 @@ -675,7 +675,7 @@ 2 0 0 - False + True False False False diff --git a/capplets/background/background-properties.glade.h b/capplets/background/background-properties.glade.h index 427f32b00..b04f8e03d 100644 --- a/capplets/background/background-properties.glade.h +++ b/capplets/background/background-properties.glade.h @@ -21,6 +21,6 @@ gchar *s = N_("Scaled (keep aspect)"); gchar *s = N_("Scaled"); gchar *s = N_("Disable background selection"); gchar *s = N_("Apply changes automatically"); -gchar *s = N_("Adjust background's brightness"); -gchar *s = N_("Dimmer"); -gchar *s = N_("Brighter"); +gchar *s = N_("Adjust wallpaper's opacity"); +gchar *s = N_("More Transparent"); +gchar *s = N_("More Solid"); diff --git a/capplets/background/preferences.c b/capplets/background/preferences.c index 1421f141f..be1317aee 100644 --- a/capplets/background/preferences.c +++ b/capplets/background/preferences.c @@ -141,8 +141,8 @@ preferences_clone (Preferences *prefs) g_strdup (prefs->wallpaper_sel_path);; new_prefs->auto_apply = prefs->auto_apply; - new_prefs->adjust_brightness = prefs->adjust_brightness; - new_prefs->brightness_value = prefs->brightness_value; + new_prefs->adjust_opacity = prefs->adjust_opacity; + new_prefs->opacity = prefs->opacity; return object; } @@ -237,15 +237,15 @@ preferences_load (Preferences *prefs) } string = gnome_config_get_string - ("/Background/Default/adjustBrightness=true"); + ("/Background/Default/adjustOpacity=true"); if (!g_strcasecmp (string, "true")) - prefs->adjust_brightness = TRUE; + prefs->adjust_opacity = TRUE; else if (g_strcasecmp (string, "false")) - prefs->adjust_brightness = FALSE; + prefs->adjust_opacity = FALSE; g_free (string); - prefs->brightness_value = - gnome_config_get_int ("/Background/Default/brightnessValue=0"); + prefs->opacity = + gnome_config_get_int ("/Background/Default/opacity=255"); } void @@ -286,10 +286,10 @@ preferences_save (Preferences *prefs) gnome_config_set_string ("/Background/Default/autoApply", prefs->auto_apply ? "True" : "False"); - gnome_config_set_string ("/Background/Default/adjustBrightness", - prefs->adjust_brightness ? "True" : "False"); - gnome_config_set_int ("/Background/Default/brightnessValue", - prefs->brightness_value); + gnome_config_set_string ("/Background/Default/adjustOpacity", + prefs->adjust_opacity ? "True" : "False"); + gnome_config_set_int ("/Background/Default/opacity", + prefs->opacity); gnome_config_sync (); } @@ -404,10 +404,10 @@ preferences_read_xml (xmlDocPtr xml_doc) g_strdup (xmlNodeGetContent (node)); else if (!strcmp (node->name, "auto-apply")) prefs->auto_apply = TRUE; - else if (!strcmp (node->name, "adjust-brightness")) + else if (!strcmp (node->name, "adjust-opacity")) prefs->auto_apply = TRUE; - else if (!strcmp (node->name, "brightness-value")) - prefs->brightness_value = xml_read_int (node, NULL); + else if (!strcmp (node->name, "opacity")) + prefs->opacity = xml_read_int (node, NULL); } return prefs; @@ -460,10 +460,10 @@ preferences_write_xml (Preferences *prefs) if (prefs->auto_apply) xmlNewChild (node, NULL, "auto-apply", NULL); - if (prefs->adjust_brightness) - xmlNewChild (node, NULL, "adjust-brightness", NULL); - xmlAddChild (node, xml_write_int ("brightness-value", NULL, - prefs->brightness_value)); + if (prefs->adjust_opacity) + xmlNewChild (node, NULL, "adjust-opacity", NULL); + xmlAddChild (node, xml_write_int ("opacity", NULL, + prefs->opacity)); xmlDocSetRootElement (doc, node); diff --git a/capplets/background/preferences.h b/capplets/background/preferences.h index 52817fd3a..716319f2d 100644 --- a/capplets/background/preferences.h +++ b/capplets/background/preferences.h @@ -64,8 +64,8 @@ struct _Preferences gchar *wallpaper_filename; gchar *wallpaper_sel_path; - gboolean adjust_brightness; - gint brightness_value; + gboolean adjust_opacity; + gint opacity; }; struct _PreferencesClass diff --git a/capplets/background/prefs-widget.c b/capplets/background/prefs-widget.c index eea6308df..358f22419 100644 --- a/capplets/background/prefs-widget.c +++ b/capplets/background/prefs-widget.c @@ -88,9 +88,9 @@ static void disable_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget); static void auto_apply_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget); -static void adjust_brightness_toggled_cb (GtkToggleButton *tb, +static void adjust_opacity_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget); -static void brightness_adjust_changed_cb (GtkAdjustment *adjustment, +static void opacity_adjust_changed_cb (GtkAdjustment *adjustment, PrefsWidget *prefs_widget); static void set_gradient_controls_sensitive (PrefsWidget *prefs_widget, @@ -99,7 +99,7 @@ static void set_wallpaper_controls_sensitive (PrefsWidget *prefs_widget, gboolean s); static void set_background_controls_sensitive (PrefsWidget *prefs_widget, gboolean s); -static void set_brightness_controls_sensitive (PrefsWidget *prefs_widget, +static void set_opacity_controls_sensitive (PrefsWidget *prefs_widget, gboolean s); guint @@ -198,14 +198,14 @@ prefs_widget_init (PrefsWidget *prefs_widget) auto_apply_toggled_cb, prefs_widget); glade_xml_signal_connect_data (prefs_widget->dialog_data, - "adjust_brightness_toggled_cb", - adjust_brightness_toggled_cb, + "adjust_opacity_toggled_cb", + adjust_opacity_toggled_cb, prefs_widget); adjustment = gtk_range_get_adjustment - (GTK_RANGE (WID ("brightness_adjust"))); + (GTK_RANGE (WID ("opacity_adjust"))); gtk_signal_connect (GTK_OBJECT (adjustment), "value-changed", - GTK_SIGNAL_FUNC (brightness_adjust_changed_cb), + GTK_SIGNAL_FUNC (opacity_adjust_changed_cb), prefs_widget); gnome_entry_load_history @@ -430,7 +430,7 @@ read_preferences (PrefsWidget *prefs_widget, Preferences *prefs) (WID ("auto_apply")), FALSE); - if (prefs->adjust_brightness) + if (prefs->adjust_opacity) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("auto_apply")), TRUE); @@ -439,21 +439,21 @@ read_preferences (PrefsWidget *prefs_widget, Preferences *prefs) (WID ("auto_apply")), FALSE); - if (prefs->adjust_brightness) { + if (prefs->adjust_opacity) { gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (WID ("adjust_brightness_toggle")), + (GTK_TOGGLE_BUTTON (WID ("adjust_opacity_toggle")), TRUE); - set_brightness_controls_sensitive (prefs_widget, TRUE); + set_opacity_controls_sensitive (prefs_widget, TRUE); } else { gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (WID ("adjust_brightness_toggle")), + (GTK_TOGGLE_BUTTON (WID ("adjust_opacity_toggle")), FALSE); - set_brightness_controls_sensitive (prefs_widget, FALSE); + set_opacity_controls_sensitive (prefs_widget, FALSE); } adjustment = gtk_range_get_adjustment - (GTK_RANGE (WID ("brightness_adjust"))); - gtk_adjustment_set_value (adjustment, prefs->brightness_value); + (GTK_RANGE (WID ("opacity_adjust"))); + gtk_adjustment_set_value (adjustment, prefs->opacity); preferences_apply_preview (prefs); } @@ -709,7 +709,7 @@ auto_apply_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget) } static void -adjust_brightness_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget) +adjust_opacity_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget) { g_return_if_fail (prefs_widget != NULL); g_return_if_fail (IS_PREFS_WIDGET (prefs_widget)); @@ -717,11 +717,11 @@ adjust_brightness_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget) g_return_if_fail (IS_PREFERENCES (prefs_widget->prefs)); if (gtk_toggle_button_get_active (tb)) { - prefs_widget->prefs->adjust_brightness = TRUE; - set_brightness_controls_sensitive (prefs_widget, TRUE); + prefs_widget->prefs->adjust_opacity = TRUE; + set_opacity_controls_sensitive (prefs_widget, TRUE); } else { - prefs_widget->prefs->adjust_brightness = FALSE; - set_brightness_controls_sensitive (prefs_widget, FALSE); + prefs_widget->prefs->adjust_opacity = FALSE; + set_opacity_controls_sensitive (prefs_widget, FALSE); } preferences_changed (prefs_widget->prefs); @@ -729,7 +729,7 @@ adjust_brightness_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget) } static void -brightness_adjust_changed_cb (GtkAdjustment *adjustment, +opacity_adjust_changed_cb (GtkAdjustment *adjustment, PrefsWidget *prefs_widget) { g_return_if_fail (prefs_widget != NULL); @@ -737,7 +737,7 @@ brightness_adjust_changed_cb (GtkAdjustment *adjustment, g_return_if_fail (prefs_widget->prefs != NULL); g_return_if_fail (IS_PREFERENCES (prefs_widget->prefs)); - prefs_widget->prefs->brightness_value = adjustment->value; + prefs_widget->prefs->opacity = adjustment->value; preferences_changed (prefs_widget->prefs); capplet_widget_state_changed (CAPPLET_WIDGET (prefs_widget), TRUE); @@ -769,10 +769,10 @@ set_background_controls_sensitive (PrefsWidget *prefs_widget, gboolean s) } static void -set_brightness_controls_sensitive (PrefsWidget *prefs_widget, gboolean s) +set_opacity_controls_sensitive (PrefsWidget *prefs_widget, gboolean s) { - gtk_widget_set_sensitive (WID ("brightness_low_label"), s); - gtk_widget_set_sensitive (WID ("brightness_adjust"), s); - gtk_widget_set_sensitive (WID ("brightness_high_label"), s); + gtk_widget_set_sensitive (WID ("opacity_low_label"), s); + gtk_widget_set_sensitive (WID ("opacity_adjust"), s); + gtk_widget_set_sensitive (WID ("opacity_high_label"), s); }