]> git.donarmstrong.com Git - lilypond.git/blobdiff - line.cc
release: 0.0.7
[lilypond.git] / line.cc
diff --git a/line.cc b/line.cc
index a6e0f7c68a711764e84a67074f1207e27a7b5761..293214dc3078a6e1df9bc5554e4b47ec640c8cdc 100644 (file)
--- a/line.cc
+++ b/line.cc
@@ -1,19 +1,27 @@
 #include "line.hh"
 #include "dimen.hh"
+#include "spanner.hh"
 #include "symbol.hh"
 #include "paper.hh"
 #include "pcol.hh"
 #include "pscore.hh"
 
+static String
+make_vbox(Interval i)
+{
+    
+    String s("\\vbox to ");
+    s += print_dimen(i.length());
+    s += "{\\vskip "+print_dimen(i.max)+" ";
+    return s;
+}
+
+    
 String
 Line_of_staff::TeXstring() const
 {
-    String s("%line_of_staff\n\\vbox to ");
-    s += print_dimen(maxheight() ) +"{";
-
-    //make some room
-    s += vstrut(base);
-
+    String s("%line_of_staff\n");
+    s+=make_vbox(height());
     // the staff itself: eg lines, accolades
     s += "\\hbox{";
     {
@@ -28,7 +36,8 @@ Line_of_staff::TeXstring() const
            lastpos = cc->hpos;
 
            // moveover
-           s +=String( "\\kern ") + print_dimen(delta);
+           if (delta)
+               s +=String( "\\kern ") + print_dimen(delta);
 
            // now output the items.
 
@@ -46,44 +55,8 @@ Line_of_staff::TeXstring() const
     return s;
 }
 
-String
-Line_of_score::TeXstring() const
-{
-     String s("\\vbox{");
-     for (PCursor<Line_of_staff*> sc(staffs); sc.ok(); sc++){
-        s += sc->TeXstring();
-        if ((sc+1).ok())
-            s+= "\\interstaffline\n";
-     }
-     s += "}";
-     return s;
-}
-
-/// testing this entry
-Line_of_score::Line_of_score(svec<const PCol *> sv,
-                            const PScore *ps)
-{
-    score = ps;
-    for (int i=0; i< sv.sz(); i++) {
-       PCol *p=(PCol *) sv[i];
-       cols.bottom().add(p);
-       p->line=this;
-    }
-
-    for (PCursor<PStaff*> sc(score->staffs); sc.ok(); sc++)
-       staffs.bottom().add(new Line_of_staff(this, sc));    
-}
-/** construct a line with the named columns. Make the line field
-    in each column point to this
-    
-    #sv# isn't really const!!
-    */
-
 Line_of_staff::Line_of_staff(Line_of_score * sc, PStaff*st)
 {
-    // [don't know how to calc dimensions yet.]
-   height = 0.0;
-   base =0.0;
  
     scor=sc;
     pstaff_=st;
@@ -101,8 +74,8 @@ Line_of_staff::Line_of_staff(Line_of_score * sc, PStaff*st)
 }
 
 
-Real
-Line_of_staff::maxheight() const
+Interval
+Line_of_staff::height() const
 {
     Interval y;
     {
@@ -113,8 +86,6 @@ Line_of_staff::maxheight() const
     
     // all items in the current line & staff.
     for (; cc.ok(); cc++) {
-
-               
        for (PCursor<const Item *> ic(cc->its); ic.ok(); ic++) {
            if (ic->pstaff_ == pstaff_) {
                y.unite(ic->height());
@@ -126,7 +97,41 @@ Line_of_staff::maxheight() const
                assert(false);          
        }
     }
-    return y.max;
+    return y;
+}
+
+
+/****************************************************************/
+String
+Line_of_score::TeXstring() const
+{
+     String s("\\vbox{%<- line of score\n");
+     for (PCursor<Line_of_staff*> sc(staffs); sc.ok(); sc++){
+        s += sc->TeXstring();
+        if ((sc+1).ok())
+            s+= "\\interstaffline\n";
+     }
+     s += "}";
+     return s;
 }
 
+/// testing this entry
+Line_of_score::Line_of_score(svec<const PCol *> sv,
+                            const PScore *ps)
+{
+    score = ps;
+    for (int i=0; i< sv.sz(); i++) {
+       PCol *p=(PCol *) sv[i];
+       cols.bottom().add(p);
+       p->line=this;
+    }
+
+    for (PCursor<PStaff*> sc(score->staffs); sc.ok(); sc++)
+       staffs.bottom().add(new Line_of_staff(this, sc));    
+}
+/** construct a line with the named columns. Make the line field
+    in each column point to this
+    
+    #sv# isn't really const!!
+    */