Hi Wayne,
Take a look at
wxDCBase in the wxWidgets source for a good example of how to implement
the base GAL class. Notice that the public non-virtual drawing
functions do nothing more than call the private virtual functions (
public DrawLine() calls private DoDrawLine() ). All the work is done by
the DoDrawLine() method for each derived class.
Just another example how dirty the wxWidgets code is, in my opinion that's against the principles of object-oriented programming.
Like Dick etc. has written, calling virtual methods needs perhaps a few table lookups - that's fast and compared to the mathematical operations insignificant.
I apologize for the incorrect information but I just realized this
solution is not going to work. Replacing wxDC in the Kicad drawing code will
break printing and postscript output. Your GAL object will have to be based on
wxDC (similar to how wxGCDC is designed) or you will have to write
separate drawing code for screen output and use the current drawing code for
printing and postscript output.
This shouldn't be a problem, because Cairo is able to handle PDF, SVG and PS surfaces. I'd just create a second Draw(..) method and keep the old one intact (thus you have always a fall back solution). I could also write a direct postscript driver, because the commands are very similar compared to Cairo.