CVSROOT:        /cvsroot/lilypond
Module name:    lilypond
Branch:         
Changes by:     Han-Wen Nienhuys <[EMAIL PROTECTED]>    05/10/10 13:08:13

Modified files:
        .              : ChangeLog 
        lily           : enclosing-bracket.cc horizontal-bracket.cc 
                         ottava-bracket.cc volta-bracket.cc 
        lily/include   : horizontal-bracket.hh volta-bracket.hh 
        scm            : define-grob-interfaces.scm define-grobs.scm 

Log message:
        * lily/volta-bracket.cc (after_line_breaking): new function. Set
        edge-height.
        
        * lily/horizontal-bracket.cc (make_enclosing_bracket): rename from
        make_bracket.
        (make_bracket): new function.
        
        * scm/define-grobs.scm (all-grob-descriptions): set
        between-length-limit to 1.0

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.4167&tr2=1.4168&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/enclosing-bracket.cc.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/horizontal-bracket.cc.diff?tr1=1.27&tr2=1.28&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/ottava-bracket.cc.diff?tr1=1.37&tr2=1.38&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/volta-bracket.cc.diff?tr1=1.50&tr2=1.51&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/horizontal-bracket.hh.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/volta-bracket.hh.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/define-grob-interfaces.scm.diff?tr1=1.25&tr2=1.26&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/scm/define-grobs.scm.diff?tr1=1.243&tr2=1.244&r1=text&r2=text

Patches:
Index: lilypond/ChangeLog
diff -u lilypond/ChangeLog:1.4167 lilypond/ChangeLog:1.4168
--- lilypond/ChangeLog:1.4167   Mon Oct 10 10:40:59 2005
+++ lilypond/ChangeLog  Mon Oct 10 13:08:12 2005
@@ -1,5 +1,12 @@
 2005-10-10  Han-Wen Nienhuys  <[EMAIL PROTECTED]>
 
+       * lily/volta-bracket.cc (after_line_breaking): new function. Set
+       edge-height.
+
+       * lily/horizontal-bracket.cc (make_enclosing_bracket): rename from
+       make_bracket.
+       (make_bracket): new function.
+
        * scm/lily.scm (define-scheme-options): add paper-size option.
 
        * ly/declarations-init.ly (laissezVibrer): get paper size from
Index: lilypond/lily/enclosing-bracket.cc
diff -u lilypond/lily/enclosing-bracket.cc:1.1 
lilypond/lily/enclosing-bracket.cc:1.2
--- lilypond/lily/enclosing-bracket.cc:1.1      Fri Oct  7 10:43:36 2005
+++ lilypond/lily/enclosing-bracket.cc  Mon Oct 10 13:08:13 2005
@@ -54,10 +54,10 @@
   Interval xext = Axis_group_interface::relative_group_extent (elements, 
common_x, X_AXIS);
 
 
-  Stencil left_br = Horizontal_bracket::make_bracket (me, me, elements,
-                                                     Y_AXIS, LEFT);
-  Stencil right_br = Horizontal_bracket::make_bracket (me, me, elements,
-                                                      Y_AXIS, RIGHT);
+  Stencil left_br = Horizontal_bracket::make_enclosing_bracket (me, me, 
elements,
+                                                               Y_AXIS, LEFT);
+  Stencil right_br = Horizontal_bracket::make_enclosing_bracket (me, me, 
elements,
+                                                                Y_AXIS, RIGHT);
 
   xext.widen (robust_scm2double (me->get_property ("padding"), 0.25));
   left_br.translate_axis (xext[LEFT], X_AXIS);
Index: lilypond/lily/horizontal-bracket.cc
diff -u lilypond/lily/horizontal-bracket.cc:1.27 
lilypond/lily/horizontal-bracket.cc:1.28
--- lilypond/lily/horizontal-bracket.cc:1.27    Fri Oct  7 09:50:22 2005
+++ lilypond/lily/horizontal-bracket.cc Mon Oct 10 13:08:13 2005
@@ -6,25 +6,23 @@
   (c) 2002--2005 Han-Wen Nienhuys <[EMAIL PROTECTED]>
 */
 
-#include "side-position-interface.hh"
+#include "horizontal-bracket.hh"       
+
 #include "lookup.hh"
+#include "side-position-interface.hh"
 #include "pointer-group-interface.hh"
 #include "directional-element-interface.hh"
 #include "output-def.hh"
 #include "staff-symbol-referencer.hh"
 #include "tuplet-bracket.hh"
-#include "horizontal-bracket.hh"       
 #include "axis-group-interface.hh"
 
+
 Stencil
