]> git.donarmstrong.com Git - lilypond.git/commitdiff
* input/regression/grid-lines.ly (Module): new file.
authorhanwen <hanwen>
Thu, 21 Apr 2005 15:20:45 +0000 (15:20 +0000)
committerhanwen <hanwen>
Thu, 21 Apr 2005 15:20:45 +0000 (15:20 +0000)
* lily/grid-point-engraver.cc (Module): new file

* lily/grid-line.cc (Module): new file.

* lily/grid-line-span-engraver.cc (Module): new file.

* lily/grid-line-interface.cc (Module): new file.

12 files changed:
ChangeLog
Documentation/bibliography/computer-notation.bib
Documentation/user/lilypond.tely
VERSION
input/regression/grid-lines.ly [new file with mode: 0644]
lily/grid-line-interface.cc [new file with mode: 0644]
lily/grid-line-span-engraver.cc [new file with mode: 0644]
lily/grid-line.cc [new file with mode: 0644]
lily/grid-point-engraver.cc [new file with mode: 0644]
lily/note-heads-engraver.cc
scm/define-context-properties.scm
scm/define-grobs.scm

index d5fbe3e4c724cc2efe289e13db9ad853c13084c0..b2cee1c5b82e481d7bb55fbef63f4c5ca73d963b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-04-21  Han-Wen Nienhuys  <hanwen@xs4all.nl>
+
+       * input/regression/grid-lines.ly (Module): new file.
+
+       * lily/grid-point-engraver.cc (Module): new file
+
+       * lily/grid-line.cc (Module): new file.
+
+       * lily/grid-line-span-engraver.cc (Module): new file.
+
+       * lily/grid-line-interface.cc (Module): new file.
+
 2005-04-21  Jan Nieuwenhuizen  <janneke@gnu.org>
 
        * scm/auto-beam.scm (revert-property-setting): Bugfixes: add
@@ -34,7 +46,7 @@
 2005-04-20  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
        * python/fontextract.py (write_extracted_fonts): bugfix, too many
-       %'s.
+       %'s on EndFont comment.
 
        * lily/ledger-line-spanner.cc: some more words of explanation.
 
index 11cd1b42531b0604e10c0886231551f4760fda70..a501f0e26aeff9bdc0c6b4d56fd634a0e7955be1 100644 (file)
@@ -285,7 +285,6 @@ pages = {451--454},
 
 
 @Article {haken93,
-  note = {A description of Lime internals (which resemble older (before 0.0.68pre) LilyPond data structures) HWN},
   year =  {1993},
   title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor},
   author = {Lippold Haken and Dorothea Blostein},
