2 tie-details.cc -- implement Tie_configuration, Tie_details
4 source file of the GNU LilyPond music typesetter
6 (c) 2005--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
13 #include "staff-symbol-referencer.hh"
15 #include "tie-details.hh"
19 this is a macro because we want ly_symbol2scm()
21 #define get_real_detail(src, defvalue) \
22 robust_scm2double(ly_assoc_get (ly_symbol2scm (src), details, SCM_EOL), defvalue)
23 #define get_int_detail(src, defvalue) \
24 robust_scm2int(ly_assoc_get (ly_symbol2scm (src), details, SCM_EOL), defvalue)
27 Tie_details::from_grob (Grob
*me
)
29 staff_symbol_referencer_
= me
;
30 staff_space_
= Staff_symbol_referencer::staff_space (me
);
32 neutral_direction_
= to_dir (me
->get_property ("neutral-direction"));
33 if (!neutral_direction_
)
34 neutral_direction_
= DOWN
;
36 SCM details
= me
->get_property ("details");
38 height_limit_
= get_real_detail ("height-limit", 0.75);
39 ratio_
= get_real_detail ("ratio", .333);
40 between_length_limit_
= get_real_detail ("between-length-limit", 1.0);
42 wrong_direction_offset_penalty_
= get_real_detail ("wrong-direction-offset-penalty", 10);
44 min_length_
= get_real_detail ("min-length", 1.0);
45 min_length_penalty_factor_
= get_real_detail ("min-length-penalty-factor", 1.0);
49 center_staff_line_clearance_
= get_real_detail ("center-staff-line-clearance", 0.4);
50 tip_staff_line_clearance_
= get_real_detail ("tip-staff-line-clearance", 0.4);
51 staff_line_collision_penalty_
= get_real_detail ("staff-line-collision-penalty", 5);
52 dot_collision_clearance_
= get_real_detail ( "dot-collision-clearance", 0.25);
53 dot_collision_penalty_
= get_real_detail ( "dot-collision-penalty", 0.25);
54 x_gap_
= get_real_detail ("note-head-gap", 0.2);
55 stem_gap_
= get_real_detail ("stem-gap", 0.3);
56 tie_column_monotonicity_penalty_
= get_real_detail ("tie-column-monotonicity-penalty", 100);
57 tie_tie_collision_penalty_
= get_real_detail ("tie-tie-collision-penalty", 30);
58 tie_tie_collision_distance_
= get_real_detail ("tie-tie-collision-distance", .25);
59 horizontal_distance_penalty_factor_
= get_real_detail ("horizontal-distance-penalty-factor", 5);
60 same_dir_as_stem_penalty_
= get_real_detail ("same-dir-as-stem-penalty", 20);
61 vertical_distance_penalty_factor_
= get_real_detail ("vertical-distance-penalty-factor", 5);
62 intra_space_threshold_
= get_real_detail ("intra-space-threshold", 1.0);
63 outer_tie_length_symmetry_penalty_factor_
= get_real_detail ("outer-tie-length-symmetry-penalty-factor", 3.0);
64 outer_tie_vertical_distance_symmetry_penalty_factor_
= get_real_detail ("outer-tie-vertical-distance-symmetry-penalty-factor", 3.0);
66 outer_tie_vertical_gap_
= get_real_detail ("outer-tie-vertical-gap", 0.15);
68 single_tie_region_size_
= get_int_detail ("single-tie-region-size", 3);
69 skyline_padding_
= get_real_detail ("skyline-padding", 0.05);
70 multi_tie_region_size_
= get_int_detail ("multi-tie-region-size", 1);
73 Tie_details::Tie_details ()