-Horizontal_bracket::make_bracket (Grob *me, Grob *refpoint,
-                                 Link_array<Grob> grobs,
-                                 Axis a, Direction dir)
+Horizontal_bracket::make_bracket (Grob *me,
+                                 Real length,
+                                 Axis a, Direction dir)                        
         
 {
-  Axis other = other_axis (a);
-  Grob *common = common_refpoint_of_array (grobs, refpoint, a);
-  Interval ext = Axis_group_interface::relative_group_extent (grobs, common, 
a);
-
   Drul_array<Real> edge_height = robust_scm2interval (me->get_property 
("edge-height"),
                                                      Interval (1.0, 1.0));
   Drul_array<Real> flare = robust_scm2interval (me->get_property 
("bracket-flare"),
@@ -34,20 +32,29 @@
 
   // Make sure that it points in the correct direction:
   scale_drul (&edge_height, Real (-dir));
-
+ 
   Interval empty;
   Offset start;
-  start[a] = ext.length ();
+  start[a] = length;
 
   /*
     ugh, Tuplet_bracket should use Horizontal_bracket, not the other way 
around. 
   */
-  Stencil b
-    = Tuplet_bracket::make_bracket (me, other, start, 
-                                   edge_height, empty, flare, shorten);
+  return Tuplet_bracket::make_bracket (me, other_axis (a), start, 
+                                      edge_height, empty, flare, shorten);
+}
+
+
+Stencil
+Horizontal_bracket::make_enclosing_bracket (Grob *me, Grob *refpoint,
+                                           Link_array<Grob> grobs,
+                                           Axis a, Direction dir)
+{
+  Grob *common = common_refpoint_of_array (grobs, refpoint, a);
+  Interval ext = Axis_group_interface::relative_group_extent (grobs, common, 
a);
 
-  b.translate_axis (ext[LEFT] - refpoint->relative_coordinate (common, a)
-                   , a);
+  Stencil b = make_bracket (me, ext.length(), a, dir);
+  b.translate_axis (ext[LEFT] - refpoint->relative_coordinate (common, a), a);
 
   return b;
 }
@@ -71,7 +78,7 @@
       return SCM_EOL;
     }
 
-  Stencil b = make_bracket (me, me, gs, X_AXIS, get_grob_direction (me));
+  Stencil b = make_enclosing_bracket (me, me, gs, X_AXIS, get_grob_direction 
(me));
   return b.smobbed_copy ();
 }
 
Index: lilypond/lily/include/horizontal-bracket.hh
diff -u lilypond/lily/include/horizontal-bracket.hh:1.1 
lilypond/lily/include/horizontal-bracket.hh:1.2
--- lilypond/lily/include/horizontal-bracket.hh:1.1     Wed Oct  5 13:05:45 2005
+++ lilypond/lily/include/horizontal-bracket.hh Mon Oct 10 13:08:13 2005
@@ -9,10 +9,16 @@
 #ifndef HORIZONTAL_BRACKET_HH
 #define HORIZONTAL_BRACKET_HH
 
+#include "lily-guile.hh"
+#include "lily-proto.hh"
+
 struct Horizontal_bracket
 {
   DECLARE_SCHEME_CALLBACK (print, (SCM));
-  static Stencil make_bracket (Grob *, Grob *, Link_array<Grob>, Axis, 
Direction);
+  static Stencil make_bracket (Grob *, Real, Axis, Direction);
+  static Stencil make_enclosing_bracket (Grob *me, Grob *refpoint,
+                                        Link_array<Grob> grobs,
+                                        Axis a, Direction dir);
   static bool has_interface (Grob *);
 };
 
Index: lilypond/lily/include/volta-bracket.hh
diff -u lilypond/lily/include/volta-bracket.hh:1.7 
lilypond/lily/include/volta-bracket.hh:1.8
--- lilypond/lily/include/volta-bracket.hh:1.7  Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/volta-bracket.hh      Mon Oct 10 13:08:13 2005
@@ -14,6 +14,7 @@
 public:
   static bool has_interface (Grob *);
   DECLARE_SCHEME_CALLBACK (print, (SCM));
+  DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
   static void add_column (Grob *, Grob *col);
   static void add_bar (Grob *me, Item *bar);
 };
Index: lilypond/lily/ottava-bracket.cc
diff -u lilypond/lily/ottava-bracket.cc:1.37 
lilypond/lily/ottava-bracket.cc:1.38
--- lilypond/lily/ottava-bracket.cc:1.37        Fri Aug 12 00:04:45 2005
+++ lilypond/lily/ottava-bracket.cc     Mon Oct 10 13:08:13 2005
@@ -175,7 +175,16 @@
   return b.smobbed_copy ();
 }
 
