mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-09-19 21:40:22 +00:00
css: Add gtk_css_color_to_color
This api lets one obtain a color state and color values from a GtkCssColor. We don't want to force everything though sRGB, but we can't quite avoid conversion here, since we don't have a 100% match between the css color spaces and color states. css color cleanup
This commit is contained in:
parent
c9c0d444a2
commit
f9612533c2
@ -19,6 +19,7 @@
|
||||
|
||||
#include "gtkcsscolorprivate.h"
|
||||
#include "gtkcolorutilsprivate.h"
|
||||
#include "gdkcolorstateprivate.h"
|
||||
|
||||
/* {{{ Initialization */
|
||||
|
||||
@ -1163,5 +1164,52 @@ gtk_css_color_interpolation_method_print (GtkCssColorSpace in,
|
||||
}
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* {{{ GdkColor conversion */
|
||||
|
||||
void
|
||||
gtk_css_color_to_color (const GtkCssColor *css,
|
||||
GdkColor *color)
|
||||
{
|
||||
switch (css->color_space)
|
||||
{
|
||||
case GTK_CSS_COLOR_SPACE_SRGB:
|
||||
gdk_color_init (color, GDK_COLOR_STATE_SRGB, css->values);
|
||||
break;
|
||||
|
||||
case GTK_CSS_COLOR_SPACE_SRGB_LINEAR:
|
||||
gdk_color_init (color, GDK_COLOR_STATE_SRGB_LINEAR, css->values);
|
||||
break;
|
||||
|
||||
case GTK_CSS_COLOR_SPACE_REC2100_PQ:
|
||||
gdk_color_init (color, GDK_COLOR_STATE_REC2100_PQ, css->values);
|
||||
break;
|
||||
|
||||
case GTK_CSS_COLOR_SPACE_HSL:
|
||||
case GTK_CSS_COLOR_SPACE_HWB:
|
||||
case GTK_CSS_COLOR_SPACE_OKLAB:
|
||||
case GTK_CSS_COLOR_SPACE_OKLCH:
|
||||
{
|
||||
GtkCssColor tmp;
|
||||
gtk_css_color_convert (css, GTK_CSS_COLOR_SPACE_SRGB, &tmp);
|
||||
gdk_color_init (color, GDK_COLOR_STATE_SRGB, tmp.values);
|
||||
}
|
||||
break;
|
||||
|
||||
case GTK_CSS_COLOR_SPACE_REC2020:
|
||||
case GTK_CSS_COLOR_SPACE_DISPLAY_P3:
|
||||
case GTK_CSS_COLOR_SPACE_XYZ:
|
||||
{
|
||||
GtkCssColor tmp;
|
||||
gtk_css_color_convert (css, GTK_CSS_COLOR_SPACE_REC2100_PQ, &tmp);
|
||||
gdk_color_init (color, GDK_COLOR_STATE_REC2100_PQ, tmp.values);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
/* vim:set foldmethod=marker expandtab: */
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include "gtk/css/gtkcssparserprivate.h"
|
||||
#include "gtkcsstypesprivate.h"
|
||||
#include "gdk/gdkcolorprivate.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@ -115,4 +116,13 @@ void gtk_css_color_interpolation_method_print (GtkCssColorSpace in,
|
||||
GtkCssHueInterpolation interp,
|
||||
GString *string);
|
||||
|
||||
static inline gboolean
|
||||
gtk_css_color_is_clear (const GtkCssColor *color)
|
||||
{
|
||||
return color->values[3] < (float) 0x00ff / (float) 0xffff;
|
||||
}
|
||||
|
||||
void gtk_css_color_to_color (const GtkCssColor *css,
|
||||
GdkColor *color);
|
||||
|
||||
G_END_DECLS
|
||||
|
Loading…
Reference in New Issue
Block a user