Trying to run GTK+ on quartz with the clearlooks theme produces an error in the terminal, and vertical scrollbars are not drawn. I will attach a small testcase that uses the same code as clearlooks, using only cairo.
The error is:
<Error>: CGBitmapContextGetBitsPerPixel: invalid context
and from what I can tell it's from the fallback surface code, that wants a bitmapcontext but probably gets a real context?
Created attachment 13935 [details]
Minimal test case
Adding Brian to CC, hope that's OK.
To clarify what the test case shows: gradient patterns cause an error as soon as there is a transformation in place.
(it's always ok to CC me on bugs, btw)
At first I thought this was the problem we've seen with clearlooks on mac forever - it pushes at the things (like transparency) that require fallback. However, erroring because of the /transform/ is surprising. I'll take a dig into that over the weekend.
Thanks, let me know if you want me to test any patches or so.
Vlad, I noticed that you fixed the warning that I mention in this bug, "CGBitmapContextGetBitsPerPixel: invalid context". If I got things right, that was just a harmless warning so the actual problem here probably is caused by something else. Do you have any idea what it might be?
It was, I don't think that there's an actual error here at all. That call/path was just used to see if a certain optimization could be used. As long as the rendering is correct, this can probably be resolved as one of NOTABUG/INVALID/WORKSFORME.
If the rendering isn't correct though, then we have a problem :)
Ah, I wasn't quite clear :) There is a visual error, the simple test case attached here shows it clearly, run it with and without the matrix transformation:
/* This transformation seems to be what triggers the error: */
cairo_matrix_init (&matrix, 0, 1, 1, 0, 0, 0);
cairo_transform (cr, &matrix); // <-- comment out this line to get it working
The result is an empty window vs a black to white gradient across the whole window.
Btw, I just noticed that the warning fix doesn't work:
+ CGContextGetTypePtr = dlsym(RTLD_DEFAULT, "CGContextGetTypePtr");
The "Ptr" part of the symbol looks like a typo.
Ah, ok! I'll take a look. Good catch on the Ptr bit, I didn't have a good testcase for the warning and was able to only trigger it sporadically through firefox. I'll fix that and take a look at the rendering error.
Just checked in a fix for this -- fb1378a24b5c6cd65b73aa611bb049ebb6f2b57a.