[cairo] A hidden offset for the xlib backend

Bill Spitzak spitzak at d2.com
Tue Sep 7 13:06:45 PDT 2004

On Tuesday 07 September 2004 10:46 am, Owen Taylor wrote:

> Remember, "creating a backing pixmap" is just a bit of bookkeeping
> in X. It doesn't cost any more time to allocate megabyte of memory
> than 5 bytes of memory.

I find this hard to believe. Perhaps it can defer allocating the memory until 
the first drawing is done, but it is going to allocate it. And if you change 
the size rapidly and have more than one, you are going to get fragmentation.

> And keeping around a backing pixmap for every window on the screen
> certainly is extremely inefficient... if backing pixmaps are created
> temporarily, then they likely will be allocated in video RAM. If
> backing pixmaps are created permanently, then the first one gets
> the video ram, and the rest are in system ram.

Having only one backing pixmap at a time is interesting and I never 
considered it. Keeping the pixmap allows incremental update but this may not 
be as important as it once was. But certainly Mesa, the XFree86 xdbx 
extension, all this new Composite extension stuff, and also the OS/X and 
Longhorn and even old NeXT implementations allocate an entire off-screen 
image for every window.

> cairo_inverse_transform_point() certainly doesn't produce the desired
> result... say you have button press coordinates ... they are going
> to be relative to the window, not to GTK+'s temporary backing pixmap.

Okay I see now. I'm not sure what you are doing exactly though, it might be 
possible that you could be calling a GTK wrapper function that adds the known 
offsets to the cairo translated position. For mouse events you should use a 
different context that is the actual window, though this won't work for your 
clip-test example.

More information about the cairo mailing list