]> git.donarmstrong.com Git - lilypond.git/blob - lily/extender-spanner.cc
patch::: 1.3.9.hwn2
[lilypond.git] / lily / extender-spanner.cc
1 /*
2   extender-spanner.cc -- implement Extender_spanner
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1998, 1999 Jan Nieuwenhuizen <janneke@gnu.org>
7 */
8
9 /*
10   TODO: too complicated implementation.  Why the dx_drul?.
11  */
12
13 #
14 #include "dimension-cache.hh"
15 #include "box.hh"
16 #include "debug.hh"
17 #include "lookup.hh"
18 #include "molecule.hh"
19 #include "paper-column.hh"
20 #include "paper-def.hh"
21 #include "extender-spanner.hh"
22
23 Extender_spanner::Extender_spanner ()
24   : Directional_spanner ()
25 {
26   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
27   dim_cache_[Y_AXIS]->set_callback (Dimension_cache::point_dimension_callback);
28 }
29
30
31
32
33 Molecule*
34 Extender_spanner::do_brew_molecule_p () const
35 {
36   Molecule* mol_p = new Molecule;
37
38   Real w = extent (X_AXIS).length ();
39   
40   w += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
41   Real h = paper_l ()->get_var ("extender_height");
42   Molecule a = lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h)));
43   a.translate (Offset (dx_f_drul_[LEFT], 0));
44
45   mol_p->add_molecule (a);
46
47   return mol_p;
48 }
49
50
51
52 void
53 Extender_spanner::do_post_processing ()
54 {
55   // UGH
56   Real gap = paper_l ()->get_var ("interline");
57
58   Direction d = LEFT;
59   do
60     {
61       Item* t = spanned_drul_[d]
62         ? spanned_drul_[d] : spanned_drul_[(Direction)-d];
63       if (d == LEFT)
64         dx_f_drul_[d] += t->extent (X_AXIS).length ();
65       else
66         dx_f_drul_[d] -= d * gap / 2;
67     }
68   while (flip(&d) != LEFT);
69 }
70
71   
72 void
73 Extender_spanner::set_textitem (Direction d, Item* textitem_l)
74 {
75   set_bounds (d, textitem_l);
76   add_dependency (textitem_l);
77 }
78
79