[gtk/hex-color-parse: 2/2] rgba: Use pango_color_parse_with_alpha
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/hex-color-parse: 2/2] rgba: Use pango_color_parse_with_alpha
- Date: Mon, 3 Aug 2020 03:31:01 +0000 (UTC)
commit 1f3327d32622f84f1f10d3ed7d02cc60130f8084
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Aug 2 23:23:49 2020 -0400
rgba: Use pango_color_parse_with_alpha
Use this newly exported pango function, so we
can support hex colors with alpha like #rrggbbaa.
Fixes: #2931
gdk/gdkrgba.c | 15 +++++++++------
testsuite/gdk/rgba.c | 8 ++++++++
2 files changed, 17 insertions(+), 6 deletions(-)
---
diff --git a/gdk/gdkrgba.c b/gdk/gdkrgba.c
index 20940db9d3..fac9d2efa5 100644
--- a/gdk/gdkrgba.c
+++ b/gdk/gdkrgba.c
@@ -170,19 +170,21 @@ parse_rgb_value (const char *str,
* - A standard name (Taken from the X11 rgb.txt file).
* - A hexadecimal value in the form “\#rgb”, “\#rrggbb”,
* “\#rrrgggbbb” or ”\#rrrrggggbbbb”
+ * - A hexadecimal value in the form “\#rgba”, “\#rrggbbaa”,
+ * or ”\#rrrrggggbbbbaaaa”
* - A RGB color in the form “rgb(r,g,b)” (In this case the color will
* have full opacity)
* - A RGBA color in the form “rgba(r,g,b,a)”
*
* Where “r”, “g”, “b” and “a” are respectively the red, green, blue and
- * alpha color values. In the last two cases, “r”, “g”, and “b” are either integers
- * in the range 0 to 255 or percentage values in the range 0% to 100%, and
- * a is a floating point value in the range 0 to 1.
+ * alpha color values. In the last two cases, “r”, “g”, and “b” are either
+ * integers in the range 0 to 255 or percentage values in the range 0% to
+ * 100%, and a is a floating point value in the range 0 to 1.
*
* Returns: %TRUE if the parsing succeeded
*/
gboolean
-gdk_rgba_parse (GdkRGBA *rgba,
+gdk_rgba_parse (GdkRGBA *rgba,
const char *spec)
{
gboolean has_alpha;
@@ -207,18 +209,19 @@ gdk_rgba_parse (GdkRGBA *rgba,
else
{
PangoColor pango_color;
+ guint16 alpha;
/* Resort on PangoColor for rgb.txt color
* map and '#' prefixed colors
*/
- if (pango_color_parse (&pango_color, str))
+ if (pango_color_parse_with_alpha (&pango_color, &alpha, str))
{
if (rgba)
{
rgba->red = pango_color.red / 65535.;
rgba->green = pango_color.green / 65535.;
rgba->blue = pango_color.blue / 65535.;
- rgba->alpha = 1;
+ rgba->alpha = alpha / 65535.;
}
return TRUE;
diff --git a/testsuite/gdk/rgba.c b/testsuite/gdk/rgba.c
index db3fbd3111..26a94655e2 100644
--- a/testsuite/gdk/rgba.c
+++ b/testsuite/gdk/rgba.c
@@ -57,6 +57,14 @@ test_color_parse (void)
res = gdk_rgba_parse (&color, "rgb(0,0,0)");
g_assert (res);
g_assert (gdk_rgba_equal (&color, &expected));
+
+ expected.red = 0.0;
+ expected.green = 0x8080 / 65535.;
+ expected.blue = 1.0;
+ expected.alpha = 0x8888 / 65535.;
+ res = gdk_rgba_parse (&color, "#0080ff88");
+ g_assert (res);
+ g_assert (gdk_rgba_equal (&color, &expected));
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]