X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstencil-scheme.cc;h=95c4b07795787d53a562a6d3e9829d5cf582d95b;hb=459216bffe7aa64cd1e9f31f1fda28f90f6e9c1c;hp=cfec55292ad2453535673a8f4dd9c1af046c33c4;hpb=4e4a3b4106cb4982f0c06ca26bad2f2641c0382e;p=lilypond.git diff --git a/lily/stencil-scheme.cc b/lily/stencil-scheme.cc index cfec55292a..95c4b07795 100644 --- a/lily/stencil-scheme.cc +++ b/lily/stencil-scheme.cc @@ -26,6 +26,7 @@ LY_DEFINE (ly_translate_stencil_axis, "ly:stencil-translate-axis", SCM_ASSERT_TYPE (scm_is_number (amount), amount, SCM_ARG2, __FUNCTION__, "number"); Real real_amount = scm_to_double (amount); + #if 0 SCM_ASSERT_TYPE (!isinf (real_amount) && !isnan (real_amount), amount, SCM_ARG2, __FUNCTION__, "finite number"); @@ -191,19 +192,26 @@ LY_DEFINE (ly_stencil_add, "ly:stencil-add", #define FUNC_NAME __FUNCTION__ SCM_VALIDATE_REST_ARGUMENT (args); - Stencil result; - + SCM expr = SCM_EOL; + SCM *tail = &expr; + Box extent; + extent.set_empty (); + while (!SCM_NULLP (args)) { Stencil *s = unsmob_stencil (scm_car (args)); if (!s) SCM_ASSERT_TYPE (s, scm_car (args), SCM_ARGn, __FUNCTION__, "Stencil"); - result.add_stencil (*s); + + extent.unite (s->extent_box ()); + *tail = scm_cons (s->expr (), SCM_EOL); + tail = SCM_CDRLOC (*tail); args = scm_cdr (args); } - return result.smobbed_copy (); + expr = scm_cons (ly_symbol2scm ("combine-stencil"), expr); + return Stencil (extent, expr).smobbed_copy (); } LY_DEFINE (ly_make_stencil, "ly:make-stencil", @@ -250,6 +258,20 @@ LY_DEFINE (ly_stencil_fonts, "ly:stencil-fonts", return find_expression_fonts (stil->expr ()); } + +LY_DEFINE (ly_stencil_in_color, "ly:stencil-in-color", + 4, 0, 0, (SCM stc, SCM r, SCM g, SCM b), + "Put @var{stc} in a different color.") +{ + Stencil *stil = unsmob_stencil (stc); + SCM_ASSERT_TYPE (stil, stc, SCM_ARG1, __FUNCTION__, "Stencil"); + return Stencil (stil->extent_box (), + scm_list_3 (ly_symbol2scm ("color"), + scm_list_3 (r, g, b), + stil->expr ())).smobbed_copy (); +} + + struct Stencil_interpret_arguments { SCM func;