]> git.donarmstrong.com Git - lilypond.git/commitdiff
* lily/rest.cc (y_offset_callback): use offset callback
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 16 Oct 2005 01:25:47 +0000 (01:25 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 16 Oct 2005 01:25:47 +0000 (01:25 +0000)
iso. after-line-breaking callback.

* lily/grob.cc: change after/before-line-breaking-callback to
after/before-line-breaking dummy properties.

* lily/include/grob.hh: remove Grob_status.

* lily/grob.cc (other_axis_parent_positioning): new function.
(same_axis_parent_positioning): new function

* scm/define-grob-properties.scm (all-user-grob-properties): doc
callbacks property.

ChangeLog
lily/grob.cc
lily/include/grob.hh
lily/include/rest.hh
lily/rest.cc
lily/script-interface.cc
lily/system.cc
lily/volta-bracket.cc
scm/define-grob-properties.scm
scm/define-grobs.scm

index f4eb09e2fb914e0673546c1906964a2080d13fa7..78256a04143b4829221176e4ed610a20132ef7bf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2005-10-16  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * lily/rest.cc (y_offset_callback): use offset callback
+       iso. after-line-breaking callback.
+
+       * lily/grob.cc: change after/before-line-breaking-callback to
+       after/before-line-breaking dummy properties.
+
+       * lily/include/grob.hh: remove Grob_status.
+
        * scm/define-context-properties.scm
        (all-user-translation-properties): remove verticalAlignmentChildCallback
 
index 4933934c0c8934ebf44681837bedabced6614de7..95208d3a16a23ffab6e76203f353bc9acc5d9e05 100644 (file)
@@ -165,9 +165,6 @@ Grob::Grob (Grob const &s, int copy_index)
   property_callbacks_ = s.property_callbacks_;
   object_alist_ = SCM_EOL;
 
-  /* No properties are copied.  That is the job of
-     handle_broken_dependencies.  */
-  status_ = s.status_;
   pscore_ = 0;
 
   smobify_self ();
@@ -209,36 +206,6 @@ Grob::get_layout () const
   return pscore_ ? pscore_->layout () : 0;
 }
 
