[cairo] finding the size of a cairo surface

Chris Wilson chris at chris-wilson.co.uk
Mon Nov 9 01:35:31 PST 2009

Excerpts from L A's message of Mon Nov 09 09:04:29 +0000 2009:
> I am trying to modify a piece of code that was written for
> cairo_image_surfaces. I would like to use cairo directfb surfaces
> instead of image surfaces (for hw accel)

I have to warn you that the only operation directfb can accelerate is the
2D blit to "upload-to-screen". Everything else is better done with the CPU
(image surface) intermediates. (Though glyphs could be accelerated under
rare circumstances, you'd probably lose due to migration.)

> and I am trying to avoid
> changing the API. The issue is the size of the surface. How can I
> replace cairo_image_surface_get_width/height calls?

The first question is how did you create the surface without knowing the
size... But if you truly do not want to change your own API, then:

	void get_surface_size (cairo_surface_t *surface,
			       int *width, int *height)
		cairo_t *cr;
		double x1, x2, y1, y2;

		cr = cairo_create (surface);
		cairo_clip_extents (surface, &x1, &y1, &x2, &y2);
		cairo_destroy (cr);

		*width = x2 - x1;
		*height = y2 - y1;

I am intrigued as to what you are using directfb for - just checking
that existing users will be able to easily migrate to a KMS/DRM world.
Chris Wilson, Intel Open Source Technology Centre

More information about the cairo mailing list