Han-Wen Nienhuys <[EMAIL PROTECTED]> writes:

> Michael Welsh Duggan wrote:
>> Partial ties are not picked up by the tie engraver.  The included
>> patch fixes the problem, but I have no idea whether it fits into the
>> spirit of the code.
>
> looks good.
>
> a few nits:
>
>  - Changelog entry missing
>> +      if (an->tie_event_) {
>> +        now_tied_heads_.push_back (inf);
>> +      } else {
>> +        now_heads_.push_back (inf);
>> +      }
>
> don't use braces for statements.
>
>> -  Audio_note (Pitch p, Moment m, int transposing_i = 0);
>> +  Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i = 0);
>>  
>
> While you're at it, can you see whether you could remove the
> transposing_i argument?  We've stopped using default args a long time
> ago.
>
>
> Can you fix and resend ?

Fixed and resent.

Index: ChangeLog
===================================================================
RCS file: /cvsroot/lilypond/lilypond/ChangeLog,v
retrieving revision 1.5292
diff -u -p -u -r1.5292 ChangeLog
--- ChangeLog	4 Sep 2006 05:31:26 -0000	1.5292
+++ ChangeLog	4 Sep 2006 16:34:28 -0000
@@ -1,3 +1,25 @@
+2006-09-04  Michael Welsh Duggan  <[EMAIL PROTECTED]>
+
+	* lily/tie-performer.cc: remove unused last_event_ property.
+	(class Tie_performer): add now_tied_heads_ property for
+	partially-tied heads.
+	(acknowledge_audio_element): when adding an Audio_note, put the
+	note in now_tied_heads_ if the audio note is partially tied.
+	(stop_translation_timestep): always include entries in
+	now_tied_heads_ in heads_to_tie_.
+
+	* lily/drum-note-performer.cc (process_music): look for tie-events
+	in the articulations; pass to Audio_note constructor.
+
+	* lily/note-performer.cc (process_music): look for tie-events in
+	the articulations; pass to Audio_note constructor.
+
+	* lily/audio-item.cc (Audio_note): Initialize tie_event_ in
+	constructor.
+
+	* lily/include/audio-item.hh (class Audio_note): add tie_event_.
+	include initializer in constructor.
+
 2006-09-02  Joe Neeman  <[EMAIL PROTECTED]>
 
 	* lily/simple-spacer.cc (get_line_forces): Ignore loose columns
Index: lily/audio-item.cc
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/audio-item.cc,v
retrieving revision 1.37
diff -u -p -u -r1.37 audio-item.cc
--- lily/audio-item.cc	11 Feb 2006 11:35:18 -0000	1.37
+++ lily/audio-item.cc	4 Sep 2006 16:34:28 -0000
@@ -21,12 +21,13 @@ Audio_item::Audio_item ()
   audio_column_ = 0;
 }
 
-Audio_note::Audio_note (Pitch p, Moment m, int transposing_i)
+Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i)
 {
   pitch_ = p;
   length_mom_ = m;
   tied_ = 0;
   transposing_ = transposing_i;
+  tie_event_ = tie_event;
 }
 
 void
Index: lily/drum-note-performer.cc
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/drum-note-performer.cc,v
retrieving revision 1.30
diff -u -p -u -r1.30 drum-note-performer.cc
--- lily/drum-note-performer.cc	1 Sep 2006 02:01:01 -0000	1.30
+++ lily/drum-note-performer.cc	4 Sep 2006 16:34:28 -0000
@@ -10,6 +10,7 @@
 #include "audio-item.hh"
 #include "audio-column.hh"
 #include "global-context.hh"
+#include "music.hh"
 #include "pitch.hh"
 #include "stream-event.hh"
 #include "translator.icc"
