Change the meaning of brightness to mean opacity (tile_composite):

2000-12-18  Bradford Hovinen  <hovinen@helixcode.com>

	* 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
This commit is contained in:
Bradford Hovinen 2000-12-18 15:09:36 +00:00 committed by Bradford Hovinen (Gdict maintainer)
parent 73ae1407b3
commit 749b0a33a3
7 changed files with 136 additions and 77 deletions

View file

@ -1,3 +1,16 @@
2000-12-18 Bradford Hovinen <hovinen@helixcode.com>
* 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 <hovinen@helixcode.com> 2000-12-17 Bradford Hovinen <hovinen@helixcode.com>
* capplets/new-background-properties/applier.c * capplets/new-background-properties/applier.c

View file

@ -144,6 +144,12 @@ static void render_tiled_image (Pixmap pixmap, GC xgc,
GdkPixbuf *pixbuf, GdkPixbuf *pixbuf,
gint x, gint y, gint x, gint y,
gint dwidth, gint dheight); 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, static gboolean render_gradient_p (Renderer *renderer,
Preferences *prefs); Preferences *prefs);
@ -537,8 +543,8 @@ run_render_pipeline (Renderer *renderer,
old_prefs->orientation != new_prefs->orientation || old_prefs->orientation != new_prefs->orientation ||
!gdk_color_equal (old_prefs->color1, new_prefs->color1) || !gdk_color_equal (old_prefs->color1, new_prefs->color1) ||
!gdk_color_equal (old_prefs->color2, new_prefs->color2) || !gdk_color_equal (old_prefs->color2, new_prefs->color2) ||
old_prefs->adjust_brightness != new_prefs->adjust_brightness || old_prefs->adjust_opacity != new_prefs->adjust_opacity ||
old_prefs->brightness_value != new_prefs->brightness_value || old_prefs->opacity != new_prefs->opacity ||
((wallpaper_pixbuf != NULL || ((wallpaper_pixbuf != NULL ||
old_prefs->wallpaper_type != new_prefs->wallpaper_type) && old_prefs->wallpaper_type != new_prefs->wallpaper_type) &&
render_gradient_p (renderer, new_prefs))) render_gradient_p (renderer, new_prefs)))
@ -725,15 +731,13 @@ renderer_render_wallpaper (Renderer *renderer)
&renderer->wwidth, &renderer->wheight, &renderer->wwidth, &renderer->wheight,
&renderer->srcx, &renderer->srcy); &renderer->srcx, &renderer->srcy);
if (renderer->prefs->adjust_brightness) { if (renderer->prefs->adjust_opacity) {
guint alpha_value; guint alpha_value;
guint32 color; guint32 colorv;
alpha_value = ABS (renderer->prefs->brightness_value); alpha_value = renderer->prefs->opacity;
alpha_value = 256 - alpha_value * alpha_value / 256; alpha_value = alpha_value * alpha_value / 256;
alpha_value = CLAMP (alpha_value, 0, 255); alpha_value = CLAMP (alpha_value, 0, 255);
color = (renderer->prefs->brightness_value < 0) ?
0 : (guint32) -1;
if (render_gradient_p (renderer, renderer->prefs)) { if (render_gradient_p (renderer, renderer->prefs)) {
scalex = (gdouble) renderer->wwidth / scalex = (gdouble) renderer->wwidth /
@ -741,17 +745,37 @@ renderer_render_wallpaper (Renderer *renderer)
scaley = (gdouble) renderer->wheight / scaley = (gdouble) renderer->wheight /
(gdouble) renderer->pheight; (gdouble) renderer->pheight;
gdk_pixbuf_composite_color if (renderer->prefs->wallpaper_type !=
(renderer->wallpaper_pixbuf, WPTYPE_TILED)
renderer->pixbuf, gdk_pixbuf_composite
renderer->wx, renderer->wy, (renderer->wallpaper_pixbuf,
renderer->wwidth, renderer->wheight, renderer->pixbuf,
renderer->wx, renderer->wy, renderer->wx, renderer->wy,
scalex, scaley, renderer->wwidth,
GDK_INTERP_BILINEAR, renderer->wheight,
alpha_value, 0, 0, 65536, renderer->wx, renderer->wy,
color, color); 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 { } else {
GdkColor *color;
color = renderer->prefs->color1;
colorv = ((color->red & 0xff00) << 8) |
(color->green & 0xff00) |
((color->blue & 0xff00) >> 8);
if (renderer->pixbuf != NULL) if (renderer->pixbuf != NULL)
gdk_pixbuf_unref (renderer->pixbuf); gdk_pixbuf_unref (renderer->pixbuf);
@ -761,7 +785,7 @@ renderer_render_wallpaper (Renderer *renderer)
renderer->wwidth, renderer->wheight, renderer->wwidth, renderer->wheight,
GDK_INTERP_BILINEAR, GDK_INTERP_BILINEAR,
alpha_value, 65536, alpha_value, 65536,
color, color); colorv, colorv);
} }
} }
else if (renderer->wwidth != renderer->pwidth || 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 static void
render_tiled_image (Pixmap pixmap, GC xgc, GdkPixbuf *pixbuf, render_tiled_image (Pixmap pixmap, GC xgc, GdkPixbuf *pixbuf,
gint x, gint y, gint dwidth, gint dheight) gint x, gint y, gint dwidth, gint dheight)
@ -1111,6 +1156,7 @@ render_gradient_p (Renderer *renderer, Preferences *prefs)
{ {
return prefs->gradient_enabled && return prefs->gradient_enabled &&
!(prefs->wallpaper_enabled && !(prefs->wallpaper_enabled &&
!prefs->adjust_opacity &&
((prefs->wallpaper_type == WPTYPE_TILED || ((prefs->wallpaper_type == WPTYPE_TILED ||
prefs->wallpaper_type == WPTYPE_SCALED) || prefs->wallpaper_type == WPTYPE_SCALED) ||
(renderer->pwidth == renderer->width && (renderer->pwidth == renderer->width &&

View file

@ -576,14 +576,14 @@
<widget> <widget>
<class>GtkCheckButton</class> <class>GtkCheckButton</class>
<name>adjust_brightness_toggle</name> <name>adjust_opacity_toggle</name>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<signal> <signal>
<name>toggled</name> <name>toggled</name>
<handler>adjust_brightness_toggled_cb</handler> <handler>adjust_brightness_toggled_cb</handler>
<last_modification_time>Sun, 17 Dec 2000 23:15:19 GMT</last_modification_time> <last_modification_time>Sun, 17 Dec 2000 23:15:19 GMT</last_modification_time>
</signal> </signal>
<label>Adjust background's brightness</label> <label>Adjust wallpaper's opacity</label>
<active>False</active> <active>False</active>
<draw_indicator>True</draw_indicator> <draw_indicator>True</draw_indicator>
<child> <child>
@ -604,8 +604,8 @@
<widget> <widget>
<class>GtkLabel</class> <class>GtkLabel</class>
<name>brightness_low_label</name> <name>opacity_low_label</name>
<label>Dimmer</label> <label>More Transparent</label>
<justify>GTK_JUSTIFY_RIGHT</justify> <justify>GTK_JUSTIFY_RIGHT</justify>
<wrap>False</wrap> <wrap>False</wrap>
<xalign>1</xalign> <xalign>1</xalign>
@ -630,8 +630,8 @@
<widget> <widget>
<class>GtkLabel</class> <class>GtkLabel</class>
<name>brightness_high_label</name> <name>opacity_high_label</name>
<label>Brighter</label> <label>More Solid</label>
<justify>GTK_JUSTIFY_LEFT</justify> <justify>GTK_JUSTIFY_LEFT</justify>
<wrap>False</wrap> <wrap>False</wrap>
<xalign>0</xalign> <xalign>0</xalign>
@ -656,14 +656,14 @@
<widget> <widget>
<class>GtkHScale</class> <class>GtkHScale</class>
<name>brightness_adjust</name> <name>opacity_adjust</name>
<can_focus>True</can_focus> <can_focus>True</can_focus>
<draw_value>False</draw_value> <draw_value>False</draw_value>
<value_pos>GTK_POS_TOP</value_pos> <value_pos>GTK_POS_TOP</value_pos>
<digits>1</digits> <digits>1</digits>
<policy>GTK_UPDATE_CONTINUOUS</policy> <policy>GTK_UPDATE_CONTINUOUS</policy>
<value>0</value> <value>0</value>
<lower>-255</lower> <lower>0</lower>
<upper>255</upper> <upper>255</upper>
<step>0</step> <step>0</step>
<page>0</page> <page>0</page>
@ -675,7 +675,7 @@
<bottom_attach>2</bottom_attach> <bottom_attach>2</bottom_attach>
<xpad>0</xpad> <xpad>0</xpad>
<ypad>0</ypad> <ypad>0</ypad>
<xexpand>False</xexpand> <xexpand>True</xexpand>
<yexpand>False</yexpand> <yexpand>False</yexpand>
<xshrink>False</xshrink> <xshrink>False</xshrink>
<yshrink>False</yshrink> <yshrink>False</yshrink>

View file

@ -21,6 +21,6 @@ gchar *s = N_("Scaled (keep aspect)");
gchar *s = N_("Scaled"); gchar *s = N_("Scaled");
gchar *s = N_("Disable background selection"); gchar *s = N_("Disable background selection");
gchar *s = N_("Apply changes automatically"); gchar *s = N_("Apply changes automatically");
gchar *s = N_("Adjust background's brightness"); gchar *s = N_("Adjust wallpaper's opacity");
gchar *s = N_("Dimmer"); gchar *s = N_("More Transparent");
gchar *s = N_("Brighter"); gchar *s = N_("More Solid");

View file

@ -141,8 +141,8 @@ preferences_clone (Preferences *prefs)
g_strdup (prefs->wallpaper_sel_path);; g_strdup (prefs->wallpaper_sel_path);;
new_prefs->auto_apply = prefs->auto_apply; new_prefs->auto_apply = prefs->auto_apply;
new_prefs->adjust_brightness = prefs->adjust_brightness; new_prefs->adjust_opacity = prefs->adjust_opacity;
new_prefs->brightness_value = prefs->brightness_value; new_prefs->opacity = prefs->opacity;
return object; return object;
} }
@ -237,15 +237,15 @@ preferences_load (Preferences *prefs)
} }
string = gnome_config_get_string string = gnome_config_get_string
("/Background/Default/adjustBrightness=true"); ("/Background/Default/adjustOpacity=true");
if (!g_strcasecmp (string, "true")) if (!g_strcasecmp (string, "true"))
prefs->adjust_brightness = TRUE; prefs->adjust_opacity = TRUE;
else if (g_strcasecmp (string, "false")) else if (g_strcasecmp (string, "false"))
prefs->adjust_brightness = FALSE; prefs->adjust_opacity = FALSE;
g_free (string); g_free (string);
prefs->brightness_value = prefs->opacity =
gnome_config_get_int ("/Background/Default/brightnessValue=0"); gnome_config_get_int ("/Background/Default/opacity=255");
} }
void void
@ -286,10 +286,10 @@ preferences_save (Preferences *prefs)
gnome_config_set_string ("/Background/Default/autoApply", gnome_config_set_string ("/Background/Default/autoApply",
prefs->auto_apply ? "True" : "False"); prefs->auto_apply ? "True" : "False");
gnome_config_set_string ("/Background/Default/adjustBrightness", gnome_config_set_string ("/Background/Default/adjustOpacity",
prefs->adjust_brightness ? "True" : "False"); prefs->adjust_opacity ? "True" : "False");
gnome_config_set_int ("/Background/Default/brightnessValue", gnome_config_set_int ("/Background/Default/opacity",
prefs->brightness_value); prefs->opacity);
gnome_config_sync (); gnome_config_sync ();
} }
@ -404,10 +404,10 @@ preferences_read_xml (xmlDocPtr xml_doc)
g_strdup (xmlNodeGetContent (node)); g_strdup (xmlNodeGetContent (node));
else if (!strcmp (node->name, "auto-apply")) else if (!strcmp (node->name, "auto-apply"))
prefs->auto_apply = TRUE; prefs->auto_apply = TRUE;
else if (!strcmp (node->name, "adjust-brightness")) else if (!strcmp (node->name, "adjust-opacity"))
prefs->auto_apply = TRUE; prefs->auto_apply = TRUE;
else if (!strcmp (node->name, "brightness-value")) else if (!strcmp (node->name, "opacity"))
prefs->brightness_value = xml_read_int (node, NULL); prefs->opacity = xml_read_int (node, NULL);
} }
return prefs; return prefs;
@ -460,10 +460,10 @@ preferences_write_xml (Preferences *prefs)
if (prefs->auto_apply) if (prefs->auto_apply)
xmlNewChild (node, NULL, "auto-apply", NULL); xmlNewChild (node, NULL, "auto-apply", NULL);
if (prefs->adjust_brightness) if (prefs->adjust_opacity)
xmlNewChild (node, NULL, "adjust-brightness", NULL); xmlNewChild (node, NULL, "adjust-opacity", NULL);
xmlAddChild (node, xml_write_int ("brightness-value", NULL, xmlAddChild (node, xml_write_int ("opacity", NULL,
prefs->brightness_value)); prefs->opacity));
xmlDocSetRootElement (doc, node); xmlDocSetRootElement (doc, node);