-ADD_INTERFACE (Ottava_bracket, "ottava-bracket-interface",
+ADD_INTERFACE (Ottava_bracket,
+              "ottava-bracket-interface",
+              
               "An ottava bracket",
-              "edge-height bracket-flare shorten-pair minimum-length");
+
+              /*
+                properties
+               */
+              "edge-height "
+              "bracket-flare "
+              "shorten-pair "
+              "minimum-length");
 
Index: lilypond/lily/volta-bracket.cc
diff -u lilypond/lily/volta-bracket.cc:1.50 lilypond/lily/volta-bracket.cc:1.51
--- lilypond/lily/volta-bracket.cc:1.50 Mon Sep 12 12:46:49 2005
+++ lilypond/lily/volta-bracket.cc      Mon Oct 10 13:08:13 2005
@@ -20,6 +20,7 @@
 #include "side-position-interface.hh"
 #include "directional-element-interface.hh"
 #include "lookup.hh"
+#include "tuplet-bracket.hh"
 
 /*
   this is too complicated. Yet another version of side-positioning,
@@ -34,33 +35,24 @@
 SCM
 Volta_bracket_interface::print (SCM smob)
 {
-  Grob *me = unsmob_grob (smob);
-  Spanner *orig_span = dynamic_cast<Spanner *> (me->original_);
-
-  bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0] == 
(Spanner *)me);
-
-  bool broken_last_bracket = orig_span && (orig_span->broken_intos_.top () == 
(Spanner *)me);
-
-  bool no_vertical_start = orig_span && !broken_first_bracket;
-  bool no_vertical_end = orig_span && !broken_last_bracket;
+  Spanner *me = unsmob_spanner (smob);
 
-  extract_grob_set (me, "bars", bars);
-  Grob *endbar = bars.size () ? bars.top () : 0;
-  SCM glyph = endbar ? endbar->get_property ("glyph") : SCM_EOL;
+  /*
+    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 ());
+    }
 
-  String str;
-  if (scm_is_string (glyph))
-    str = ly_scm2string (glyph);
-  else
-    str = "|";
+  Spanner *orig_span = dynamic_cast<Spanner *> (me->original_);
+  bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0]
+                                           == (Spanner *)me);
 
-  no_vertical_end
-    |= (str != ":|"
-       && str != "|:"
-       && str != "|."
-       && str != ":|:"
-       && str != ".|");
 
+  
   Output_def *layout = me->get_layout ();
   Real half_space = 0.5;
 
@@ -73,7 +65,8 @@
   if (bound->break_status_dir () == RIGHT)
     {
       Paper_column *pc = bound->get_column ();
-      left = pc->extent (pc, X_AXIS)[RIGHT] - bound->relative_coordinate (pc, 
X_AXIS);
+      left = pc->extent (pc, X_AXIS)[RIGHT]
+       - bound->relative_coordinate (pc, X_AXIS);
     }
   else
     {
@@ -83,19 +76,25 @@
       */
     }
 
