diff options
Diffstat (limited to 'src/cairo-font.c')
-rw-r--r-- | src/cairo-font.c | 33 |
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; } |