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 <string.h>
-#include "tex-outputter.hh"
#include "p-score.hh"
#include "paper-def.hh"
#include "lookup.hh"
#include "molecule.hh"
#include "score-element.hh"
#include "debug.hh"
-#include "tex.hh"
-#include "dimension.hh"
#include "spanner.hh"
#include "line-of-score.hh"
#include "item.hh"
#include "p-col.hh"
#include "molecule.hh"
#include "misc.hh"
-
-#define PARANOID
+#include "paper-outputter.hh"
Score_element::Score_element()
{
+ output_p_ =0;
transparent_b_ = false;
size_i_ = 0;
pscore_l_=0;
dependents.
*/
copy_edges_out (s);
+ output_p_ =0;
transparent_b_ = s.transparent_b_;
status_i_ = s.status_i_;
pscore_l_ = s.pscore_l_;
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
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
{
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;
}
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;
}
Score_element::print() const
{
#ifndef NPRINT
- DOUT << name() << "{\n";
+ DOUT << classname(this) << "{\n";
DOUT << "dets: " << dependent_size() << "dependencies: " <<
dependency_size();
}
-Lookup *
+Lookup const *
Score_element::lookup_l () const
{
return pscore_l_->paper_l_->lookup_l (size_i_);
void
-Score_element::calcalute_dependencies (int final, int busy,
+Score_element::calculate_dependencies (int final, int busy,
Score_element_method_pointer funcptr)
{
if (status_i_ >= final)
status_i_= busy;
for (int i=0; i < dependency_size(); i++)
- dependency (i)->calcalute_dependencies (final, busy, funcptr);
+ dependency (i)->calculate_dependencies (final, busy, funcptr);
Link_array<Score_element> extra (get_extra_dependencies());
for (int i=0; i < extra.size(); i++)
- extra[i]->calcalute_dependencies (final, busy, funcptr);
+ extra[i]->calculate_dependencies (final, busy, funcptr);
invalidate_cache (X_AXIS);
invalidate_cache (Y_AXIS);
}
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));
}
/*
{
}
-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);
}
Score_element * elt = dependency (i);
if (elt->line_l() != line)
{
- if (elt->access_Spanner ())
+ if (Spanner *sp = dynamic_cast<Spanner *> (elt))
{
- Spanner * sp = elt->access_Spanner ();
Spanner * broken = sp->find_broken_piece (line);
substitute_dependency (sp, broken);
add_dependency (broken);
}
- else if (elt->access_Item ())
+ else if (Item *original = dynamic_cast <Item *> (elt))
{
- Item * my_item = elt->access_Item ()->find_prebroken_piece (line);
+ Item * my_item = original->find_prebroken_piece (line);
substitute_dependency (elt, my_item);
if (my_item)
for (int i=0; i < dependency_size(); i++)
{
Score_element * elt = dependency (i);
- Item *it_l = elt->access_Item ();
+ Item *it_l = dynamic_cast <Item *> (elt);
if (it_l && it_l->breakable_b_)
- if (access_Item ())
+ if (Item *me = dynamic_cast<Item*> (this) )
{
- Score_element *new_l = it_l->find_prebroken_piece (access_Item ()->break_status_dir_);
+ Score_element *new_l = it_l->find_prebroken_piece (me->break_status_dir_);
if (new_l != elt)
{
new_arr.push (new_l);
substitute_dependency (old_arr[i], new_arr[i]);
}
+void
+Score_element::handle_prebroken_dependents()
+{
+}
+
void
Score_element::junk_links ()