Update of /project/gsharp/cvsroot/gsharp In directory common-lisp.net:/tmp/cvs-serv4829
Modified Files: packages.lisp sdl.lisp Log Message: Added new generic functions to the SDL package to deal with beam offsets for a particular font.
The plan is to modify the beam-drawing functions so that they use these new generic functions, and so that they draw beams relative to the vertical reference point, just like other drawing functions.
Date: Wed Jan 4 18:35:51 2006 Author: rstrandh
Index: gsharp/packages.lisp diff -u gsharp/packages.lisp:1.38 gsharp/packages.lisp:1.39 --- gsharp/packages.lisp:1.38 Tue Jan 3 04:10:14 2006 +++ gsharp/packages.lisp Wed Jan 4 18:35:51 2006 @@ -33,6 +33,7 @@ #:ledger-line-x-offsets #:ledger-line-y-offsets #:notehead-right-offsets #:notehead-left-offsets #:load-font #:glyph-offsets #:suspended-note-offset + #:beam-offsets #:beam-hang-sit-offset #:+glyph-whole+ #:+glyph-whole-upper+ #:+glyph-whole-lower+ #:+glyph-whole-two+ #:+glyph-half+ #:+glyph-half-upper+ #:+glyph-half-lower+ #:+glyph-half-two+ #:+glyph-filled+ #:+glyph-filled-upper+ #:+glyph-filled-lower+ #:+glyph-filled-two+
Index: gsharp/sdl.lisp diff -u gsharp/sdl.lisp:1.12 gsharp/sdl.lisp:1.13 --- gsharp/sdl.lisp:1.12 Tue Nov 15 19:49:52 2005 +++ gsharp/sdl.lisp Wed Jan 4 18:35:51 2006 @@ -22,6 +22,15 @@ (defgeneric suspended-note-offset (font) (:documentation "the x offset of a suspended note compared to that of a normal note. This function always returns a positive value")) +(defgeneric beam-offsets (font) + (:documentation "return two values, both to be added to the + vertical reference point in order to obtain the + bottom and top of the beam (in that order)")) +(defgeneric beam-hang-sit-offset (font) + (:documentation "return a positive value to be added to (hang) or + subtracted from (sit) the vertical reference point + of a staff line, in order to obtain the reference + point of a hanging or sitting beam respectively"))
(defclass font () ((gf-font :initarg :gf-font :reader gf-font) @@ -40,6 +49,9 @@ (notehead-right-y-offset) (notehead-left-x-offset) (notehead-left-y-offset) + (beam-offset-down) + (beam-offset-up) + (beam-hang-sit-offset :reader beam-hang-sit-offset) (glyphs :initarg :glyphs :reader glyphs)))
(defmethod initialize-instance :after ((font font) &rest initargs &key &allow-other-keys) @@ -58,7 +70,10 @@ notehead-right-x-offset notehead-right-y-offset notehead-left-x-offset - notehead-left-y-offset) font + notehead-left-y-offset + beam-offset-down + beam-offset-up + beam-hang-sit-offset) font (let ((staff-line-thickness (round (/ (staff-line-distance font) 10)))) (setf staff-line-offset-down (floor (/ staff-line-thickness 2)) @@ -94,7 +109,13 @@ (setf notehead-right-y-offset (round (+ (* 0.25 staff-line-distance) yoffset))) (setf notehead-left-y-offset - (- (round (- (* 0.25 staff-line-distance) yoffset))))))) + (- (round (- (* 0.25 staff-line-distance) yoffset)))) + (setf beam-offset-down + (floor (/ staff-line-distance 2) 2)) + (setf beam-offset-up + (- (ceiling (/ staff-line-distance 2) 2))) + (setf beam-hang-sit-offset + (/ (- (+ beam-offset-down beam-offset-up) staff-line-thickness) 2)))))
(defgeneric gf-char (glyph)) (defgeneric pixmap (glyph)) @@ -185,6 +206,10 @@ (defmethod suspended-note-offset ((font font)) (with-slots (notehead-left-x-offset notehead-right-x-offset) font (- notehead-right-x-offset notehead-left-x-offset))) + +(defmethod beam-offsets ((font font)) + (with-slots (beam-offset-down beam-offset-up) font + (values beam-offset-down beam-offset-up)))
(defun load-font (staff-line-distance) (let* ((gf-font (parse-gf-file (merge-pathnames