X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fdot-column.cc;h=19ff63fd0ab59a957fdc0943257f38e66edf2079;hb=ab685a4504e0aef61caf91085e900e05b6aa0194;hp=1121ff04be81b0afa0d80700ec00584412c031fc;hpb=2c22efe5a46a37065b10c3f51c5d7db00d07d318;p=lilypond.git diff --git a/lily/dot-column.cc b/lily/dot-column.cc index 1121ff04be..19ff63fd0a 100644 --- a/lily/dot-column.cc +++ b/lily/dot-column.cc @@ -3,14 +3,15 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2005 Han-Wen Nienhuys + (c) 1997--2005 Han-Wen Nienhuys */ #include "dot-column.hh" #include -#include +#include #include +using namespace std; #include "dots.hh" #include "rhythmic-head.hh" @@ -25,32 +26,11 @@ TODO: let Dot_column communicate with stem via Note_column. */ -MAKE_SCHEME_CALLBACK (Dot_column, force_shift_callback, 2); +MAKE_SCHEME_CALLBACK (Dot_column, side_position, 1); SCM -Dot_column::force_shift_callback (SCM element_smob, SCM axis) +Dot_column::side_position (SCM smob) { - Grob *me = unsmob_grob (element_smob); - (void) axis; - assert (scm_to_int (axis) == Y_AXIS); - me = me->get_parent (X_AXIS); - - if (!to_boolean (me->get_property ("positioning-done"))) - { - me->set_property ("positioning-done", SCM_BOOL_T); - - do_shifts (me); - } - return scm_from_double (0.0); -} - -MAKE_SCHEME_CALLBACK (Dot_column, side_position, 2); -SCM -Dot_column::side_position (SCM element_smob, SCM axis) -{ - Grob *me = unsmob_grob (element_smob); - (void) axis; - assert (scm_to_int (axis) == X_AXIS); - + Grob *me = unsmob_grob (smob); Grob *stem = unsmob_grob (me->get_object ("stem")); if (stem && !Stem::get_beam (stem) @@ -62,9 +42,10 @@ Dot_column::side_position (SCM element_smob, SCM axis) This will add the stem to the support if a flag collision happens. */ - Stem::stem_end_position (stem); + stem->get_property ("stem-end-position"); } - return Side_position_interface::aligned_side (element_smob, axis); + + return Side_position_interface::x_aligned_side (smob); } struct Dot_position @@ -82,7 +63,7 @@ struct Dot_position } }; -typedef std::map Dot_configuration; +typedef map Dot_configuration; /* Value CFG according. @@ -218,9 +199,11 @@ remove_collision (Dot_configuration &cfg, int p) } } +MAKE_SCHEME_CALLBACK(Dot_column, calc_positioning_done, 1); SCM -Dot_column::do_shifts (Grob *me) +Dot_column::calc_positioning_done (SCM smob) { + Grob *me = unsmob_grob (smob); Link_array dots = extract_grob_array (me, "dots"); @@ -278,10 +261,12 @@ Dot_column::do_shifts (Grob *me) for (Dot_configuration::const_iterator i (cfg.begin ()); i != cfg.end (); i++) { + /* + Junkme? + */ Staff_symbol_referencer::set_position (i->second.dot_, i->first); } - - return SCM_UNSPECIFIED; + return SCM_BOOL_T; } void @@ -293,13 +278,19 @@ Dot_column::add_head (Grob *me, Grob *rh) Side_position_interface::add_support (me, rh); Pointer_group_interface::add_grob (me, ly_symbol2scm ("dots"), d); - d->add_offset_callback (Dot_column::force_shift_callback_proc, Y_AXIS); + d->set_property ("Y-offset", Grob::x_parent_positioning_proc); Axis_group_interface::add_element (me, d); } } -ADD_INTERFACE (Dot_column, "dot-column-interface", +ADD_INTERFACE (Dot_column, + "dot-column-interface", + "Groups dot objects so they form a column, and position dots so they do not " "clash with staff lines ", - "positioning-done direction stem"); + + /* properties */ + "positioning-done " + "direction " + "stem");