[vte/vte-next: 43/114] Make background tint colour use GdkRGBA
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte/vte-next: 43/114] Make background tint colour use GdkRGBA
- Date: Mon, 30 May 2011 17:10:21 +0000 (UTC)
commit c099e792bc45a0b46afa9dce1c11c9cdf79b19f8
Author: Christian Persch <chpe gnome org>
Date: Tue May 3 00:11:04 2011 +0200
Make background tint colour use GdkRGBA
Remove vte_terminal_set_background_tint_color and vte_terminal_set_opacity.
The opacity is now taken from the alpha component of the tint GdkRGBA.
doc/reference/vte-sections.txt | 2 -
src/vte-private.h | 3 +-
src/vte.c | 135 ++++++++--------------------------------
src/vte.h | 1 -
src/vteapp.c | 10 ++--
src/vtebg.c | 30 ++++-----
src/vtebg.h | 2 +-
src/vtedraw.c | 15 ++---
src/vtedraw.h | 7 +--
9 files changed, 53 insertions(+), 152 deletions(-)
---
diff --git a/doc/reference/vte-sections.txt b/doc/reference/vte-sections.txt
index a7e6972..c23e98f 100644
--- a/doc/reference/vte-sections.txt
+++ b/doc/reference/vte-sections.txt
@@ -43,12 +43,10 @@ vte_terminal_set_color_highlight_rgba
vte_terminal_set_colors
vte_terminal_set_colors_rgba
vte_terminal_set_default_colors
-vte_terminal_set_opacity
vte_terminal_set_background_image
vte_terminal_set_background_image_file
vte_terminal_set_background_saturation
vte_terminal_set_background_transparent
-vte_terminal_set_background_tint_color
vte_terminal_set_background_tint_color_rgba
vte_terminal_set_scroll_background
vte_terminal_set_cursor_shape
diff --git a/src/vte-private.h b/src/vte-private.h
index e57c909..5076f83 100644
--- a/src/vte-private.h
+++ b/src/vte-private.h
@@ -369,9 +369,8 @@ struct _VteTerminalPrivate {
gboolean bg_transparent;
GdkPixbuf *bg_pixbuf;
char *bg_file;
- PangoColor bg_tint_color;
+ GdkRGBA bg_tint_color;
guint16 bg_saturation; /* out of VTE_SATURATION_MAX */
- guint16 bg_opacity;
/* Key modifiers. */
GdkModifierType modifiers;
diff --git a/src/vte.c b/src/vte.c
index bd1a98a..c908733 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -144,7 +144,6 @@ enum {
PROP_AUDIBLE_BELL,
PROP_BACKGROUND_IMAGE_FILE,
PROP_BACKGROUND_IMAGE_PIXBUF,
- PROP_BACKGROUND_OPACITY,
PROP_BACKGROUND_SATURATION,
PROP_BACKGROUND_TINT_COLOR,
PROP_BACKGROUND_TRANSPARENT,
@@ -2735,31 +2734,6 @@ vte_terminal_set_colors_rgba(VteTerminal *terminal,
}
/**
- * vte_terminal_set_opacity:
- * @terminal: a #VteTerminal
- * @opacity: the new opacity
- *
- * Sets the opacity of the terminal background, were 0 means completely
- * transparent and 65535 means completely opaque.
- */
-void
-vte_terminal_set_opacity(VteTerminal *terminal, guint16 opacity)
-{
- VteTerminalPrivate *pvt;
-
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
-
- pvt = terminal->pvt;
-
- if (opacity == pvt->bg_opacity)
- return;
-
- pvt->bg_opacity = opacity;
-
- g_object_notify(G_OBJECT(terminal), "background-opacity");
-}
-
-/**
* vte_terminal_set_default_colors:
* @terminal: a #VteTerminal
*
@@ -7829,11 +7803,11 @@ vte_terminal_init(VteTerminal *terminal)
gtk_widget_ensure_style(&terminal->widget);
/* Set up background information. */
- pvt->bg_tint_color.red = 0;
- pvt->bg_tint_color.green = 0;
- pvt->bg_tint_color.blue = 0;
+ pvt->bg_tint_color.red = 0.;
+ pvt->bg_tint_color.green = 0.;
+ pvt->bg_tint_color.blue = 0.;
+ pvt->bg_tint_color.alpha = 1.;
pvt->bg_saturation = 0.4 * VTE_SATURATION_MAX;
- pvt->bg_opacity = 0xffff;
pvt->selection_block_mode = FALSE;
pvt->has_fonts = FALSE;
pvt->root_pixmap_changed_tag = 0;
@@ -10799,9 +10773,6 @@ vte_terminal_get_property (GObject *object,
case PROP_BACKGROUND_IMAGE_PIXBUF:
g_value_set_object (value, pvt->bg_pixbuf);
break;
- case PROP_BACKGROUND_OPACITY:
- g_value_set_double (value, (double) pvt->bg_opacity / (double) G_MAXUINT16);
- break;
case PROP_BACKGROUND_SATURATION:
g_value_set_double (value, (double) pvt->bg_saturation / (double) VTE_SATURATION_MAX);
break;
@@ -10906,14 +10877,11 @@ vte_terminal_set_property (GObject *object,
case PROP_BACKGROUND_IMAGE_PIXBUF:
vte_terminal_set_background_image (terminal, g_value_get_object (value));
break;
- case PROP_BACKGROUND_OPACITY:
- vte_terminal_set_opacity (terminal, g_value_get_double (value) * (double) G_MAXUINT16);
- break;
case PROP_BACKGROUND_SATURATION:
vte_terminal_set_background_saturation (terminal, g_value_get_double (value));
break;
case PROP_BACKGROUND_TINT_COLOR:
- vte_terminal_set_background_tint_color (terminal, g_value_get_boxed (value));
+ vte_terminal_set_background_tint_color_rgba (terminal, g_value_get_boxed (value));
break;
case PROP_BACKGROUND_TRANSPARENT:
vte_terminal_set_background_transparent (terminal, g_value_get_boolean (value));
@@ -11638,22 +11606,6 @@ vte_terminal_class_init(VteTerminalClass *klass)
G_PARAM_READWRITE | STATIC_PARAMS));
/**
- * VteTerminal:background-opacity:
- *
- * Sets the opacity of the terminal background, were 0.0 means completely
- * transparent and 1.0 means completely opaque.
- *
- * Since: 0.20
- */
- g_object_class_install_property
- (gobject_class,
- PROP_BACKGROUND_OPACITY,
- g_param_spec_double ("background-opacity", NULL, NULL,
- 0.0, 1.0,
- 1.0,
- G_PARAM_READWRITE | STATIC_PARAMS));
-
- /**
* VteTerminal:background-saturation:
*
* If a background image has been set using #VteTerminal:background-image-file: or
@@ -11691,7 +11643,7 @@ vte_terminal_class_init(VteTerminalClass *klass)
(gobject_class,
PROP_BACKGROUND_TINT_COLOR,
g_param_spec_boxed ("background-tint-color", NULL, NULL,
- GDK_TYPE_COLOR,
+ GDK_TYPE_RGBA,
G_PARAM_READWRITE | STATIC_PARAMS));
/**
@@ -12338,6 +12290,7 @@ vte_terminal_background_update(VteTerminal *terminal)
double saturation;
const PangoColor *entry;
GdkColor color;
+ GdkRGBA rgba;
/* If we're not realized yet, don't worry about it, because we get
* called when we realize. */
@@ -12353,9 +12306,9 @@ vte_terminal_background_update(VteTerminal *terminal)
entry = &terminal->pvt->palette[VTE_DEF_BG];
_vte_debug_print(VTE_DEBUG_BG,
- "Setting background color to (%d, %d, %d, %d).\n",
+ "Setting background color to (%d, %d, %d, %.3f).\n",
entry->red, entry->green, entry->blue,
- terminal->pvt->bg_opacity);
+ terminal->pvt->bg_tint_color.alpha);
/* Set the terminal widget background color since otherwise we
* won't draw it for VTE_BG_SOURCE_NONE. */
@@ -12364,11 +12317,11 @@ vte_terminal_background_update(VteTerminal *terminal)
color.blue = entry->blue;
gtk_widget_modify_bg (&terminal->widget, GTK_STATE_NORMAL, &color);
- _vte_draw_set_background_solid (terminal->pvt->draw,
- entry->red / 65535.,
- entry->green / 65535.,
- entry->blue / 65535.,
- terminal->pvt->bg_opacity / 65535.);
+ rgba.red = entry->red / 65535.;
+ rgba.green = entry->green / 65535.;
+ rgba.blue = entry->blue / 65535.;
+ rgba.alpha = terminal->pvt->bg_tint_color.alpha;
+ _vte_draw_set_background_solid (terminal->pvt->draw, &rgba);
/* If we're transparent, and either have no root image or are being
* told to update it, get a new copy of the root window. */
@@ -12478,9 +12431,9 @@ vte_terminal_set_background_saturation(VteTerminal *terminal, double saturation)
}
/**
- * vte_terminal_set_background_tint_color:
+ * vte_terminal_set_background_tint_color_rgba:
* @terminal: a #VteTerminal
- * @color: a color which the terminal background should be tinted to if its
+ * @color: (allow-none): a color which the terminal background should be tinted to if its
* saturation is not 1.0.
*
* If a background image has been set using
@@ -12493,34 +12446,26 @@ vte_terminal_set_background_saturation(VteTerminal *terminal, double saturation)
* the root window) and modify its pixel values. The initial tint color
* is black.
*
- * Since: 0.11
+ * Since: 0.30
*/
void
-vte_terminal_set_background_tint_color(VteTerminal *terminal,
- const GdkColor *color)
+vte_terminal_set_background_tint_color_rgba(VteTerminal *terminal,
+ const GdkRGBA *rgba)
{
VteTerminalPrivate *pvt;
- PangoColor *tint;
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_return_if_fail(color != NULL);
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
+ g_return_if_fail(rgba != NULL);
pvt = terminal->pvt;
- _vte_debug_print(VTE_DEBUG_MISC,
- "Setting background tint to %d,%d,%d.\n",
- terminal->pvt->bg_tint_color.red >> 8,
- terminal->pvt->bg_tint_color.green >> 8,
- terminal->pvt->bg_tint_color.blue >> 8);
- tint = &pvt->bg_tint_color;
- if (color->red == tint->red &&
- color->green == tint->green &&
- color->blue == tint->blue)
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Setting background tint to %.3f,%.3f,%.3f,%.3f\n",
+ rgba->red, rgba->green, rgba->blue, rgba->alpha);
+ if (gdk_rgba_equal(&pvt->bg_tint_color, rgba))
return;
- tint->red = color->red;
- tint->green = color->green;
- tint->blue = color->blue;
+ pvt->bg_tint_color = *rgba;
g_object_notify(G_OBJECT (terminal), "background-tint-color");
@@ -12528,34 +12473,6 @@ vte_terminal_set_background_tint_color(VteTerminal *terminal,
}
/**
- * vte_terminal_set_background_tint_color_rgba:
- * @terminal: a #VteTerminal
- * @color: (allow-none): a color which the terminal background should be tinted to if its
- * saturation is not 1.0.
- *
- * If a background image has been set using
- * vte_terminal_set_background_image(),
- * vte_terminal_set_background_image_file(), or
- * vte_terminal_set_background_transparent(), and the value set by
- * vte_terminal_set_background_saturation() is less than one, the terminal
- * will adjust the color of the image before drawing the image. To do so,
- * the terminal will create a copy of the background image (or snapshot of
- * the root window) and modify its pixel values. The initial tint color
- * is black.
- *
- * Since: 0.30
- */
-void
-vte_terminal_set_background_tint_color_rgba(VteTerminal *terminal,
- const GdkRGBA *rgba)
-{
- GdkColor color;
-
- gdk_color_from_rgba(&color, rgba);
- vte_terminal_set_background_tint_color(terminal, &color);
-}
-
-/**
* vte_terminal_set_background_transparent:
* @terminal: a #VteTerminal
* @transparent: whether the terminal should fake transparency
diff --git a/src/vte.h b/src/vte.h
index 6ad2b2e..c74ae51 100644
--- a/src/vte.h
+++ b/src/vte.h
@@ -278,7 +278,6 @@ void vte_terminal_set_background_saturation(VteTerminal *terminal,
double saturation);
void vte_terminal_set_background_transparent(VteTerminal *terminal,
gboolean transparent);
-void vte_terminal_set_opacity(VteTerminal *terminal, guint16 opacity);
/* Set whether or not the cursor blinks. */
void vte_terminal_set_cursor_blink_mode(VteTerminal *terminal,
diff --git a/src/vteapp.c b/src/vteapp.c
index e827795..90231e7 100644
--- a/src/vteapp.c
+++ b/src/vteapp.c
@@ -572,7 +572,8 @@ main(int argc, char **argv)
char *cursor_blink_mode_string = NULL;
char *cursor_shape_string = NULL;
char *scrollbar_policy_string = NULL;
- GdkColor fore, back, tint, highlight, cursor;
+ GdkColor fore, back, highlight, cursor;
+ GdkRGBA tint;
const GOptionEntry options[]={
{
"background", 'B', 0,
@@ -776,8 +777,8 @@ main(int argc, char **argv)
highlight.red = highlight.green = highlight.blue = 0xc000;
cursor.red = 0xffff;
cursor.green = cursor.blue = 0x8000;
- tint.red = tint.green = tint.blue = 0;
- tint = back;
+ tint.red = tint.green = tint.blue = 0.;
+ tint.alpha = .875;
gdk_window_set_debug_updates(debug);
@@ -895,9 +896,8 @@ main(int argc, char **argv)
vte_terminal_set_background_transparent(terminal,
TRUE);
}
- vte_terminal_set_background_tint_color(terminal, &tint);
+ vte_terminal_set_background_tint_color_rgba(terminal, &tint);
vte_terminal_set_colors(terminal, &fore, &back, NULL, 0);
- vte_terminal_set_opacity(terminal, 0xdddd);
if (highlight_set) {
vte_terminal_set_color_highlight(terminal,
&highlight);
diff --git a/src/vtebg.c b/src/vtebg.c
index c2a42ff..0670285 100644
--- a/src/vtebg.c
+++ b/src/vtebg.c
@@ -52,7 +52,7 @@ typedef struct {
GdkPixbuf *source_pixbuf;
char *source_file;
- PangoColor tint_color;
+ GdkRGBA tint_color;
double saturation;
cairo_surface_t *surface;
} VteBgCacheItem;
@@ -255,14 +255,6 @@ vte_bg_get_for_screen(GdkScreen *screen)
return bg;
}
-static gboolean
-vte_bg_colors_equal(const PangoColor *a, const PangoColor *b)
-{
- return (a->red >> 8) == (b->red >> 8) &&
- (a->green >> 8) == (b->green >> 8) &&
- (a->blue >> 8) == (b->blue >> 8);
-}
-
static void
vte_bg_cache_item_free(VteBgCacheItem *item)
{
@@ -346,7 +338,7 @@ vte_bg_cache_add(VteBg *bg, VteBgCacheItem *item)
* @source_type: a #VteBgSourceType
* @source_pixbuf: a #GdkPixbuf, or %NULL
* @source_file: path of an image file, or %NULL
- * @tint: a #PangoColor to use as tint color
+ * @tint: a #GdkRGBA to use as tint color
* @saturation: the saturation as a value between 0.0 and 1.0
*
* Returns: a reference to a #cairo_surface_t, or %NULL on if
@@ -357,7 +349,7 @@ vte_bg_cache_search(VteBg *bg,
VteBgSourceType source_type,
const GdkPixbuf *source_pixbuf,
const char *source_file,
- const PangoColor *tint,
+ const GdkRGBA *tint,
double saturation)
{
GList *i;
@@ -365,7 +357,7 @@ vte_bg_cache_search(VteBg *bg,
vte_bg_cache_prune(bg);
for (i = bg->pvt->cache; i != NULL; i = g_list_next(i)) {
VteBgCacheItem *item = i->data;
- if (vte_bg_colors_equal(&item->tint_color, tint) &&
+ if (gdk_rgba_equal (&item->tint_color, tint) &&
(saturation == item->saturation) &&
(source_type == item->source_type)) {
switch (source_type) {
@@ -409,7 +401,7 @@ vte_bg_get_surface(VteBg *bg,
VteBgSourceType source_type,
GdkPixbuf *source_pixbuf,
const char *source_file,
- const PangoColor *tint,
+ const GdkRGBA *tint,
double saturation,
cairo_surface_t *other)
{
@@ -419,6 +411,7 @@ vte_bg_get_surface(VteBg *bg,
cairo_surface_t *cached;
cairo_t *cr;
int width, height;
+ double alpha;
g_return_val_if_fail(VTE_IS_BG(bg), NULL);
pvt = bg->pvt;
@@ -502,12 +495,13 @@ vte_bg_get_surface(VteBg *bg,
#endif
cairo_paint (cr);
- if (saturation < 1.0) {
+ alpha = (1. - saturation) * tint->alpha;
+ if (alpha > 0.) {
cairo_set_source_rgba (cr,
- tint->red / 65535.,
- tint->green / 65535.,
- tint->blue / 65535.,
- 1 - saturation);
+ tint->red,
+ tint->green,
+ tint->blue,
+ alpha);
cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
cairo_paint (cr);
}
diff --git a/src/vtebg.h b/src/vtebg.h
index f2cf77b..700f892 100644
--- a/src/vtebg.h
+++ b/src/vtebg.h
@@ -61,7 +61,7 @@ vte_bg_get_surface(VteBg *bg,
VteBgSourceType source_type,
GdkPixbuf *source_pixbuf,
const char *source_file,
- const PangoColor *tint,
+ const GdkRGBA *tint,
double saturation,
cairo_surface_t *other);
diff --git a/src/vtedraw.c b/src/vtedraw.c
index 4f6d9ed..df19ec7 100644
--- a/src/vtedraw.c
+++ b/src/vtedraw.c
@@ -803,18 +803,15 @@ _vte_draw_end (struct _vte_draw *draw)
void
_vte_draw_set_background_solid(struct _vte_draw *draw,
- double red,
- double green,
- double blue,
- double opacity)
+ const GdkRGBA *color)
{
if (draw->bg_pattern)
cairo_pattern_destroy (draw->bg_pattern);
- draw->bg_pattern = cairo_pattern_create_rgba (red,
- green,
- blue,
- opacity);
+ draw->bg_pattern = cairo_pattern_create_rgba (color->red,
+ color->green,
+ color->blue,
+ color->alpha);
}
void
@@ -822,7 +819,7 @@ _vte_draw_set_background_image (struct _vte_draw *draw,
VteBgSourceType type,
GdkPixbuf *pixbuf,
const char *filename,
- const PangoColor *color,
+ const GdkRGBA *color,
double saturation)
{
cairo_surface_t *surface;
diff --git a/src/vtedraw.h b/src/vtedraw.h
index a183322..a25e8f1 100644
--- a/src/vtedraw.h
+++ b/src/vtedraw.h
@@ -69,15 +69,12 @@ void _vte_draw_start(struct _vte_draw *draw);
void _vte_draw_end(struct _vte_draw *draw);
void _vte_draw_set_background_solid(struct _vte_draw *draw,
- double red,
- double green,
- double blue,
- double opacity);
+ const GdkRGBA *color);
void _vte_draw_set_background_image(struct _vte_draw *draw,
VteBgSourceType type,
GdkPixbuf *pixbuf,
const char *file,
- const PangoColor *color,
+ const GdkRGBA *color,
double saturation);
void _vte_draw_set_background_scroll(struct _vte_draw *draw,
gint x, gint y);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]