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