2 hyphen-spanner.cc -- implement Hyphen_spanner
4 source file of the GNU LilyPond music typesetter
6 (c) 1999 Glen Prideaux <glenprideaux@iname.com>
8 (adapted from extender-spanner)
12 TODO: too complicated implementation. Why the dx_drul?.
19 #include "molecule.hh"
20 #include "paper-column.hh"
21 #include "paper-def.hh"
22 #include "hyphen-spanner.hh"
24 Hyphen_spanner::Hyphen_spanner ()
25 : Directional_spanner ()
27 dx_f_drul_
[LEFT
] = dx_f_drul_
[RIGHT
] = 0.0;
30 // UGH - is this even used?
32 Hyphen_spanner::center () const
34 Real dx
= extent (X_AXIS
).length ();
36 return Offset (dx
/ 2, 0);
40 Hyphen_spanner::do_brew_molecule_p () const
42 Molecule
* mol_p
= new Molecule
;
44 Real w
= extent (X_AXIS
).length ();
46 w
+= (dx_f_drul_
[RIGHT
] - dx_f_drul_
[LEFT
]);
48 Real th
= paper_l ()->get_var ("hyphen_thickness");
49 Real h
= paper_l ()->get_var ("hyphen_height");
51 // UGH. First try: just make the hyphen take 1/3 of the available space
52 // for length, use a geometric mean of the available space and some minimum
53 Real l
= paper_l ()->get_var ("hyphen_minimum_length");
56 Molecule a
= lookup_l ()->filledbox ( Box (Interval ((w
-l
)/2,(w
+l
)/2), Interval (h
,h
+th
)));
57 a
.translate (Offset (dx_f_drul_
[LEFT
], 0));
59 mol_p
->add_molecule (a
);
65 Hyphen_spanner::do_height () const
67 return Interval (0,0);
71 Hyphen_spanner::do_post_processing ()
74 Real gap
= paper_l ()->get_var ("interline");
79 Item
* t
= spanned_drul_
[d
]
80 ? spanned_drul_
[d
] : spanned_drul_
[(Direction
)-d
];
82 dx_f_drul_
[d
] += t
->extent (X_AXIS
).length ();
84 dx_f_drul_
[d
] -= d
* gap
/ 2;
86 while (flip(&d
) != LEFT
);
91 Hyphen_spanner::set_textitem (Direction d
, Item
* textitem_l
)
93 set_bounds (d
, textitem_l
);
94 add_dependency (textitem_l
);