[vte/vte-next: 46/114] Remove GdkColor APIs
- From: Christian Persch <chpe src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vte/vte-next: 46/114] Remove GdkColor APIs
- Date: Mon, 30 May 2011 17:10:37 +0000 (UTC)
commit 0c59c6a327a7b61a05bae352894d1c7652a4706f
Author: Christian Persch <chpe gnome org>
Date: Tue May 3 01:47:07 2011 +0200
Remove GdkColor APIs
... and use GdkRGBA throughout.
doc/reference/vte-sections.txt | 7 -
src/vte-private.h | 2 +-
src/vte.c | 562 ++++++++++++++--------------------------
src/vte.h | 33 +--
src/vteaccess.c | 14 +-
src/vtebg.c | 2 +-
src/vtedraw.c | 57 ++---
src/vtedraw.h | 9 +-
src/vteseq.c | 41 ++--
9 files changed, 251 insertions(+), 476 deletions(-)
---
diff --git a/doc/reference/vte-sections.txt b/doc/reference/vte-sections.txt
index c23e98f..e898478 100644
--- a/doc/reference/vte-sections.txt
+++ b/doc/reference/vte-sections.txt
@@ -28,19 +28,12 @@ vte_terminal_set_allow_bold
vte_terminal_get_allow_bold
vte_terminal_set_scroll_on_output
vte_terminal_set_scroll_on_keystroke
-vte_terminal_set_color_bold
vte_terminal_set_color_bold_rgba
-vte_terminal_set_color_foreground
vte_terminal_set_color_foreground_rgba
-vte_terminal_set_color_background
vte_terminal_set_color_background_rgba
-vte_terminal_set_color_dim
vte_terminal_set_color_dim_rgba
-vte_terminal_set_color_cursor
vte_terminal_set_color_cursor_rgba
-vte_terminal_set_color_highlight
vte_terminal_set_color_highlight_rgba
-vte_terminal_set_colors
vte_terminal_set_colors_rgba
vte_terminal_set_default_colors
vte_terminal_set_background_image
diff --git a/src/vte-private.h b/src/vte-private.h
index e1afe13..c4a92a0 100644
--- a/src/vte-private.h
+++ b/src/vte-private.h
@@ -332,7 +332,7 @@ struct _VteTerminalPrivate {
gboolean palette_initialized;
gboolean highlight_color_set;
gboolean cursor_color_set;
- PangoColor palette[VTE_PALETTE_SIZE];
+ GdkRGBA palette[VTE_PALETTE_SIZE];
/* Mouse cursors. */
gboolean mouse_cursor_visible;
diff --git a/src/vte.c b/src/vte.c
index 0277441..df67402 100644
--- a/src/vte.c
+++ b/src/vte.c
@@ -2160,26 +2160,20 @@ vte_terminal_new(void)
/* Set up a palette entry with a more-or-less match for the requested color. */
static void
vte_terminal_set_color_internal(VteTerminal *terminal, int entry,
- const GdkColor *proposed)
+ const GdkRGBA *proposed)
{
- PangoColor *color;
+ GdkRGBA *color;
color = &terminal->pvt->palette[entry];
-
- if (color->red == proposed->red &&
- color->green == proposed->green &&
- color->blue == proposed->blue) {
+ if (gdk_rgba_equal(color, proposed))
return;
- }
_vte_debug_print(VTE_DEBUG_MISC,
- "Set color[%d] to (%04x,%04x,%04x).\n", entry,
- proposed->red, proposed->green, proposed->blue);
+ "Set color[%d] to rgba(%.3f,%.3f,%.3f,%.3f).\n", entry,
+ proposed->red, proposed->green, proposed->blue, proposed->alpha);
/* Save the requested color. */
- color->red = proposed->red;
- color->green = proposed->green;
- color->blue = proposed->blue;
+ *color = *proposed;
/* If we're not realized yet, there's nothing else to do. */
if (! gtk_widget_get_realized (&terminal->widget)) {
@@ -2200,12 +2194,12 @@ vte_terminal_set_color_internal(VteTerminal *terminal, int entry,
}
static void
-vte_terminal_generate_bold(const PangoColor *foreground,
- const PangoColor *background,
+vte_terminal_generate_bold(const GdkRGBA *foreground,
+ const GdkRGBA *background,
double factor,
- GdkColor *bold)
+ GdkRGBA *bold)
{
- double fy, fcb, fcr, by, bcb, bcr, r, g, b;
+ double fy, fcb, fcr, by, bcb, bcr, r, g, b, a;
g_assert(foreground != NULL);
g_assert(background != NULL);
g_assert(bold != NULL);
@@ -2233,171 +2227,27 @@ vte_terminal_generate_bold(const PangoColor *foreground,
r = fy + 1.402 * fcr;
g = fy + 0.34414 * fcb - 0.71414 * fcr;
b = fy + 1.722 * fcb;
+ a = (factor * foreground->alpha) + ((1.0 - factor) * background->alpha);
_vte_debug_print(VTE_DEBUG_MISC,
- "Calculated bold (%d, %d, %d) = (%lf,%lf,%lf)",
- foreground->red, foreground->green, foreground->blue,
- r, g, b);
- bold->pixel = 0;
- bold->red = CLAMP(r, 0, 0xffff);
- bold->green = CLAMP(g, 0, 0xffff);
- bold->blue = CLAMP(b, 0, 0xffff);
- _vte_debug_print(VTE_DEBUG_MISC,
- "= (%04x,%04x,%04x).\n",
- bold->red, bold->green, bold->blue);
-}
-
-/**
- * vte_terminal_set_color_bold:
- * @terminal: a #VteTerminal
- * @bold: the new bold color
- *
- * Sets the color used to draw bold text in the default foreground color.
- */
-void
-vte_terminal_set_color_bold(VteTerminal *terminal, const GdkColor *bold)
-{
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_return_if_fail(bold != NULL);
-
- _vte_debug_print(VTE_DEBUG_MISC,
- "Set bold color to (%04x,%04x,%04x).\n",
- bold->red, bold->green, bold->blue);
- vte_terminal_set_color_internal(terminal, VTE_BOLD_FG, bold);
-}
-
-/**
- * vte_terminal_set_color_dim:
- * @terminal: a #VteTerminal
- * @dim: the new dim color
- *
- * Sets the color used to draw dim text in the default foreground color.
- */
-void
-vte_terminal_set_color_dim(VteTerminal *terminal, const GdkColor *dim)
-{
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_return_if_fail(dim != NULL);
-
- _vte_debug_print(VTE_DEBUG_MISC,
- "Set dim color to (%04x,%04x,%04x).\n",
- dim->red, dim->green, dim->blue);
- vte_terminal_set_color_internal(terminal, VTE_DIM_FG, dim);
-}
-
-/**
- * vte_terminal_set_color_foreground:
- * @terminal: a #VteTerminal
- * @foreground: the new foreground color
- *
- * Sets the foreground color used to draw normal text
- */
-void
-vte_terminal_set_color_foreground(VteTerminal *terminal,
- const GdkColor *foreground)
-{
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_return_if_fail(foreground != NULL);
-
- _vte_debug_print(VTE_DEBUG_MISC,
- "Set foreground color to (%04x,%04x,%04x).\n",
- foreground->red, foreground->green, foreground->blue);
- vte_terminal_set_color_internal(terminal, VTE_DEF_FG, foreground);
-}
-
-/**
- * vte_terminal_set_color_background:
- * @terminal: a #VteTerminal
- * @background: the new background color
- *
- * Sets the background color for text which does not have a specific background
- * color assigned. Only has effect when no background image is set and when
- * the terminal is not transparent.
- */
-void
-vte_terminal_set_color_background(VteTerminal *terminal,
- const GdkColor *background)
-{
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_return_if_fail(background != NULL);
-
+ "Calculated bold for fg(%.3f,%.3f,%.3f,%.3f) bg(%.3f,%.3f,%.3f,%.3f) is rgba(%.3f,%.3f,%.3f,%.3f) ",
+ foreground->red, foreground->green, foreground->blue, foreground->alpha,
+ background->red, background->green, background->blue, background->alpha,
+ r, g, b, a);
+ bold->red = CLAMP (r, 0., 1.);
+ bold->green = CLAMP (g, 0., 1.);
+ bold->blue = CLAMP (b, 0., 1.);
+ bold->alpha = CLAMP (a, 0., 1.);
_vte_debug_print(VTE_DEBUG_MISC,
- "Set background color to (%04x,%04x,%04x).\n",
- background->red, background->green, background->blue);
- vte_terminal_set_color_internal(terminal, VTE_DEF_BG, background);
-}
-
-/**
- * vte_terminal_set_color_cursor:
- * @terminal: a #VteTerminal
- * @cursor_background: (allow-none): the new color to use for the text cursor, or %NULL
- *
- * Sets the background color for text which is under the cursor. If %NULL, text
- * under the cursor will be drawn with foreground and background colors
- * reversed.
- *
- * Since: 0.11.11
- */
-void
-vte_terminal_set_color_cursor(VteTerminal *terminal,
- const GdkColor *cursor_background)
-{
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
-
- if (cursor_background != NULL) {
- _vte_debug_print(VTE_DEBUG_MISC,
- "Set cursor color to (%04x,%04x,%04x).\n",
- cursor_background->red,
- cursor_background->green,
- cursor_background->blue);
- vte_terminal_set_color_internal(terminal, VTE_CUR_BG,
- cursor_background);
- terminal->pvt->cursor_color_set = TRUE;
- } else {
- _vte_debug_print(VTE_DEBUG_MISC,
- "Cleared cursor color.\n");
- terminal->pvt->cursor_color_set = FALSE;
- }
-}
-
-/**
- * vte_terminal_set_color_highlight:
- * @terminal: a #VteTerminal
- * @highlight_background: (allow-none): the new color to use for highlighted text, or %NULL
- *
- * Sets the background color for text which is highlighted. If %NULL,
- * highlighted text (which is usually highlighted because it is selected) will
- * be drawn with foreground and background colors reversed.
- *
- * Since: 0.11.11
- */
-void
-vte_terminal_set_color_highlight(VteTerminal *terminal,
- const GdkColor *highlight_background)
-{
- g_return_if_fail(VTE_IS_TERMINAL(terminal));
-
- if (highlight_background != NULL) {
- _vte_debug_print(VTE_DEBUG_MISC,
- "Set highlight color to (%04x,%04x,%04x).\n",
- highlight_background->red,
- highlight_background->green,
- highlight_background->blue);
- vte_terminal_set_color_internal(terminal, VTE_DEF_HL,
- highlight_background);
- terminal->pvt->highlight_color_set = TRUE;
- } else {
- _vte_debug_print(VTE_DEBUG_MISC,
- "Cleared highlight color.\n");
- terminal->pvt->highlight_color_set = FALSE;
- }
+ "normed rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ bold->red, bold->green, bold->blue, bold->alpha);
}
/**
- * vte_terminal_set_colors:
+ * vte_terminal_set_colors_rgba:
* @terminal: a #VteTerminal
* @foreground: (allow-none): the new foreground color, or %NULL
* @background: (allow-none): the new background color, or %NULL
- * @palette: (array length=palette_size zero-terminated=0) (element-type Gdk.Color): the color palette
+ * @palette: (array length=palette_size zero-terminated=0) (element-type Gdk.RGBA): the color palette
* @palette_size: the number of entries in @palette
*
* The terminal widget uses a 28-color model comprised of the default foreground
@@ -2413,20 +2263,20 @@ vte_terminal_set_color_highlight(VteTerminal *terminal,
* @palette_size is 8 or 16, the third (dim) and possibly the second (bold)
* 8-color palettes are extrapolated from the new background color and the items
* in @palette.
+ *
+ * Since: 0.28
*/
void
-vte_terminal_set_colors(VteTerminal *terminal,
- const GdkColor *foreground,
- const GdkColor *background,
- const GdkColor *palette,
- glong palette_size)
+vte_terminal_set_colors_rgba(VteTerminal *terminal,
+ const GdkRGBA *foreground,
+ const GdkRGBA *background,
+ const GdkRGBA *palette,
+ gsize palette_size)
{
- guint i;
- GdkColor color;
+ gsize i;
g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_return_if_fail(palette_size >= 0);
g_return_if_fail((palette_size == 0) ||
(palette_size == 8) ||
(palette_size == 16) ||
@@ -2434,7 +2284,7 @@ vte_terminal_set_colors(VteTerminal *terminal,
(palette_size > 24 && palette_size < 256));
_vte_debug_print(VTE_DEBUG_MISC,
- "Set color palette [%ld elements].\n",
+ "Set color palette [%" G_GSIZE_FORMAT " elements].\n",
palette_size);
/* Accept NULL as the default foreground and background colors if we
@@ -2446,19 +2296,27 @@ vte_terminal_set_colors(VteTerminal *terminal,
background = &palette[0];
}
- memset(&color, 0, sizeof(color));
-
/* Initialize each item in the palette if we got any entries to work
* with. */
for (i=0; i < G_N_ELEMENTS(terminal->pvt->palette); i++) {
+ GdkRGBA color;
+
+ /* Take the supplied palette if there is one. */
+ if (i < palette_size) {
+ vte_terminal_set_color_internal(terminal, i, &palette[i]);
+ continue;
+ }
+
+ /* Create default color */
if (i < 16) {
- color.blue = (i & 4) ? 0xc000 : 0;
- color.green = (i & 2) ? 0xc000 : 0;
- color.red = (i & 1) ? 0xc000 : 0;
+ color.blue = (i & 4) ? 0.75 : 0.;
+ color.green = (i & 2) ? 0.75 : 0.;
+ color.red = (i & 1) ? 0.75 : 0.;
+ color.alpha = 1.0;
if (i > 7) {
- color.blue += 0x3fff;
- color.green += 0x3fff;
- color.red += 0x3fff;
+ color.blue += 0.25;
+ color.green += 0.25;
+ color.red += 0.25;
}
}
else if (i < 232) {
@@ -2467,30 +2325,30 @@ vte_terminal_set_colors(VteTerminal *terminal,
int red = (r == 0) ? 0 : r * 40 + 55;
int green = (g == 0) ? 0 : g * 40 + 55;
int blue = (b == 0) ? 0 : b * 40 + 55;
- color.red = red | red << 8 ;
- color.green = green | green << 8;
- color.blue = blue | blue << 8;
+ color.red = (red | red << 8) / 65535.;
+ color.green = (green | green << 8) / 65535.;
+ color.blue = (blue | blue << 8) / 65535.;
+ color.alpha = 1.;
} else if (i < 256) {
int shade = 8 + (i - 232) * 10;
- color.red = color.green = color.blue = shade | shade << 8;
+ color.red = color.green = color.blue = (shade | shade << 8) / 65535.;
+ color.alpha = 1.;
}
else switch (i) {
case VTE_DEF_BG:
if (background != NULL) {
color = *background;
} else {
- color.red = 0;
- color.blue = 0;
- color.green = 0;
+ color.red = color.green = color.blue = 0.;
+ color.alpha = 1.;
}
break;
case VTE_DEF_FG:
if (foreground != NULL) {
color = *foreground;
} else {
- color.red = 0xc000;
- color.blue = 0xc000;
- color.green = 0xc000;
+ color.red= color.green = color.blue = 0.75;
+ color.alpha = 1.;
}
break;
case VTE_BOLD_FG:
@@ -2504,23 +2362,16 @@ vte_terminal_set_colors(VteTerminal *terminal,
&terminal->pvt->palette[VTE_DEF_BG],
0.5,
&color);
- break;
+ break;
case VTE_DEF_HL:
- color.red = 0xc000;
- color.blue = 0xc000;
- color.green = 0xc000;
+ color.red = color.green = color.blue = 0.75;
+ color.alpha = 1.;
break;
case VTE_CUR_BG:
- color.red = 0x0000;
- color.blue = 0x0000;
- color.green = 0x0000;
+ color.red = color.green = color.blue = 0.;
+ color.alpha = 1.;
break;
- }
-
- /* Override from the supplied palette if there is one. */
- if ((glong) i < palette_size) {
- color = palette[i];
- }
+ }
/* Set up the color entry. */
vte_terminal_set_color_internal(terminal, i, &color);
@@ -2530,21 +2381,6 @@ vte_terminal_set_colors(VteTerminal *terminal,
terminal->pvt->palette_initialized = TRUE;
}
-static GdkColor *
-gdk_color_from_rgba (GdkColor *color,
- const GdkRGBA *rgba)
-{
- if (rgba == NULL)
- return NULL;
-
- color->red = rgba->red * 65535.;
- color->green = rgba->green * 65535.;
- color->blue = rgba->blue * 65535.;
- color->pixel = 0;
-
- return color;
-}
-
/**
* vte_terminal_set_color_bold_rgba:
* @terminal: a #VteTerminal
@@ -2555,23 +2391,24 @@ gdk_color_from_rgba (GdkColor *color,
*/
void
vte_terminal_set_color_bold_rgba(VteTerminal *terminal,
- const GdkRGBA *bold)
+ const GdkRGBA *rgba)
{
- GdkColor color;
+ GdkRGBA mixed;
- if (bold == NULL)
- {
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
+
+ if (rgba == NULL) {
vte_terminal_generate_bold(&terminal->pvt->palette[VTE_DEF_FG],
&terminal->pvt->palette[VTE_DEF_BG],
1.8,
- &color);
- }
- else
- {
- gdk_color_from_rgba(&color, bold);
+ &mixed);
+ rgba = &mixed;
}
- vte_terminal_set_color_bold(terminal, &color);
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Set bold color to rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ rgba->red, rgba->green, rgba->blue, rgba->alpha);
+ vte_terminal_set_color_internal(terminal, VTE_BOLD_FG, rgba);
}
/**
@@ -2586,23 +2423,24 @@ vte_terminal_set_color_bold_rgba(VteTerminal *terminal,
*/
void
vte_terminal_set_color_dim_rgba(VteTerminal *terminal,
- const GdkRGBA *dim)
+ const GdkRGBA *rgba)
{
- GdkColor color;
+ GdkRGBA mixed;
- if (dim == NULL)
- {
- vte_terminal_generate_bold(&terminal->pvt->palette[VTE_DEF_FG],
- &terminal->pvt->palette[VTE_DEF_BG],
- 0.5,
- &color);
- }
- else
- {
- gdk_color_from_rgba(&color, dim);
- }
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
- vte_terminal_set_color_dim(terminal, &color);
+ if (rgba == NULL) {
+ vte_terminal_generate_bold(&terminal->pvt->palette[VTE_DEF_FG],
+ &terminal->pvt->palette[VTE_DEF_BG],
+ 0.5,
+ &mixed);
+ rgba = &mixed;
+ }
+
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Set dim color to rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ rgba->red, rgba->green, rgba->blue, rgba->alpha);
+ vte_terminal_set_color_internal(terminal, VTE_DIM_FG, rgba);
}
/**
@@ -2616,12 +2454,15 @@ vte_terminal_set_color_dim_rgba(VteTerminal *terminal,
*/
void
vte_terminal_set_color_foreground_rgba(VteTerminal *terminal,
- const GdkRGBA *foreground)
+ const GdkRGBA *rgba)
{
- GdkColor color;
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
+ g_return_if_fail(rgba != NULL);
- vte_terminal_set_color_foreground(terminal,
- gdk_color_from_rgba(&color, foreground));
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Set foreground color to rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ rgba->red, rgba->green, rgba->blue, rgba->alpha);
+ vte_terminal_set_color_internal(terminal, VTE_DEF_FG, rgba);
}
/**
@@ -2637,12 +2478,15 @@ vte_terminal_set_color_foreground_rgba(VteTerminal *terminal,
*/
void
vte_terminal_set_color_background_rgba(VteTerminal *terminal,
- const GdkRGBA *background)
+ const GdkRGBA *rgba)
{
- GdkColor color;
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
+ g_return_if_fail(rgba != NULL);
- vte_terminal_set_color_background(terminal,
- gdk_color_from_rgba (&color, background));
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Set background color to rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ rgba->red, rgba->green, rgba->blue, rgba->alpha);
+ vte_terminal_set_color_internal(terminal, VTE_DEF_BG, rgba);
}
/**
@@ -2658,12 +2502,21 @@ vte_terminal_set_color_background_rgba(VteTerminal *terminal,
*/
void
vte_terminal_set_color_cursor_rgba(VteTerminal *terminal,
- const GdkRGBA *cursor_background)
+ const GdkRGBA *rgba)
{
- GdkColor color;
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
- vte_terminal_set_color_cursor(terminal,
- gdk_color_from_rgba(&color, cursor_background));
+ if (rgba != NULL) {
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Set cursor color to rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ rgba->red, rgba->green, rgba->blue, rgba->alpha);
+ vte_terminal_set_color_internal(terminal, VTE_CUR_BG, rgba);
+ terminal->pvt->cursor_color_set = TRUE;
+ } else {
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Cleared cursor color.\n");
+ terminal->pvt->cursor_color_set = FALSE;
+ }
}
/**
@@ -2679,58 +2532,21 @@ vte_terminal_set_color_cursor_rgba(VteTerminal *terminal,
*/
void
vte_terminal_set_color_highlight_rgba(VteTerminal *terminal,
- const GdkRGBA *highlight_background)
-{
- GdkColor color;
-
- vte_terminal_set_color_highlight(terminal,
- gdk_color_from_rgba(&color, highlight_background));
-}
-
-/**
- * vte_terminal_set_colors_rgba:
- * @terminal: a #VteTerminal
- * @foreground: (allow-none): the new foreground color, or %NULL
- * @background: (allow-none): the new background color, or %NULL
- * @palette: (array length=palette_size zero-terminated=0) (element-type Gdk.RGBA): the color palette
- * @palette_size: the number of entries in @palette
- *
- * The terminal widget uses a 28-color model comprised of the default foreground
- * and background colors, the bold foreground color, the dim foreground
- * color, an eight color palette, bold versions of the eight color palette,
- * and a dim version of the the eight color palette.
- *
- * @palette_size must be either 0, 8, 16, or 24, or between 25 and 255 inclusive.
- * If @foreground is %NULL and
- * @palette_size is greater than 0, the new foreground color is taken from
- * @palette[7]. If @background is %NULL and @palette_size is greater than 0,
- * the new background color is taken from @palette[0]. If
- * @palette_size is 8 or 16, the third (dim) and possibly the second (bold)
- * 8-color palettes are extrapolated from the new background color and the items
- * in @palette.
- *
- * Since: 0.28
- */
-void
-vte_terminal_set_colors_rgba(VteTerminal *terminal,
- const GdkRGBA *foreground,
- const GdkRGBA *background,
- const GdkRGBA *palette,
- gsize palette_size)
+ const GdkRGBA *rgba)
{
- GdkColor fg, bg, *pal;
- gsize i;
-
- pal = g_new (GdkColor, palette_size);
- for (i = 0; i < palette_size; ++i)
- gdk_color_from_rgba(&pal[i], &palette[i]);
-
- vte_terminal_set_colors(terminal,
- gdk_color_from_rgba(&fg, foreground),
- gdk_color_from_rgba(&bg, background),
- pal, palette_size);
+ g_return_if_fail(VTE_IS_TERMINAL(terminal));
- g_free (pal);
+ if (rgba != NULL) {
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Set highlight color to rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ rgba->red, rgba->green, rgba->blue, rgba->alpha);
+ vte_terminal_set_color_internal(terminal, VTE_DEF_HL, rgba);
+ terminal->pvt->highlight_color_set = TRUE;
+ } else {
+ _vte_debug_print(VTE_DEBUG_MISC,
+ "Cleared highlight color.\n");
+ terminal->pvt->highlight_color_set = FALSE;
+ }
}
/**
@@ -2743,7 +2559,7 @@ void
vte_terminal_set_default_colors(VteTerminal *terminal)
{
g_return_if_fail(VTE_IS_TERMINAL(terminal));
- vte_terminal_set_colors(terminal, NULL, NULL, NULL, 0);
+ vte_terminal_set_colors_rgba(terminal, NULL, NULL, NULL, 0);
}
@@ -4536,7 +4352,7 @@ _vte_terminal_visible_beep(VteTerminal *terminal)
GtkWidget *widget;
GtkAllocation allocation;
GtkStyle *style;
- PangoColor color;
+ GdkRGBA color;
widget = &terminal->widget;
@@ -4544,15 +4360,16 @@ _vte_terminal_visible_beep(VteTerminal *terminal)
style = gtk_widget_get_style (widget);
gtk_widget_get_allocation (widget, &allocation);
- color.red = style->fg[gtk_widget_get_state (widget)].red;
- color.green = style->fg[gtk_widget_get_state (widget)].green;
- color.blue = style->fg[gtk_widget_get_state (widget)].blue;
+ color.red = style->fg[gtk_widget_get_state (widget)].red / 65535.;
+ color.green = style->fg[gtk_widget_get_state (widget)].green / 65535.;
+ color.blue = style->fg[gtk_widget_get_state (widget)].blue / 65535.;
+ color.alpha = 1.0;
_vte_draw_start(terminal->pvt->draw);
_vte_draw_fill_rectangle(terminal->pvt->draw,
0, 0,
allocation.width, allocation.height,
- &color, VTE_DRAW_OPAQUE);
+ &color);
_vte_draw_end(terminal->pvt->draw);
/* Force the repaint, max delay of UPDATE_REPEAT_TIMEOUT */
@@ -5720,7 +5537,7 @@ vte_terminal_get_text_range_maybe_wrapped(VteTerminal *terminal,
const VteCell *pcell = NULL;
GString *string;
struct _VteCharAttributes attr;
- PangoColor fore, back, *palette;
+ GdkRGBA fore, back, *palette;
if (!is_selected)
is_selected = always_selected;
@@ -8333,8 +8150,7 @@ vte_terminal_realize(GtkWidget *widget)
VteTerminal *terminal;
GdkWindowAttr attributes;
GtkAllocation allocation;
- GdkColor color;
- guint attributes_mask = 0, i;
+ guint attributes_mask = 0;
_vte_debug_print(VTE_DEBUG_LIFECYCLE, "vte_terminal_realize()\n");
@@ -8394,15 +8210,6 @@ vte_terminal_realize(GtkWidget *widget)
vte_terminal_set_default_colors(terminal);
}
- /* Allocate colors. */
- for (i = 0; i < G_N_ELEMENTS(terminal->pvt->palette); i++) {
- color.red = terminal->pvt->palette[i].red;
- color.green = terminal->pvt->palette[i].green;
- color.blue = terminal->pvt->palette[i].blue;
- color.pixel = 0;
- vte_terminal_set_color_internal(terminal, i, &color);
- }
-
/* Set up input method support. FIXME: do we need to handle the
* "retrieve-surrounding" and "delete-surrounding" events? */
if (terminal->pvt->im_context != NULL) {
@@ -8598,7 +8405,7 @@ vte_terminal_unichar_is_local_graphic(VteTerminal *terminal, vteunistr c, gboole
static void
vte_terminal_fill_rectangle(VteTerminal *terminal,
- const PangoColor *color,
+ const GdkRGBA *color,
gint x,
gint y,
gint width,
@@ -8609,13 +8416,13 @@ vte_terminal_fill_rectangle(VteTerminal *terminal,
x + terminal->pvt->inner_border.left,
y + terminal->pvt->inner_border.top,
width, height,
- color, VTE_DRAW_OPAQUE);
+ color);
_vte_draw_end(terminal->pvt->draw);
}
static void
vte_terminal_draw_line(VteTerminal *terminal,
- const PangoColor *color,
+ const GdkRGBA *color,
gint x,
gint y,
gint xp,
@@ -8628,7 +8435,7 @@ vte_terminal_draw_line(VteTerminal *terminal,
static void
vte_terminal_draw_rectangle(VteTerminal *terminal,
- const PangoColor *color,
+ const GdkRGBA *color,
gint x,
gint y,
gint width,
@@ -8639,13 +8446,13 @@ vte_terminal_draw_rectangle(VteTerminal *terminal,
x + terminal->pvt->inner_border.left,
y + terminal->pvt->inner_border.top,
width, height,
- color, VTE_DRAW_OPAQUE);
+ color);
_vte_draw_end(terminal->pvt->draw);
}
static void
vte_terminal_draw_point(VteTerminal *terminal,
- const PangoColor *color,
+ const GdkRGBA *color,
gint x,
gint y)
{
@@ -8683,7 +8490,7 @@ vte_terminal_draw_graphic(VteTerminal *terminal, vteunistr c,
}
if (_vte_draw_char(terminal->pvt->draw, &request,
- &terminal->pvt->palette[fore], VTE_DRAW_OPAQUE, bold)) {
+ &terminal->pvt->palette[fore], bold)) {
/* We were able to draw with actual fonts. */
return TRUE;
}
@@ -9425,7 +9232,7 @@ vte_terminal_draw_cells(VteTerminal *terminal,
{
int i, x, y, ascent;
gint columns = 0;
- PangoColor *fg, *bg, *defbg;
+ const GdkRGBA *fg, *bg, *defbg;
g_assert(n > 0);
_VTE_DEBUG_IF(VTE_DEBUG_CELLS) {
@@ -9465,12 +9272,12 @@ vte_terminal_draw_cells(VteTerminal *terminal,
y + terminal->pvt->inner_border.top,
columns * column_width + bold,
row_height,
- bg, VTE_DRAW_OPAQUE);
+ bg);
}
} while (i < n);
_vte_draw_text(terminal->pvt->draw,
items, n,
- fg, VTE_DRAW_OPAQUE, bold);
+ fg, bold);
for (i = 0; i < n; i++) {
/* Deadjust for the border. */
items[i].x -= terminal->pvt->inner_border.left;
@@ -9521,23 +9328,33 @@ vte_terminal_draw_cells(VteTerminal *terminal,
}
}
-/* Try to map a PangoColor to a palette entry and return its index. */
+/* Try to map a GdkRGBA to a palette entry and return its index. */
static guint
-_vte_terminal_map_pango_color(VteTerminal *terminal, PangoColor *color)
+_vte_terminal_map_pango_color(VteTerminal *terminal, const PangoColor *pcolor)
{
- long distance[G_N_ELEMENTS(terminal->pvt->palette)];
+ double distance[G_N_ELEMENTS(terminal->pvt->palette)];
guint i, ret;
+ GdkRGBA color;
+
+ color.red = pcolor->red / 65535.;
+ color.green = pcolor->green / 65535.;
+ color.blue = pcolor->blue / 65535.;
+ color.alpha = 1.0;
- /* Calculate a "distance" value. Could stand to be improved a bit. */
+ /* Calculate a "distance" value. Could stand to be improved a bit. */
for (i = 0; i < G_N_ELEMENTS(distance); i++) {
- const PangoColor *entry = &terminal->pvt->palette[i];
- distance[i] = 0;
- distance[i] += ((entry->red >> 8) - (color->red >> 8)) *
- ((entry->red >> 8) - (color->red >> 8));
- distance[i] += ((entry->blue >> 8) - (color->blue >> 8)) *
- ((entry->blue >> 8) - (color->blue >> 8));
- distance[i] += ((entry->green >> 8) - (color->green >> 8)) *
- ((entry->green >> 8) - (color->green >> 8));
+ const GdkRGBA *entry = &terminal->pvt->palette[i];
+ GdkRGBA d;
+
+ d.red = entry->red - color.red;
+ d.green = entry->green - color.green;
+ d.blue = entry->blue - color.blue;
+ d.alpha = entry->alpha - color.alpha;
+
+ distance[i] = (d.red * d.red) +
+ (d.green * d.green) +
+ (d.blue * d.blue) +
+ (d.alpha * d.alpha);
}
/* Find the index of the minimum value. */
@@ -9549,12 +9366,13 @@ _vte_terminal_map_pango_color(VteTerminal *terminal, PangoColor *color)
}
_vte_debug_print(VTE_DEBUG_UPDATES,
- "mapped PangoColor(%04x,%04x,%04x) to "
- "palette entry (%04x,%04x,%04x)\n",
- color->red, color->green, color->blue,
+ "mapped rgba(%.3f,%.3f,%.3f,%.3f) to "
+ "palette entry rgba(%.3f,%.3f,%.3f,%.3f)\n",
+ color.red, color.green, color.blue, color.alpha,
terminal->pvt->palette[ret].red,
terminal->pvt->palette[ret].green,
- terminal->pvt->palette[ret].blue);
+ terminal->pvt->palette[ret].blue,
+ terminal->pvt->palette[ret].alpha);
return ret;
}
@@ -9868,7 +9686,7 @@ vte_terminal_draw_rows(VteTerminal *terminal,
y,
(j - i) * column_width + bold,
row_height,
- &terminal->pvt->palette[back], VTE_DRAW_OPAQUE);
+ &terminal->pvt->palette[back]);
}
/* We'll need to continue at the first cell which didn't
* match the first one in this set. */
@@ -9892,7 +9710,7 @@ vte_terminal_draw_rows(VteTerminal *terminal,
y,
(j - i) * column_width,
row_height,
- &terminal->pvt->palette[back], VTE_DRAW_OPAQUE);
+ &terminal->pvt->palette[back]);
}
i = j;
} while (i < end_column);
@@ -12288,9 +12106,9 @@ static gboolean
vte_terminal_background_update(VteTerminal *terminal)
{
double saturation;
- const PangoColor *entry;
- GdkColor color;
+ const GdkRGBA *entry;
GdkRGBA rgba;
+ GdkColor color;
/* If we're not realized yet, don't worry about it, because we get
* called when we realize. */
@@ -12306,21 +12124,19 @@ 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, %.3f).\n",
- entry->red, entry->green, entry->blue,
- terminal->pvt->bg_tint_color.alpha);
+ "Updating background color to rgba(%.3f,%.3f,%.3f,%.3f).\n",
+ entry->red, entry->green, entry->blue, entry->alpha);
/* Set the terminal widget background color since otherwise we
* won't draw it for VTE_BG_SOURCE_NONE. */
- color.red = entry->red;
- color.green = entry->green;
- color.blue = entry->blue;
+ color.pixel = 0;
+ color.red = entry->red * 65535.;
+ color.green = entry->green * 65535.;
+ color.blue = entry->blue * 65535.;
gtk_widget_modify_bg (&terminal->widget, GTK_STATE_NORMAL, &color);
- rgba.red = entry->red / 65535.;
- rgba.green = entry->green / 65535.;
- rgba.blue = entry->blue / 65535.;
- rgba.alpha = terminal->pvt->bg_tint_color.alpha;
+ rgba = *entry;
+ 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
@@ -12458,7 +12274,7 @@ vte_terminal_set_background_tint_color_rgba(VteTerminal *terminal,
pvt = terminal->pvt;
_vte_debug_print(VTE_DEBUG_MISC,
- "Setting background tint to %.3f,%.3f,%.3f,%.3f\n",
+ "Setting background tint to rgba(%.3f,%.3f,%.3f,%.3f)\n",
rgba->red, rgba->green, rgba->blue, rgba->alpha);
if (gdk_rgba_equal(&pvt->bg_tint_color, rgba))
return;
diff --git a/src/vte.h b/src/vte.h
index c74ae51..3a400d9 100644
--- a/src/vte.h
+++ b/src/vte.h
@@ -164,7 +164,7 @@ typedef struct _VteCharAttributes VteCharAttributes;
struct _VteCharAttributes {
/*< private >*/
long row, column;
- GdkColor fore, back;
+ GdkRGBA fore, back;
guint underline:1, strikethrough:1;
};
@@ -228,36 +228,19 @@ void vte_terminal_set_scroll_on_keystroke(VteTerminal *terminal,
gboolean scroll);
/* Set the color scheme. */
-void vte_terminal_set_color_dim(VteTerminal *terminal,
- const GdkColor *dim);
-void vte_terminal_set_color_bold(VteTerminal *terminal,
- const GdkColor *bold);
-void vte_terminal_set_color_foreground(VteTerminal *terminal,
- const GdkColor *foreground);
-void vte_terminal_set_color_background(VteTerminal *terminal,
- const GdkColor *background);
-void vte_terminal_set_color_cursor(VteTerminal *terminal,
- const GdkColor *cursor_background);
-void vte_terminal_set_color_highlight(VteTerminal *terminal,
- const GdkColor *highlight_background);
-void vte_terminal_set_colors(VteTerminal *terminal,
- const GdkColor *foreground,
- const GdkColor *background,
- const GdkColor *palette,
- glong palette_size);
void vte_terminal_set_color_bold_rgba(VteTerminal *terminal,
- const GdkRGBA *bold);
+ const GdkRGBA *rgba);
void vte_terminal_set_color_dim_rgba(VteTerminal *terminal,
- const GdkRGBA *dim);
+ const GdkRGBA *rgba);
void vte_terminal_set_color_foreground_rgba(VteTerminal *terminal,
- const GdkRGBA *foreground);
+ const GdkRGBA *rgba);
void vte_terminal_set_color_background_rgba(VteTerminal *terminal,
- const GdkRGBA *background);
+ const GdkRGBA *rgba);
void vte_terminal_set_color_cursor_rgba(VteTerminal *terminal,
- const GdkRGBA *cursor_background);
+ const GdkRGBA *rgba);
void vte_terminal_set_color_highlight_rgba(VteTerminal *terminal,
- const GdkRGBA *highlight_background);
+ const GdkRGBA *rgba);
void vte_terminal_set_colors_rgba(VteTerminal *terminal,
const GdkRGBA *foreground,
const GdkRGBA *background,
@@ -270,8 +253,6 @@ void vte_terminal_set_default_colors(VteTerminal *terminal);
void vte_terminal_set_background_image(VteTerminal *terminal, GdkPixbuf *image);
void vte_terminal_set_background_image_file(VteTerminal *terminal,
const char *path);
-void vte_terminal_set_background_tint_color(VteTerminal *terminal,
- const GdkColor *color);
void vte_terminal_set_background_tint_color_rgba(VteTerminal *terminal,
const GdkRGBA *rgba);
void vte_terminal_set_background_saturation(VteTerminal *terminal,
diff --git a/src/vteaccess.c b/src/vteaccess.c
index fd7f565..a1958cb 100644
--- a/src/vteaccess.c
+++ b/src/vteaccess.c
@@ -1353,14 +1353,12 @@ get_attribute_set (struct _VteCharAttributes attr)
}
at = g_new (AtkAttribute, 1);
at->name = g_strdup ("fg-color");
- at->value = g_strdup_printf ("%u,%u,%u",
- attr.fore.red, attr.fore.green, attr.fore.blue);
+ at->value = gdk_rgba_to_string (&attr.fore);
set = g_slist_append (set, at);
at = g_new (AtkAttribute, 1);
at->name = g_strdup ("bg-color");
- at->value = g_strdup_printf ("%u,%u,%u",
- attr.back.red, attr.back.green, attr.back.blue);
+ at->value = gdk_rgba_to_string (&attr.back);
set = g_slist_append (set, at);
return set;
@@ -1389,8 +1387,8 @@ vte_terminal_accessible_get_run_attributes(AtkText *text, gint offset,
cur_attr = g_array_index (priv->snapshot_attributes,
struct _VteCharAttributes,
i);
- if (!gdk_color_equal (&cur_attr.fore, &attr.fore) ||
- !gdk_color_equal (&cur_attr.back, &attr.back) ||
+ if (!gdk_rgba_equal (&cur_attr.fore, &attr.fore) ||
+ !gdk_rgba_equal (&cur_attr.back, &attr.back) ||
cur_attr.underline != attr.underline ||
cur_attr.strikethrough != attr.strikethrough) {
*start_offset = i + 1;
@@ -1402,8 +1400,8 @@ vte_terminal_accessible_get_run_attributes(AtkText *text, gint offset,
cur_attr = g_array_index (priv->snapshot_attributes,
struct _VteCharAttributes,
i);
- if (!gdk_color_equal (&cur_attr.fore, &attr.fore) ||
- !gdk_color_equal (&cur_attr.back, &attr.back) ||
+ if (!gdk_rgba_equal (&cur_attr.fore, &attr.fore) ||
+ !gdk_rgba_equal (&cur_attr.back, &attr.back) ||
cur_attr.underline != attr.underline ||
cur_attr.strikethrough != attr.strikethrough) {
*end_offset = i - 1;
diff --git a/src/vtebg.c b/src/vtebg.c
index 0670285..c53febd 100644
--- a/src/vtebg.c
+++ b/src/vtebg.c
@@ -390,7 +390,7 @@ vte_bg_cache_search(VteBg *bg,
* @source_type: a #VteBgSourceType
* @source_pixbuf: (allow-none): a #GdkPixbuf, or %NULL
* @source_file: (allow-none): 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
* @other: a #cairo_surface_t
*
diff --git a/src/vtedraw.c b/src/vtedraw.c
index df19ec7..75b2a2b 100644
--- a/src/vtedraw.c
+++ b/src/vtedraw.c
@@ -946,21 +946,9 @@ _vte_draw_has_bold (struct _vte_draw *draw)
}
static void
-set_source_color_alpha (cairo_t *cr,
- const PangoColor *color,
- guchar alpha)
-{
- cairo_set_source_rgba (cr,
- color->red / 65535.,
- color->green / 65535.,
- color->blue / 65535.,
- alpha / 255.);
-}
-
-static void
_vte_draw_text_internal (struct _vte_draw *draw,
struct _vte_draw_text_request *requests, gsize n_requests,
- const PangoColor *color, guchar alpha, gboolean bold)
+ const GdkRGBA *color, gboolean bold)
{
gsize i;
cairo_scaled_font_t *last_scaled_font = NULL;
@@ -970,7 +958,7 @@ _vte_draw_text_internal (struct _vte_draw *draw,
g_return_if_fail (font != NULL);
- set_source_color_alpha (draw->cr, color, alpha);
+ gdk_cairo_set_source_rgba (draw->cr, color);
cairo_set_operator (draw->cr, CAIRO_OPERATOR_OVER);
for (i = 0; i < n_requests; i++) {
@@ -1026,7 +1014,7 @@ _vte_draw_text_internal (struct _vte_draw *draw,
void
_vte_draw_text (struct _vte_draw *draw,
struct _vte_draw_text_request *requests, gsize n_requests,
- const PangoColor *color, guchar alpha, gboolean bold)
+ const GdkRGBA *color, gboolean bold)
{
g_return_if_fail (draw->started);
@@ -1038,13 +1026,14 @@ _vte_draw_text (struct _vte_draw *draw,
g_string_append_unichar (string, requests[n].c);
}
str = g_string_free (string, FALSE);
- g_printerr ("draw_text (\"%s\", len=%"G_GSIZE_FORMAT", color=(%d,%d,%d,%d), %s)\n",
- str, n_requests, color->red, color->green, color->blue,
- alpha, bold ? "bold" : "normal");
+ g_printerr ("draw_text (\"%s\", len=%"G_GSIZE_FORMAT", color=(%.3f,%.3f,%.3f,%.3f), %s)\n",
+ str, n_requests,
+ color->red, color->green, color->blue, color->alpha,
+ bold ? "bold" : "normal");
g_free (str);
}
- _vte_draw_text_internal (draw, requests, n_requests, color, alpha, bold);
+ _vte_draw_text_internal (draw, requests, n_requests, color, bold);
/* handle fonts that lack a bold face by double-striking */
if (bold && !_vte_draw_has_bold (draw)) {
@@ -1055,7 +1044,7 @@ _vte_draw_text (struct _vte_draw *draw,
requests[i].x++;
}
_vte_draw_text_internal (draw, requests,
- n_requests, color, alpha, FALSE);
+ n_requests, color, FALSE);
/* Now take a step back. */
for (i = 0; i < n_requests; i++) {
requests[i].x--;
@@ -1080,19 +1069,19 @@ _vte_draw_has_char (struct _vte_draw *draw, vteunistr c, gboolean bold)
gboolean
_vte_draw_char (struct _vte_draw *draw,
struct _vte_draw_text_request *request,
- const PangoColor *color, guchar alpha, gboolean bold)
+ const GdkRGBA *color, gboolean bold)
{
gboolean has_char;
_vte_debug_print (VTE_DEBUG_DRAW,
- "draw_char ('%c', color=(%d,%d,%d,%d), %s)\n",
+ "draw_char ('%c', color=(%.3f,%.3f,%.3f,%.3f), %s)\n",
request->c,
- color->red, color->green, color->blue,
- alpha, bold ? "bold" : "normal");
+ color->red, color->green, color->blue, color->alpha,
+ bold ? "bold" : "normal");
has_char =_vte_draw_has_char (draw, request->c, bold);
if (has_char)
- _vte_draw_text (draw, request, 1, color, alpha, bold);
+ _vte_draw_text (draw, request, 1, color, bold);
return has_char;
}
@@ -1100,19 +1089,18 @@ _vte_draw_char (struct _vte_draw *draw,
void
_vte_draw_draw_rectangle (struct _vte_draw *draw,
gint x, gint y, gint width, gint height,
- const PangoColor *color, guchar alpha)
+ const GdkRGBA *color)
{
g_return_if_fail (draw->started);
_vte_debug_print (VTE_DEBUG_DRAW,
- "draw_rectangle (%d, %d, %d, %d, color=(%d,%d,%d,%d))\n",
+ "draw_rectangle (%d, %d, %d, %d, color=(%.3f,%.3f,%.3f,%.3f))\n",
x,y,width,height,
- color->red, color->green, color->blue,
- alpha);
+ color->red, color->green, color->blue, color->alpha);
cairo_set_operator (draw->cr, CAIRO_OPERATOR_OVER);
cairo_rectangle (draw->cr, x+VTE_LINE_WIDTH/2., y+VTE_LINE_WIDTH/2., width-VTE_LINE_WIDTH, height-VTE_LINE_WIDTH);
- set_source_color_alpha (draw->cr, color, alpha);
+ gdk_cairo_set_source_rgba (draw->cr, color);
cairo_set_line_width (draw->cr, VTE_LINE_WIDTH);
cairo_stroke (draw->cr);
}
@@ -1120,18 +1108,17 @@ _vte_draw_draw_rectangle (struct _vte_draw *draw,
void
_vte_draw_fill_rectangle (struct _vte_draw *draw,
gint x, gint y, gint width, gint height,
- const PangoColor *color, guchar alpha)
+ const GdkRGBA *color)
{
g_return_if_fail (draw->started);
_vte_debug_print (VTE_DEBUG_DRAW,
- "draw_fill_rectangle (%d, %d, %d, %d, color=(%d,%d,%d,%d))\n",
+ "draw_fill_rectangle (%d, %d, %d, %d, color=(%.3f,%.3f,%.3f,%.3f))\n",
x,y,width,height,
- color->red, color->green, color->blue,
- alpha);
+ color->red, color->green, color->blue, color->alpha);
cairo_set_operator (draw->cr, CAIRO_OPERATOR_OVER);
cairo_rectangle (draw->cr, x, y, width, height);
- set_source_color_alpha (draw->cr, color, alpha);
+ gdk_cairo_set_source_rgba (draw->cr, color);
cairo_fill (draw->cr);
}
diff --git a/src/vtedraw.h b/src/vtedraw.h
index a25e8f1..751df6d 100644
--- a/src/vtedraw.h
+++ b/src/vtedraw.h
@@ -45,7 +45,6 @@ G_BEGIN_DECLS
returned by pango_layout would be screwed up for Chinese and Japanese
fonts without Hangul */
#define VTE_DRAW_DOUBLE_WIDE_IDEOGRAPHS 0x4e00, 0x4e8c, 0x4e09, 0x56db, 0x4e94
-#define VTE_DRAW_OPAQUE 0xff
#define VTE_DRAW_MAX_LENGTH 1024
struct _vte_draw;
@@ -92,19 +91,19 @@ int _vte_draw_get_char_width(struct _vte_draw *draw, vteunistr c, int columns,
void _vte_draw_text(struct _vte_draw *draw,
struct _vte_draw_text_request *requests, gsize n_requests,
- const PangoColor *color, guchar alpha, gboolean);
+ const GdkRGBA *color, gboolean);
gboolean _vte_draw_char(struct _vte_draw *draw,
struct _vte_draw_text_request *request,
- const PangoColor *color, guchar alpha, gboolean bold);
+ const GdkRGBA *color, gboolean bold);
gboolean _vte_draw_has_char(struct _vte_draw *draw, vteunistr c, gboolean bold);
void _vte_draw_fill_rectangle(struct _vte_draw *draw,
gint x, gint y, gint width, gint height,
- const PangoColor *color, guchar alpha);
+ const GdkRGBA *color);
void _vte_draw_draw_rectangle(struct _vte_draw *draw,
gint x, gint y, gint width, gint height,
- const PangoColor *color, guchar alpha);
+ const GdkRGBA *color);
G_END_DECLS
diff --git a/src/vteseq.c b/src/vteseq.c
index 669e653..67e8191 100644
--- a/src/vteseq.c
+++ b/src/vteseq.c
@@ -135,10 +135,11 @@ vte_ucs4_to_utf8 (VteTerminal *terminal, const guchar *in)
}
static gboolean
-vte_parse_color (const char *spec, GdkColor *color)
+vte_parse_color (const char *spec, GdkRGBA *rgba)
{
gchar *spec_copy = (gchar *) spec;
gboolean retval = FALSE;
+ GdkColor color;
/* gdk_color_parse doesnt handle all XParseColor formats. It only
* supports the #RRRGGGBBB format, not the rgb:RRR/GGG/BBB format.
@@ -158,18 +159,20 @@ vte_parse_color (const char *spec, GdkColor *color)
*cur++ = '\0';
}
- retval = gdk_color_parse (spec_copy, color);
-
+ retval = gdk_color_parse (spec_copy, &color);
if (spec_copy != spec)
g_free (spec_copy);
- return retval;
-}
-
-
-
+ if (!retval)
+ return FALSE;
+ rgba->red = color.red / 65535.;
+ rgba->green = color.green / 65535.;
+ rgba->blue = color.blue / 65535.;
+ rgba->alpha = 1.;
+ return TRUE;
+}
/* Emit a "deiconify-window" signal. */
static void
@@ -1807,7 +1810,7 @@ vte_sequence_handler_change_color (VteTerminal *terminal, GValueArray *params)
{
gchar **pairs, *str = NULL;
GValue *value;
- GdkColor color;
+ GdkRGBA color;
guint idx, i;
if (params != NULL && params->n_values > 0) {
@@ -1834,16 +1837,14 @@ vte_sequence_handler_change_color (VteTerminal *terminal, GValueArray *params)
continue;
if (vte_parse_color (pairs[i + 1], &color)) {
- terminal->pvt->palette[idx].red = color.red;
- terminal->pvt->palette[idx].green = color.green;
- terminal->pvt->palette[idx].blue = color.blue;
+ terminal->pvt->palette[idx] = color;
} else if (strcmp (pairs[i + 1], "?") == 0) {
gchar buf[128];
g_snprintf (buf, sizeof (buf),
_VTE_CAP_OSC "4;%u;rgb:%04x/%04x/%04x" BEL, idx,
- terminal->pvt->palette[idx].red,
- terminal->pvt->palette[idx].green,
- terminal->pvt->palette[idx].blue);
+ (guint) (terminal->pvt->palette[idx].red * 65535.),
+ (guint) (terminal->pvt->palette[idx].green * 65535.),
+ (guint) (terminal->pvt->palette[idx].blue * 65535.));
vte_terminal_feed_child (terminal, buf, -1);
}
}
@@ -3258,7 +3259,7 @@ vte_sequence_handler_change_cursor_color (VteTerminal *terminal, GValueArray *pa
{
gchar *name = NULL;
GValue *value;
- GdkColor color;
+ GdkRGBA color;
if (params != NULL && params->n_values > 0) {
value = g_value_array_get_nth (params, 0);
@@ -3272,14 +3273,14 @@ vte_sequence_handler_change_cursor_color (VteTerminal *terminal, GValueArray *pa
return;
if (vte_parse_color (name, &color))
- vte_terminal_set_color_cursor (terminal, &color);
+ vte_terminal_set_color_cursor_rgba (terminal, &color);
else if (strcmp (name, "?") == 0) {
gchar buf[128];
g_snprintf (buf, sizeof (buf),
_VTE_CAP_OSC "12;rgb:%04x/%04x/%04x" BEL,
- terminal->pvt->palette[VTE_CUR_BG].red,
- terminal->pvt->palette[VTE_CUR_BG].green,
- terminal->pvt->palette[VTE_CUR_BG].blue);
+ (guint) (terminal->pvt->palette[VTE_CUR_BG].red * 65535.),
+ (guint) (terminal->pvt->palette[VTE_CUR_BG].green * 65535.),
+ (guint) (terminal->pvt->palette[VTE_CUR_BG].blue * 65535.));
vte_terminal_feed_child (terminal, buf, -1);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]