[gsharp-cvs] CVS update: gsharp/drawing.lisp gsharp/measure.lisp gsharp/packages.lisp

Robert Strandh rstrandh at common-lisp.net
Mon Nov 21 00:45:23 UTC 2005


Update of /project/gsharp/cvsroot/gsharp
In directory common-lisp.net:/tmp/cvs-serv27569

Modified Files:
	drawing.lisp measure.lisp packages.lisp 
Log Message:
Moved some more code from drawing.lisp to measure.lisp

Date: Mon Nov 21 01:45:22 2005
Author: rstrandh

Index: gsharp/drawing.lisp
diff -u gsharp/drawing.lisp:1.29 gsharp/drawing.lisp:1.30
--- gsharp/drawing.lisp:1.29	Sat Nov 19 23:59:59 2005
+++ gsharp/drawing.lisp	Mon Nov 21 01:45:14 2005
@@ -197,26 +197,11 @@
    (final-absolute-xoffset :accessor final-absolute-element-xoffset)))
 
 (define-added-mixin vcluster () cluster
-  ((final-stem-direction :accessor final-stem-direction)
-   ;; the position, in staff steps, of the top not in the element.
-   (top-note-pos :accessor top-note-pos)
-   ;; the position, in staff steps, of the bottom note in the element.
-   (bot-note-pos :accessor bot-note-pos)))
+  ((final-stem-direction :accessor final-stem-direction)))
 
 (define-added-mixin welement () lyrics-element
   ((final-absolute-xoffset :accessor final-absolute-element-xoffset)))
 
-;;; Compute and store some important information about a non-empty
-;;; cluster:
-;;;  * the position, in staff steps of the top note.
-;;;  * the position, in staff steps of the bottom note.
-(defun compute-top-bot-pos (cluster)
-  (assert (non-empty-cluster-p cluster))
-  (let ((top-note (top-note (notes cluster)))
-	(bot-note (bot-note (notes cluster))))
-    (setf (top-note-pos cluster) (note-position top-note)
-	  (bot-note-pos cluster) (note-position bot-note))))
-
 ;;; Compute and store several important pieces of information
 ;;; about an element:
 ;;;  * the y-offset of the staff containing the top note.
@@ -305,11 +290,6 @@
 	    (incf start-time (duration element)))
 	  (elements bar))))
 
-;;; Return true if and only if the element is a non-empty cluster
-(defun non-empty-cluster-p (element)
-  (and (typep element 'cluster)
-       (not (null (notes element)))))
-
 ;;; Given a beam group containing at least two nonempty clusters,
 ;;; compute and store the final stem directions of all the non-empty
 ;;; clusters in the group
@@ -353,9 +333,9 @@
 ;;; Given a beam group, for each nonempty element, compute the top and
 ;;; bottom note position, and the final stem direction.
 (defun compute-positions-and-stem-direction (elements)
-  (loop for element in elements
-	when (non-empty-cluster-p element)
-	do (compute-top-bot-pos element))
+;;  (loop for element in elements
+;;	when (non-empty-cluster-p element)
+;;	do (compute-top-bot-pos element))
   (if (null (cdr elements))
       (let ((element (car elements)))
 	(when (non-empty-cluster-p element)


Index: gsharp/measure.lisp
diff -u gsharp/measure.lisp:1.9 gsharp/measure.lisp:1.10
--- gsharp/measure.lisp:1.9	Sat Nov 19 06:16:28 2005
+++ gsharp/measure.lisp	Mon Nov 21 01:45:18 2005
@@ -101,6 +101,26 @@
 ;;;
 ;;; Cluster
 
+(define-added-mixin rcluster () cluster
+  (;; the position, in staff steps, of the top not in the element.
+   (top-note-pos :accessor top-note-pos)
+   ;; the position, in staff steps, of the bottom note in the element.
+   (bot-note-pos :accessor bot-note-pos)))
+
+;;; Return true if and only if the element is a non-empty cluster
+(defun non-empty-cluster-p (element)
+  (and (typep element 'cluster)
+       (not (null (notes element)))))
+
+;;; Compute and store some important information about a non-empty
+;;; cluster:
+;;;  * the position, in staff steps of the top note.
+;;;  * the position, in staff steps of the bottom note.
+(defun compute-top-bot-pos (cluster)
+  (assert (non-empty-cluster-p cluster))
+  (setf (top-note-pos cluster) (note-position (top-note (notes cluster)))
+	(bot-note-pos cluster) (note-position (bot-note (notes cluster)))))
+
 (defmethod add-note :after ((element relement) (note note))
   (mark-modified element))
 
@@ -288,6 +308,23 @@
   (append (merge 'list (butlast bar1) (butlast bar2) #'<)
 	  (list (max (car (last bar1)) (car (last bar2))))))
 
+;;; compute some important parameters of an element
+(defgeneric compute-element-parameters (element))
+
+(defmethod compute-element-parameters (element)
+  nil)
+
+(defmethod compute-element-parameters ((element cluster))
+  (when (non-empty-cluster-p element)
+    (compute-top-bot-pos element)))
+
+;;; compute some important parameters of a bar
+(defun compute-bar-parameters (bar)
+  (loop for element in (elements bar)
+	do (when (modified-p element)
+	     (compute-element-parameters element)
+	     (setf (modified-p element) nil))))
+
 ;;; From a list of simultaneous bars (and some other stuff), create a
 ;;; measure.  The `other stuff' is the spacing style, which is neded
 ;;; in order to compute the coefficient of the measure, the position
@@ -297,6 +334,10 @@
 ;;; to indicate the position of the measure in the sequence of all
 ;;; measures of the buffer.
 (defun compute-measure (bars spacing-style seg-pos bar-pos)
+  (loop for bar in bars
+	do (when (modified-p bar)
+	     (compute-bar-parameters bar)
+	     (setf (modified-p bar) nil)))
   (let* ((start-times (remove-duplicates
 		       (reduce #'combine-bars
 			       (mapcar #'start-times bars))))


Index: gsharp/packages.lisp
diff -u gsharp/packages.lisp:1.29 gsharp/packages.lisp:1.30
--- gsharp/packages.lisp:1.29	Sun Nov 20 20:17:22 2005
+++ gsharp/packages.lisp	Mon Nov 21 01:45:18 2005
@@ -102,8 +102,8 @@
 	   #:buffer-cost-method
 	   #:reduced-width #:natural-width #:compress-factor
 	   #:measure-seq-cost
-	   #:note-position
-	   #:top-note #:bot-note))
+	   #:note-position #:non-empty-cluster-p
+	   #:top-note #:bot-note #:top-note-pos #:bot-note-pos))
 
 (defpackage :gsharp-postscript
   (:use :clim :clim-lisp)




More information about the Gsharp-cvs mailing list