X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fballoon.cc;h=5409bd52d556a1cf6ba6864c401293cbd94a9a80;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=2a2594ee92f7be678644dcc5262d6b7afe47aad8;hpb=58bcc84c9480dae1b21bc24d8396b91fe19e0131;p=lilypond.git diff --git a/lily/balloon.cc b/lily/balloon.cc index 2a2594ee92..5409bd52d5 100644 --- a/lily/balloon.cc +++ b/lily/balloon.cc @@ -3,10 +3,10 @@ source file of the GNU LilyPond music typesetter - (c) 2004--2005 Han-Wen Nienhuys + (c) 2004--2008 Han-Wen Nienhuys */ -#include "text-item.hh" +#include "text-interface.hh" #include "grob.hh" #include "line-interface.hh" #include "lookup.hh" @@ -19,7 +19,7 @@ class Balloon_interface { public: DECLARE_SCHEME_CALLBACK (print, (SCM)); - static bool has_interface (Grob *); + DECLARE_GROB_INTERFACE (); }; MAKE_SCHEME_CALLBACK (Balloon_interface, print, 1); @@ -28,47 +28,33 @@ Balloon_interface::print (SCM smob) { Grob *me = unsmob_grob (smob); - SCM cb = me->get_property ("balloon-original-callback"); - SCM stil = SCM_EOL; + Grob *p = me->get_parent (X_AXIS); + + Offset off (me->relative_coordinate (p, X_AXIS), + me->relative_coordinate (p, Y_AXIS)); - if (ly_c_procedure_p (cb)) - stil = scm_call_1 (cb, smob); + Box b (p->extent (p, X_AXIS), + p->extent (p, Y_AXIS)); - if (!unsmob_stencil (stil)) - return stil; - - SCM scm_off = me->get_property ("balloon-text-offset"); - - if (!is_number_pair (scm_off)) - return stil; - - Offset off = ly_scm2offset (scm_off); - Stencil *s = unsmob_stencil (stil); - Box orig_extent = s->extent_box (); - Box box_extent = orig_extent; - - Real w = robust_scm2double (me->get_property ("balloon-padding"), .1); - box_extent.widen (w, w); + Real padding = robust_scm2double (me->get_property ("padding"), .1); + b.widen (padding, padding); // FIXME - Stencil fr = Lookup::frame (box_extent, 0.1, 0.05); - - fr.add_stencil (*s); + Stencil fr = Lookup::frame (b, 0.1, 0.05); - SCM bt = me->get_property ("balloon-text"); + SCM bt = me->get_property ("text"); SCM chain = Font_interface::text_font_alist_chain (me); - chain = scm_cons (me->get_property ("balloon-text-props"), chain); - SCM text = Text_interface::interpret_markup (me->get_layout ()->self_scm (), - chain, bt); + SCM stencil = Text_interface::interpret_markup (me->layout ()->self_scm (), + chain, bt); - Stencil *text_stil = unsmob_stencil (text); + Stencil *text_stil = unsmob_stencil (stencil); Offset z1; for (int i = X_AXIS; i < NO_AXES; i++) { Axis a ((Axis)i); - z1[a] = box_extent [a].linear_combination (sign (off[a])); + z1[a] = b[a].linear_combination (sign (off[a])); text_stil->align_to (a, -sign (off[a])); } @@ -79,11 +65,16 @@ Balloon_interface::print (SCM smob) text_stil->translate (z2); fr.add_stencil (*text_stil); - fr = Stencil (orig_extent, fr.expr ()); + fr.translate (-off); return fr.smobbed_copy (); } -ADD_INTERFACE (Balloon_interface, "text-balloon-interface", - "A collection of routines to put text balloons around an object.", - "balloon-padding balloon-text-props balloon-text-offset balloon-text balloon-original-callback"); +ADD_INTERFACE (Balloon_interface, + "A collection of routines to put text balloons around an" + " object.", + + /* properties */ + "padding " + "text " + );