This is my first article (of hopefully a long series) on Cairo Composite Manager except announcements releases. I hope that you will be very indulgent on my very approximate English
I’ll try to explain in these items the various technical aspects of CCM and the problem I faced during its development.
To begin I would like to respond to two questions which always posed on CCM.
First, what does Cairo Composite Manager?
As its name suggests it is a « composite manager » that uses cairo for rendering and can work with any EWMH compliant window manager (Metacity, Openbox, etc.).
CCM has specific feature:
- If you have multiple graphics card CCM can manage them independently
- CCM using Cairo he may use different type of backend (XRender, Glitz, etc..), for now the only effective backend is XRender.
- It is completely coded in Glib Object.
Why make a new composite manager when most of WM includes this feature or why not improve the existing composite manager?
- Just to see if it was possible to do a composite manager based on Cairo
Now the heart of the matter, a good composite manager must have its magnifier, the magnifier CCM was initiated by Carlos Diógenes and I ended its integration into the CCM.
To start simply activate the plugin in the preferences :
and press simultaneously on <Super>F12 to launch it.
The technique used is the simplest as possible, at the start of the magnifier creates a surface on which it forwards the windows rendering at each draw. Once all the windows has drawed, it draw the surface on the screen in the right scale. In fact the biggest problem for the magnifier is the pointer rendering. This must indeed be in hiding and redraw in the magnifier scale and in the good position. For that Xorg provide two functions in Xfixes extension to hide and display the main pointer. But as pointed out by Kristian Lyngstøl this feature has a problem again the pointer became visible. Indeed all animated pointers disappeared. After checking in the code of Xorg it seems that due from a call of virtual cursor display function at initialization and termination of pointer hidding. I post a naive patch on xorg bugzilla that seems to solve the problem. I hope that once reviewed by X developper it solve the problem permanently.