]> git.donarmstrong.com Git - lilypond.git/blob - lily/extender-spanner.cc
release: 1.1.58
[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 "box.hh"
15 #include "debug.hh"
16 #include "lookup.hh"
17 #include "molecule.hh"
18 #include "paper-column.hh"
19 #include "paper-def.hh"
20 #include "extender-spanner.hh"
21
22 Extender_spanner::Extender_spanner ()
23   : Directional_spanner ()
24 {
25   dx_f_drul_[LEFT] = dx_f_drul_[RIGHT] = 0.0;
26 }
27
28
29 Offset
30 Extender_spanner::center () const
31 {
32   Real dx = extent (X_AXIS).length ();
33
34   return Offset (dx / 2, 0);
35 }
36
37 Molecule*
38 Extender_spanner::do_brew_molecule_p () const
39 {
40   Molecule* mol_p = new Molecule;
41
42   Real w = extent (X_AXIS).length ();
43   
44   w += (dx_f_drul_[RIGHT] - dx_f_drul_[LEFT]);
45   Real h = paper_l ()->get_realvar (extender_height_scm_sym);
46   Molecule a = lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h)));
47   a.translate (Offset (dx_f_drul_[LEFT], 0));
48
49   mol_p->add_molecule (a);
50
51   return mol_p;
52 }
53
54 Interval
55 Extender_spanner::do_height () const
56 {
57   return Interval (0,0);
58 }
59
60 void
61 Extender_spanner::do_post_processing ()
62 {
63   // UGH
64   Real nw_f = paper_l ()->note_width () * 0.8;
65
66   Direction d = LEFT;
67   do
68     {
69       Item* t = spanned_drul_[d]
70         ? spanned_drul_[d] : spanned_drul_[(Direction)-d];
71       if (d == LEFT)
72         dx_f_drul_[d] += t->extent (X_AXIS).length ();
73       else
74         dx_f_drul_[d] -= d * nw_f / 2;
75     }
76   while (flip(&d) != LEFT);
77 }
78
79   
80 void
81 Extender_spanner::set_textitem (Direction d, Item* textitem_l)
82 {
83   set_bounds (d, textitem_l);
84   add_dependency (textitem_l);
85 }
86