Real
Align_interface::center_on_element (Score_element const *me, Axis a)
{
- Score_element *cent = unsmob_element (me->get_elt_property ("group-center-element"));
+ Score_element *cent = unsmob_element (me->get_elt_pointer ("group-center-element"));
if (cent)
{
Link_array<Score_element> elems;
Link_array<Score_element> all_elts
- = Group_interface__extract_elements ( elt_l_, (Score_element*) 0, "elements");
+ = Pointer_group_interface__extract_elements ( elt_l_, (Score_element*) 0, "elements");
for (int i=0; i < all_elts.size(); i++)
{
Interval y = all_elts[i]->extent(a) + all_elts[i]->relative_coordinate (elt_l_, a);
int
Align_interface::get_count (Score_element*s)const
{
- SCM e = elt_l_->get_elt_property ("elements");
+ SCM e = elt_l_->get_elt_pointer ("elements");
int c =0;
while (gh_pair_p (e))
{
Spanner*
Axis_group_engraver::get_spanner_p () const
{
- return new Spanner;
+ return new Spanner (SCM_EOL);
}
void
Score_element * e = i.elem_l_;
if (e->get_elt_property ("interfaces") == SCM_EOL)
- group (e, "interfaces").add_thing (ly_symbol2scm (e->name()));
+ Group_interface (e, "interfaces").add_thing (ly_symbol2scm (e->name()));
if (!i.origin_trans_l_)
i.origin_trans_l_ = this;
(c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+
#include "grace-engraver-group.hh"
#include "lily-guile.hh"
-
#include "score-element.hh"
#include "musical-request.hh"
Grace_engraver_group::finish ()
{
calling_self_b_ = true;
- removal_processing (); // ugr. We'd want to have this done by our parents.g
+ removal_processing (); // ugr. We'd want to have this done by our parents.
for (int i=0; i < announce_to_top_.size (); i++)
{
Engraver::announce_element (announce_to_top_[i]);
}
-void
-Group_interface::add_element (Score_element*p)
-{
- p->used_b_ = true;
- elt_l_->used_b_ = true;
-
- add_thing (p->self_scm_);
-}
void
Group_interface::add_thing (SCM s)
}
}
-Group_interface
-group (Score_element*s,String n)
-{
- Group_interface gi (s,n);
- return gi;
-}
-
-Group_interface
-group (Score_element*s)
-{
- Group_interface gi (s);
- return gi;
-}
void add_thing (SCM);
bool has_interface_b ();
void set_interface ();
- void add_element (Score_element*);
};
-Group_interface group (Score_element*);
-Group_interface group (Score_element*, String);
-
+struct Pointer_group_interface {
+ Score_element * elt_l_;
+ String name_;
+public:
+ Pointer_group_interface (Score_element const*);
+ Pointer_group_interface (Score_element const*, String);
+ int count ();
+ void set_interface ();
+ bool has_interface_b ();
+ void add_element (Score_element*);
+};
/**
Put all score elements of ELT's property called NAME into an array,
and return it. */
template<class T>
Link_array<T>
-Group_interface__extract_elements (Score_element const *elt, T *, String name)
+Pointer_group_interface__extract_elements (Score_element const *elt, T *, const char* name)
{
Link_array<T> arr;
- for (SCM s = elt->get_elt_property (name); gh_pair_p (s); s = gh_cdr (s))
+ for (SCM s = elt->get_elt_pointer (name); gh_pair_p (s); s = gh_cdr (s))
{
SCM e = gh_car (s);
assert (SMOB_IS_TYPE_B(Score_element,e));
Moment when_mom ()const;
bool musical_b () const;
-
+ bool used_b () const;
void set_rank (int);
private:
int dot_count () const;
protected:
virtual void after_line_breaking ();
+ Rhythmic_head (SCM s);
};
#endif // RHYTHMIC_HEAD_HH
#ifndef SLURGRAV_HH
#define SLURGRAV_HH
-#include "engraver.hh"
-class Slur_engraver :public Engraver {
- Link_array<Span_req> requests_arr_;
- Link_array<Span_req> new_slur_req_l_arr_;
- Link_array<Slur> slur_l_stack_;
- Link_array<Slur> end_slur_l_arr_;
-
- void set_melisma (bool);
-protected:
- virtual bool do_try_music (Music*);
- virtual void do_process_music();
- virtual void acknowledge_element (Score_element_info);
- virtual void do_pre_move_processing();
- virtual void do_post_move_processing();
- virtual void do_removal_processing ();
-
-public:
- VIRTUAL_COPY_CONS(Translator);
-
-};
#endif // SLURGRAV_HH
void set_bound (Direction d, Item*);
Item *get_bound (Direction d) const;
- Spanner ();
+ Spanner (SCM);
Spanner (Spanner const &);
bool broken_b () const;
void do_break ();
#include "lily-guile.hh"
#include "line-of-score.hh"
-Item::Item ()
+Item::Item (SCM s)
+ : Score_element (s)
+
{
broken_to_drul_[LEFT] = broken_to_drul_[RIGHT]=0;
}
{
if (original_l_)
{
- element_property_alist_
- = handle_broken_smobs (original_l_->element_property_alist_,
+ pointer_alist_
+ = handle_broken_smobs (original_l_->pointer_alist_,
gh_int2scm (break_status_dir ()));
}
Can't do this earlier, because try_visibility_lambda () might set
the elt property transparent, which would then be copied.
*/
- SCM vis = remove_elt_property ("visibility-lambda");
+ SCM vis = get_elt_property ("visibility-lambda");
if (gh_procedure_p (vis))
{
SCM args = scm_listify (gh_int2scm (break_status_dir ()), SCM_UNDEFINED);
SCM type_p = gh_cadr (entry);
SCM elt_prop_sym = gh_caddr (entry);
- SCM preset = scm_assq(elt_prop_sym, e->element_property_alist_);
+ SCM preset = scm_assq(elt_prop_sym, e->property_alist_);
if (preset != SCM_BOOL_F)
continue;
sprintf (str, "#<Scheme_hash_table 0x%0x ", s);
scm_puts (str, p);
Scheme_hash_table *me = SMOB_TO_TYPE(Scheme_hash_table,s);
- for (Scm_stl_map ::const_iterator i = me->begin (); i != me->end(); i++)
+ for (Scm_stl_map::const_iterator i = me->begin (); i != me->end(); i++)
{
scm_display ((*i).first, p);
scm_puts (" = ",p);
#include "dimensions.hh"
#include "dimension-cache.hh"
#include "staff-symbol-referencer.hh"
+#include "group-interface.hh"
Side_position_interface::Side_position_interface (Score_element const *e)
{
void
Side_position_interface::add_support (Score_element*e)
{
- SCM sup = elt_l_->get_elt_property ("side-support");
- elt_l_->set_elt_property ("side-support",
- gh_cons (e->self_scm_,sup));
+ Pointer_group_interface (elt_l_, "side-support-elements").add_element (e);
}
relative_dir = to_dir (reldir);
}
- SCM other_elt = elt_l_->get_elt_property ("direction-source");
+ SCM other_elt = elt_l_->get_elt_pointer ("direction-source");
Score_element * e = unsmob_element(other_elt);
if (e)
{
{
Score_element* me = (Score_element*)cme;
Score_element *common = me->parent_l (axis);
- SCM support = me->get_elt_property ("side-support");
+ SCM support = me->get_elt_pointer ("side-support-elements");
for (SCM s = support; s != SCM_EOL; s = gh_cdr (s))
{
Score_element * e = unsmob_element (gh_car (s));
Side_position_interface::set_axis (Axis a)
{
// prop transparent ?
- if (elt_l_->get_elt_property ("side-support") == SCM_UNDEFINED)
- elt_l_->set_elt_property ("side-support" ,SCM_EOL);
+ if (elt_l_->get_elt_pointer ("side-support-elements") == SCM_UNDEFINED)
+ elt_l_->set_elt_pointer ("side-support-elements" ,SCM_EOL);
if (!elt_l_->has_offset_callback_b (aligned_side, a))
elt_l_->add_offset_callback (aligned_side, a);
bool
Side_position_interface::has_interface_b () const
{
- return elt_l_->get_elt_property ("side-support") != SCM_UNDEFINED;
+ return elt_l_->get_elt_pointer ("side-support-elements") != SCM_UNDEFINED;
}
bool
Side_position_interface::supported_b () const
{
- SCM s =elt_l_->get_elt_property ("side-support");
+ SCM s =elt_l_->get_elt_pointer ("side-support-elements");
return s != SCM_UNDEFINED && s != SCM_EOL;
}
bool
Staff_symbol_referencer_interface::has_interface_b ()
{
- return unsmob_element (elt_l_->get_elt_property ("staff-symbol"))
+ return unsmob_element (elt_l_->get_elt_pointer ("staff-symbol"))
|| gh_number_p (elt_l_->get_elt_property ("staff-position"));
}
Staff_symbol*
Staff_symbol_referencer_interface::staff_symbol_l () const
{
- SCM st = elt_l_->get_elt_property ("staff-symbol");
+ SCM st = elt_l_->get_elt_pointer ("staff-symbol");
return dynamic_cast<Staff_symbol* > (unsmob_element(st));
}
Real
Staff_symbol_referencer_interface::callback (Score_element const* sc,Axis )
{
+ Score_element* me = (Score_element*)sc; // UGH.
+
SCM pos = sc->get_elt_property ("staff-position");
Real off =0.0;
if (gh_number_p (pos))
Real space = staff_symbol_referencer (sc).staff_space ();
off = gh_scm2double (pos) * space/2.0;
}
- sc->set_elt_property ("staff-position", gh_double2scm (0.0));
+
+ me->set_elt_property ("staff-position", gh_double2scm (0.0));
return off;
}