2 dimension-cache.cc -- implement Dimension_cache
4 source file of the GNU LilyPond music typesetter
6 (c) 1998--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "dimension-cache.hh"
11 #include "score-element.hh"
14 Dimension_cache::Dimension_cache (Dimension_cache const &d)
17 callback_l_ = d.callback_l_;
18 basic_offset_ = d.basic_offset_;
19 extra_offset_ = d.extra_offset_;
20 off_valid_b_ = d.off_valid_b_;
21 off_callbacks_ = d.off_callbacks_;
22 parent_l_ = d.parent_l_;
25 Dimension_cache::Dimension_cache ()
31 Dimension_cache::init()
47 Dimension_cache::invalidate ()
55 Dimension_cache::set_offset (Real x)
68 Dimension_cache::translate (Real x)
74 Dimension_cache::relative_coordinate (Dimension_cache *refp) const
80 We catch PARENT_L_ == nil case with this, but we crash if we did
81 not ask for the absolute coordinate (ie. REFP == nil.)
84 if (refp == parent_l_)
87 return get_offset () + parent_l_->relative_coordinate (refp);
91 Dimension_cache::axis () const
93 if (elt_l_-> dim_cache_[X_AXIS] == this)
100 Dimension_cache::get_offset () const
104 Dimension_cache *d = (Dimension_cache*) this;
106 d->basic_offset_ =0.0;
107 d->off_valid_b_ = true;
108 for (int i=0; i < off_callbacks_.size (); i++)
109 d->basic_offset_ += (*off_callbacks_[i]) (d);
112 return basic_offset_ + extra_offset_;
116 Dimension_cache::common_refpoint (Dimension_cache const* s) const
118 Link_array<Dimension_cache> my_groups;
119 for (Dimension_cache const *c = this; c ; c = c->parent_l_)
120 my_groups.push ((Dimension_cache*)c);
122 Dimension_cache const *common=0;
124 for (Dimension_cache const * d = s; !common && d; d = d->parent_l_)
125 common = (Dimension_cache const*)my_groups.find_l (d);
127 return (Dimension_cache*) common;
131 Dimension_cache::point_dimension_callback (Dimension_cache const* )
133 return Interval (0,0);
137 Dimension_cache::get_dim () const
140 Dimension_cache *nc = ((Dimension_cache*)this);
143 nc->dim_.set_empty ();
148 nc->dim_= (*callback_l_ ) (nc);
157 Dimension_cache::set_callback (Dim_cache_callback c)