X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstencil-scheme.cc;h=ccf7e37ebd54122ecf687a2af9ef53209a0c2c27;hb=d393626a5a05ae79713f94714cd203dc8ba2dd14;hp=c920f639a095b2a49fe89e6f83030ce8205b8882;hpb=5547ff00446ba0ac2bdbd1fe3205c2fb8411bb2f;p=lilypond.git diff --git a/lily/stencil-scheme.cc b/lily/stencil-scheme.cc index c920f639a0..ccf7e37ebd 100644 --- a/lily/stencil-scheme.cc +++ b/lily/stencil-scheme.cc @@ -13,8 +13,7 @@ TODO: naming add/combine. */ /* - UMGH. junkme! - + UGH. Junk all mutators. */ LY_DEFINE (ly_stencil_set_extent_x, "ly:stencil-set-extent!", 3, 0, 0, (SCM stil, SCM axis, SCM np), @@ -29,9 +28,9 @@ LY_DEFINE (ly_stencil_set_extent_x, "ly:stencil-set-extent!", "number pair"); Interval iv = ly_scm2interval (np); - s->dim_[Axis (gh_scm2int (axis))] = iv; + s->dim_[Axis (scm_to_int (axis))] = iv; - return SCM_UNDEFINED; + return SCM_UNSPECIFIED; } LY_DEFINE (ly_translate_stencil_axis, "ly:stencil-translate-axis", @@ -40,12 +39,12 @@ LY_DEFINE (ly_translate_stencil_axis, "ly:stencil-translate-axis", { Stencil *s = unsmob_stencil (stil); SCM_ASSERT_TYPE (s, stil, SCM_ARG1, __FUNCTION__, "stencil"); - SCM_ASSERT_TYPE (gh_number_p (amount), amount, SCM_ARG2, __FUNCTION__, "number pair"); + SCM_ASSERT_TYPE (scm_is_number (amount), amount, SCM_ARG2, __FUNCTION__, "number pair"); SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis"); SCM new_s = s->smobbed_copy (); Stencil *q = unsmob_stencil (new_s); - q->translate_axis (gh_scm2double (amount), Axis (gh_scm2int (axis))); + q->translate_axis (scm_to_double (amount), Axis (scm_to_int (axis))); return new_s; } @@ -66,13 +65,13 @@ LY_DEFINE (ly_translate_stencil, "ly:stencil-translate", return new_s; } -LY_DEFINE (ly_stencil_get_expr, "ly:stencil-get-expr", +LY_DEFINE (ly_stencil_expr, "ly:stencil-expr", 1, 0, 0, (SCM stil), "Return the expression of @var{stil}.") { Stencil *s = unsmob_stencil (stil); SCM_ASSERT_TYPE (s, stil, SCM_ARG1, __FUNCTION__, "stencil"); - return s->get_expr (); + return s->expr (); } LY_DEFINE (ly_stencil_get_extent, "ly:stencil-extent", @@ -84,9 +83,23 @@ LY_DEFINE (ly_stencil_get_extent, "ly:stencil-extent", SCM_ASSERT_TYPE (s, stil, SCM_ARG1, __FUNCTION__, "stencil"); SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis"); - return ly_interval2scm (s->extent (Axis (gh_scm2int (axis)))); + return ly_interval2scm (s->extent (Axis (scm_to_int (axis)))); } + +LY_DEFINE (ly_stencil_origin, "ly:stencil-origin", + 2, 0, 0, (SCM stil, SCM axis), + "Return a pair of numbers signifying the origin @var{stil} in " + "@var{axis} direction (0 or 1 for x and y axis respectively).") +{ + Stencil *s = unsmob_stencil (stil); + SCM_ASSERT_TYPE (s, stil, SCM_ARG1, __FUNCTION__, "stencil"); + SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis"); + + return scm_from_double (s->origin()[Axis (scm_to_int (axis))]); +} + + LY_DEFINE (ly_stencil_moved_to_edge, "ly:stencil-moved-to-edge", 4, 2, 0, (SCM first, SCM axis, SCM direction, SCM second, SCM padding, SCM minimum), @@ -106,29 +119,29 @@ LY_DEFINE (ly_stencil_moved_to_edge, "ly:stencil-moved-to-edge", Real p = 0.0; if (padding != SCM_UNDEFINED) { - SCM_ASSERT_TYPE (gh_number_p (padding), padding, SCM_ARG5, __FUNCTION__, "number"); - p = gh_scm2double (padding); + SCM_ASSERT_TYPE (scm_is_number (padding), padding, SCM_ARG5, __FUNCTION__, "number"); + p = scm_to_double (padding); } Real m = 0.0; if (minimum != SCM_UNDEFINED) { - SCM_ASSERT_TYPE (gh_number_p (minimum), minimum, SCM_ARG6, __FUNCTION__, "number"); - m = gh_scm2double (minimum); + SCM_ASSERT_TYPE (scm_is_number (minimum), minimum, SCM_ARG6, __FUNCTION__, "number"); + m = scm_to_double (minimum); } if (s1) first_stencil = *s1; if (s2) - return first_stencil.moved_to_edge (Axis (gh_scm2int (axis)), - Direction (gh_scm2int (direction)), + return first_stencil.moved_to_edge (Axis (scm_to_int (axis)), + Direction (scm_to_int (direction)), *s2, p, m).smobbed_copy (); else return Stencil().smobbed_copy (); } - + LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge", 4, 2, 0, (SCM first, SCM axis, SCM direction, SCM second, @@ -139,33 +152,39 @@ LY_DEFINE (ly_stencil_combine_at_edge, "ly:stencil-combine-at-edge", "@var{direction} can be -1 (left or down) or 1 (right or up). " "The stencils are juxtaposed with @var{padding} as extra space. " "If this puts the reference points closer than @var{minimum}, " - "they are moved by the latter amount.") + "they are moved by the latter amount." + "@var{first} and @var{second} may also be '() or #f.") { Stencil *s1 = unsmob_stencil (first); Stencil *s2 = unsmob_stencil (second); Stencil result; - SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis"); - SCM_ASSERT_TYPE (is_direction (direction), direction, SCM_ARG4, __FUNCTION__, "dir"); + SCM_ASSERT_TYPE (s1 || first == SCM_BOOL_F || first == SCM_EOL, + first, SCM_ARG1, __FUNCTION__, "Stencil, #f or ()"); + SCM_ASSERT_TYPE (s2 || second == SCM_BOOL_F || second == SCM_EOL, + second, SCM_ARG4, __FUNCTION__, "Stencil, #f or ()"); + SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis"); + SCM_ASSERT_TYPE (is_direction (direction), direction, SCM_ARG3, __FUNCTION__, "dir"); Real p = 0.0; if (padding != SCM_UNDEFINED) { - SCM_ASSERT_TYPE (gh_number_p (padding), padding, SCM_ARG5, __FUNCTION__, "number"); - p = gh_scm2double (padding); + SCM_ASSERT_TYPE (scm_is_number (padding), padding, SCM_ARG5, __FUNCTION__, "number"); + p = scm_to_double (padding); } Real m = 0.0; if (minimum != SCM_UNDEFINED) { - SCM_ASSERT_TYPE (gh_number_p (minimum), minimum, SCM_ARG6, __FUNCTION__, "number"); - m = gh_scm2double (minimum); + SCM_ASSERT_TYPE (scm_is_number (minimum), minimum, SCM_ARG6, __FUNCTION__, "number"); + m = scm_to_double (minimum); } if (s1) result = *s1; + if (s2) - result.add_at_edge (Axis (gh_scm2int (axis)), - Direction (gh_scm2int (direction)), *s2, p, m); + result.add_at_edge (Axis (scm_to_int (axis)), + Direction (scm_to_int (direction)), *s2, p, m); return result.smobbed_copy (); } @@ -181,12 +200,12 @@ LY_DEFINE (ly_stencil_add , "ly:stencil-add", while (!SCM_NULLP (args)) { - Stencil *s = unsmob_stencil (gh_car (args)); + Stencil *s = unsmob_stencil (scm_car (args)); if (!s) - SCM_ASSERT_TYPE (s, gh_car (args), SCM_ARGn, __FUNCTION__, "Stencil"); + SCM_ASSERT_TYPE (s, scm_car (args), SCM_ARGn, __FUNCTION__, "Stencil"); result.add_stencil (*s); - args = gh_cdr (args); + args = scm_cdr (args); } return result.smobbed_copy (); @@ -210,27 +229,8 @@ LY_DEFINE (ly_make_stencil, "ly:make-stencil", return s.smobbed_copy (); } -SCM -fontify_atom (Font_metric const *met, SCM f) -{ - if (f == SCM_EOL) - return f; - else - return scm_list_n (ly_symbol2scm ("fontify"), - met->self_scm (), f, SCM_UNDEFINED); -} - -LY_DEFINE (ly_fontify_atom,"ly:fontify-atom", - 2, 0, 0, (SCM met, SCM f), - "Add a font selection command for the font metric @var{met} " - "to @var{f}.") -{ - SCM_ASSERT_TYPE (unsmob_metrics (met), met, SCM_ARG1, __FUNCTION__, "font metric"); - - return fontify_atom (unsmob_metrics (met), f); -} -LY_DEFINE (ly_align_to_x, "ly:stencil-align-to!", +LY_DEFINE (ly_stencil_align_to_x, "ly:stencil-align-to!", 3, 0, 0, (SCM stil, SCM axis, SCM dir), "Align @var{stil} using its own extents. " "@var{dir} is a number -1, 1 are left and right respectively. " @@ -238,9 +238,9 @@ LY_DEFINE (ly_align_to_x, "ly:stencil-align-to!", { SCM_ASSERT_TYPE (unsmob_stencil (stil), stil, SCM_ARG1, __FUNCTION__, "stencil"); SCM_ASSERT_TYPE (is_axis (axis), axis, SCM_ARG2, __FUNCTION__, "axis"); - SCM_ASSERT_TYPE (gh_number_p (dir), dir, SCM_ARG3, __FUNCTION__, "number"); + SCM_ASSERT_TYPE (scm_is_number (dir), dir, SCM_ARG3, __FUNCTION__, "number"); - unsmob_stencil (stil)->align_to ((Axis)gh_scm2int (axis), - gh_scm2double (dir)); - return SCM_UNDEFINED; + unsmob_stencil (stil)->align_to ((Axis)scm_to_int (axis), + scm_to_double (dir)); + return stil; }