X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstencil-scheme.cc;h=102fe5e6c90389e028033d26e84e2c2784ff100a;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=2e407b629ce17b73760121fb1cf6a1159185806a;hpb=fa4cd867ea93884cc094814dda7c04b94e71ccf4;p=lilypond.git diff --git a/lily/stencil-scheme.cc b/lily/stencil-scheme.cc index 2e407b629c..102fe5e6c9 100644 --- a/lily/stencil-scheme.cc +++ b/lily/stencil-scheme.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2007 Han-Wen Nienhuys + (c) 1997--2008 Han-Wen Nienhuys */ @@ -288,7 +288,8 @@ LY_DEFINE (ly_bracket, "ly:bracket", LY_DEFINE (ly_stencil_rotate, "ly:stencil-rotate", 4, 0, 0, (SCM stil, SCM angle, SCM x, SCM y), "Return a stencil @var{stil} rotated @var{angle} degrees around" - " point (@var{x}, @var{y}).") + " the relative offset (@var{x}, @var{y}). E.g. an offset of" + " (-1, 1) will rotate the stencil around the left upper corner.") { Stencil *s = unsmob_stencil (stil); LY_ASSERT_SMOB (Stencil, stil, 1); @@ -305,6 +306,26 @@ LY_DEFINE (ly_stencil_rotate, "ly:stencil-rotate", return new_s; } +LY_DEFINE (ly_stencil_rotate_absolute, "ly:stencil-rotate-absolute", + 4, 0, 0, (SCM stil, SCM angle, SCM x, SCM y), + "Return a stencil @var{stil} rotated @var{angle} degrees around" + " point (@var{x}, @var{y}), given in absolute coordinates.") +{ + Stencil *s = unsmob_stencil (stil); + LY_ASSERT_SMOB (Stencil, stil, 1); + LY_ASSERT_TYPE (scm_is_number, angle, 2); + LY_ASSERT_TYPE (scm_is_number, x, 3); + LY_ASSERT_TYPE (scm_is_number, y, 4); + Real a = scm_to_double (angle); + Real x_off = scm_to_double (x); + Real y_off = scm_to_double (y); + + SCM new_s = s->smobbed_copy (); + Stencil *q = unsmob_stencil (new_s); + q->rotate_degrees_absolute (a, Offset (x_off, y_off)); + return new_s; +} + LY_DEFINE (ly_round_filled_box, "ly:round-filled-box", 3, 0, 0, (SCM xext, SCM yext, SCM blot), @@ -320,11 +341,11 @@ LY_DEFINE (ly_round_filled_box, "ly:round-filled-box", } LY_DEFINE (ly_round_filled_polygon, "ly:round-filled-polygon", - 2, 0, 0, - (SCM points, SCM blot), - "Make a @code{Stencil} object that prints a black polygon with " - "corners at the points defined by @var{points} (list of coordinate " - "pairs) and roundness @var{blot}.") + 2, 0, 0, + (SCM points, SCM blot), + "Make a @code{Stencil} object that prints a black polygon with" + " corners at the points defined by @var{points} (list of coordinate" + " pairs) and roundness @var{blot}.") { SCM_ASSERT_TYPE (scm_ilength (points) > 0, points, SCM_ARG1, __FUNCTION__, "list of coordinate pairs"); LY_ASSERT_TYPE (scm_is_number, blot, 2);