is absolutely necessary for beams, since they have to adjust the
length of stems of notes they encompass.
*/
-class Spanner : public Grob
+
+struct Preinit_Spanner
{
Drul_array<Item *> spanned_drul_;
+ SCM pure_property_cache_;
+ Preinit_Spanner ();
+};
+
+class Spanner : Preinit_Spanner, public Grob
+{
vsize break_index_;
DECLARE_CLASSNAME (Spanner);
DECLARE_SCHEME_CALLBACK (bounds_width, (SCM));
DECLARE_SCHEME_CALLBACK (kill_zero_spanned_time, (SCM));
- static Spanner *unsmob (SCM s) {
- return dynamic_cast <Spanner *> (Grob::unsmob (s));
- }
- static bool is_smob (SCM s) {
- return Grob::is_smob (s) && unsmob (s);
- }
-
vector<Spanner *> broken_intos_;
vsize get_break_index () const;
static bool less (Spanner *const &, Spanner *const &);
virtual Grob *find_broken_piece (System *) const;
virtual void derived_mark () const;
- DECLARE_GROB_INTERFACE ();
virtual System *get_system () const;
SCM get_cached_pure_property (SCM sym, int start, int end);
void cache_pure_property (SCM sym, int start, int end, SCM value);
protected:
- SCM pure_property_cache_;
-
void set_my_columns ();
virtual Grob *clone () const;
virtual void do_break_processing ();