Update of /project/gsharp/cvsroot/gsharp In directory clnet:/tmp/cvs-serv5096
Modified Files: bezier.lisp fontview.lisp sdl.lisp Log Message: Fixed a bug in bezier.lisp that made the resulting pixmap positioned in the wrong place sometimes.
Fixed a bug in sdl.lisp that computed the wrong xoffset (in particular for noteheads).
Fixed the whole notehead so that its vertical position is not offset as it should.
Fixed the C clef so that it no longer goes below the bottom line.
Improved the font viewer by having the bounding box of the glyph drawn in :pixel mode.
--- /project/gsharp/cvsroot/gsharp/bezier.lisp 2006/06/01 04:55:37 1.3 +++ /project/gsharp/cvsroot/gsharp/bezier.lisp 2006/06/01 18:57:40 1.4 @@ -703,6 +703,8 @@ (defun render-through-pixmap (design medium positive-areas negative-areas) (multiple-value-bind (min-x min-y) (bounding-rectangle* design) + (setf min-x (floor min-x) + min-y (floor min-y)) (let ((pixmap (gethash (list (medium-sheet medium) (resolve-ink medium) design) *pixmaps*))) (when (null pixmap) --- /project/gsharp/cvsroot/gsharp/fontview.lisp 2006/06/01 04:55:37 1.2 +++ /project/gsharp/cvsroot/gsharp/fontview.lisp 2006/06/01 18:57:40 1.3 @@ -9,9 +9,9 @@ ((font :initform (make-instance 'sdl::font :staff-line-distance 6)) (shape :initform :g-clef) (grid :initform t) - (staff :initform nil) + (staff :initform t) (staff-offset :initform 0) - (view :initform :pixel) + (view :initform :antialiased) (zoom :initform 1) (hoffset :initform 300) (voffset :initform 300)) @@ -72,6 +72,24 @@ do (draw-rectangle* pane x -300 (1+ x) 300 :ink +blue+)) (loop for x from 0 below 300 by (* 4 zoom) do (draw-rectangle* pane x -300 (1+ x) 300 :ink +blue+)) + ;; draw the bounding rectangle + (draw-rectangle* pane + (* zoom min-x) (* zoom min-y) + (* zoom max-x) (1+ (* zoom min-y)) + :ink +red+) + (draw-rectangle* pane + (* zoom min-x) (* zoom max-y) + (* zoom max-x) (1+ (* zoom max-y)) + :ink +red+) + (draw-rectangle* pane + (* zoom min-x) (* zoom min-y) + (1+ (* zoom min-x)) (* zoom max-y) + :ink +red+) + (draw-rectangle* pane + (* zoom max-x) (* zoom min-y) + (1+ (* zoom max-x)) (* zoom max-y) + :ink +red+) + ;; draw the reference point (draw-rectangle* pane -300 0 300 1 :ink +red+) (draw-rectangle* pane 0 -300 1 300 :ink +red+))))))))
--- /project/gsharp/cvsroot/gsharp/sdl.lisp 2006/06/01 11:01:26 1.18 +++ /project/gsharp/cvsroot/gsharp/sdl.lisp 2006/06/01 18:57:40 1.19 @@ -151,7 +151,7 @@ beam-hang-sit-offset) font (setf staff-line-thickness (round (/ (staff-line-distance font) 10))) (setf xoffset - (if (oddp (round (* 1.5 staff-line-distance))) 1.5 0)) + (if (oddp (round (* 1.5 staff-line-distance))) 0.5 0)) (setf yoffset (if (oddp staff-line-thickness) 0.5 0)) (setf dot-diameter @@ -610,12 +610,12 @@ (mf (c xc (- staff-line-thickness)) -- (c xc 0))))))) (clim:region-union (climi::close-path (mf (c 0 top) -- (c xa top) -- - (c xa (- (- top) staff-line-thickness)) -- - (c 0 (- (- top) staff-line-thickness)) -- (c 0 top))) + (c xa (- top)) -- + (c 0 (- top)) -- (c 0 top))) (clim:region-union (climi::close-path (mf (c xb top) -- (c xc top) -- - (c xc (- (- top) staff-line-thickness)) -- - (c xb (- (- top) staff-line-thickness)) -- (c xb top))) + (c xc (- top)) -- + (c xb (- top)) -- (c xb top))) (translate r (c 0 staff-line-thickness))))))))
;;; @@ -712,7 +712,7 @@ (complex xoffset yoffset))))
(defmethod compute-design ((font font) (shape (eql :whole-notehead))) - (with-slots ((sld staff-line-distance)) font + (with-slots (xoffset yoffset (sld staff-line-distance)) font (let ((op (scale (superellipse #c(0.75 0.0) #c(0.0 0.58) #c(-0.75 0.0) #c(0.0 -0.58) 0.7) sld)) @@ -720,7 +720,8 @@ #c(-0.3 0.0) #c(0.0 -0.35) 0.8) -0.3) sld))) - (clim:region-difference op (climi::reverse-path ip))))) + (translate (clim:region-difference op (climi::reverse-path ip)) + (complex xoffset yoffset)))))
(defmethod compute-design ((font font) (shape (eql :half-notehead))) (with-slots (xoffset yoffset (sld staff-line-distance)) font