]> git.donarmstrong.com Git - lilypond.git/blob - lily/music-wrapper-iterator.cc
Issue 4615: Don't center letter fret labels but align them at their baseline
[lilypond.git] / lily / music-wrapper-iterator.cc
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
5
6   LilyPond is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10
11   LilyPond is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "music-wrapper-iterator.hh"
21 #include "music-wrapper.hh"
22 #include "music.hh"
23
24 Music_wrapper_iterator::Music_wrapper_iterator ()
25 {
26   child_iter_ = 0;
27 }
28
29 void
30 Music_wrapper_iterator::do_quit ()
31 {
32   if (child_iter_)
33     child_iter_->quit ();
34 }
35
36 void
37 Music_wrapper_iterator::derived_mark () const
38 {
39   if (child_iter_)
40     scm_gc_mark (child_iter_->self_scm ());
41 }
42
43 void
44 Music_wrapper_iterator::derived_substitute (Context *f, Context *t)
45 {
46   if (child_iter_)
47     child_iter_->substitute_outlet (f, t);
48 }
49
50 void
51 Music_wrapper_iterator::construct_children ()
52 {
53   Music *my_music = get_music ();
54   Music *child = unsmob<Music> (my_music->get_property ("element"));
55   child_iter_ = (child)
56                 ? unsmob<Music_iterator> (get_iterator (child))
57                 : 0;
58 }
59
60 bool
61 Music_wrapper_iterator::ok () const
62 {
63   return child_iter_ && child_iter_->ok ();
64 }
65
66 void
67 Music_wrapper_iterator::process (Moment m)
68 {
69   if (child_iter_)
70     child_iter_->process (m);
71 }
72
73 Moment
74 Music_wrapper_iterator::pending_moment () const
75 {
76   if (child_iter_)
77     return child_iter_->pending_moment ();
78   else
79     return Music_iterator::pending_moment ();
80 }
81
82 Context *
83 Music_wrapper_iterator::get_outlet () const
84 {
85   if (child_iter_)
86     return child_iter_->get_outlet ();
87   return Music_iterator::get_outlet ();
88 }
89
90 void
91 Music_wrapper_iterator::set_context (Context *trans)
92 {
93   if (child_iter_)
94     child_iter_->set_context (trans);
95   Music_iterator::set_context (trans);
96 }
97
98 IMPLEMENT_CTOR_CALLBACK (Music_wrapper_iterator);
99
100 bool
101 Music_wrapper_iterator::run_always () const
102 {
103   return (child_iter_ && child_iter_->run_always ());
104 }