Monday, December 28, 2009

Graphos: vector Drawing application for GNUstep

A long time ago 10 years now, Enrico Sersale began to work on a very interesting and promising application: GDraw. A vector drawing application for GNUstep. Its spline drawing capabilities and document-based design were very advanced for those early days of GNUstep.

A long time passed, there were no further developments and the application bitrotted, starting not to compile any more under GNUstep or not working properly in any case.

I decided to make GDraw come back from the ashes under the name of Graphos. It took me a lot of work to bring it up-to-date.

From a user perspective little has changed, as a kind of tribute to the original work I left the user-interface essentially as-is, planning to change and enhance it only in the next release. However when the application was written, Gorm was in its infancy so for example the Menus were hard-coded. Now they are done properly in Gorm.

All drawing operations were PostScript based, I converted them to use NSBezierPath, this makes the application portable to Macintosh and Cocoa, as the attached screenshot testifies.

I wanted then to bug-.fix and complete some of the existing functions, The when I tried to complete the implementation of the "Box" tool, I found out that the architecture was unclear and limited making it next to impossible to continue.

The upcoming task was thus an incremental re-factoring of the application core. The code itself was almost untouched, but a clearer distinction was formed between Editors and Objects (improving also the file format, making it Editor independent). Object inheritance permits now easier extension and organization of the code.

Now Graphos works on Mac and GNUstep almost like its predecessor GDraw, I intend to make a preliminary release soon and then evolve its missing functions and perform more refactoring.

The file format changed only little and Graphos is able to read GDraw files (but not the opposite) due to a better Editor/Object distinction.

Almost a tribute to a ghost from the past, I hope Enrico will appreciate the efforts.

As usual, the application is part of GAP, the GNUstep Application Project where it finds its new home.