Update of /project/gsharp/cvsroot/gsharp In directory common-lisp.net:/tmp/cvs-serv29015
Modified Files: drawing.lisp Log Message: More separation between coordinate calculation and drawing
Date: Mon Dec 5 03:59:22 2005 Author: rstrandh
Index: gsharp/drawing.lisp diff -u gsharp/drawing.lisp:1.45 gsharp/drawing.lisp:1.46 --- gsharp/drawing.lisp:1.45 Mon Dec 5 03:29:44 2005 +++ gsharp/drawing.lisp Mon Dec 5 03:59:21 2005 @@ -1,15 +1,17 @@ (in-package :gsharp-drawing)
-(define-added-mixin dbar () bar +(defclass x-y-width-mixin () (;; indicates the absolute y position of the system to which the - ;; bar belongs + ;; object belongs (system-y-position :accessor system-y-position) - ;; the absolute x position of the bar - (final-absolute-bar-xoffset :accessor final-absolute-bar-xoffset) - ;; + ;; the absolute x position of the object + (final-absolute-measure-xoffset :accessor final-absolute-measure-xoffset) (final-width :accessor final-width)))
-(define-added-mixin dmeasure () measure +(define-added-mixin dbar (x-y-width-mixin) bar + ()) + +(define-added-mixin dmeasure (x-y-width-mixin) 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. @@ -323,6 +325,9 @@ method coeff min-dist)) compress)))))) + (setf (system-y-position measure) y + (final-absolute-measure-xoffset measure) x + (final-width measure) width) (loop for bar in (measure-bars measure) do (compute-bar-coordinates bar x y width) (compute-element-x-positions bar x time-alist)))) @@ -331,7 +336,14 @@ (loop for bar in (measure-bars measure) do (if (gsharp-cursor::cursors (slice bar)) (draw-bar pane bar) - (score-pane:with-light-glyphs pane (draw-bar pane bar))))) + (score-pane:with-light-glyphs pane (draw-bar pane bar)))) + (let ((x (final-absolute-measure-xoffset measure)) + (y (system-y-position measure)) + (width (final-width measure)) + (staves (staves (buffer (segment (layer (slice (car (measure-bars measure))))))))) + (score-pane:draw-bar-line pane (+ x width) + (+ y (- (score-pane:staff-step 8))) + (+ y (staff-yoffset (car (last staves)))))))
;;; eventually remove the existing draw-system and rename this ;;; to draw-system @@ -343,18 +355,17 @@ (- (score-pane:staff-step 8)) (staff-yoffset (car (last staves))))))
- -(defun draw-system (pane measures x y widths method staves) +(defun compute-system-coordinates (measures x y widths method) (let ((compress (compute-compress-factor measures method)) (min-dist (compute-min-dist measures))) (loop for measure in measures for width in widths do (compute-measure-coordinates measure min-dist compress x y method) - (draw-measure pane measure) - (incf x width) - (score-pane:draw-bar-line pane x - (+ y (- (score-pane:staff-step 8))) - (+ y (staff-yoffset (car (last staves)))))))) + (incf x width)))) + +(defun draw-system (pane measures) + (loop for measure in measures do + (draw-measure pane measure)))
(defmethod draw-buffer (pane (buffer buffer) *cursor* x y) (score-pane:with-staff-size 6 @@ -394,9 +405,10 @@ (force-at-size e-fun (line-width method))))) nil) (let ((widths (compute-widths measures method))) - (draw-system pane measures - (+ x (left-offset buffer) timesig-offset) yy - widths method staves) + (compute-system-coordinates measures + (+ x (left-offset buffer) timesig-offset) yy + widths method) + (draw-system pane measures) (score-pane:draw-bar-line pane x (+ yy (- (score-pane:staff-step 8))) (+ yy (staff-yoffset (car (last staves))))) @@ -614,7 +626,7 @@ (- x 1) (+ sy (- (+ (score-pane:staff-step -2) yoffset))) :ink +red+)))))) (score-pane:with-staff-size 6 - (let* ((x (final-absolute-bar-xoffset bar)) + (let* ((x (final-absolute-measure-xoffset bar)) (width (final-width bar)) (elements (elements bar))) (if (null cursor-element) @@ -629,7 +641,7 @@
(defun compute-bar-coordinates (bar x y width) (setf (system-y-position bar) y - (final-absolute-bar-xoffset bar) x + (final-absolute-measure-xoffset bar) x (final-width bar) width))
(defmethod draw-bar (pane (bar melody-bar))