]> git.donarmstrong.com Git - lilypond.git/commitdiff
partial: 0.1.59.jcn
authorJan Nieuwenhuizen <janneke@gnu.org>
Mon, 27 Apr 1998 06:50:24 +0000 (08:50 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Mon, 27 Apr 1998 06:50:24 +0000 (08:50 +0200)
lily/include/multi-measure-rest-engraver.hh [new file with mode: 0644]
lily/include/multi-measure-rest.hh [new file with mode: 0644]
lily/multi-measure-rest-engraver.cc [new file with mode: 0644]
lily/multi-measure-rest.cc [new file with mode: 0644]

diff --git a/lily/include/multi-measure-rest-engraver.hh b/lily/include/multi-measure-rest-engraver.hh
new file mode 100644 (file)
index 0000000..2809343
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+  multi_measure_rest-engraver.hh -- declare Multi_measure_rest_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+*/
+
+#ifndef MULTI_MEASURE_REST_ENGRAVER_HH
+#define MULTI_MEASURE_REST_ENGRAVER_HH
+
+#include "engraver.hh"
+#include "moment.hh"
+
+/**
+ */
+class Multi_measure_rest_engraver : public Engraver
+{
+public:
+  TRANSLATOR_CLONE(Multi_measure_rest_engraver);
+  DECLARE_MY_RUNTIME_TYPEINFO;
+  Multi_measure_rest_engraver ();
+
+protected:
+  virtual void do_removal_processing ();
+  virtual void do_process_requests ();
+  virtual bool do_try_request (Request*);
+  virtual void do_pre_move_processing ();
+  
+private:
+  bool part_b_;
+  Moment last_mom_;
+  Multi_measure_rest_req* multi_measure_req_l_;
+  Multi_measure_rest* mmrest_p_;
+};
+
+#endif // MULTI_MEASURE_REST_ENGRAVER_HH
diff --git a/lily/include/multi-measure-rest.hh b/lily/include/multi-measure-rest.hh
new file mode 100644 (file)
index 0000000..afaeaf7
--- /dev/null
@@ -0,0 +1,29 @@
+/*   
+  multi-measure-rest.hh -- declare Multi_measure_rest
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+  
+ */
+
+#ifndef MULTI_MEASURE_REST_HH
+#define MULTI_MEASURE_REST_HH
+
+#include "item.hh"
+
+class Multi_measure_rest : public Item 
+{
+public:
+  Multi_measure_rest ();
+  int measures_i_;
+
+  DECLARE_MY_RUNTIME_TYPEINFO;
+
+protected:
+  virtual void do_print () const;
+  virtual Molecule *brew_molecule_p () const;
+};
+
+#endif /* MULTI_MEASURE_REST_HH */
+
diff --git a/lily/multi-measure-rest-engraver.cc b/lily/multi-measure-rest-engraver.cc
new file mode 100644 (file)
index 0000000..d7e78c4
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+  multi_measure_rest-engraver.cc -- implement Multi_measure_rest_engraver
+
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+*/
+
+#include "proto.hh"
+#include "musical-request.hh"
+#include "multi-measure-rest.hh"
+#include "multi-measure-rest-engraver.hh"
+#include "score-column.hh"
+
+IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_engraver, Engraver);
+ADD_THIS_TRANSLATOR (Multi_measure_rest_engraver);
+
+Multi_measure_rest_engraver::Multi_measure_rest_engraver ()
+{
+  last_mom_ = 0;
+  multi_measure_req_l_ = 0;
+  mmrest_p_ = 0;
+}
+
+bool
+Multi_measure_rest_engraver::do_try_request (Request* req_l)
+{
+  if (!req_l->musical () || !req_l->musical ()->multi_measure ())
+    return false;
+
+  multi_measure_req_l_ = req_l->musical ()->multi_measure ();
+  last_mom_ = now_moment () + multi_measure_req_l_->duration_.length ();
+
+  return true;
+}
+
+void
+Multi_measure_rest_engraver::do_removal_processing ()
+{
+  if (mmrest_p_)
+    {
+      typeset_element (mmrest_p_);
+      mmrest_p_ = 0;
+    }
+}
+
+void
+Multi_measure_rest_engraver::do_process_requests ()
+{
+  if (mmrest_p_ || !multi_measure_req_l_)
+    return;
+
+  mmrest_p_ = new Multi_measure_rest;
+
+  Scalar prop = get_property ("part");
+  if (prop.isnum_b ()) 
+    part_b_ = prop.to_bool ();
+
+//  if (!part_b_)
+//    return;
+
+  int measures_i = (int)multi_measure_req_l_->duration_.plet_.iso_i_;
+  if (part_b_)
+    mmrest_p_->measures_i_ = measures_i;
+
+  announce_element (Score_elem_info (mmrest_p_, multi_measure_req_l_));
+
+  multi_measure_req_l_ = 0;
+}
+
+void
+Multi_measure_rest_engraver::do_pre_move_processing ()
+{
+  if (!mmrest_p_)
+    return;
+
+  typeset_element (mmrest_p_);
+  mmrest_p_ = 0;
+
+  if (part_b_)
+    return;
+
+  if (last_mom_ <= now_moment () + Moment (1))
+    multi_measure_req_l_ = 0;
+}
+
diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc
new file mode 100644 (file)
index 0000000..a018c53
--- /dev/null
@@ -0,0 +1,59 @@
+/*   
+  multi-measure-rest.cc --  implement Multi_measure_rest
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Jan Nieuwenhuizen <jan@digicash.com>
+  
+ */
+
+#include "multi-measure-rest.hh"
+#include "debug.hh"
+#include "paper-def.hh"
+#include "lookup.hh"
+#include "dimen.hh"
+#include "rest.hh"
+#include "script.hh"
+#include "text-def.hh"
+#include "molecule.hh"
+
+IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest, Item);
+
+Multi_measure_rest::Multi_measure_rest ()
+{
+  measures_i_ = 0;
+}
+
+void
+Multi_measure_rest::do_print () const
+{
+  DOUT << "measures_i_ " << measures_i_;
+}
+
+Molecule*
+Multi_measure_rest::brew_molecule_p () const
+{
+  /*
+   [TODO]                                     3
+     * make real multi-measure rest symbol: |---|
+     * make two,four,eight-measure-rest symbols
+   */
+
+  Atom s (paper ()->lookup_l ()->rest (0, 0));
+  Molecule* mol_p = new Molecule ( Atom (s));
+  Real interline_f = paper ()->interline_f ();
+  mol_p->translate_axis (interline_f, Y_AXIS);
+
+  if (measures_i_)
+    {
+      Text_def text;
+      text.text_str_ = measures_i_;
+      text.style_str_ = "number";
+      Atom s = text.get_atom (paper (), UP);
+      s.translate_axis (3.0 * interline_f, Y_AXIS);
+      mol_p->add (s);
+    }
+
+  return mol_p;
+}
+