typedef struct {
int timestamp;
- int stored;
GskGLCachedGlyph *glyphs[];
} TextRenderData;
static inline TextRenderData *
-get_render_data (GskRenderNode *node,
- GskGLGlyphCache *cache)
+ensure_render_data (GskRenderNode *node,
+ GskGLGlyphCache *cache)
{
TextRenderData *data;
int num_glyphs;
num_glyphs = gsk_text_node_get_num_glyphs (node);
- data = gsk_text_node_get_render_data (node, cache);
+ data = gsk_text_node_get_render_data (node);
if (data)
{
if (data->timestamp < cache->atlas_timestamp)
{
data = g_new0 (TextRenderData, sizeof (TextRenderData) + sizeof (gpointer) * num_glyphs);
data->timestamp = cache->atlas_timestamp;
+
+ gsk_text_node_set_render_data (node, data);
}
return data;
}
-static inline void
-set_render_data (GskRenderNode *node,
- GskGLGlyphCache *cache,
- TextRenderData *data)
-{
- if (!data->stored)
- {
- data->stored = 1;
- if (!gsk_text_node_set_render_data (node, cache, data))
- g_free (data);
- }
-}
-
static inline void
render_text_node (GskGLRenderer *self,
GskRenderNode *node,
ops_set_color (builder, color);
}
- render_data = get_render_data (node, self->glyph_cache);
+ render_data = ensure_render_data (node, self->glyph_cache);
memset (&lookup, 0, sizeof (CacheKeyData));
lookup.data.font = (PangoFont *)font;
next:
x_position += gi->geometry.width;
}
-
- set_render_data (node, self->glyph_cache, render_data);
}
static inline void
GdkRGBA color;
graphene_point_t offset;
- gpointer render_key;
gpointer render_data;
-
guint num_glyphs;
PangoGlyphInfo glyphs[];
};
self->has_color_glyphs = font_has_color_glyphs (font);
self->color = *color;
self->offset = *offset;
- self->render_key = NULL;
self->render_data = NULL;
self->num_glyphs = glyphs->num_glyphs;
memcpy (self->glyphs, glyphs->glyphs, sizeof (PangoGlyphInfo) * glyphs->num_glyphs);
return &self->offset;
}
-gboolean
+void
gsk_text_node_set_render_data (GskRenderNode *node,
- gpointer key,
gpointer data)
{
GskTextNode *self = (GskTextNode *) node;
- if (self->render_key != NULL)
- return FALSE;
-
- self->render_key = key;
self->render_data = data;
-
- return TRUE;
}
gpointer
-gsk_text_node_get_render_data (GskRenderNode *node,
- gpointer key)
+gsk_text_node_get_render_data (GskRenderNode *node)
{
GskTextNode *self = (GskTextNode *) node;
- if (self->render_key != key)
- return NULL;
-
return self->render_data;
}
void gsk_render_node_diff_impossible (GskRenderNode *node1,
GskRenderNode *node2,
cairo_region_t *region);
-gboolean gsk_text_node_set_render_data (GskRenderNode *node,
- gpointer key,
+void gsk_text_node_set_render_data (GskRenderNode *node,
gpointer data);
-gpointer gsk_text_node_get_render_data (GskRenderNode *node,
- gpointer key);
+gpointer gsk_text_node_get_render_data (GskRenderNode *node);