index 83c5d893c3050632c714562c3486065e1ede69cb..4dda8df08e772a9ba7439e791548eafd3d5e1cf7 100644 (file)
@@ -177,7 +177,7 @@ This document is also available in @uref{source/Documentation/user/out-www/lilyp
 @finalout
 
 @titlepage
-@title GNU LilyPond
+@title LilyPond
 @subtitle The music typesetter
 @author The LilyPond development team
 
diff --git a/VERSION b/VERSION
index 189f1a2e349b48e9300260697b31991471f1cf05..6e46ae6c12ca252dc409164bcfbdb4c2226171e3 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,6 +1,6 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=5
-PATCH_LEVEL=20
+PATCH_LEVEL=21
 MY_PATCH_LEVEL=
 
diff --git a/input/regression/grid-lines.ly b/input/regression/grid-lines.ly
new file mode 100644 (file)
index 0000000..05279d4
--- /dev/null
@@ -0,0 +1,68 @@
+\header
+{
+
+  texidoc = "With grid lines, vertical lines can be drawn between
+staves synchronized with the notes."
+
+}
+\version "2.5.21"
+
+skips =
+{
+\time 12/8
+\once  \override Score.GridLine #'thickness = #4.0
+  s8 
+  s8 
+  s8 
+\once  \override Score.GridLine #'thickness = #2.0
+  s8 
+  s8 
+  s8 
+\once  \override Score.GridLine #'thickness = #4.0
+  s8 
+  s8 
+  s8 
+\once  \override Score.GridLine #'thickness = #2.0
+  s8 
+  s8 
+  s8 
+}
+
+
+\layout {
+  \context {
+  \Staff
+  \consists "Grid_point_engraver"
+  
+  }
+
+  \context {
+  \RhythmicStaff
+  \consists "Grid_point_engraver"
+  gridInterval = #(ly:make-moment 1 8)
+  \override BarLine #'bar-size = #0.05
+}
+  \context {
+    \StaffGroup
+    \remove "System_start_delimiter_engraver" 
+  }
+}
+
+\new Score 
+\with {
+  \consists "Grid_line_span_engraver"
+  \override SystemStartBrace #'transparent = ##t
+  \override TimeSignature #'transparent = ##t
+
+  \override NoteColumn #'X-offset-callbacks = #(list (lambda (x a) -0.5))
+  \override NoteColumn #'Y-offset-callbacks = #(list (lambda (x a) 0.25))
+
+}
+\new StaffGroup <<
+  \new Staff {
+    \repeat unfold 12 { c''8 }
+    }
+  \new RhythmicStaff \skips
+  \new RhythmicStaff \skips
+>>
+  
diff --git a/lily/grid-line-interface.cc b/lily/grid-line-interface.cc
new file mode 100644 (file)
index 0000000..47d8b58
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+  grid-line-interface.cc --  implement Grid_line_interface
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#include "group-interface.hh"
+#include "output-def.hh"
+#include "stencil.hh"
+#include "lookup.hh"
+#include "grid-line-interface.hh"
+#include "grob.hh"
+
+
+MAKE_SCHEME_CALLBACK (Grid_line_interface, print, 1);
+SCM
+Grid_line_interface::print (SCM smobbed_me)
+{
+  Grob *me = unsmob_grob (smobbed_me);
+  SCM first_elt = me->get_property ("elements");
+
+  /* compute common refpoint of elements */
+  Grob *refp = common_refpoint_of_list (first_elt, me, Y_AXIS);
+  Interval iv;
+  
+  for (SCM elts = first_elt; scm_is_pair (elts); elts = scm_cdr (elts))
+    {
+      Grob *point = unsmob_grob (scm_car (elts));
+
+      iv.unite (point->extent (refp, Y_AXIS));
+    }
+
+  if (iv.is_empty ())
+    {
+      me->suicide ();
+      return SCM_EOL;
+    }
+
+  Real staffline = me->get_layout ()->get_dimension (ly_symbol2scm ("linethickness"));
+  Real thick = robust_scm2double (me->get_property ("thickness"), 1.0)
+    * staffline;
+
+
+  iv += - me->relative_coordinate (refp, Y_AXIS);
+  Stencil st = Lookup::filled_box (Box (Interval (0, thick),
+                                       iv));
+
+  return st.smobbed_copy ();
+}
+
+void
+Grid_line_interface::add_grid_point (Grob *me, Grob *b)
+{
+  Pointer_group_interface::add_grob (me, ly_symbol2scm ("elements"), b);
+  me->add_dependency (b);
+}
+
+ADD_INTERFACE (Grid_line_interface, "grid-line-interface",
+              "A  line that spanned between grid-points. ",
+              "elements thickness");
+
diff --git a/lily/grid-line-span-engraver.cc b/lily/grid-line-span-engraver.cc
new file mode 100644 (file)
index 0000000..e138dca
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+  grid-line-span-engraver.cc --  implement Grid_line_span_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+#include "grid-line-interface.hh"
+
+class Grid_line_span_engraver : public Engraver
+{
+  Item *spanline_;
+  Link_array<Item> lines_;
+
+public:
+  TRANSLATOR_DECLARATIONS (Grid_line_span_engraver);
+protected:
+  virtual void acknowledge_grob (Grob_info);
+  virtual void stop_translation_timestep ();
+};
+
+Grid_line_span_engraver::Grid_line_span_engraver ()
+{
+  spanline_ = 0;
+}
+
+void
+Grid_line_span_engraver::acknowledge_grob (Grob_info i)
+{
+  int depth = i.origin_contexts (this).size ();
+  if (depth && i.grob_->internal_has_interface (ly_symbol2scm ("grid-point-interface")))
+    {
+      Item *it = dynamic_cast<Item *> (i.grob_);
+      lines_.push (it);
+
+      if (lines_.size () >= 2 && !spanline_)
+       {
+         spanline_ = make_item ("GridLine", SCM_EOL);
+         spanline_->set_parent (lines_[0], X_AXIS);
+       }
+    }
+}
+
+void
+Grid_line_span_engraver::stop_translation_timestep ()
+{
+  if (spanline_)
+    {
+      for (int i = 0; i < lines_.size (); i++)
+       Grid_line_interface::add_grid_point (spanline_, lines_[i]);
+
+      spanline_ = 0;
+    }
+  lines_.set_size (0);
+}
+
+ADD_TRANSLATOR (Grid_line_span_engraver,
+               /* descr */ "This engraver makes cross-staff linelines: It catches all normal "
+               "line lines, and draws a single span-line across them.",
+               /* creats*/ "GridLine",
+               /* accepts */ "",
+               /* acks  */ "grid-point-interface",
+               /* reads */ "",
+               /* write */ "");
diff --git a/lily/grid-line.cc b/lily/grid-line.cc
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
diff --git a/lily/grid-point-engraver.cc b/lily/grid-point-engraver.cc
new file mode 100644 (file)
index 0000000..7da25e2
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+  grid-line-engraver.cc --  implement Grid_point_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#include "engraver.hh"
+#include "item.hh"
+
+class Grid_point_engraver : public Engraver
+{
+public:
+  TRANSLATOR_DECLARATIONS (Grid_point_engraver);
+protected:
+  virtual void process_music ();
+};
+
+void
+Grid_point_engraver::process_music ()
+{
+  SCM  grid_interval = get_property ("gridInterval");
+  if (Moment *mom = unsmob_moment (grid_interval))
+    {
+      Moment now = now_mom ();
+
+      if (!now.main_part_.mod_rat (mom->main_part_))
+       {
+         Item * it = make_item ("GridPoint", SCM_EOL);
+       }
+    }
+}
+
+Grid_point_engraver::Grid_point_engraver ()
+{
+}
+
+ADD_TRANSLATOR (Grid_point_engraver,
+               /* descr */ "generate grid points.",
+               /* creats*/ "GridPoint",
+               /* accepts */ "",
+               /* acks  */ "",
+               /* reads */ "gridInterval",
+               /* write */ "");
+
index 4d4ddd8010b77fd316c00f5bdabf9af8c1668637..73a467c1d7bc777e0370e5670f980510c1bef414 100644 (file)
@@ -27,7 +27,6 @@ public:
 protected:
   virtual bool try_music (Music *ev);
   virtual void process_music ();
-
   virtual void stop_translation_timestep ();
 };
 
