]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/staff-sym.cc
partial: 0.1.61.jcn
[lilypond.git] / lily / staff-sym.cc
index 9eb4d6d2ac5d9306875f25d96fda9cd49e41790a..b22a36592fbedacdf08d94b486c875f44d2d6e41 100644 (file)
@@ -1,60 +1,73 @@
 /*
   staffsym.cc -- implement Staff_symbol
 
-  source file of the LilyPond music typesetter
+  source file of the GNU LilyPond music typesetter
 
   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
 */
 #include "staff-sym.hh"
 #include "lookup.hh"
 #include "paper-def.hh"
+#include "molecule.hh"
 #include "debug.hh"
+#include "dimen.hh"
 
 
-
-Staff_symbol::Staff_symbol(int l)
+Staff_symbol::Staff_symbol ()
 {
-    no_lines_i_ = l;
+  no_lines_i_ = 5;
+  interline_f_ =  0 PT;
 }
 
-IMPLEMENT_STATIC_NAME(Staff_symbol);
+
+IMPLEMENT_IS_TYPE_B1(Staff_symbol,Spanner);
 
 void
-Staff_symbol::do_print()const
+Staff_symbol::do_print() const
 {
-    mtor << "lines: " << no_lines_i_;
+#ifndef NPRINT
+  Spanner::do_print();
+  DOUT << "lines: " << no_lines_i_;
+#endif
 }
 
-Molecule*
-Staff_symbol::brew_molecule_p() const
+Interval
+Staff_symbol::do_height() const
 {
-    Atom a  = paper()->lookup_l()->linestaff(no_lines_i_, width().length());
-    return new Molecule(a);
+  int n = no_lines_i_ -1;
+//  return 2* inter_note_f () * Interval (-n, n);
+  return inter_note_f () * Interval (-n, n);
 }
 
-Spanner*
-Staff_symbol::do_break_at(PCol*p1, PCol*p2)const
+Molecule*
+Staff_symbol::brew_molecule_p() const
 {
-    Staff_symbol *span_p=new Staff_symbol(*this);
-    return span_p;
-}
+  Paper_def * p = paper();
+  Atom rule  = p->lookup_l ()->rule_symbol (p->get_var ("rulethickness"), 
+                                           width ().length ());
+  Real height = (no_lines_i_-1) * inter_note_f();
+  Molecule * m = new Molecule;
+  for (int i=0; i < no_lines_i_; i++)
+    {
+      Atom a (rule);
+      a.translate_axis (height - i * inter_note_f()*2, Y_AXIS);
+      m->add (a);
+    }
 
-void
-Staff_symbol::set_extent(PCol*p1, PCol*p2)
-{
-    assert(p1&&p2);
-    left_col_l_ = p1;
-    right_col_l_ = p2;
+  return m;
 }
 
 Real
-Staff_symbol::inter_note_f()const
+Staff_symbol::inter_note_f() const
 {
-    return paper()->internote();
+  if (interline_f_)
+    return interline_f_/2;
+
+  return paper()->internote_f ();
 }
 
 int
 Staff_symbol::steps_i() const
 {
-    return no_lines_i_*2;
+  return no_lines_i_*2;
 }