Re: Firefox/Gtk3 - possible cairo clipping bug
Martin Stransky <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
On 20.7.2013 13:47, Uli Schlachter wrote: [...] > Doesn't Mozilla bundle its own copy of cairo? How does this even work? > Firefox would use its own copy of cairo while Gtk3 links against libcairo and > uses another version. > > AFAIR there is some pre-processor magic to rename the symbols of the bundled > cairo copy, but does anything make sure that no cairo state is passed between > the bundled and the system cairo copy? > > (I don't think that this has anything to do with the issue at hand, because I > would expect crashes if something goes wrong here. This question just came to my > mind.) Hi, Mozilla can use both - embedded one or system one. The Firefox Gtk3 port uses the system cairo, because as you point it those two can't be mixed. >> Do you guys have an idea where should I look at? Any debugging hints? > [...] > > If you think that you are seeing a cairo issue, it might be interesting to know > which cairo version you are using and if you also tried older/newer cairo versions. > > Also, assuming you are using cairo-xlib, it might be worth a try to set > CAIRO_DEBUG=xrender-version=-1.-1 or CAIRO_DEBUG=xrender-version=0.0 in the > environment. This should cause quite different code paths to be used inside of > cairo. > > However, in comment [0] this doesn't sound like a cairo bug. I would be really > surprised if cairo_clip() somehow accidentally loses a clip and would start > producing a "no-clip" result. > > Perhaps it would be a good start to step through the last cairo_clip() call and > check how the clip got lost. This code is quite simple and basically just calls > into _cairo_clip_intersect_path() which handles all complicated cases by copying > the path and adding to the list of clip paths. Not much that can go wrong here... Thanks a lot for those tips! I have done some debugging in cairo_paint() and it looks like the clip is not applied - there are only two clipping edges (IIRC the way contains 8 edges) in cairo_paint(). However I don't fully understand how the clipping polygon is constructed/applied but the two edges does not look correct (I compared correct and incorrect code paths with the same rendering parameters). But there's something in Firefox/cairo/gtk which causes the clipping (set by cairo_clip()) is ignored - it fails only once in fifteen times. I'm going to debug more it and keep you updated. Thanks! ma. -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo