/*
- slur.cc -- implement Slur
+ slur.cc -- implement Old_slur
source file of the GNU LilyPond music typesetter
#include "group-interface.hh"
#include "slur.hh"
#include "lookup.hh"
-#include "paper-def.hh"
+#include "output-def.hh"
#include "note-column.hh"
#include "stem.hh"
#include "paper-column.hh"
void
-Slur::set_interface (Grob*me)
+Old_slur::set_interface (Grob*me)
{
/* Copy to mutable list. */
- me->set_grob_property ("attachment",
- ly_deep_copy (me->get_grob_property ("attachment")));
+ me->set_property ("attachment",
+ ly_deep_copy (me->get_property ("attachment")));
}
void
-Slur::add_column (Grob*me, Grob*n)
+Old_slur::add_column (Grob*me, Grob*n)
{
Pointer_group_interface::add_grob (me, ly_symbol2scm ("note-columns"), n);
me->add_dependency (n);
}
void
-Slur::de_uglyfy (Grob*me, Slur_bezier_bow* bb, Real default_height)
+Old_slur::de_uglify (Grob*me, Slur_bezier_bow* bb, Real default_height)
{
Real length = bb->curve_.control_[3][X_AXIS] ;
Real ff = bb->fit_factor ();
Real h = bb->curve_.control_[i][Y_AXIS] * ff / length;
Real f = default_height / length;
- SCM up = me->get_grob_property ("de-uglify-parameters");
+ SCM up = me->get_property ("de-uglify-parameters");
- Real c1 = gh_scm2double (ly_car (up));
- Real c2 = gh_scm2double (ly_cadr (up));
- Real c3 = gh_scm2double (ly_caddr (up));
+ Real c1 = ly_scm2double (ly_car (up));
+ Real c2 = ly_scm2double (ly_cadr (up));
+ Real c3 = ly_scm2double (ly_caddr (up));
if (h > c1 * f)
{
Direction
-Slur::get_default_dir (Grob*me)
+Old_slur::get_default_dir (Grob*me)
{
Link_array<Grob> encompasses =
Pointer_group_interface__extract_grobs (me, (Grob*)0, "note-columns");
}
-MAKE_SCHEME_CALLBACK (Slur, after_line_breaking,1);
+MAKE_SCHEME_CALLBACK (Old_slur, after_line_breaking,1);
SCM
-Slur::after_line_breaking (SCM smob)
+Old_slur::after_line_breaking (SCM smob)
{
Grob *me = unsmob_grob (smob);
- if (!scm_ilength (me->get_grob_property ("note-columns")))
+ if (!scm_ilength (me->get_property ("note-columns")))
{
me->suicide ();
return SCM_UNSPECIFIED;
}
set_extremities (me);
- if (!gh_pair_p (me->get_grob_property ("control-points")))
+ if (!ly_c_pair_p (me->get_property ("control-points")))
set_control_points (me);
return SCM_UNSPECIFIED;
}
void
-Slur::check_slope (Grob *me)
+Old_slur::check_slope (Grob *me)
{
/*
Avoid too steep slurs.
*/
- SCM s = me->get_grob_property ("slope-limit");
- if (gh_number_p (s))
+ SCM s = me->get_property ("slope-limit");
+ if (ly_c_number_p (s))
{
Array<Offset> encompass = get_encompass_offsets (me);
Drul_array<Offset> attachment;
Real slope = slope = abs (dy / dx);
- Real limit = gh_scm2double (s);
+ Real limit = ly_scm2double (s);
if (slope > limit)
{
Real staff_space = Staff_symbol_referencer::staff_space ((Grob*)me);
- Direction dir = (Direction)gh_scm2int (me->get_grob_property ("direction"));
+ Direction dir = (Direction)ly_scm2int (me->get_property ("direction"));
Direction d = (Direction) (- dir * (sign (dy)));
- SCM a = me->get_grob_property ("attachment-offset");
+ SCM a = me->get_property ("attachment-offset");
Drul_array<Offset> o;
o[LEFT] = ly_scm2offset (index_get_cell (a, LEFT));
o[RIGHT] = ly_scm2offset (index_get_cell (a, RIGHT));
o[d][Y_AXIS] *= get_grob_direction (me);
- me->set_grob_property ("attachment-offset",
- gh_cons (ly_offset2scm (o[LEFT]),
+ me->set_property ("attachment-offset",
+ scm_cons (ly_offset2scm (o[LEFT]),
ly_offset2scm (o[RIGHT])));
}
}
Set 'attachment grob property, and return it.
*/
SCM
-Slur::set_extremities (Grob *me)
+Old_slur::set_extremities (Grob *me)
{
if (!get_grob_direction (me))
set_grob_direction (me, get_default_dir (me));
- SCM att = me->get_grob_property ("attachment");
+ SCM att = me->get_property ("attachment");
/*
*/
- if (!gh_pair_p (att))
+ if (!ly_c_pair_p (att))
{
programming_error ("attachment is not a cons?!");
- att = gh_cons (SCM_EOL, SCM_EOL);
- me->set_grob_property ("attachment", att);
+ att = scm_cons (SCM_EOL, SCM_EOL);
+ me->set_property ("attachment", att);
}
Direction dir = LEFT;
do
{
- if (!gh_symbol_p (index_get_cell (att, dir)))
+ if (!ly_c_symbol_p (index_get_cell (att, dir)))
{
- for (SCM s = me->get_grob_property ("extremity-rules");
- s != SCM_EOL; s = ly_cdr (s))
- {
- SCM r = gh_call2 (ly_caar (s), me->self_scm (),
- gh_int2scm ((int)dir));
- if (r != SCM_BOOL_F)
- {
- index_set_cell (att, dir,
- ly_cdar (s));
- break;
- }
- }
+ SCM p = me->get_property ("extremity-function");
+ SCM res = ly_symbol2scm ("head");
+
+ if (ly_c_procedure_p (p))
+ res = scm_call_2 (p, me->self_scm (), scm_int2num (dir));
+
+ if (ly_c_symbol_p (res))
+ index_set_cell (att, dir, res);
}
}
while (flip (&dir) != LEFT);
Real
-Slur::get_boundary_notecolumn_y (Grob *me, Direction dir)
+Old_slur::get_boundary_notecolumn_y (Grob *me, Direction dir)
{
- SCM cols = me->get_grob_property ("note-columns");
+ SCM cols = me->get_property ("note-columns");
- if(!gh_pair_p (cols))
+ if (!ly_c_pair_p (cols))
{
programming_error ("No note-columns in slur?");
me->suicide ();
}
if (dir == LEFT)
- cols = scm_reverse(cols);
+ cols = scm_reverse (cols);
Grob *col = unsmob_grob (ly_car (cols));
Grob *common[] =
}
Offset
-Slur::broken_trend_offset (Grob *me, Direction dir)
+Old_slur::broken_trend_offset (Grob *me, Direction dir)
{
/*
A broken slur should maintain the same vertical trend
if (Spanner *mother = dynamic_cast<Spanner*> (me->original_))
{
int k = broken_spanner_index (dynamic_cast<Spanner*> (me));
- Grob *neighbour = mother->broken_intos_[k + dir];
+ int j = k + dir;
+ if (j < 0 || j >= mother->broken_intos_.size ())
+ return o;
+
+ Grob *neighbour = mother->broken_intos_[j];
if (dir == RIGHT)
- neighbour->set_grob_property ("direction",
- me->get_grob_property ("direction"));
+ neighbour->set_property ("direction",
+ me->get_property ("direction"));
Real neighbour_y = get_boundary_notecolumn_y (neighbour, dir);
Real y = get_boundary_notecolumn_y (me, -dir);
- int neighbour_cols = scm_ilength (neighbour->get_grob_property ("note-columns"));
- int cols = scm_ilength (me->get_grob_property ("note-columns"));
+ int neighbour_cols = scm_ilength (neighbour->get_property ("note-columns"));
+ int cols = scm_ilength (me->get_property ("note-columns"));
o = Offset (0, (y*neighbour_cols + neighbour_y*cols) /
(cols + neighbour_cols));
}
UGH, we should take COMMON-Y as argument.
*/
Offset
-Slur::get_attachment (Grob *me, Direction dir,
+Old_slur::get_attachment (Grob *me, Direction dir,
Grob **common)
{
- SCM s = me->get_grob_property ("attachment");
- if (!gh_pair_p (s) || !gh_symbol_p (index_get_cell (s, dir)))
+ SCM s = me->get_property ("attachment");
+ if (!ly_c_pair_p (s) || !ly_c_symbol_p (index_get_cell (s, dir)))
{
s = set_extremities (me);
}
Real hs = staff_space / 2.0;
Offset o;
- Direction slurdir = to_dir (me->get_grob_property ("direction"));
+ Direction slurdir = to_dir (me->get_property ("direction"));
Grob *stem = 0;
if (Note_column::has_interface (sp->get_bound (dir)))
o = broken_trend_offset (me, dir);
}
- SCM alist = me->get_grob_property ("extremity-offset-alist");
+ SCM alist = me->get_property ("extremity-offset-alist");
int stemdir = stem ? Stem::get_direction (stem) : 1;
SCM l = scm_assoc
(scm_list_n (a,
- gh_int2scm (stemdir * dir),
- gh_int2scm (slurdir * dir),
+ scm_int2num (stemdir * dir),
+ scm_int2num (slurdir * dir),
SCM_UNDEFINED), alist);
if (l != SCM_BOOL_F)
- me->relative_coordinate (common[Y_AXIS], Y_AXIS);
}
- Offset off = ly_scm2offset (index_get_cell (me->get_grob_property
+ Offset off = ly_scm2offset (index_get_cell (me->get_property
("attachment-offset"),
dir)) * staff_space;
}
Offset
-Slur::encompass_offset (Grob*me,
+Old_slur::encompass_offset (Grob*me,
Grob* col,
Grob **common)
{
Offset o;
- Grob* stem = unsmob_grob (col->get_grob_property ("stem"));
+ Grob* stem = unsmob_grob (col->get_property ("stem"));
Direction dir = get_grob_direction (me);
/*
leave a gap: slur mustn't touch head/stem
*/
- o[Y_AXIS] += dir * robust_scm2double (me->get_grob_property ("y-free"), 0) *
+ o[Y_AXIS] += dir * robust_scm2double (me->get_property ("y-free"), 0) *
1.0;
return o;
}
Array<Offset>
-Slur::get_encompass_offsets (Grob *me)
+Old_slur::get_encompass_offsets (Grob *me)
{
Spanner*sp = dynamic_cast<Spanner*> (me);
- SCM eltlist = me->get_grob_property ("note-columns");
+ SCM eltlist = me->get_property ("note-columns");
Grob *common[] = {common_refpoint_of_list (eltlist, me, X_AXIS),
common_refpoint_of_list (eltlist, me, Y_AXIS)};
/*
ugh ?
*/
-MAKE_SCHEME_CALLBACK (Slur, height, 2);
+MAKE_SCHEME_CALLBACK (Old_slur, height, 2);
SCM
-Slur::height (SCM smob, SCM ax)
+Old_slur::height (SCM smob, SCM ax)
{
- Axis a = (Axis)gh_scm2int (ax);
+ Axis a = (Axis)ly_scm2int (ax);
Grob * me = unsmob_grob (smob);
assert (a == Y_AXIS);
/*
Ugh should have dash-length + dash-period
*/
-MAKE_SCHEME_CALLBACK (Slur, print,1);
+MAKE_SCHEME_CALLBACK (Old_slur, print,1);
SCM
-Slur::print (SCM smob)
+Old_slur::print (SCM smob)
{
Grob * me = unsmob_grob (smob);
- if (!scm_ilength (me->get_grob_property ("note-columns")))
+ if (!scm_ilength (me->get_property ("note-columns")))
{
me->suicide ();
return SCM_EOL;
}
- Real base_thick = robust_scm2double (me->get_grob_property ("thickness"), 1);
+ Real base_thick = robust_scm2double (me->get_property ("thickness"), 1);
Real thick = base_thick * Staff_symbol_referencer::line_thickness (me);
Real ss = Staff_symbol_referencer::staff_space (me);
Bezier one = get_curve (me);
// get_curve may suicide
- if (!scm_ilength (me->get_grob_property ("note-columns")))
+ if (!scm_ilength (me->get_property ("note-columns")))
return SCM_EOL;
Stencil a;
/*
TODO: replace dashed with generic property.
*/
- SCM d = me->get_grob_property ("dashed");
- if (gh_number_p (d))
+ SCM d = me->get_property ("dashed");
+ if (ly_c_number_p (d))
a = Lookup::dashed_slur (one, thick, thick * robust_scm2double (d, 0));
else
a = Lookup::slur (one, get_grob_direction (me) * base_thick * ss / 10.0,
}
void
-Slur::set_control_points (Grob*me)
+Old_slur::set_control_points (Grob*me)
{
Real staff_space = Staff_symbol_referencer::staff_space ((Grob*)me);
- SCM details = me->get_grob_property ("details");
- SCM h_inf_scm = me->get_grob_property ("height-limit");
- SCM r_0_scm = me->get_grob_property ("ratio");
+ SCM details = me->get_property ("details");
+ SCM h_inf_scm = me->get_property ("height-limit");
+ SCM r_0_scm = me->get_property ("ratio");
Real r_0 = robust_scm2double (r_0_scm, 1);
- Real h_inf = staff_space * gh_scm2double (h_inf_scm);
+ Real h_inf = staff_space * ly_scm2double (h_inf_scm);
Slur_bezier_bow bb (get_encompass_offsets (me),
get_grob_direction (me),
Real length = bb.curve_.control_[3][X_AXIS];
Real default_height = slur_height (length, h_inf, r_0);
- SCM ssb = me->get_grob_property ("beautiful");
+ SCM ssb = me->get_property ("beautiful");
Real sb = 0;
- if (gh_number_p (ssb))
- sb = gh_scm2double (ssb);
+ if (ly_c_number_p (ssb))
+ sb = ly_scm2double (ssb);
bb.minimise_enclosed_area (sb, details);
SCM sbf = scm_assq (ly_symbol2scm ("force-blowfit"), details);
Real bff = 1.0;
- if (gh_pair_p (sbf) && gh_number_p (ly_cdr (sbf)))
- bff = gh_scm2double (ly_cdr (sbf));
+ if (ly_c_pair_p (sbf) && ly_c_number_p (ly_cdr (sbf)))
+ bff = ly_scm2double (ly_cdr (sbf));
bb.curve_.control_[1][Y_AXIS] *= bff;
bb.curve_.control_[2][Y_AXIS] *= bff;
Slurs that fit beautifully are not ugly
*/
if (area > beautiful)
- de_uglyfy (me, &bb, default_height);
+ de_uglify (me, &bb, default_height);
}
Bezier b = bb.get_bezier ();
SCM controls = SCM_EOL;
for (int i= 4; i--;)
{
- controls = gh_cons (ly_offset2scm (b.control_[i]), controls);
+ controls = scm_cons (ly_offset2scm (b.control_[i]), controls);
/*
BRRR WHURG.
All these null control-points, where do they all come from?
}
}
- me->set_grob_property ("control-points", controls);
+ me->set_property ("control-points", controls);
}
Bezier
-Slur::get_curve (Grob*me)
+Old_slur::get_curve (Grob*me)
{
Bezier b;
int i = 0;
- SCM attach = me->get_grob_property ("attachment");
- if (!gh_pair_p (attach))
- attach = set_extremities(me);
+ SCM attach = me->get_property ("attachment");
+ if (!ly_c_pair_p (attach))
+ attach = set_extremities (me);
if (!get_grob_direction (me)
- || ! gh_symbol_p (index_get_cell (attach, LEFT))
- || ! gh_symbol_p (index_get_cell (attach, RIGHT)))
+ || ! ly_c_symbol_p (index_get_cell (attach, LEFT))
+ || ! ly_c_symbol_p (index_get_cell (attach, RIGHT)))
set_extremities (me);
- if (!gh_pair_p (me->get_grob_property ("control-points")))
+ if (!ly_c_pair_p (me->get_property ("control-points")))
set_control_points (me);
// set_control_points may suicide
- if (!scm_ilength (me->get_grob_property ("note-columns")))
+ if (!scm_ilength (me->get_property ("note-columns")))
return b;
- for (SCM s= me->get_grob_property ("control-points"); s != SCM_EOL; s = ly_cdr (s))
+ for (SCM s= me->get_property ("control-points"); s != SCM_EOL; s = ly_cdr (s))
{
b.control_[i] = ly_scm2offset (ly_car (s));
i++;
-ADD_INTERFACE (Slur,"slur-interface",
+ADD_INTERFACE (Old_slur,"slur-interface",
"A slur",
- "attachment attachment-offset beautiful control-points dashed details de-uglify-parameters direction extremity-rules extremity-offset-alist height-limit note-columns ratio slope-limit thickness y-free");
+ "attachment attachment-offset beautiful control-points dashed details de-uglify-parameters direction extremity-function extremity-offset-alist height-limit note-columns ratio slope-limit thickness y-free quant-score");