Update of /project/gsharp/cvsroot/gsharp In directory clnet:/tmp/cvs-serv13687
Modified Files: buffer.lisp drawing.lisp gui.lisp score-pane.lisp sdl.lisp Log Message: Support for breves and breve rests.
--- /project/gsharp/cvsroot/gsharp/buffer.lisp 2007/07/12 16:04:49 1.50 +++ /project/gsharp/cvsroot/gsharp/buffer.lisp 2007/09/14 15:48:05 1.51 @@ -195,9 +195,9 @@ ;;; ;;; The staff is a staff object. ;;; -;;; Head can be :whole, :half, :filled, or nil. A value of nil means -;;; that the notehead is determined by that of the cluster to which the -;;; note belongs. +;;; Head can be :breve, :whole, :half, :filled, or nil. A value of +;;; nil means that the notehead is determined by that of the cluster +;;; to which the note belongs. ;;; ;;; Accidentals can be :natural :flat :double-flat :sharp or :double-sharp. ;;; The default is :natural. Whether a note is actually displayed @@ -217,7 +217,7 @@ (pitch :initarg :pitch :reader pitch :type (integer 0 127)) (staff :initarg :staff :reader staff :type staff) (head :initform nil :initarg :head :reader head - :type (or (member :whole :half :filled) null)) + :type (or (member :breve :whole :half :filled) null)) (accidentals :initform :natural :initarg :accidentals :reader accidentals ;; FIXME: we want :TYPE ACCIDENTAL here but need to ;; sort out order of definition for that to be useful. @@ -231,7 +231,7 @@ (defun make-note (pitch staff &rest args &key head (accidentals :natural) dots) (declare (type (integer 0 127) pitch) (type staff staff) - (type (or (member :whole :half :filled) null) head) + (type (or (member :breve :whole :half :filled) null) head) ;; FIXME: :TYPE ACCIDENTAL #+nil #+nil (type (member :natural :flat :double-flat :sharp :double-sharp) @@ -418,6 +418,7 @@
(defmethod undotted-duration ((element rhythmic-element)) (ecase (notehead element) + (:breve 2) (:whole 1) (:half 1/2) (:filled (/ (expt 2 (+ 2 (max (rbeams element) @@ -539,7 +540,7 @@ (defun make-cluster (&rest args &key (notehead :filled) (lbeams 0) (rbeams 0) (dots 0) (xoffset 0) notes (stem-direction :auto)) - (declare (type (member :whole :half :filled) notehead) + (declare (type (member :breve :whole :half :filled) notehead) (type (integer 0 5) lbeams) (type (integer 0 5) rbeams) (type (integer 0 3) dots) @@ -626,7 +627,7 @@ (dots 0) (xoffset 0)) (declare (type staff staff) (type integer staff-pos) - (type (member :whole :half :filled) notehead) + (type (member :breve :whole :half :filled) notehead) (type (integer 0 5) lbeams) (type (integer 0 5) rbeams) (type (integer 0 3) dots) @@ -672,7 +673,7 @@ &key (notehead :filled) (lbeams 0) (rbeams 0) (dots 0) (xoffset 0)) (declare (type staff staff) - (type (member :whole :half :filled) notehead) + (type (member :breve :whole :half :filled) notehead) (type (integer 0 5) lbeams) (type (integer 0 5) rbeams) (type (integer 0 3) dots) --- /project/gsharp/cvsroot/gsharp/drawing.lisp 2007/08/07 11:06:09 1.82 +++ /project/gsharp/cvsroot/gsharp/drawing.lisp 2007/09/14 15:48:05 1.83 @@ -325,7 +325,7 @@ (elements (elements bar))) (and (null (cdr elements)) (typep element 'rest) - (eq (notehead element) :whole)))) + (member (notehead element) '(:breve :whole)))))
(defun compute-measure-coordinates (measure x y force) (loop with timelines = (timelines measure) @@ -984,7 +984,7 @@ (loop for group in groups do (draw-notes pane group (dots element) (notehead element) dot-xoffset) (draw-ledger-lines pane x group)) - (unless (eq (notehead element) :whole) + (unless (member (notehead element) '(:whole :breve)) (if (eq direction :up) (score-pane:draw-right-stem pane x --- /project/gsharp/cvsroot/gsharp/gui.lisp 2007/08/07 14:00:09 1.83 +++ /project/gsharp/cvsroot/gsharp/gui.lisp 2007/09/14 15:48:05 1.84 @@ -139,7 +139,7 @@ (score-pane:with-vertical-score-position (pane 100) (let ((xpos 30)) (score-pane:draw-notehead pane (notehead state) xpos 4) - (when (not (eq (notehead state) :whole)) + (when (not (member (notehead state) '(:whole :breve))) (when (or (eq (stem-direction state) :auto) (eq (stem-direction state) :down)) (when (eq (notehead state) :filled) @@ -753,10 +753,11 @@ (setf (rbeams element) (max (1- (rbeams element)) 0))) (define-duration-altering-command com-rotate-notehead () (setf (notehead element) - (ecase (notehead element) - (:whole :half) - (:half :filled) - (:filled :whole))))) + (ecase (notehead element) + (:breve :whole) + (:whole :half) + (:half :filled) + (:filled :breve)))))
(define-gsharp-command com-rotate-stem-direction () (setf (stem-direction (cur-cluster)) @@ -1301,9 +1302,10 @@ (define-gsharp-command com-istate-rotate-notehead () (setf (notehead (input-state *application-frame*)) (ecase (notehead (input-state *application-frame*)) + (:breve :whole) (:whole :half) (:half :filled) - (:filled :whole)))) + (:filled :breve))))
(define-gsharp-command com-istate-rotate-stem-direction () (setf (stem-direction (input-state *application-frame*)) --- /project/gsharp/cvsroot/gsharp/score-pane.lisp 2007/07/27 22:34:31 1.37 +++ /project/gsharp/cvsroot/gsharp/score-pane.lisp 2007/09/14 15:48:05 1.38 @@ -132,6 +132,7 @@ (defun draw-notehead (stream name x staff-step) (sdl::draw-shape stream *font* (ecase name + (:breve :breve-notehead) (:whole :whole-notehead) (:half :half-notehead) (:filled :filled-notehead)) @@ -174,6 +175,7 @@ (defun draw-rest (stream duration x staff-step) (sdl::draw-shape stream *font* (ecase duration + (2 :breve-rest) (1 :whole-rest) (1/2 :half-rest) (1/4 :quarter-rest) --- /project/gsharp/cvsroot/gsharp/sdl.lisp 2007/08/20 07:14:35 1.35 +++ /project/gsharp/cvsroot/gsharp/sdl.lisp 2007/09/14 15:48:05 1.36 @@ -662,6 +662,23 @@ (translate (scale *filled-path* staff-line-distance) (complex xoffset yoffset))))
+(defmethod compute-design ((font font) (shape (eql :breve-notehead))) + (with-slots (xoffset yoffset (sld staff-line-distance) stem-thickness) font + (let ((top (translate (xyscale (translate +unit-square+ #c(0 0.5)) + (* sld 1.5) (* sld (- 0.53 0.25))) + (* sld #c(0 0.25)))) + (bot (translate (xyscale (translate +unit-square+ #c(0 -0.5)) + (* sld 1.5) (* sld (- 0.53 0.25))) + (* sld #c(0 -0.25)))) + (left (translate (xyscale +unit-square+ stem-thickness (* 1.3 sld)) + (+ (* sld #c(-0.75 0)) (/ stem-thickness 2)))) + (right (translate (xyscale +unit-square+ stem-thickness (* 1.3 sld)) + (- (* sld #c(0.75 0)) (/ stem-thickness 2))))) + (translate + (reduce #'clim:region-union + (list top bot left right)) + (complex xoffset yoffset))))) + (defmethod compute-design ((font font) (shape (eql :whole-notehead))) (with-slots (xoffset yoffset (sld staff-line-distance)) font (let ((op (scale (superellipse #c(0.75 0.0) #c(0.0 0.53) @@ -1335,6 +1352,12 @@ ;;; ;;; Rests
+(defmethod compute-design ((font font) (shape (eql :breve-rest))) + (with-slots ((sld staff-line-distance) (slt staff-line-thickness) + notehead-width xoffset yoffset) font + (translate (xyscale +unit-square+ (/ notehead-width 2) sld) + (complex xoffset (+ yoffset (+ (* 0.5 sld)) (- (* 0.5 slt))))))) + (defmethod compute-design ((font font) (shape (eql :whole-rest))) (with-slots ((sld staff-line-distance) (slt staff-line-thickness) notehead-width xoffset yoffset) font