Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(6)

Delta Between Two Patch Sets: lily/slur-engraver.cc

Issue 6498077: Approximates cross-staff slurs in VerticalAxisGroup vertical-skylines. Base URL: http://git.savannah.gnu.org/gitweb/?p=lilypond.git/trunk/
Left Patch Set: Removes some cruft Created 12 years, 7 months ago
Right Patch Set: Better approximations Created 12 years, 6 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
LEFTRIGHT
1 /* 1 /*
2 This file is part of LilyPond, the GNU music typesetter. 2 This file is part of LilyPond, the GNU music typesetter.
3 3
4 Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl> 4 Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
5 5
6 LilyPond is free software: you can redistribute it and/or modify 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 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 8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 void set_melisma (bool); 64 void set_melisma (bool);
65 65
66 protected: 66 protected:
67 DECLARE_TRANSLATOR_LISTENER (slur); 67 DECLARE_TRANSLATOR_LISTENER (slur);
68 DECLARE_ACKNOWLEDGER (inline_accidental); 68 DECLARE_ACKNOWLEDGER (inline_accidental);
69 DECLARE_ACKNOWLEDGER (fingering); 69 DECLARE_ACKNOWLEDGER (fingering);
70 DECLARE_ACKNOWLEDGER (note_column); 70 DECLARE_ACKNOWLEDGER (note_column);
71 DECLARE_ACKNOWLEDGER (script); 71 DECLARE_ACKNOWLEDGER (script);
72 DECLARE_ACKNOWLEDGER (dots); 72 DECLARE_ACKNOWLEDGER (dots);
73 DECLARE_ACKNOWLEDGER (text_script); 73 DECLARE_ACKNOWLEDGER (text_script);
74 DECLARE_ACKNOWLEDGER (tie); 74 DECLARE_END_ACKNOWLEDGER (tie);
75 DECLARE_ACKNOWLEDGER (tuplet_number); 75 DECLARE_ACKNOWLEDGER (tuplet_number);
76 76
77 void acknowledge_extra_object (Grob_info); 77 void acknowledge_extra_object (Grob_info);
78 void stop_translation_timestep (); 78 void stop_translation_timestep ();
79 void process_music (); 79 void process_music ();
80 80
81 virtual void finalize (); 81 virtual void finalize ();
82 virtual void derived_mark () const; 82 virtual void derived_mark () const;
83 83
84 public: 84 public:
(...skipping 28 matching lines...) Expand all
113 113
114 void 114 void
115 Slur_engraver::set_melisma (bool m) 115 Slur_engraver::set_melisma (bool m)
116 { 116 {
117 context ()->set_property ("slurMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F); 117 context ()->set_property ("slurMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F);
118 } 118 }
119 119
120 void 120 void
121 Slur_engraver::acknowledge_note_column (Grob_info info) 121 Slur_engraver::acknowledge_note_column (Grob_info info)
122 { 122 {
123 /*
124 * For every active slur, we create a slur stub.
125 * As we do not yet know what vertical axis groups note columns belong to,
126 * we create a stub for each note and then suicide duplicate stubs on
127 * axis groups.
128 * These slurs should be used ONLY to approximate cross-staff slurs
129 * in vertical skylines.
130 */
131 ··
123 Grob *e = info.grob (); 132 Grob *e = info.grob ();
124 for (vsize i = slur_infos_.size (); i--;) 133 for (vsize i = slur_infos_.size (); i--;)
125 { 134 {
126 Slur::add_column (slur_infos_[i].slur_, e); 135 Slur::add_column (slur_infos_[i].slur_, e);
127 Grob *stub = make_spanner ("SlurStub", info.grob ()->self_scm ()); 136 Grob *stub = make_spanner ("SlurStub", slur_infos_[i].slur_->self_scm ());
128 slur_infos_[i].stubs_.push_back (stub); 137 slur_infos_[i].stubs_.push_back (stub);
129 } 138 }
130 for (vsize i = end_slur_infos_.size (); i--;) 139 for (vsize i = end_slur_infos_.size (); i--;)
131 { 140 {
132 Slur::add_column (end_slur_infos_[i].slur_, e); 141 Slur::add_column (end_slur_infos_[i].slur_, e);
133 Grob *stub = make_spanner ("SlurStub", info.grob ()->self_scm ()); 142 Grob *stub = make_spanner ("SlurStub", slur_infos_[i].slur_->self_scm ());
134 end_slur_infos_[i].stubs_.push_back (stub); 143 end_slur_infos_[i].stubs_.push_back (stub);
135 } 144 }
136 } 145 }
137 146
138 void 147 void
139 Slur_engraver::acknowledge_extra_object (Grob_info info) 148 Slur_engraver::acknowledge_extra_object (Grob_info info)
140 { 149 {
141 objects_to_acknowledge_.push_back (info); 150 objects_to_acknowledge_.push_back (info);
142 } 151 }
143 152
(...skipping 28 matching lines...) Expand all
172 acknowledge_extra_object (info); 181 acknowledge_extra_object (info);
173 } 182 }
174 183
175 void 184 void
176 Slur_engraver::acknowledge_text_script (Grob_info info) 185 Slur_engraver::acknowledge_text_script (Grob_info info)
177 { 186 {
178 acknowledge_extra_object (info); 187 acknowledge_extra_object (info);
179 } 188 }
180 189
181 void 190 void
182 Slur_engraver::acknowledge_tie (Grob_info info) 191 Slur_engraver::acknowledge_end_tie (Grob_info info)
183 { 192 {
184 acknowledge_extra_object (info); 193 acknowledge_extra_object (info);
185 } 194 }
186 195
187 void 196 void
188 Slur_engraver::finalize () 197 Slur_engraver::finalize ()
189 { 198 {
190 for (vsize i = 0; i < slur_infos_.size (); i++) 199 for (vsize i = 0; i < slur_infos_.size (); i++)
191 { 200 {
192 slur_infos_[i].slur_->warning (_ ("unterminated slur")); 201 slur_infos_[i].slur_->warning (_ ("unterminated slur"));
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 if (!s->get_bound (RIGHT)) 337 if (!s->get_bound (RIGHT))
329 s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")) ); 338 s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn")) );
330 announce_end_grob (s, SCM_EOL); 339 announce_end_grob (s, SCM_EOL);
331 } 340 }
332 341
333 for (vsize i = 0; i < objects_to_acknowledge_.size (); i++) 342 for (vsize i = 0; i < objects_to_acknowledge_.size (); i++)
334 Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slur_i nfos_, end_slur_infos_); 343 Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slur_i nfos_, end_slur_infos_);
335 344
336 for (vsize i = 0; i < end_slur_infos_.size (); i++) 345 for (vsize i = 0; i < end_slur_infos_.size (); i++)
337 { 346 {
338 // There are likely SlurStubs we don't need. Get rid of them. 347 // There are likely SlurStubs we don't need. Get rid of them
348 // and only keep one per VerticalAxisGroup.
339 vector<Grob *> vags; 349 vector<Grob *> vags;
340 vector<Grob *> stubs; 350 vector<Grob *> stubs;
341 for (vsize j = 0; j < end_slur_infos_[i].stubs_.size (); j++) 351 for (vsize j = 0; j < end_slur_infos_[i].stubs_.size (); j++)
342 { 352 {
343 Grob *stub = end_slur_infos_[i].stubs_[j]; 353 Grob *stub = end_slur_infos_[i].stubs_[j];
344 Grob *vag = Grob::get_vertical_axis_group (stub); 354 Grob *vag = Grob::get_vertical_axis_group (stub);
345 if (vag) 355 if (vag)
346 { 356 {
347 vector<Grob *>::const_iterator it = 357 vector<Grob *>::const_iterator it =
348 find (vags.begin (), vags.end (), vag); 358 find (vags.begin (), vags.end (), vag);
(...skipping 20 matching lines...) Expand all
369 start_events_.clear (); 379 start_events_.clear ();
370 stop_events_.clear (); 380 stop_events_.clear ();
371 } 381 }
372 382
373 ADD_ACKNOWLEDGER (Slur_engraver, inline_accidental); 383 ADD_ACKNOWLEDGER (Slur_engraver, inline_accidental);
374 ADD_ACKNOWLEDGER (Slur_engraver, fingering); 384 ADD_ACKNOWLEDGER (Slur_engraver, fingering);
375 ADD_ACKNOWLEDGER (Slur_engraver, note_column); 385 ADD_ACKNOWLEDGER (Slur_engraver, note_column);
376 ADD_ACKNOWLEDGER (Slur_engraver, script); 386 ADD_ACKNOWLEDGER (Slur_engraver, script);
377 ADD_ACKNOWLEDGER (Slur_engraver, text_script); 387 ADD_ACKNOWLEDGER (Slur_engraver, text_script);
378 ADD_ACKNOWLEDGER (Slur_engraver, dots); 388 ADD_ACKNOWLEDGER (Slur_engraver, dots);
379 ADD_ACKNOWLEDGER (Slur_engraver, tie); 389 ADD_END_ACKNOWLEDGER (Slur_engraver, tie);
380 ADD_ACKNOWLEDGER (Slur_engraver, tuplet_number); 390 ADD_ACKNOWLEDGER (Slur_engraver, tuplet_number);
381 ADD_TRANSLATOR (Slur_engraver, 391 ADD_TRANSLATOR (Slur_engraver,
382 /* doc */ 392 /* doc */
383 "Build slur grobs from slur events.", 393 "Build slur grobs from slur events.",
384 394
385 /* create */ 395 /* create */
386 "Slur ", 396 "Slur ",
387 397
388 /* read */ 398 /* read */
389 "slurMelismaBusy " 399 "slurMelismaBusy "
390 "doubleSlurs ", 400 "doubleSlurs ",
391 401
392 /* write */ 402 /* write */
393 "" 403 ""
394 ); 404 );
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b