[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: view-font/set-view-font
- To: lynch@ils.nwu.edu
- Subject: Re: view-font/set-view-font
- From: "Mark A. Tapia" <markt@dgp.toronto.edu>
- Date: Tue, 22 Dec 1992 10:06:57 -0500
- Cc: info-mcl@cambridge.apple.com
Rich Lynch@ils.nwu.edu writes:
I've been having trouble with fonts.
I have some fancy windows that have 2 different fonts mixed.
...
All that said, I am still at a loss to explain how :italic creeps in and
stays there in the following code:
... code ommitted ...
B: I really don't think it's good style [pun intended] to have code that
goes:
(set-view-font-codes view XXXX XXXX XXXX XXXX) when
(set-view-font view '("Helvetica" 30 :bold)) is an option that should work.
Any idiot can read and maintain the latter; the former is gibberish.
If you want to ensure that the font is correct, then specify one
font, one font size, a font style and one of the transfer modes
and use the with-font-spec macro from Michael Engber in
oodles-of-utils:brutal-utils:quickdraw.lisp. This will eliminate
the gibberish of font codes.
;; Copyright 1992 Northwestern University Institute for the Learning Sciences
;; All Rights Reserved
;;
;; author: Michael S. Engber
(defmacro with-font-spec (font-spec &body body)
(if (and (listp font-spec) (every #'constantp font-spec))
(multiple-value-bind (ff ms) (font-codes font-spec)
`(with-font-codes ,ff ,ms ,@body))
(let ((ff (gensym))
(ms (gensym)))
`(multiple-value-bind (,ff ,ms) (font-codes ,font-spec)
(with-font-codes ,ff ,ms ,@body)))))
to change the font spec temporarily.
Instead of
(defmethod view-draw-contents :after ((view sample))
(let ((font '("Helvetica" 18 :italic))
(old-font (view-font view)))
(set-view-font view font)
(with-pstrs ((str (format nil "~A" font)))
(#_MoveTo 4 50)
(#_DrawString str))
(set-view-font view old-font)))
to recode the fragment to the following:
(defmethod view-draw-contents :after ((view sample))
(with-font-spec '("Helvetica" 18 :bold :italic)
(with-pstrs ((str (format nil "~A" (view-font view))))
(#_MoveTo 4 50)
(#_DrawString str))))
Here is your complete example recoded using the with-font-spec macro
with font specs specified using the conventions above. The four lines
are printed in order in the following font codes:
Helvetica 18 :italic
New York 18 :bold
New York 18 :bold :italic :underline
Helvetica 30 :bold
all using the :SRCOR transfer mode
(defclass sample (dialog)
()
(:default-initargs
:view-font '("Helvetica" 30 :bold)
:view-size #@(600 400)))
(defmethod view-draw-contents :after ((view sample))
(with-font-spec '("Helvetica" 18 :italic)
(with-pstrs ((str (format nil "~A" '("Helvetica" 18 :italic))))
(#_MoveTo 4 50)
(#_DrawString str)))
(with-font-spec '("New York" 18 :bold)
(with-pstrs ((str (format nil "~A" '("New York" 18 :bold))))
(#_MoveTo 4 100)
(#_DrawString str)))
(with-font-spec '("New York" 18 :bold :italic :underline)
(with-pstrs ((str (format nil "~A" '("New York" 18 :bold :italic :underline))))
(#_MoveTo 4 150)
(#_DrawString str)))
(with-pstrs ((str (format nil "~A" (view-font view))))
(#_MoveTo 4 200)
(#_DrawString str)))
(make-instance 'sample)