-  Real w = dynamic_cast<Spanner *> (me)->spanner_length () - left - half_space;
-  Real h = robust_scm2double (me->get_property ("height"), 1);
-
-  Stencil start, end;
-  if (!no_vertical_start)
-    start = Line_interface::line (me, Offset (0, 0), Offset (0, h));
-
-  if (!no_vertical_end)
-    end = Line_interface::line (me, Offset (w, 0), Offset (w, h));
-
-  Stencil mol = Line_interface::line (me, Offset (0, h), Offset (w, h));
-  mol.add_stencil (start);
-  mol.add_stencil (end);
+  Drul_array<Real> edge_height = robust_scm2interval (me->get_property 
("edge-height"),
+                                                     Interval (1.0, 1.0));
+  Drul_array<Real> flare = robust_scm2interval (me->get_property 
("bracket-flare"),
+                                               Interval (0, 0));
+  Drul_array<Real> shorten = robust_scm2interval (me->get_property 
("shorten-pair"),
+                                                 Interval (0, 0));
+
+  scale_drul (&edge_height, - Real (get_grob_direction (me)));
+
+  Interval empty;
+  Offset start;
+  start[X_AXIS] = me->spanner_length () - left - half_space;
+  
+  /*
+    ugh, Tuplet_bracket should use Horizontal_bracket, not the other way 
around. 
+  */
+  Stencil total
+    = Tuplet_bracket::make_bracket (me, Y_AXIS, start, 
+                                   edge_height, empty, flare, shorten);
 
   if (!orig_span || broken_first_bracket)
     {
@@ -104,12 +103,63 @@
       SCM snum = Text_interface::interpret_markup (layout->self_scm (),
                                                   properties, text);
       Stencil num = *unsmob_stencil (snum);
+      num.align_to (Y_AXIS, UP);
+      num.translate_axis (-0.5, Y_AXIS);
+      total.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length ()
+                        - 1.0, 0);
+    }
+  
+  total.translate_axis (left, X_AXIS);
+  return total.smobbed_copy ();
+}
+
+
+MAKE_SCHEME_CALLBACK(Volta_bracket_interface,after_line_breaking, 1);
+SCM
+Volta_bracket_interface::after_line_breaking (SCM smob)
+{
+  Spanner *me = unsmob_spanner (smob);
+  Spanner *orig_span = dynamic_cast<Spanner *> (me->original_);
+ 
+  bool broken_first_bracket = orig_span && (orig_span->broken_intos_[0] == 
(Spanner *)me);
+
+  bool broken_last_bracket = orig_span && (orig_span->broken_intos_.top () == 
(Spanner *)me);
+
+  bool no_vertical_start = orig_span && !broken_first_bracket;
+  bool no_vertical_end = orig_span && !broken_last_bracket;
+
+  extract_grob_set (me, "bars", bars);
+  Grob *endbar = bars.size () ? bars.top () : 0;
+  SCM glyph = endbar ? endbar->get_property ("glyph") : SCM_EOL;
+
+  String str;
+  if (scm_is_string (glyph))
+    str = ly_scm2string (glyph);
+  else
+    str = "|";
+
+  no_vertical_end
+    |= (str != ":|"
+       && str != "|:"
+       && str != "|."
+       && str != ":|:"
+       && str != ".|");
+
+
+  if (no_vertical_end || no_vertical_start)
+    {
+      Drul_array<Real> edge_height = robust_scm2interval (me->get_property 
("edge-height"),
+                                                         Interval (1.0, 1.0));
+      if (no_vertical_start)
+       edge_height[LEFT] = 0.0;
+
+      if (no_vertical_end)
+       edge_height[RIGHT] = 0.0;
 
-      mol.add_at_edge (X_AXIS, LEFT, num, - num.extent (X_AXIS).length ()
-                      - 1.0, 0);
+      me->set_property ("edge-height", ly_interval2scm (edge_height));
     }
-  mol.translate_axis (left, X_AXIS);
-  return mol.smobbed_copy ();
+  
+  return SCM_UNSPECIFIED;
 }
 
 void
Index: lilypond/scm/define-grob-interfaces.scm
diff -u lilypond/scm/define-grob-interfaces.scm:1.25 
lilypond/scm/define-grob-interfaces.scm:1.26
--- lilypond/scm/define-grob-interfaces.scm:1.25        Sun Oct  9 15:28:35 2005
+++ lilypond/scm/define-grob-interfaces.scm     Mon Oct 10 13:08:13 2005
@@ -50,6 +50,7 @@
  "A bracket indicating a ligature in the original edition"
  '(width thickness height ligature-primitive-callback))
 
+
 (ly:add-interface
  'lyric-syllable-interface
  "a single piece of lyrics"
Index: lilypond/scm/define-grobs.scm
diff -u lilypond/scm/define-grobs.scm:1.243 lilypond/scm/define-grobs.scm:1.244
--- lilypond/scm/define-grobs.scm:1.243 Mon Oct 10 10:40:59 2005
+++ lilypond/scm/define-grobs.scm       Mon Oct 10 13:08:13 2005
@@ -1000,6 +1000,7 @@
        (direction . 1)
        (meta . ((class . Spanner)
                 (interfaces . (ottava-bracket-interface
+                               horizontal-bracket-interface
                                line-interface
                                side-position-interface
                                font-interface
@@ -1683,18 +1684,21 @@
     (VoltaBracket
      . (
        (print-function . ,Volta_bracket_interface::print)
-       (direction . 1)
+       (after-line-breaking-callback . 
,Volta_bracket_interface::after_line_breaking)
+       (direction . ,UP)
        (padding . 1)
        (font-encoding . fetaNumber)
        (Y-offset-callbacks . (,Side_position_interface::aligned_side))
        (thickness . 1.6)  ;;  linethickness
-       (height . 2.0) ;; staffspace;
+       (edge-height . (2.0 . 2.0)) ;; staffspace;
        (minimum-space . 5)
        (font-size . -4)
        (meta . ((class . Spanner)
                 (interfaces . (volta-bracket-interface
+                               horizontal-bracket-interface                    
        
                                line-interface
                                text-interface
+                               bracket-interface
                                side-position-interface
                                font-interface))))))
 


_______________________________________________
Lilypond-cvs mailing list
Lilypond-cvs@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-cvs

Reply via email to