]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/score-element.cc
release: 1.1.29
[lilypond.git] / lily / score-element.cc
index cbaadfc4f4b880c7c3e43090003c3f42c7b6479d..e07bc053e7ddd254b0edbae9169de08adacd3830 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 
 #include "misc.hh"
 #include "paper-outputter.hh"
 
-#define PARANOID
-
 Score_element::Score_element()
 {
+  output_p_ =0;
   transparent_b_ = false;
   size_i_ = 0;
   pscore_l_=0;
@@ -41,6 +40,7 @@ Score_element::Score_element (Score_element const&s)
      dependents.      
    */
   copy_edges_out (s);
+  output_p_ =0;
   transparent_b_ = s.transparent_b_;
   status_i_ = s.status_i_;
   pscore_l_ = s.pscore_l_;
@@ -52,13 +52,14 @@ Score_element::Score_element (Score_element const&s)
 
 Score_element::~Score_element()
 {
+  delete output_p_; 
   assert (status_i_ >=0);
 }
 
 Score_element*
 Score_element::dependency (int i) const
 {
-  return (Score_element*) get_out_edge_arr ()[i];
+  return (Score_element*) (get_out_edge_arr ()[i]);
 }
 
 int
@@ -70,7 +71,7 @@ Score_element::dependency_size () const
 Score_element*
 Score_element::dependent (int i) const
 {
-  return (Score_element*) get_in_edge_arr()[i];
+  return (Score_element *)( get_in_edge_arr()[i]);
 }
 
 int
@@ -86,9 +87,11 @@ Score_element::do_width() const
 {
   Interval r;
 
-  Molecule*m = brew_molecule_p();
+  Molecule*m = output_p_ ?  output_p_ : do_brew_molecule_p();
   r = m->extent().x ();
-  delete m;
+
+  if (!output_p_)
+    delete m;
   
   return r;
 }
@@ -97,9 +100,11 @@ Interval
 Score_element::do_height() const 
 {
   Interval r;
-  Molecule*m = brew_molecule_p();
+  Molecule*m = output_p_ ?  output_p_ : do_brew_molecule_p();
   r = m->extent().y ();
-  delete m;
+  if (!output_p_)
+    delete m;
+
   return r;
 }
 
@@ -111,7 +116,7 @@ void
 Score_element::print() const
 {
 #ifndef NPRINT
-  DOUT << name() << "{\n";
+  DOUT << classname(this) << "{\n";
   DOUT << "dets: " << dependent_size() << "dependencies: " << 
     dependency_size();
  
@@ -171,13 +176,17 @@ Score_element::calculate_dependencies (int final, int busy,
 }
 
 void
-Score_element::do_brew_molecule () 
+Score_element::output_processing () 
 {
   if (transparent_b_)
     return;
-  Molecule *output= brew_molecule_p ();
-  pscore_l_->outputter_l_->output_molecule (output, absolute_offset (), name());
-  delete output;
+  if (output_p_)
+    delete output_p_;
+  
+  output_p_ = do_brew_molecule_p ();
+  pscore_l_->outputter_l_->output_molecule (output_p_,
+                                           absolute_offset (),
+                                           classname(this));
 }
 
 /*
@@ -237,12 +246,12 @@ Score_element::do_junk_links()
 {
 }
 
-IMPLEMENT_IS_TYPE_B1(Score_element, Graphical_element);
+
 
 Molecule*
-Score_element::brew_molecule_p() const
+Score_element::do_brew_molecule_p() const
 {
-  Atom a (lookup_l ()->fill (Box (Interval (0,0), Interval (0,0))));
+  Molecule a (lookup_l ()->fill (Box (Interval (0,0), Interval (0,0))));
   return new Molecule (a);
 }
 
@@ -291,17 +300,16 @@ Score_element::handle_broken_dependencies()
       Score_element * elt = dependency (i);
       if (elt->line_l() != line)
        {
-         if (dynamic_cast <Spanner *> (elt)) 
+         if (Spanner *sp = dynamic_cast<Spanner *> (elt)) 
            {
-             Spanner * sp = dynamic_cast <Spanner *> (elt);
              Spanner * broken = sp->find_broken_piece (line);
              substitute_dependency (sp, broken);
 
              add_dependency (broken);
            }
-         else if (dynamic_cast <Item *> (elt))
+         else if (Item *original = dynamic_cast <Item *> (elt))
            {
-             Item * my_item = dynamic_cast <Item *> (elt)->find_prebroken_piece (line);
+             Item * my_item = original->find_prebroken_piece (line);
                
              substitute_dependency (elt, my_item);
              if (my_item)
@@ -363,6 +371,11 @@ Score_element::handle_prebroken_dependencies()
       substitute_dependency (old_arr[i], new_arr[i]);
 }
 
+void
+Score_element::handle_prebroken_dependents()
+{
+}
+
 
 void
 Score_element::junk_links ()