@@ -51,7 +52,22 @@ Drum_note_performer::process_music ()
 
       if (Pitch *pit = unsmob_pitch (defn))
 	{
-	  Audio_note *p = new Audio_note (*pit, get_event_length (n), 0);
+          SCM articulations = n->get_property ("articulations");
+          Music *tie_event = 0;
+          for (SCM s = articulations;
+               !tie_event && scm_is_pair (s);
+               s = scm_cdr (s))
+            {
+              Music *m = unsmob_music (scm_car (s));
+              if (!m)
+                continue;
+	  
+              if (m->is_mus_type ("tie-event"))
+                tie_event = m;
+            }
+
+	  Audio_note *p = new Audio_note (*pit, get_event_length (n), 
+                                          tie_event, 0);
 	  Audio_element_info info (p, n);
 	  announce_element (info);
 	  notes_.push_back (p);
Index: lily/note-performer.cc
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/note-performer.cc,v
retrieving revision 1.73
diff -u -p -u -r1.73 note-performer.cc
--- lily/note-performer.cc	1 Sep 2006 02:01:01 -0000	1.73
+++ lily/note-performer.cc	4 Sep 2006 16:34:28 -0000
@@ -10,6 +10,7 @@
 #include "audio-item.hh"
 #include "audio-column.hh"
 #include "global-context.hh"
+#include "music.hh"
 #include "stream-event.hh"
 #include "warn.hh"
 
@@ -52,7 +53,22 @@ Note_performer::process_music ()
 
 	  if (Pitch *pitp = unsmob_pitch (pit))
 	    {
-	      Audio_note *p = new Audio_note (*pitp, get_event_length (n), - transposing);
+              SCM articulations = n->get_property ("articulations");
+              Music *tie_event = 0;
+              for (SCM s = articulations;
+                   !tie_event && scm_is_pair (s);
+                   s = scm_cdr (s))
+                {
+                  Music *m = unsmob_music (scm_car (s));
+                  if (!m)
+                    continue;
+	  
+                  if (m->is_mus_type ("tie-event"))
+                    tie_event = m;
+                }
+
+	      Audio_note *p = new Audio_note (*pitp, get_event_length (n), 
+                                              tie_event, - transposing);
 	      Audio_element_info info (p, n);
 	      announce_element (info);
 	      notes_.push_back (p);
Index: lily/tie-performer.cc
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/tie-performer.cc,v
retrieving revision 1.63
diff -u -p -u -r1.63 tie-performer.cc
--- lily/tie-performer.cc	19 Jul 2006 21:33:03 -0000	1.63
+++ lily/tie-performer.cc	4 Sep 2006 16:34:29 -0000
@@ -17,8 +17,8 @@
 class Tie_performer : public Performer
 {
   Stream_event *event_;
-  Stream_event *last_event_;
   vector<Audio_element_info> now_heads_;
+  vector<Audio_element_info> now_tied_heads_;
   vector<Audio_element_info> heads_to_tie_;
 
   bool ties_created_;
@@ -36,7 +36,6 @@ public:
 Tie_performer::Tie_performer ()
 {
   event_ = 0;
-  last_event_ = 0;
   ties_created_ = false;
 }
 
@@ -59,7 +58,11 @@ Tie_performer::acknowledge_audio_element
 {
   if (Audio_note *an = dynamic_cast<Audio_note *> (inf.elem_))
     {
-      now_heads_.push_back (inf);
+      if (an->tie_event_)
+        now_tied_heads_.push_back (inf);
+      else
+        now_heads_.push_back (inf);
+
       for (vsize i = heads_to_tie_.size (); i--;)
 	{
 	  Stream_event *right_mus = inf.event_;
@@ -91,17 +94,20 @@ Tie_performer::stop_translation_timestep
   if (ties_created_)
     {
       heads_to_tie_.clear ();
-      last_event_ = 0;
       ties_created_ = false;
     }
 
   if (event_)
     {
       heads_to_tie_ = now_heads_;
-      last_event_ = event_;
     }
+
+  for (vsize i = now_tied_heads_.size(); i--;)
+    heads_to_tie_.push_back (now_tied_heads_[i]);
+
   event_ = 0;
   now_heads_.clear ();
+  now_tied_heads_.clear ();
 }
 
 ADD_TRANSLATOR (Tie_performer,
Index: lily/include/audio-item.hh
===================================================================
RCS file: /cvsroot/lilypond/lilypond/lily/include/audio-item.hh,v
retrieving revision 1.39
diff -u -p -u -r1.39 audio-item.hh
--- lily/include/audio-item.hh	11 Feb 2006 11:35:17 -0000	1.39
+++ lily/include/audio-item.hh	4 Sep 2006 16:34:29 -0000
@@ -55,7 +55,7 @@ public:
 class Audio_note : public Audio_item
 {
 public:
-  Audio_note (Pitch p, Moment m, int transposing_i = 0);
+  Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i);
 
   void tie_to (Audio_note *);
 
@@ -63,6 +63,7 @@ public:
   Moment length_mom_;
   int transposing_;
   Audio_note *tied_;
+  bool tie_event_;
 };
 
 class Audio_piano_pedal : public Audio_item
-- 
Michael Welsh Duggan
([EMAIL PROTECTED])
_______________________________________________
bug-lilypond mailing list
bug-lilypond@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-lilypond

Reply via email to