]> git.donarmstrong.com Git - lilypond.git/blob - lily/slur-performer.cc
* lily/slur-performer.cc (Slur_performer): add inits
[lilypond.git] / lily / slur-performer.cc
1 /*
2   slur-performer.cc -- implement Slur_performer
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1996--2004 Jan Nieuwenhuizen <janneke@gnu.org>
7  */
8
9 #include "performer.hh"
10 #include "event.hh"
11 #include "audio-item.hh"
12 #include "audio-column.hh"
13 #include "global-context.hh"
14 #include "warn.hh"
15
16 /*
17   this is C&P from beam_performer.
18  */
19
20 class Slur_performer : public Performer {
21 public:
22   TRANSLATOR_DECLARATIONS (Slur_performer);
23   
24 protected:
25   virtual bool try_music (Music *ev) ;
26   virtual void start_translation_timestep ();
27   virtual void process_music ();
28   void set_melisma (bool);
29 private:
30   Music *start_ev_;
31   Music *now_stop_ev_;
32   bool slur_;
33 };
34
35 Slur_performer::Slur_performer ()
36 {
37   slur_ = false;
38   start_ev_ = 0;
39   now_stop_ev_ = 0;
40 }
41
42
43 void 
44 Slur_performer::process_music ()
45 {
46   if (now_stop_ev_)
47     {
48       slur_ = false;
49       set_melisma (false);
50     }
51
52   if (start_ev_)
53     {
54       slur_ = true;
55       set_melisma (true);
56     }
57 }
58
59
60 void
61 Slur_performer::set_melisma (bool ml)
62 {
63   daddy_context_->set_property ("slurMelismaBusy", ml ? SCM_BOOL_T :SCM_BOOL_F);
64 }
65
66 void
67 Slur_performer::start_translation_timestep ()
68 {
69   start_ev_ = 0;
70   now_stop_ev_ = 0;
71 }
72  
73 bool
74 Slur_performer::try_music (Music *m)
75 {
76   if (m->is_mus_type ("slur-event"))
77     {
78       Direction d = to_dir (m->get_property ("span-direction"));
79
80       if (d == START)
81         {
82           start_ev_ = m;
83         }
84       else if (d==STOP)
85         {
86           now_stop_ev_ = m;
87         }
88       return true;
89     }
90   return false;
91 }
92
93 ENTER_DESCRIPTION (Slur_performer,"","",
94                   "slur-event","","","");
95