@@ -54,7 +53,6 @@ Note_heads_engraver::process_music ()
 {
   for (int i = 0; i < note_evs_.size (); i++)
     {
-
       Music *ev = note_evs_[i];
       Item *note = make_item ("NoteHead", ev->self_scm ());
 
index 6a57b70deada1dd9a46fcaf31c01cfa618d163b5..497d0d6e9f9b21da255c9d7ef7a24348c3fa9463 100644 (file)
@@ -453,6 +453,8 @@ top of those automatically detected. ")
      (graceSettings ,list?
                    "Overrides for grace notes. This property should
 be manipulated through the @code{add-grace-property} function.")
+     (gridInterval ,ly:moment?
+                  "Interval for which to generate @ref{GridPoint}s")
      (currentCommandColumn ,ly:grob? "Grob that is X-parent to all
 current breakable (clef, key signature, etc.) items.")
      (currentMusicalColumn ,ly:grob? "Grob that is X-parent to all
index bacaa7fce36627c7423ea64fdda387aa78de32a8..d00feae8cd2686e30a5e150af919cacf7828ddc7 100644 (file)
        (break-align-symbol . staff-bar)
        (glyph . "|")
        (break-glyph-function . ,default-break-barline)
+       (layer . 0)
        (bar-size-procedure . ,Bar_line::get_staff_bar_size)
        (print-function . ,Bar_line::print)     
        (break-visibility . ,all-visible)
        (meta . ((interfaces . (line-interface line-spanner-interface spanner-interface))))
        ))
 
+    (GridPoint
+     . (
+       (X-extent . (0 . 0))
+       (Y-extent . (0 . 0))
+       (meta . ((interfaces . (grid-point-interface))))
+       ))
+
+    (GridLine
+     . (
+       (print-function . ,Grid_line_interface::print)
+       (X-extent . (0 . 0))
+       (layer . 0)
+       (meta . ((interfaces . (grid-line-interface)))
+       )))
+       
+
     (Hairpin
      . (
        (print-function . ,Hairpin::print)
        (print-function . ,Span_bar::print)
        (X-extent-callback . ,Span_bar::width_callback)
        (Y-extent-callback . ())
+       (layer . 0)
        (breakable . #t)
        (before-line-breaking-callback . ,Span_bar::before_line_breaking)
        ;; ugh duplication!