Hi,
I attach a patch for discussion and review, reworking the support for device fonts; in particular, one can do things like (with-text-style (s (make-device-font-text-style port (make-postscript-device-font-name :font-file "Dingbats.pfb" :metrics-file "Dingbats.afm" :size 14))) (write-line "Hello, World!" s))
We use this patch to draw lute tablature, using home-designed fonts for the tab glyphs, in both TrueType and Postscript formats (TrueType for display, Postscript for printing).
I don't know whether this patch breaks the ordinary CLX backend's support for device fonts; is anyone in a position to test this? I also suspect that there are bits and pieces of the postscript code which are not entirely right, though I can say that Examples/postscript-test.lisp seems to be about right.
This bit of CLIM is almost completely unspecified; all that we know about MAKE-DEVICE-FONT-TEXT-STYLE is that it takes a port and a "font name" and returns some kind of TEXT-STYLE object. The reasoning I've applied in this implementation is that since device-font-text-styles are defined not to merge (in the MERGE-TEXT-STYLE sense) with any other text style, a device-font-text-style-name needs to have all the information required to identify uniquely a font that we can use in the backend. Under X, calling this a "name" makes a certain amount of sense, because X fonts are in fact uniquely identified by their X name: something like "-adobe-courier-medium-r-normal-and-so-on-". I don't think this is true for any other backend :-) so I think it's reasonable to define names as structures, rather than attempting to parse some ad-hoc string representation.
I also don't want to present this patch as a final interface; it is fairly ugly to have to specify the port type when making a name. Ultimately, we may want to move back to string names: something like (define-font "Varietie3" :freetype (:font-file "fonts/Varietie3.ttf" :size 14) :postscript (:font-file "fonts/Varietie3.pfa" :metrics-file "fonts/Varietie3.afm" :size 12)) but I certainly think that designing something like that is out of scope in the next three weeks...
Anyway, with all that, the patch (which is by far the majority of my diff with HEAD) attached.
Cheers,
Christophe