Tuesday, February 6, 2007

Pushing the Envelope

I saw this review of beryl linked from lwn.net and this quote really irked me:

As nice as Compiz is, Beryl is the group that is really pushing the envelope of what a next generation desktop should be like.

I can't just let that slide, especially since David Reveman (who wrote most of the code in compiz and beryl), just submitted a patch to the X server and related libraries to implement proper input event remapping. If anything is pushing the envelope for the next generation desktop, that is it. The patch lets you pass a triangular mesh to the X server that the server uses for translating input event coordinates on the transformed (say, minimized or wobbling) window. The server will transform the position in the triangle mesh into normal orthogonal coordinates as expected by the application. There has been other ideas floating around for solving this problem, but since you have to break the window into triangles to render it anyway, the input triangle mesh wont restrict the types of deformations you can do.

This work will allow every compositing manager to do input redirection the right way, not just, say, metisse. In general, David solves the root of the problem and gets the solution upstream, improving the platform for everybody, instead of papering over the problem with cheap hacks. This is why we ship compiz as the default compositing manager in Fedora, not beryl. Of course, beryl is available from extras and can be installed by saying yum install beryl-gnome.

On a related note, Fedora 6 now has compiz 0.3.6 in testing, which supports Xinerama, metacity decorations, and more. For the more adventurous, we've updated to X.org 7.2 in rawhide. Thanks to Ian Romanick, in this release, the X server now has protocol for GL_ARB_fragment_program extension, which means that compiz on AIGLX can use fragment shaders. This enables the ever so useful 'rain' plugin, but more seriously, it allows the blurred translucency work that's currently happening in compiz git to work on AIGLX.