diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-01-18 21:53:42 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-01-22 23:01:50 +0000 |
commit | f617d5fc982f749d0981c81c1de1be8dc3632717 (patch) | |
tree | cd188075e8decf98ce40fd1fdd5b59ca6f7935a1 /src/cairo-analysis-surface.c | |
parent | 82f8aa548d70acf51b319000d7a5c176fc73da64 (diff) |
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
Diffstat (limited to 'src/cairo-analysis-surface.c')
-rw-r--r-- | src/cairo-analysis-surface.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/cairo-analysis-surface.c b/src/cairo-analysis-surface.c index b777abc1..1922bc50 100644 --- a/src/cairo-analysis-surface.c +++ b/src/cairo-analysis-surface.c @@ -717,7 +717,9 @@ _cairo_analysis_surface_create (cairo_surface_t *target) /* I believe the content type here is truly arbitrary. I'm quite * sure nothing will ever use this value. */ - _cairo_surface_init (&surface->base, &cairo_analysis_surface_backend, + _cairo_surface_init (&surface->base, + &cairo_analysis_surface_backend, + NULL, /* device */ CAIRO_CONTENT_COLOR_ALPHA); cairo_matrix_init_identity (&surface->ctm); @@ -907,7 +909,10 @@ _cairo_null_surface_create (cairo_content_t content) return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } - _cairo_surface_init (surface, &cairo_null_surface_backend, content); + _cairo_surface_init (surface, + &cairo_null_surface_backend, + NULL, /* device */ + content); return surface; } |