X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fballoon.cc;h=d8519f6e39345bfd45f8a08dab5e7c0597534bd1;hb=72bc777a01c0437d766bf50c3bb3913a8f3d4bdb;hp=1dfab523a8bc54cc77dfe60a69b049344e6627cb;hpb=f86f00c1a8de0f034ba48506de2801c074bd5422;p=lilypond.git diff --git a/lily/balloon.cc b/lily/balloon.cc index 1dfab523a8..d8519f6e39 100644 --- a/lily/balloon.cc +++ b/lily/balloon.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2004--2011 Han-Wen Nienhuys + Copyright (C) 2004--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,7 +33,6 @@ class Balloon_interface public: DECLARE_SCHEME_CALLBACK (print, (SCM)); DECLARE_SCHEME_CALLBACK (print_spanner, (SCM)); - DECLARE_GROB_INTERFACE (); static SCM internal_balloon_print (Grob *me, Grob *p, Offset off); }; @@ -42,7 +41,7 @@ MAKE_SCHEME_CALLBACK (Balloon_interface, print, 1); SCM Balloon_interface::print (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = unsmob (smob); if (Item *item = dynamic_cast (me)) if (!Item::break_visible (item)) @@ -51,53 +50,45 @@ Balloon_interface::print (SCM smob) Grob *p = me->get_parent (X_AXIS); Offset off (me->relative_coordinate (p, X_AXIS), - me->relative_coordinate (p, Y_AXIS)); + me->relative_coordinate (p, Y_AXIS)); return internal_balloon_print (me, p, off); } -// ugh...code dup...hopefully can be consolidated w/ above one day MAKE_SCHEME_CALLBACK (Balloon_interface, print_spanner, 1); SCM Balloon_interface::print_spanner (SCM smob) { - Spanner *me = unsmob_spanner (smob); - Grob *orig = me->original (); + Spanner *me = unsmob (smob); + Spanner *orig = dynamic_cast (me->original ()); if (orig) { - // TODO : consolidate code dup from System::get_footnote_grobs_in_range - int pos = orig->spanned_rank_interval ()[LEFT]; - Real spanner_placement = min (1.0, - max (robust_scm2double (me->get_property ("spanner-placement"), -1.0), - -1.0)); + Direction spanner_placement = robust_scm2dir (me->get_property ("spanner-placement"), LEFT); - spanner_placement = (spanner_placement + 1.0) / 2.0; - int rpos = orig->spanned_rank_interval ()[RIGHT]; - pos = (int)((rpos - pos) * spanner_placement + pos + 0.5); + Spanner *wanted = (spanner_placement != RIGHT) + ? orig->broken_intos_[0] + : orig->broken_intos_.back (); - if (pos < me->spanned_rank_interval () [LEFT]) - return SCM_EOL; - if (pos >= me->spanned_rank_interval () [RIGHT] && (me->spanned_rank_interval () [RIGHT] != orig->spanned_rank_interval () [RIGHT])) + if (me != wanted) return SCM_EOL; } - Spanner *p = dynamic_cast (me->get_parent (Y_AXIS)); if (!p) return SCM_EOL; Offset off (me->relative_coordinate (me->get_bound (LEFT), X_AXIS), - me->relative_coordinate (p, Y_AXIS)); + me->relative_coordinate (p, Y_AXIS)); return internal_balloon_print (me, p, off); } SCM Balloon_interface::internal_balloon_print (Grob *me, Grob *p, Offset off) { - Box b (p->extent (p, X_AXIS), - p->extent (p, Y_AXIS)); + Box b (robust_relative_extent (p, p, X_AXIS), + robust_relative_extent (p, p, Y_AXIS)); Real padding = robust_scm2double (me->get_property ("padding"), .1); b.widen (padding, padding); @@ -108,13 +99,12 @@ Balloon_interface::internal_balloon_print (Grob *me, Grob *p, Offset off) SCM bt = me->get_property ("text"); SCM chain = Font_interface::text_font_alist_chain (me); - SCM stencil = Text_interface::interpret_markup (me->layout ()->self_scm (), - chain, bt); - - Stencil *text_stil = unsmob_stencil (stencil); + chain, bt); + Stencil *text_stil = unsmob (stencil); Offset z1; + for (int i = X_AXIS; i < NO_AXES; i++) { Axis a ((Axis)i); @@ -135,14 +125,14 @@ Balloon_interface::internal_balloon_print (Grob *me, Grob *p, Offset off) } ADD_INTERFACE (Balloon_interface, - "A collection of routines to put text balloons around an" - " object.", - - /* properties */ - "annotation-balloon " - "annotation-line " - "padding " - "spanner-placement " - "text " - ); + "A collection of routines to put text balloons around an" + " object.", + + /* properties */ + "annotation-balloon " + "annotation-line " + "padding " + "spanner-placement " + "text " + );