[cairo] cairo release 1.12.4 now available

Uli Schlachter psychon at znc.in
Sat Dec 22 15:38:07 PST 2012


Hi,

On 21.12.2012 14:43, Klaus Stengel wrote:
> On 10.12.2012 18:05, Uli Schlachter wrote:
>> On 10.12.2012 13:57, Klaus Stengel wrote:
>>> The main problem seems to be the function _render_operator() in
>>> cairo-xlib-render.c, which just translates any cairo operator to the
>>> corresponding XRender code without any checks. This function is used in
>>> various calls to XRender functions.
>> [...]
>>
>> This analysis seems correct.
> 
> so in order to fix this properly, it would be necessary to do the
> rendering in libcairo itself in case an operator ist not supported,
> probably using the software implementation from libpixman?

Yeah, exactly. The code for falling back to the image backend is already there,
this just needs a "return CAIRO_INT_STATUS_UNSUPPORTED" in the right places.

>> Let's see when someone comes around and fixes this.
> 
> It probably makes sense to file an entry in the bugtracker then; At
> least I didn't find anything mentioning that problem specifically yet.

Feel free.

>> For the mean time, I want to mention that cairo-xcb (and thus cairo-xlib-xcb,
>> see --enable-xlib-xcb) does not have this problem and can be used. Yay! :-)
> 
> Well, but switching to a different backend is no general solution as
> long as there is no way to override the X11 backend in existing
> applications somehow. In case of my problem with the Evolution mail
> client, the cairo backend is actually managed through GDK, which only
> supports XLib and no XCB as far as I can tell.

xlib-xcb means "make cairo-xcb implement the functions for cairo-xlib". This is
the only(?) exception to the rule that apps need to be changed to use a
different backend.

> But if the XCB interface is supposed to work, does it mean that the code
> to emulate those operations is already present somewhere in the XCB
> backend somewhere and just need to be backported to the classic X11
> interface?

I wouldn't call it "backported", but yeah, the code is already there:

http://cgit.freedesktop.org/cairo/tree/src/cairo-xcb-surface-render.c#n146

Plus the callers for this function, e.g.

http://cgit.freedesktop.org/cairo/tree/src/cairo-xcb-surface-render.c#n3523

Uli
-- 
"In the beginning the Universe was created. This has made a lot of
 people very angry and has been widely regarded as a bad move."


More information about the cairo mailing list