/*
cluster-engraver.cc -- implement Cluster_engraver
- (c) 2002--2003 Juergen Reuter <reuter@ipd.uka.de>
+ (c) 2002--2004 Juergen Reuter <reuter@ipd.uka.de>
Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "engraver.hh"
-#include "item.hh"
#include "spanner.hh"
#include "note-head.hh"
#include "note-column.hh"
{
protected:
- TRANSLATOR_DECLARATIONS(Cluster_spanner_engraver);
+ TRANSLATOR_DECLARATIONS (Cluster_spanner_engraver);
virtual bool try_music (Music *);
virtual void process_music ();
virtual void acknowledge_grob (Grob_info);
void
Cluster_spanner_engraver::typeset_grobs ()
{
- if (finished_spanner_ )
- {
- typeset_grob (finished_spanner_);
- finished_spanner_ = 0;
- }
-
- if (beacon_)
- {
- typeset_grob (beacon_);
- beacon_ = 0;
- }
+ finished_spanner_ = 0;
+ beacon_ = 0;
}
bool
Cluster_spanner_engraver::try_music (Music *m)
{
- if (m->is_mus_type ("abort-event"))
- {
- if (spanner_)
- {
- spanner_->suicide ();
- spanner_ = 0;
- }
- }
- else if (m->is_mus_type ("cluster-note-event"))
+ if (m->is_mus_type ("cluster-note-event"))
{
cluster_notes_.push (m);
return true;
void
Cluster_spanner_engraver::process_music ()
{
- if (cluster_notes_.size())
+ if (cluster_notes_.size ())
{
- SCM c0scm = get_property ("centralCPosition");
+ SCM c0scm = get_property ("middleCPosition");
- int c0 = gh_number_p (c0scm) ? gh_scm2int (c0scm) : 0;
+ int c0 = scm_is_number (c0scm) ? scm_to_int (c0scm) : 0;
int pmax = INT_MIN;
int pmin = INT_MAX;
for (int i = 0; i <cluster_notes_.size (); i++)
{
- Pitch *pit =unsmob_pitch (cluster_notes_[i]->get_mus_property ("pitch"));
+ Pitch *pit =unsmob_pitch (cluster_notes_[i]->get_property ("pitch"));
int p =( pit ? pit->steps () : 0) + c0;
pmin = pmin <? p;
}
- Item *it = new Item (get_property ("ClusterSpannerBeacon"));
- it->set_grob_property ("positions", scm_cons (gh_int2scm (pmin),
- gh_int2scm (pmax)));
-
+ beacon_ = make_item ("ClusterSpannerBeacon", cluster_notes_[0]->self_scm ());
+ beacon_->set_property ("positions",
+ scm_cons (scm_int2num (pmin),
+ scm_int2num (pmax)));
}
if (beacon_ && !spanner_)
{
- spanner_ = new Spanner (get_property ("Cluster"));
- announce_grob (spanner_, cluster_notes_[0]->self_scm ());
+ spanner_ = make_spanner ("ClusterSpanner", cluster_notes_[0]->self_scm () );
}
if (beacon_ && spanner_)
{
typeset_grobs ();
- cluster_notes_.clear();
+ cluster_notes_.clear ();
}
}
}
-ENTER_DESCRIPTION(Cluster_spanner_engraver,
+ENTER_DESCRIPTION (Cluster_spanner_engraver,
/* descr */ "Engraves a cluster using Spanner notation ",
-/* creats*/ "Cluster",
-/* accepts */ "cluster-note-event abort-event",
+/* creats*/ "ClusterSpanner ClusterSpannerBeacon",
+/* accepts */ "cluster-note-event",
/* acks */ "note-column-interface",
/* reads */ "",
/* write */ "");
+