It turns out I’m slower with GSoC progress than anticipated. GNUstep meeting in Cambridge, which I’ll discuss in upcoming posts (and do so as soon possible, so I don’t forget all the wonderful sights and experiences, and all the wonderful people I met), was informative, but it turns out not quite supportive of my GSoC productivity. I spent a week being nervous before my first international trip, and I spent the last week (after returning) being impressed with how wonderful Germany and England are.
So, what progress did I make?
Preparations
First, before the trip, I prepared the backend. I figured out the simple things, such as where do I have to modify configure
scripts in order to add support for the new backend, as well as which classes are expected by gnustep-gui
. I identified the minimum set of methods that need to exist in the relevant classes (mostly OpalGState
) and I added stubs.
Opal exposing X11 drawables as contexts
In Cambridge, thanks to help from Opal’s author Eric Wasylishen, we started exposing the creation of CGContext
specific to X11 drawables. The function already existed in Opal; we just refactored the code a bit. (Rest of the hacking time in Cambridge was spent on other tasks.)
Drawing onscreen
Now that I finally cleared my head of amazement at how beautiful Cambridge is and how great hosts we had, I decided that it’s really long overdue that we get some content drawn on-screen. It took me a while to figure out where to draw in order to actually get the content drawn on-screen. It turns out the safest place to insert my dummy draw method is -[OpalGState DPSfill]
— probably because it’s intended as the place to draw stuff, as opposed to various initialization methods such as -[OpalGState DPSinitgraphics]
.
The dummy draw method draws a red rectangle 1024×768, so I’m very happy to report that the test application’s NSWindow
is, as of today, fully red.
Thoughts on next steps
Overall, I hope that things will roll much, much faster from here onward. There are bound to be many bugs along the way — and many assumptions by existing apps and themes. It’ll slow implementation down, but I hope that along the way I’ll figure out a way to clean up the current messy situation with gnustep-back
‘s numerous classes such as GState
, Context
, et al.
The scariest part is that the Cairo backend looks like it handles many complex behaviors and different use situations. Let’s see how many bugs the Opal backend will have in the end and how much of Cairo backend’s behavior I’ll have to replicate to fix them. 🙂