On 2011-09-12, at 3:48 PM, Fred Kiefer wrote:
On 12.09.2011 21:17, Eric Wasylishen wrote:
Based on what Fred said, it looks like the design of XGCairoXImageSurface is
flawed and won't work on 16-bit displays. (But did it work for you in the past?)
One thing you could try is switch to XGCairoSurface. In CairoContext.m, just
adjust the comments so you have:
# define _CAIRO_SURFACE_CLASSNAME XGCairoSurface
This will create a cairo xlib surface for the window buffer, instead of a cairo
image surface. Interestingly enough it seems to work for me - I don't think it
worked a few months ago.
as an aside, I would like to switch to XGCairoSurface by default at some point,
rather than fixing XGCairoXImageSurface. It would have a number of benefits,
like:
- enables subpixel antialising for fonts
- removes the need for using shared memory for the window buffer for good
performance (from what I understand, cairo will automatically use shm to
transfer bitmaps to the x server when needed).
- it may allow hardware acceleration for some operations?
If I remember correctly the reason we switched to XGCairoXImageSurface was that
with XGCairoSurface we could not get transparent windows. Yen-Ju of the Etoile
project suggested to use XGCairoXImageSurface and this has worked remarkably
well for almost five years now. If transparency works now, even on old 24 bit
displays, with XGCairoSurface then we should switch back to that. Otherwise we
need to figure out a better way to determine which surface to use.
Ah, I see. Transparent windows works fine for me with XGCairoSurface now -
perhaps it was a limitation in cairo that was fixed since then.
btw, I added the test to GSTest that I was meaning to write for a while, for testing
-[NSWindow setAlphaValue:] and -[NSWindow setBackgroundColor:] for colors with an alpha<
1. It's called "Transparency-test".