View file

@ -64,8 +64,8 @@ struct _Preferences
gchar *wallpaper_filename; gchar *wallpaper_filename;
gchar *wallpaper_sel_path; gchar *wallpaper_sel_path;
gboolean adjust_brightness; gboolean adjust_opacity;
gint brightness_value; gint opacity;
}; };
struct _PreferencesClass struct _PreferencesClass

View file

@ -88,9 +88,9 @@ static void disable_toggled_cb (GtkToggleButton *tb,
PrefsWidget *prefs_widget); PrefsWidget *prefs_widget);
static void auto_apply_toggled_cb (GtkToggleButton *tb, static void auto_apply_toggled_cb (GtkToggleButton *tb,
PrefsWidget *prefs_widget); PrefsWidget *prefs_widget);
static void adjust_brightness_toggled_cb (GtkToggleButton *tb, static void adjust_opacity_toggled_cb (GtkToggleButton *tb,
PrefsWidget *prefs_widget); PrefsWidget *prefs_widget);
static void brightness_adjust_changed_cb (GtkAdjustment *adjustment, static void opacity_adjust_changed_cb (GtkAdjustment *adjustment,
PrefsWidget *prefs_widget); PrefsWidget *prefs_widget);
static void set_gradient_controls_sensitive (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); gboolean s);
static void set_background_controls_sensitive (PrefsWidget *prefs_widget, static void set_background_controls_sensitive (PrefsWidget *prefs_widget,
gboolean s); gboolean s);
static void set_brightness_controls_sensitive (PrefsWidget *prefs_widget, static void set_opacity_controls_sensitive (PrefsWidget *prefs_widget,
gboolean s); gboolean s);
guint guint
@ -198,14 +198,14 @@ prefs_widget_init (PrefsWidget *prefs_widget)
auto_apply_toggled_cb, auto_apply_toggled_cb,
prefs_widget); prefs_widget);
glade_xml_signal_connect_data (prefs_widget->dialog_data, glade_xml_signal_connect_data (prefs_widget->dialog_data,
"adjust_brightness_toggled_cb", "adjust_opacity_toggled_cb",
adjust_brightness_toggled_cb, adjust_opacity_toggled_cb,
prefs_widget); prefs_widget);
adjustment = gtk_range_get_adjustment 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_connect (GTK_OBJECT (adjustment), "value-changed",
GTK_SIGNAL_FUNC (brightness_adjust_changed_cb), GTK_SIGNAL_FUNC (opacity_adjust_changed_cb),
prefs_widget); prefs_widget);
gnome_entry_load_history gnome_entry_load_history
@ -430,7 +430,7 @@ read_preferences (PrefsWidget *prefs_widget, Preferences *prefs)
(WID ("auto_apply")), (WID ("auto_apply")),
FALSE); FALSE);
if (prefs->adjust_brightness) if (prefs->adjust_opacity)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(WID ("auto_apply")), (WID ("auto_apply")),
TRUE); TRUE);
@ -439,21 +439,21 @@ read_preferences (PrefsWidget *prefs_widget, Preferences *prefs)
(WID ("auto_apply")), (WID ("auto_apply")),
FALSE); FALSE);
if (prefs->adjust_brightness) { if (prefs->adjust_opacity) {
gtk_toggle_button_set_active gtk_toggle_button_set_active
(GTK_TOGGLE_BUTTON (WID ("adjust_brightness_toggle")), (GTK_TOGGLE_BUTTON (WID ("adjust_opacity_toggle")),
TRUE); TRUE);
set_brightness_controls_sensitive (prefs_widget, TRUE); set_opacity_controls_sensitive (prefs_widget, TRUE);
} else { } else {
gtk_toggle_button_set_active gtk_toggle_button_set_active
(GTK_TOGGLE_BUTTON (WID ("adjust_brightness_toggle")), (GTK_TOGGLE_BUTTON (WID ("adjust_opacity_toggle")),
FALSE); FALSE);
set_brightness_controls_sensitive (prefs_widget, FALSE); set_opacity_controls_sensitive (prefs_widget, FALSE);
} }
adjustment = gtk_range_get_adjustment adjustment = gtk_range_get_adjustment
(GTK_RANGE (WID ("brightness_adjust"))); (GTK_RANGE (WID ("opacity_adjust")));
gtk_adjustment_set_value (adjustment, prefs->brightness_value); gtk_adjustment_set_value (adjustment, prefs->opacity);
preferences_apply_preview (prefs); preferences_apply_preview (prefs);
} }
@ -709,7 +709,7 @@ auto_apply_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget)
} }
static void 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 (prefs_widget != NULL);
g_return_if_fail (IS_PREFS_WIDGET (prefs_widget)); 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)); g_return_if_fail (IS_PREFERENCES (prefs_widget->prefs));
if (gtk_toggle_button_get_active (tb)) { if (gtk_toggle_button_get_active (tb)) {
prefs_widget->prefs->adjust_brightness = TRUE; prefs_widget->prefs->adjust_opacity = TRUE;
set_brightness_controls_sensitive (prefs_widget, TRUE); set_opacity_controls_sensitive (prefs_widget, TRUE);
} else { } else {
prefs_widget->prefs->adjust_brightness = FALSE; prefs_widget->prefs->adjust_opacity = FALSE;
set_brightness_controls_sensitive (prefs_widget, FALSE); set_opacity_controls_sensitive (prefs_widget, FALSE);
} }
preferences_changed (prefs_widget->prefs); preferences_changed (prefs_widget->prefs);
@ -729,7 +729,7 @@ adjust_brightness_toggled_cb (GtkToggleButton *tb, PrefsWidget *prefs_widget)
} }
static void static void
brightness_adjust_changed_cb (GtkAdjustment *adjustment, opacity_adjust_changed_cb (GtkAdjustment *adjustment,
PrefsWidget *prefs_widget) PrefsWidget *prefs_widget)
{ {
g_return_if_fail (prefs_widget != NULL); 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 (prefs_widget->prefs != NULL);
g_return_if_fail (IS_PREFERENCES (prefs_widget->prefs)); 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); preferences_changed (prefs_widget->prefs);
capplet_widget_state_changed (CAPPLET_WIDGET (prefs_widget), TRUE); capplet_widget_state_changed (CAPPLET_WIDGET (prefs_widget), TRUE);
@ -769,10 +769,10 @@ set_background_controls_sensitive (PrefsWidget *prefs_widget, gboolean s)
} }
static void 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 ("opacity_low_label"), s);
gtk_widget_set_sensitive (WID ("brightness_adjust"), s); gtk_widget_set_sensitive (WID ("opacity_adjust"), s);
gtk_widget_set_sensitive (WID ("brightness_high_label"), s); gtk_widget_set_sensitive (WID ("opacity_high_label"), s);
} }