Graphics Programming Gallery

Text Editors

Writing a text editor that supports multiple fonts, sizes, styles, text alignments, loading & saving, hyperlinks and undo involves discipline and good object-oriented design skills.

I wrote my first editor, called "LabWriter", while I was at Queen's. It was really cool in that it was possible to insert spreadsheet cells and mini spreadsheet tables into the text, as well as simple graphs. (The program needed a lot of work to be ready for sale to the public, but the basic functionality was there.) Among other neat features, it was possible to click the mouse in the middle of a paragraph of text, drag partway through a table or graph (selecting appropriate subsets of cells en route) then choose text style operations that would act on all the selected entities.

My second text editing system, written while I was at Hotline Communications, handled all text displayed within Hotline 2.0. Although the functionality was pretty generic (multiple fonts, styles, multiple undo, XML save format) it was implemented elegantly within the hotline application framework. It was flexible enough to be used for body text in messages and news articles as well as window titles and labels. It had vestigial support for multiple script systems. Like all Hotline widgets it was skinnable, in the sense that the background could be specified to be a certain artwork or movie.

Graphics at Gavel & Gown


I was at Gavel & Gown Software for about six and a half years. During that time I wrote most of the code in three Macintosh versions of G&G's legal productivity application, called Amicus Attorney. As time went on I moved from GUI work to the cross-platform database layer, but I'll always remember the fun times I had crafting visual widgets. Although G&G have ceased to carry the Mac version because the market is too small, the Windows version of Amicus Attorney V still incorporates a lot of my database interface code. Let's take a brief tour:


The program was is divided into modules representing a lawyer's legal files, contact rolodex, appointment book, to-do list, phone call history and billing system. Each module was designed to be reassuringly similar to its real-world analogue. This created lots of fun little graphical puzzles to solve.

Amicus Attorney was implemented on the Macintosh using the THINK Class Library. This was a good choice at the time as the only real competition in 1994 was MacApp; in later years PowerPlant would become increasingly popular but it wasn't yet available. In 1996 we started using CodeWarrior with a port of the TCL to that compiler and IDE, and I began writing helper applications using PowerPlant.

AAFileOriginal.jpg AAFile.jpg

Many of Amicus Attorney's screens involve multiple layers of art and control widgets with complex interdependencies. Clicking on a checkbox or radio button would often make groups of other widgets show, hide or grey themselves out. Normally when using the TCL, redrawing four or five layers of art, views and widgets would cause unsightly flashing. I avoided this by drawing everything in off-screen views and copying. Each update started with the background art, as in the file list at left. Then a user-selected background texture would be copied into a region calculated for the image at program startup. Then the view and widget stack would be drawn back to front and the result would be blitted onto the screen.

AACalendar.jpg AACalendar.jpg

The calendar was one of the more enjoyable views to program. As you can see in the combined schedule view, booking multiple appointments at the same time leads to an interesting graphical problem. Also, all of the calendar views support richly expressive drag and drop for appointments and To-Do items. I rolled my own drag and drop system, then later migrated it to the Drag Manager when that became available (System 7.5?) This experience allowed me to write a cross-platform (Windows / Linux / Mac) Drag & Drop facility when I moved to Hotline Communications.

AAContacts.jpg AAContacts.jpg

A Rolodex of the lawyer's contacts and a phone call module to keep track of calls round out the list of major modules. Note that each module has two or three more views than are shown in these screen shots, so it required a fair amount of programming discipline to keep the code organized. This is where I became enthusiastic about design patterns.

Lawyers are like any other profession that bills for time, although they bill more than most, and bill more creatively. Each of the main modules had methods for creating time sheets, and a substantial part of the program's functionality was billing-related. The 'phone and billing modules were written by another programmer, Thomas White.



I'm an avid woodworker. I've designed and built a number of furniture pieces, some of which are shown here. My woodworking projects are often experiments in proportion, in which I look for ways to make esthetically pleasing shapes useful.
  I've also built a couple of conical drum bodies, deriving the angles myself. I took a fourth year robotics course at Queen's, which covered coordinate transformations as matrix multiplications.

Button.jpg Groups.jpg

Recently I've played around with Java Swing, written a little social networking visualization prototype, and done some exploratory work for a Mac OS X application to be called "Shiny Button". Have you ever wanted a fast way to produce the art for new widgets to work within your Aqua applications? Shiny button will automate the process of creating polygonal objects with rounded corners and transparency. Colours vary smoothly from one vertex to the next. Note: this is an experiment in pixel-by-pixel graphics manipulation under OS X.