mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-09 10:20:07 +00:00
rendernode: Colors should not influence depth decisions
Depth of a rendernode should be determined by the textures used and the compositing colorstate requirements. Colors influence the colorstate choice, so they indirectly influence the depth, but they should not influence the depth directly. Otherwise a single color in a border being rec2100-pq would make us switch to 16bit float. Also remove gdk_color_get_depth(), because it was only used here and because again: Colors should not influence depth decisions.
This commit is contained in:
parent
e29701a203
commit
b0e4be7fda
@ -229,20 +229,6 @@ gdk_color_from_rgba (GdkColor *self,
|
|||||||
gdk_color_finish (&tmp);
|
gdk_color_finish (&tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*< private >
|
|
||||||
* gdk_color_get_depth:
|
|
||||||
* @self: a `GdkColor`
|
|
||||||
*
|
|
||||||
* Returns the preferred depth for the color state of @self.
|
|
||||||
*
|
|
||||||
* Returns: the preferred depth
|
|
||||||
*/
|
|
||||||
GdkMemoryDepth
|
|
||||||
(gdk_color_get_depth) (const GdkColor *self)
|
|
||||||
{
|
|
||||||
return gdk_color_state_get_depth (self->color_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*< private >
|
/*< private >
|
||||||
* gdk_color_print:
|
* gdk_color_print:
|
||||||
* @self: the `GdkColor` to print
|
* @self: the `GdkColor` to print
|
||||||
|
@ -129,10 +129,3 @@ _gdk_color_to_float (const GdkColor *self,
|
|||||||
values);
|
values);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define gdk_color_get_depth(self) _gdk_color_get_depth ((self))
|
|
||||||
static inline GdkMemoryDepth
|
|
||||||
_gdk_color_get_depth (const GdkColor *self)
|
|
||||||
{
|
|
||||||
return gdk_color_state_get_depth (self->color_state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -83,7 +83,6 @@ gboolean gdk_color_equal (const GdkColor *color1,
|
|||||||
const GdkColor *color2);
|
const GdkColor *color2);
|
||||||
gboolean gdk_color_is_clear (const GdkColor *self);
|
gboolean gdk_color_is_clear (const GdkColor *self);
|
||||||
gboolean gdk_color_is_opaque (const GdkColor *self);
|
gboolean gdk_color_is_opaque (const GdkColor *self);
|
||||||
GdkMemoryDepth gdk_color_get_depth (const GdkColor *self);
|
|
||||||
|
|
||||||
void gdk_color_convert (GdkColor *self,
|
void gdk_color_convert (GdkColor *self,
|
||||||
GdkColorState *color_state,
|
GdkColorState *color_state,
|
||||||
|
@ -81,14 +81,6 @@ gsk_color_stops_are_opaque (const GskColorStop *stops,
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: Replace this once GdkColor lands */
|
|
||||||
static inline GdkMemoryDepth
|
|
||||||
my_color_stops_get_depth (const GskColorStop *stops,
|
|
||||||
gsize n_stops)
|
|
||||||
{
|
|
||||||
return gdk_color_state_get_depth (GDK_COLOR_STATE_SRGB);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline gboolean
|
static inline gboolean
|
||||||
color_state_is_hdr (GdkColorState *color_state)
|
color_state_is_hdr (GdkColorState *color_state)
|
||||||
{
|
{
|
||||||
@ -324,7 +316,7 @@ gsk_color_node_new2 (const GdkColor *color,
|
|||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->fully_opaque = gdk_color_is_opaque (color);
|
node->fully_opaque = gdk_color_is_opaque (color);
|
||||||
node->preferred_depth = gdk_color_get_depth (color);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
node->is_hdr = color_state_is_hdr (color->color_state);
|
node->is_hdr = color_state_is_hdr (color->color_state);
|
||||||
|
|
||||||
gdk_color_init_copy (&self->color, color);
|
gdk_color_init_copy (&self->color, color);
|
||||||
@ -505,7 +497,7 @@ gsk_linear_gradient_node_new (const graphene_rect_t *bounds,
|
|||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
||||||
node->preferred_depth = my_color_stops_get_depth (color_stops, n_color_stops);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
|
|
||||||
gsk_rect_init_from_rect (&node->bounds, bounds);
|
gsk_rect_init_from_rect (&node->bounds, bounds);
|
||||||
gsk_rect_normalize (&node->bounds);
|
gsk_rect_normalize (&node->bounds);
|
||||||
@ -561,7 +553,7 @@ gsk_repeating_linear_gradient_node_new (const graphene_rect_t *bounds,
|
|||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
||||||
node->preferred_depth = my_color_stops_get_depth (color_stops, n_color_stops);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
|
|
||||||
gsk_rect_init_from_rect (&node->bounds, bounds);
|
gsk_rect_init_from_rect (&node->bounds, bounds);
|
||||||
gsk_rect_normalize (&node->bounds);
|
gsk_rect_normalize (&node->bounds);
|
||||||
@ -845,7 +837,7 @@ gsk_radial_gradient_node_new (const graphene_rect_t *bounds,
|
|||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
||||||
node->preferred_depth = my_color_stops_get_depth (color_stops, n_color_stops);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
|
|
||||||
gsk_rect_init_from_rect (&node->bounds, bounds);
|
gsk_rect_init_from_rect (&node->bounds, bounds);
|
||||||
gsk_rect_normalize (&node->bounds);
|
gsk_rect_normalize (&node->bounds);
|
||||||
@ -917,7 +909,7 @@ gsk_repeating_radial_gradient_node_new (const graphene_rect_t *bounds,
|
|||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
||||||
node->preferred_depth = my_color_stops_get_depth (color_stops, n_color_stops);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
|
|
||||||
gsk_rect_init_from_rect (&node->bounds, bounds);
|
gsk_rect_init_from_rect (&node->bounds, bounds);
|
||||||
gsk_rect_normalize (&node->bounds);
|
gsk_rect_normalize (&node->bounds);
|
||||||
@ -1319,7 +1311,7 @@ gsk_conic_gradient_node_new (const graphene_rect_t *bounds,
|
|||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
node->fully_opaque = gsk_color_stops_are_opaque (color_stops, n_color_stops);
|
||||||
node->preferred_depth = my_color_stops_get_depth (color_stops, n_color_stops);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
|
|
||||||
gsk_rect_init_from_rect (&node->bounds, bounds);
|
gsk_rect_init_from_rect (&node->bounds, bounds);
|
||||||
gsk_rect_normalize (&node->bounds);
|
gsk_rect_normalize (&node->bounds);
|
||||||
@ -1789,11 +1781,7 @@ gsk_border_node_new2 (const GskRoundedRect *outline,
|
|||||||
self = gsk_render_node_alloc (GSK_BORDER_NODE);
|
self = gsk_render_node_alloc (GSK_BORDER_NODE);
|
||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->preferred_depth = gdk_memory_depth_merge (
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
gdk_memory_depth_merge (gdk_color_get_depth (&border_color[0]),
|
|
||||||
gdk_color_get_depth (&border_color[1])),
|
|
||||||
gdk_memory_depth_merge (gdk_color_get_depth (&border_color[2]),
|
|
||||||
gdk_color_get_depth (&border_color[3])));
|
|
||||||
|
|
||||||
gsk_rounded_rect_init_copy (&self->outline, outline);
|
gsk_rounded_rect_init_copy (&self->outline, outline);
|
||||||
memcpy (self->border_width, border_width, sizeof (self->border_width));
|
memcpy (self->border_width, border_width, sizeof (self->border_width));
|
||||||
@ -2811,7 +2799,7 @@ gsk_inset_shadow_node_new2 (const GskRoundedRect *outline,
|
|||||||
self = gsk_render_node_alloc (GSK_INSET_SHADOW_NODE);
|
self = gsk_render_node_alloc (GSK_INSET_SHADOW_NODE);
|
||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->preferred_depth = gdk_color_get_depth (color);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
|
|
||||||
gsk_rounded_rect_init_copy (&self->outline, outline);
|
gsk_rounded_rect_init_copy (&self->outline, outline);
|
||||||
gdk_color_init_copy (&self->color, color);
|
gdk_color_init_copy (&self->color, color);
|
||||||
@ -3207,7 +3195,7 @@ gsk_outset_shadow_node_new2 (const GskRoundedRect *outline,
|
|||||||
self = gsk_render_node_alloc (GSK_OUTSET_SHADOW_NODE);
|
self = gsk_render_node_alloc (GSK_OUTSET_SHADOW_NODE);
|
||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->preferred_depth = gdk_color_get_depth (color);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
|
|
||||||
gsk_rounded_rect_init_copy (&self->outline, outline);
|
gsk_rounded_rect_init_copy (&self->outline, outline);
|
||||||
gdk_color_init_copy (&self->color, color);
|
gdk_color_init_copy (&self->color, color);
|
||||||
@ -5801,7 +5789,6 @@ gsk_shadow_node_new2 (GskRenderNode *child,
|
|||||||
GskShadowNode *self;
|
GskShadowNode *self;
|
||||||
GskRenderNode *node;
|
GskRenderNode *node;
|
||||||
gsize i;
|
gsize i;
|
||||||
GdkMemoryDepth depth;
|
|
||||||
gboolean is_hdr;
|
gboolean is_hdr;
|
||||||
|
|
||||||
g_return_val_if_fail (GSK_IS_RENDER_NODE (child), NULL);
|
g_return_val_if_fail (GSK_IS_RENDER_NODE (child), NULL);
|
||||||
@ -5816,7 +5803,6 @@ gsk_shadow_node_new2 (GskRenderNode *child,
|
|||||||
self->n_shadows = n_shadows;
|
self->n_shadows = n_shadows;
|
||||||
self->shadows = g_new (GskShadow2, n_shadows);
|
self->shadows = g_new (GskShadow2, n_shadows);
|
||||||
|
|
||||||
depth = gsk_render_node_get_preferred_depth (child);
|
|
||||||
is_hdr = gsk_render_node_is_hdr (child);
|
is_hdr = gsk_render_node_is_hdr (child);
|
||||||
|
|
||||||
for (i = 0; i < n_shadows; i++)
|
for (i = 0; i < n_shadows; i++)
|
||||||
@ -5824,11 +5810,10 @@ gsk_shadow_node_new2 (GskRenderNode *child,
|
|||||||
gdk_color_init_copy (&self->shadows[i].color, &shadows[i].color);
|
gdk_color_init_copy (&self->shadows[i].color, &shadows[i].color);
|
||||||
graphene_point_init_from_point (&self->shadows[i].offset, &shadows[i].offset);
|
graphene_point_init_from_point (&self->shadows[i].offset, &shadows[i].offset);
|
||||||
self->shadows[i].radius = shadows[i].radius;
|
self->shadows[i].radius = shadows[i].radius;
|
||||||
depth = gdk_memory_depth_merge (depth, gdk_color_get_depth (&shadows[i].color));
|
|
||||||
is_hdr = is_hdr || color_state_is_hdr (shadows[i].color.color_state);
|
is_hdr = is_hdr || color_state_is_hdr (shadows[i].color.color_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
node->preferred_depth = depth;
|
node->preferred_depth = gsk_render_node_get_preferred_depth (child);
|
||||||
node->is_hdr = is_hdr;
|
node->is_hdr = is_hdr;
|
||||||
|
|
||||||
gsk_shadow_node_get_bounds (self, &node->bounds);
|
gsk_shadow_node_get_bounds (self, &node->bounds);
|
||||||
@ -6520,7 +6505,7 @@ gsk_text_node_new2 (PangoFont *font,
|
|||||||
self = gsk_render_node_alloc (GSK_TEXT_NODE);
|
self = gsk_render_node_alloc (GSK_TEXT_NODE);
|
||||||
node = (GskRenderNode *) self;
|
node = (GskRenderNode *) self;
|
||||||
node->offscreen_for_opacity = FALSE;
|
node->offscreen_for_opacity = FALSE;
|
||||||
node->preferred_depth = gdk_color_get_depth (color);
|
node->preferred_depth = GDK_MEMORY_NONE;
|
||||||
node->is_hdr = color_state_is_hdr (color->color_state);
|
node->is_hdr = color_state_is_hdr (color->color_state);
|
||||||
|
|
||||||
self->fontmap = g_object_ref (pango_font_get_font_map (font));
|
self->fontmap = g_object_ref (pango_font_get_font_map (font));
|
||||||
|
Loading…
Reference in New Issue
Block a user