summaryrefslogtreecommitdiff
path: root/src/cairo-font.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cairo-font.c')
-rw-r--r--src/cairo-font.c33
1 files changed, 21 insertions, 12 deletions
diff --git a/src/cairo-font.c b/src/cairo-font.c
index 0aeb00b61..a74cac453 100644
--- a/src/cairo-font.c
+++ b/src/cairo-font.c
@@ -183,16 +183,18 @@ typedef struct {
static const cairo_cache_backend_t _cairo_simple_font_cache_backend;
+CAIRO_MUTEX_DECLARE(_global_simple_cache_mutex);
+
static void
_lock_global_simple_cache (void)
{
- /* FIXME: Perform locking here. */
+ CAIRO_MUTEX_LOCK (_global_simple_cache_mutex);
}
static void
_unlock_global_simple_cache (void)
{
- /* FIXME: Perform locking here. */
+ CAIRO_MUTEX_UNLOCK (_global_simple_cache_mutex);
}
static cairo_cache_t *
@@ -358,7 +360,8 @@ _cairo_simple_font_face_create_font (void *abstract_face,
const cairo_matrix_t *ctm,
cairo_scaled_font_t **scaled_font)
{
- const cairo_scaled_font_backend_t *backend = CAIRO_FONT_BACKEND_DEFAULT;
+ const cairo_scaled_font_backend_t * backend = CAIRO_SCALED_FONT_BACKEND_DEFAULT;
+
cairo_simple_font_face_t *simple_face = abstract_face;
return backend->create (simple_face->family, simple_face->slant, simple_face->weight,
@@ -383,7 +386,7 @@ static const cairo_font_face_backend_t _cairo_simple_font_face_backend = {
* Return value: a newly created #cairo_font_face_t, destroy with
* cairo_font_face_destroy()
**/
-cairo_private cairo_font_face_t *
+cairo_font_face_t *
_cairo_simple_font_face_create (const char *family,
cairo_font_slant_t slant,
cairo_font_weight_t weight)
@@ -451,16 +454,18 @@ typedef struct {
static const cairo_cache_backend_t _cairo_outer_font_cache_backend;
static const cairo_cache_backend_t _cairo_inner_font_cache_backend;
+CAIRO_MUTEX_DECLARE(_global_font_cache_mutex);
+
static void
_lock_global_font_cache (void)
{
- /* FIXME: Perform locking here. */
+ CAIRO_MUTEX_LOCK (_global_font_cache_mutex);
}
static void
_unlock_global_font_cache (void)
{
- /* FIXME: Perform locking here. */
+ CAIRO_MUTEX_UNLOCK (_global_font_cache_mutex);
}
static cairo_cache_t *
@@ -1177,21 +1182,25 @@ static const cairo_cache_backend_t cairo_image_cache_backend = {
_image_glyph_cache_destroy_cache
};
+CAIRO_MUTEX_DECLARE(_global_image_glyph_cache_mutex);
+
+static cairo_cache_t *
+_global_image_glyph_cache = NULL;
+
void
_cairo_lock_global_image_glyph_cache()
{
- /* FIXME: implement locking. */
+ CAIRO_MUTEX_LOCK (_global_image_glyph_cache_mutex);
}
void
_cairo_unlock_global_image_glyph_cache()
{
- /* FIXME: implement locking. */
+ _cairo_cache_shrink_to (_global_image_glyph_cache,
+ CAIRO_IMAGE_GLYPH_CACHE_MEMORY_DEFAULT);
+ CAIRO_MUTEX_UNLOCK (_global_image_glyph_cache_mutex);
}
-static cairo_cache_t *
-_global_image_glyph_cache = NULL;
-
cairo_cache_t *
_cairo_get_global_image_glyph_cache ()
{
@@ -1203,7 +1212,7 @@ _cairo_get_global_image_glyph_cache ()
if (_cairo_cache_init (_global_image_glyph_cache,
&cairo_image_cache_backend,
- CAIRO_IMAGE_GLYPH_CACHE_MEMORY_DEFAULT))
+ 0))
goto FAIL;
}