[gsharp-cvs] CVS update: gsharp/drawing.lisp
Robert Strandh
rstrandh at common-lisp.net
Wed Nov 30 18:06:02 UTC 2005
Update of /project/gsharp/cvsroot/gsharp
In directory common-lisp.net:/tmp/cvs-serv9432
Modified Files:
drawing.lisp
Log Message:
More code that will eventually replace the existing spacing algorithm
and the code for the final drawing.
Date: Wed Nov 30 19:06:01 2005
Author: rstrandh
Index: gsharp/drawing.lisp
diff -u gsharp/drawing.lisp:1.40 gsharp/drawing.lisp:1.41
--- gsharp/drawing.lisp:1.40 Wed Nov 30 06:52:47 2005
+++ gsharp/drawing.lisp Wed Nov 30 19:06:00 2005
@@ -1,5 +1,11 @@
(in-package :gsharp-drawing)
+(define-added-mixin dmeasure () measure
+ (;; an elasticity function that describes how the space right after
+ ;; the initial barline of the measure behaves as a function of the
+ ;; force that is applied to it.
+ (prefix-elasticity-function :accessor prefix-elasticity-function)))
+
(define-added-mixin dstaff () staff
((yoffset :initform 0 :accessor staff-yoffset)))
@@ -264,7 +270,9 @@
;;; elasticity function of a measure.
(defun compute-elasticity-functions (measures method)
(loop for measure in measures
- do (loop with result = (make-elementary-elasticity (min-width method) 0.0001)
+ do (setf (prefix-elasticity-function measure)
+ (make-elementary-elasticity (min-width method) 0.0001))
+ do (loop with result = (prefix-elasticity-function measure)
with timelines = (timelines measure)
for i from 0 below (flexichain:nb-elements timelines)
for timeline = (flexichain:element* timelines i)
@@ -275,6 +283,22 @@
finally (setf (elasticity-function measure) result)))
(reduce #'add-elasticities measures :key #'elasticity-function))
+;;; eventually remove the existing draw-measure and rename this
+;;; to draw-measure
+(defun new-draw-measure (pane measure x force draw-cursor)
+ (loop with timelines = (timelines measure)
+ for i from 0 below (flexichain:nb-elements timelines)
+ for timeline = (flexichain:element* timelines i)
+ and xx = (+ x (size-at-force (prefix-elasticity-function measure) force))
+ then (+ xx (max (smallest-gap timeline)
+ (* force (elasticity timeline))))
+ do (loop for element in (elements timeline)
+ do (setf (final-absolute-element-xoffset element) xx)))
+ (loop for bar in (measure-bars measure)
+ do (if (gsharp-cursor::cursors (slice bar))
+ (new-draw-bar pane bar draw-cursor)
+ (score-pane:with-light-glyphs pane (new-draw-bar pane bar draw-cursor)))))
+
(defun draw-measure (pane measure min-dist compress x method draw-cursor)
(let* ((width (/ (nat-width method (measure-coeff measure) min-dist)
compress))
@@ -295,6 +319,17 @@
(draw-bar pane bar x width time-alist draw-cursor)
(score-pane:with-light-glyphs pane (draw-bar pane bar x width time-alist draw-cursor))))))
+;;; eventually remove the existing draw-system and rename this
+;;; to draw-system
+(defun new-draw-system (pane measures x force staves draw-cursor)
+ (loop for measure in measures
+ do (new-draw-measure pane measure x force draw-cursor)
+ do (incf x (size-at-force (elasticity-function measure) force))
+ do (score-pane:draw-bar-line pane x
+ (- (score-pane:staff-step 8))
+ (staff-yoffset (car (last staves))))))
+
+
(defun draw-system (pane measures x widths method staves draw-cursor)
(let ((compress (compute-compress-factor measures method))
(min-dist (compute-min-dist measures)))
@@ -531,6 +566,8 @@
(defun draw-cursor (pane x)
(draw-line* pane x (- (score-pane:staff-step -4)) x (- (score-pane:staff-step 12)) :ink +red+))
+
+(defgeneric new-draw-bar (pane bar draw-cursor))
(defmethod draw-bar (pane (bar melody-bar) x width time-alist draw-cursor)
(compute-element-x-positions bar x time-alist)
More information about the Gsharp-cvs
mailing list