return memory_formats[format].depth;
}
+/*<private>
+ * gdk_memory_depth_merge:
+ * @depth1: the first depth
+ * @depth2: the second depth
+ *
+ * Returns a depth that can accomodate both given depths
+ * without any loss of precision.
+ *
+ * Returns: The merged depth
+ **/
+GdkMemoryDepth
+gdk_memory_depth_merge (GdkMemoryDepth depth1,
+ GdkMemoryDepth depth2)
+{
+ switch (depth1)
+ {
+ case GDK_MEMORY_U8:
+ return depth2;
+
+ case GDK_MEMORY_FLOAT32:
+ return GDK_MEMORY_FLOAT32;
+
+ case GDK_MEMORY_U16:
+ case GDK_MEMORY_FLOAT16:
+ if (depth2 == depth1 || depth2 == GDK_MEMORY_U8)
+ return depth1;
+ else
+ return GDK_MEMORY_FLOAT32;
+
+ default:
+ g_assert_not_reached ();
+ return GDK_MEMORY_U8;
+ }
+}
+
gboolean
gdk_memory_format_gl_format (GdkMemoryFormat format,
gboolean gles,
self->texture = g_object_ref (texture);
graphene_rect_init_from_rect (&node->bounds, bounds);
- node->prefers_high_depth = gdk_memory_format_get_depth (gdk_texture_get_format (texture)) != GDK_MEMORY_U8;
+ node->preferred_depth = gdk_memory_format_get_depth (gdk_texture_get_format (texture));
return node;
}
graphene_rect_init_from_rect (&node->bounds, bounds);
self->filter = filter;
- node->prefers_high_depth = gdk_memory_format_get_depth (gdk_texture_get_format (texture)) != GDK_MEMORY_U8;
+ node->preferred_depth = gdk_memory_format_get_depth (gdk_texture_get_format (texture));
return node;
}
self->children[0] = gsk_render_node_ref (children[0]);
graphene_rect_init_from_rect (&bounds, &(children[0]->bounds));
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (children[0]);
+ node->preferred_depth = gdk_memory_depth_merge (node->preferred_depth,
+ gsk_render_node_get_preferred_depth (children[0]));
for (guint i = 1; i < n_children; i++)
{
self->children[i] = gsk_render_node_ref (children[i]);
self->disjoint = self->disjoint && !graphene_rect_intersection (&bounds, &(children[i]->bounds), NULL);
graphene_rect_union (&bounds, &(children[i]->bounds), &bounds);
- node->prefers_high_depth = node->prefers_high_depth || gsk_render_node_prefers_high_depth (children[i]);
+ node->preferred_depth = gdk_memory_depth_merge (node->preferred_depth,
+ gsk_render_node_get_preferred_depth (children[i]));
node->offscreen_for_opacity = node->offscreen_for_opacity || children[i]->offscreen_for_opacity;
}
&child->bounds,
&node->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
graphene_rect_init_from_rect (&node->bounds, &child->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
graphene_rect_init_from_rect (&node->bounds, &child->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
else
graphene_rect_init_from_rect (&self->child_bounds, &child->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
graphene_rect_intersection (&self->clip, &child->bounds, &node->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
graphene_rect_intersection (&self->clip.bounds, &child->bounds, &node->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
gsk_shadow_node_get_bounds (self, &node->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
graphene_rect_union (&bottom->bounds, &top->bounds, &node->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (bottom) || gsk_render_node_prefers_high_depth (top);
+ node->preferred_depth = gdk_memory_depth_merge (gsk_render_node_get_preferred_depth (bottom),
+ gsk_render_node_get_preferred_depth (top));
return node;
}
graphene_rect_union (&start->bounds, &end->bounds, &node->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (start) || gsk_render_node_prefers_high_depth (end);
+ node->preferred_depth = gdk_memory_depth_merge (gsk_render_node_get_preferred_depth (start),
+ gsk_render_node_get_preferred_depth (end));
return node;
}
- clip_radius,
- clip_radius);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
self->render_node.bounds = source->bounds;
- self->render_node.prefers_high_depth = gsk_render_node_prefers_high_depth (source);
+ self->render_node.preferred_depth = gsk_render_node_get_preferred_depth (source);
return &self->render_node;
}
graphene_rect_init_from_rect (&node->bounds, &child->bounds);
- node->prefers_high_depth = gsk_render_node_prefers_high_depth (child);
+ node->preferred_depth = gsk_render_node_get_preferred_depth (child);
return node;
}
for (guint i = 0; i < n_children; i++)
{
self->children[i] = gsk_render_node_ref (children[i]);
- node->prefers_high_depth = node->prefers_high_depth || gsk_render_node_prefers_high_depth (children[i]);
+ node->preferred_depth = gdk_memory_depth_merge (node->preferred_depth,
+ gsk_render_node_get_preferred_depth (children[i]));
}
}
#include "gskrendernode.h"
#include <cairo.h>
+#include "gdk/gdkmemoryformatprivate.h"
+
G_BEGIN_DECLS
typedef struct _GskRenderNodeClass GskRenderNodeClass;
graphene_rect_t bounds;
- guint prefers_high_depth : 1;
+ guint preferred_depth : 2;
guint offscreen_for_opacity : 1;
};
void gsk_text_node_serialize_glyphs (GskRenderNode *self,
GString *str);
-GskRenderNode ** gsk_container_node_get_children (const GskRenderNode *node,
- guint *n_children);
+GskRenderNode ** gsk_container_node_get_children (const GskRenderNode *node,
+ guint *n_children);
-void gsk_transform_node_get_translate (const GskRenderNode *node,
- float *dx,
- float *dy);
-gboolean gsk_render_node_prefers_high_depth (const GskRenderNode *node);
+void gsk_transform_node_get_translate (const GskRenderNode *node,
+ float *dx,
+ float *dy);
+GdkMemoryDepth gsk_render_node_get_preferred_depth (const GskRenderNode *node);
-gboolean gsk_container_node_is_disjoint (const GskRenderNode *node);
+gboolean gsk_container_node_is_disjoint (const GskRenderNode *node);
-gboolean gsk_render_node_use_offscreen_for_opacity (const GskRenderNode *node);
+gboolean gsk_render_node_use_offscreen_for_opacity (const GskRenderNode *node);
G_END_DECLS