-/* Recursively track all dependencies of this Grob.  The status_ field
-   is used as a mark-field.  It is marked with BUSY during execution
-   of this function, and marked with FINAL when finished.
-
-   FUNCPTR is the function to call to update this element.  */
-void
-Grob::calculate_dependencies (int final, int busy, SCM funcname)
-{
-  if (status_ >= final)
-    return;
-
-  if (status_ == busy)
-    {
-      programming_error ("element is busy, come back later");
-      return;
-    }
-
-  status_ = busy;
-
-  extract_grob_set (this, "dependencies", deps);
-  for (int i = 0; i < deps.size (); i++)
-    deps[i]->calculate_dependencies (final, busy, funcname);
-
-  SCM proc = internal_get_property (funcname);
-  if (ly_is_procedure (proc))
-    scm_call_1 (proc, this->self_scm ());
-
-  status_ = final;
-}
-
 Stencil *
 Grob::get_stencil () const
 {
@@ -746,6 +713,9 @@ ADD_INTERFACE (Grob, "grob-interface",
               "lists of other objects, or results from computations are stored in"
               "mutable properties: every call to set-grob-property (or its C++ equivalent) "
               "sets a mutable property. ",
+              "\n\n"
+              
+              "The properties @code{after-line-breaking} and @code{before-line-breaking} are unused dummies. "
 
               /* properties */
               "X-extent "
@@ -754,10 +724,10 @@ ADD_INTERFACE (Grob, "grob-interface",
               "Y-extent "
               "Y-extent-callback "
               "Y-offset-callbacks "
-              "after-line-breaking-callback "
+              "after-line-breaking "
               "axis-group-parent-X "
               "axis-group-parent-Y "
-              "before-line-breaking-callback "
+              "before-line-breaking "
               "callbacks "
               "cause "
               "color "
index c0dd655b478b211bfbd423c5c459aec858178ce8..a5e8c62068762128a4023eee1d5c5c577f362282 100644 (file)
 #include "grob-interface.hh"
 #include "object-key.hh"
 
-enum Grob_status
-  {
-    ORPHAN = 0, // not yet added to Paper_score
-    PRECALCING,
-    PRECALCED, // calcs before spacing done
-    POSTCALCING, // busy calculating. This is used to trap cyclic deps.
-    POSTCALCED, // after spacing calcs done
-  };
-
 typedef void (Grob:: *Grob_method_pointer) (void);
 
 class Grob
@@ -31,8 +22,6 @@ private:
   DECLARE_SMOBS (Grob, foo);
   void init ();
 
-
-
 protected:
   Object_key const *key_;
   SCM immutable_property_alist_;
index 22be2d4b5b7c53628a8932c5748e3b8f38d0dd64..de9f3122f7f68f8a144b5d68802e2158a02a7678 100644 (file)
@@ -16,7 +16,7 @@ class Grob;
 class Rest
 {
 public:
-  DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
+  DECLARE_SCHEME_CALLBACK (y_offset_callback, (SCM, SCM));
   static bool has_interface (Grob *);
   static String glyph_name (Grob *, int, String, bool);
   static SCM brew_internal_stencil (SCM, bool);
index e36525262bac19a1aea33a3a3ce7b82a529dfbec..9d9579f6a2914c0083507524a9b381e31ee07b0b 100644 (file)
 #include "directional-element-interface.hh"
 
 // -> offset callback
-MAKE_SCHEME_CALLBACK (Rest, after_line_breaking, 1);
+MAKE_SCHEME_CALLBACK (Rest, y_offset_callback, 2);
 SCM
-Rest::after_line_breaking (SCM smob)
+Rest::y_offset_callback (SCM smob, SCM axis)
 {
   Grob *me = unsmob_grob (smob);
+  (void) axis;
+  
   int bt = scm_to_int (me->get_property ("duration-log"));
   int lc = Staff_symbol_referencer::line_count (me);
   Real ss = Staff_symbol_referencer::staff_space (me);
+
+  Real amount = 0.0;
   if (lc % 2)
     {
       if (bt == 0 && lc > 1)
-       me->translate_axis (ss, Y_AXIS);
+       amount += ss;
     }
   else
-    me->translate_axis (ss / 2, Y_AXIS);
+    amount += ss / 2;
 
   Grob *d = unsmob_grob (me->get_object ("dot"));
   if (d && bt > 4) // UGH.
@@ -44,7 +48,7 @@ Rest::after_line_breaking (SCM smob)
       d->set_property ("staff-position",
                       scm_from_int ((bt == 0) ? -1 : 1));
     }
-  return SCM_UNSPECIFIED;
+  return scm_from_double (amount);
 }
 
 /*
index 7c01a673e5d7452d5b124aff75aa687739e52509..6aa4c538840aaa3838d067bc06cf22db4cb4a46d 100644 (file)
@@ -41,6 +41,9 @@ Script_interface::get_stencil (Grob *me, Direction d)
   return Stencil ();
 }
 
+/*
+todo: use proper callbacks.
+*/
 MAKE_SCHEME_CALLBACK (Script_interface, before_line_breaking, 1);
 SCM
 Script_interface::before_line_breaking (SCM smob)
index 4795e63c0aaf1c754b19fa323bc3a44c7e12dce6..848b3e7b61c9848c53a4e1d526935244e9aef376 100644 (file)
@@ -280,8 +280,10 @@ System::pre_processing ()
     apply_tweaks (all_elements_->grob (i), false);
 
   for (int i = 0; i < all_elements_->size (); i++)
-    all_elements_->grob (i)->calculate_dependencies (PRECALCED, PRECALCING,
-                                                    ly_symbol2scm ("before-line-breaking-callback"));
+    {
+      Grob *g = all_elements_->grob (i);
+      (void) g->get_property ("after-line-breaking");
+    }
 
   message (_ ("Calculating line breaks..."));
   progress_indication (" ");
@@ -303,8 +305,7 @@ System::post_processing ()
       Grob *g = all_elements_->grob (i);
 
       apply_tweaks (g, true);
-      g->calculate_dependencies (POSTCALCED, POSTCALCING,
-                                ly_symbol2scm ("after-line-breaking-callback"));
+      (void) g->get_property ("after-line-breaking");
     }
 
   Interval iv (extent (this, Y_AXIS));
index 7d7100e468086b9472c495b52b5c131088e97452..e97c7b0994e88aec74bf1ede332958d9c2ca1fb5 100644 (file)
@@ -36,17 +36,6 @@ SCM
 Volta_bracket_interface::print (SCM smob)
 {
   Spanner *me = unsmob_spanner (smob);
-
-  /*
-    UGH UGH  dependency tracking.
-  */
-  SCM proc = me->get_property ("after-line-breaking-callback");
-  if (ly_is_procedure (proc))
-    {
-      me->set_property ("after-line-breaking-callback", SCM_EOL);
-      scm_call_1  (proc, me->self_scm ());
-    }
-
   Spanner *orig_span = dynamic_cast<Spanner *> (me->original_);
   bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0]
                                            == (Spanner *)me);
index 9a0ade0fd89bf999ff11788cf5dba9c80e149821..508e8578b36927b8f5a144da85f36b20c3a6a766 100644 (file)
@@ -84,9 +84,7 @@ note etc. This information is used to determine how to connect the
 beaming patterns from stem to stem inside a beam.")
 
 
-     (before-line-breaking-callback ,procedure? "This procedure is
-called before line breaking, but after splitting breakable items at
-potential line breaks.")
+     (before-line-breaking ,boolean? "Dummy property, used to trigger a callback function.")
      (between-cols ,pair? "Where to attach a loose column to")
      (bound-padding ,number? "The amount of padding to insert around spanner bounds.")
      (bracket-flare ,number-pair? "A pair of numbers specifying how
@@ -529,7 +527,7 @@ sizes (like the dynamic @b{p} and @b{f}) on their baselines.")
      (axis-group-parent-Y ,ly:grob? "Containing Y axis group")
      (accidental-grobs ,list? "Alist with (NOTENAME . GROBLIST) entries")
      (adjacent-hairpins ,ly:grob-array? "List of directly neighboring hairpins")
-     (after-line-breaking-callback ,procedure? "This procedure is called after line breaking. Its return value is ignored.")     
+     (after-line-breaking ,boolean? "Dummy property, used to trigger callback for after-line-breaking")
      (all-elements ,ly:grob-array? "list of all grobs in this line. Its
 function is to protect objects from being garbage collected.")
      (arpeggio ,ly:grob? "pointer to arpeggio object.")
index 2ed04b566888ee36c08848d99570aaba848fe450..52d88dc32b96a4630c70112b0a37b58cd21cfe5b 100644 (file)
@@ -22,7 +22,8 @@
        (print-function . ,Accidental_interface::print)
        (avoid-slur . inside)
        (cautionary-style . parentheses)
-       (after-line-breaking-callback . ,Accidental_interface::after_line_breaking)
+       (callbacks ((after-line-breaking . ,Accidental_interface::after_line_breaking)))
+       
        (meta . ((class . Item)
                 (interfaces . (accidental-interface
                                font-interface))))))
@@ -94,7 +95,8 @@
        (X-offset-callbacks . (,Side_position_interface::aligned_side))
        (direction . -1)
        (cautionary-style . parentheses)
-       (after-line-breaking-callback . ,Accidental_interface::after_line_breaking)
+       (callbacks . ((after-line-breaking . ,Accidental_interface::after_line_breaking)
+                     ))
        (meta . ((class . Item)
                 (interfaces . (item-interface
                                accidental-interface
        (print-function . ,Bar_line::print)
        (break-visibility . ,all-visible)
        (breakable . #t)
-       (before-line-breaking-callback . ,Bar_line::before_line_breaking)
+       (callbacks . ((before-line-breaking . ,Bar_line::before_line_breaking)))
        (space-alist . (
                        (time-signature . (extra-space . 0.75))
                        (custos . (minimum-space . 2.0))
 
        ;; TODO: should be in SLT.
        (thickness . 0.48) ; in staff-space
-;      (before-line-breaking-callback . ,Beam::before_line_breaking)
-;      (after-line-breaking-callback . ,Beam::after_line_breaking)
        (neutral-direction . -1)
        (dir-function . ,beam-dir-majority-median)
 
     (Clef
      . (
        (print-function . ,Clef::print)
-       (before-line-breaking-callback . ,Clef::before_line_breaking)
+       (callbacks ((before-line-breaking . ,Clef::before_line_breaking)))
        (breakable . #t)
        (font-family . music)
        (break-align-symbol . clef)
     (ChordName
      . (
        (print-function . ,Text_interface::print)
-       (after-line-breaking-callback . ,Chord_name::after_line_breaking)
+       (callbacks . ((after-line-breaking . ,Chord_name::after_line_breaking)
+                     ))
        (word-space . 0.0)
        (font-family . sans)
        (font-size . 1.5)
     (DynamicText
      . (
        (print-function . ,Text_interface::print)
-       (before-line-breaking-callback . ,Script_interface::before_line_breaking)
+       ;; todo.
+       (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking)))
        (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
        (self-alignment-X . 0)
        (Y-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
        (self-alignment-X . 0)
        (self-alignment-Y . 0)
        (script-priority . 100)
-       (before-line-breaking-callback . ,Script_interface::before_line_breaking)
+       (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking)))
        (font-encoding . fetaNumber)
        (font-size . -5)                ; don't overlap when next to heads.
        (meta . ((class . Item)
        (breakable . #t)
        (X-extent-callback . #f)
        (Y-extent-callback . #f)
-       (after-line-breaking-callback . ,Line_spanner::after_line_breaking)
+       (callbacks ((after-line-breaking . ,Line_spanner::after_line_breaking)
+                   ))
        (print-function . ,Line_spanner::print)
        (meta . ((class . Spanner)
                 (interfaces . (line-interface
     (Hairpin
      . (
        (print-function . ,Hairpin::print)
-       (after-line-breaking-callback . ,Hairpin::after_line_breaking)
+       (callbacks . ((after-line-breaking . ,Hairpin::after_line_breaking)))
        (thickness . 1.0)
        (height . 0.6666)
        (spacing-procedure . ,Spanner::set_spacing_rods)
     (PaperColumn
      . (
        (axes . (0))
-       (before-line-breaking-callback . ,Paper_column::before_line_breaking)
+       (callbacks ((before-line-breaking . ,Paper_column::before_line_breaking)))
        (X-extent-callback . ,Axis_group_interface::group_extent_callback)
 
        ;; debugging
      . (
        (axes . (0))
        (X-extent-callback . ,Axis_group_interface::group_extent_callback)
-       (before-line-breaking-callback . ,Paper_column::before_line_breaking)
+       (callbacks . ((before-line-breaking . ,Paper_column::before_line_breaking)))
        (breakable . #t)
 
        ;; debugging stuff: print column number.
        (print-function . ,Text_interface::print)
        (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self))
        (Y-offset-callbacks . (,Side_position_interface::aligned_side))
-       (after-line-breaking-callback . ,shift-right-at-line-begin)
+       (callbacks . ((after-line-breaking . ,shift-right-at-line-begin)))
        (self-alignment-X . 0)
        (direction . 1)
        (breakable . #t)
                 (interfaces . (percent-repeat-interface))))))
     (Rest
      . (
-       (after-line-breaking-callback . ,Rest::after_line_breaking)
        (X-extent-callback . ,Rest::extent_callback)
        (Y-extent-callback . ,Rest::extent_callback)
        (print-function . ,Rest::print)
-       (Y-offset-callbacks . (,Staff_symbol_referencer::callback
-                              ,Rest::polyphonic_offset_callback))
+       (Y-offset-callbacks . (
+                              ,Staff_symbol_referencer::callback
+                              ,Rest::polyphonic_offset_callback
+                              ,Rest::y_offset_callback
+                              ))
        (minimum-distance . 0.25)
        (meta . ((class . Item)
                 (interfaces . (font-interface
        (staff-padding . 0.25)
        ;; (script-priority . 0) priorities for scripts, see script.scm
        (X-offset-callbacks . (,Self_alignment_interface::centered_on_parent))
-       (before-line-breaking-callback . ,Script_interface::before_line_breaking)
+       (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking)))
        (font-encoding . fetaMusic)
        (meta . ((class . Item)
                 (interfaces . (script-interface
 
     (ScriptColumn
      . (
-       (before-line-breaking-callback . ,Script_column::before_line_breaking)
+       (callbacks . ((before-line-breaking . ,Script_column::before_line_breaking)))
        (meta . ((class . Item)
                 (interfaces . (script-column-interface))))))
 
        (Y-extent-callback . ())
        (layer . 0)
        (breakable . #t)
-       (before-line-breaking-callback . ,Span_bar::before_line_breaking)
+       (callbacks . ((before-line-breaking . ,Span_bar::before_line_breaking)))
        ;; ugh duplication!
 
        ;;
        (print-function . ,System_start_delimiter::print)
        (glyph . "bar-line")
        (thickness . 1.6)
-       (after-line-breaking-callback . ,System_start_delimiter::after_line_breaking)
+       (callbacks . ((after-line-breaking . ,System_start_delimiter::after_line_breaking)))
+       
        (meta . ((class . Spanner)
                 (interfaces . (system-start-delimiter-interface))))))
 
        ;; sync with Fingering ?
        (padding . 0.5)
        (staff-padding . 0.5)
-       (before-line-breaking-callback . ,Script_interface::before_line_breaking)
+       (callbacks . ((before-line-breaking . ,Script_interface::before_line_breaking)))
        (avoid-slur . around)
        (slur-padding . 0.5)
        (script-priority . 200)
     (TieColumn
      . (
        (callbacks . ((positioning-done . ,Tie_column::calc_positioning_done)
+                     (before-line-breaking . ,Tie_column::before_line_breaking)
                      ))
-       (before-line-breaking-callback . ,Tie_column::before_line_breaking)
        (X-extent-callback . #f)
        (Y-extent-callback . #f)
        
     (VoltaBracket
      . (
        (print-function . ,Volta_bracket_interface::print)
-       (after-line-breaking-callback . ,Volta_bracket_interface::after_line_breaking)
+       (callbacks . ((after-line-breaking . ,Volta_bracket_interface::after_line_breaking)))
        (direction . ,UP)
        (padding . 1)
        (font-encoding . fetaNumber)
        (X-extent-callback . #f)
        (Y-extent-callback . #f)
        (print-function . ,Line_spanner::print)
-       (after-line-breaking-callback . ,Line_spanner::after_line_breaking)
+       (callbacks ((after-line-breaking . ,Line_spanner::after_line_breaking)))
        (meta . ((class . Spanner)
                 (interfaces . (line-spanner-interface
                                line-interface))))))))