X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flookup.cc;h=c92ca3bd211a99c79c4d11e91b2a631a5a476f20;hb=b7bda3ecd08b19f4b598f40ca8940e183083fd4f;hp=e5fda585958fc02ec82b6b0a08606bb04bc8f259;hpb=64313890b232c731d432e5b096f30bffc3f3756d;p=lilypond.git diff --git a/lily/lookup.cc b/lily/lookup.cc index e5fda58595..c92ca3bd21 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2006 Han-Wen Nienhuys + (c) 1997--2007 Han-Wen Nienhuys Jan Nieuwenhuizen */ @@ -110,6 +110,22 @@ Lookup::dashed_slur (Bezier b, Real thick, Real dash_period, Real dash_fraction) return Stencil (box, at); } +Stencil +Lookup::rotated_box (Real slope, Real width, Real thick, Real blot) +{ + vector pts; + Offset rot (1, slope); + + thick -= 2*blot; + width -= 2*blot; + rot /= sqrt (1 + slope*slope); + pts.push_back (Offset (0, -thick / 2) * rot); + pts.push_back (Offset (width, -thick / 2) * rot); + pts.push_back (Offset (width, thick / 2) * rot); + pts.push_back (Offset (0, thick / 2) * rot); + return Lookup::round_filled_polygon (pts, blot); +} + Stencil Lookup::horizontal_line (Interval w, Real th) { @@ -131,7 +147,7 @@ Lookup::horizontal_line (Interval w, Real th) Stencil Lookup::blank (Box b) { - return Stencil (b, scm_makfrom0str ("")); + return Stencil (b, scm_from_locale_string ("")); } Stencil @@ -227,7 +243,7 @@ Lookup::round_filled_box (Box b, Real blotdiameter) * shrinked polygon). --jr */ Stencil -Lookup::round_filled_polygon (std::vector const &points, +Lookup::round_filled_polygon (vector const &points, Real blotdiameter) { /* TODO: Maybe print a warning if one of the above limitations @@ -256,7 +272,7 @@ Lookup::round_filled_polygon (std::vector const &points, return Line_interface::make_line (blotdiameter, points[0], points[1]); /* shrink polygon in size by 0.5 * blotdiameter */ - std::vector shrunk_points; + vector shrunk_points; shrunk_points.resize (points.size ()); bool ccw = 1; // true, if three adjacent points are counterclockwise ordered for (vsize i = 0; i < points.size (); i++) @@ -451,8 +467,8 @@ Stencil Lookup::accordion (SCM s, Real staff_space, Font_metric *fm) { Stencil m; - std::string sym = ly_scm2string (scm_car (s)); - std::string reg = ly_scm2string (scm_car (scm_cdr (s))); + string sym = ly_scm2string (scm_car (s)); + string reg = ly_scm2string (scm_car (scm_cdr (s))); if (sym == "Discant") { @@ -649,7 +665,7 @@ Stencil Lookup::repeat_slash (Real w, Real s, Real t) { #if 0 /* TODO */ - std::vector points; + vector points; Real blotdiameter = 0.0; Offset p1 (0, 0); @@ -698,17 +714,29 @@ Lookup::triangle (Interval iv, Real thick, Real protude) b[X_AXIS] = Interval (0, iv.length ()); b[Y_AXIS] = Interval (min (0., protude), max (0.0, protude)); - Offset z1 (iv[LEFT], 0); - Offset z2 (iv[RIGHT], 0); - Offset z3 ((z1 + z2)[X_AXIS] / 2, protude); + vector points; + points.push_back (Offset (iv[LEFT], 0)); + points.push_back (Offset (iv[RIGHT], 0)); + points.push_back (Offset (iv.center (), protude)); - /* - TODO: move Triangle to Line_interface ? - */ - Stencil tri = Line_interface::make_line (thick, z1, z2); - tri.add_stencil (Line_interface::make_line (thick, z2, z3)); - tri.add_stencil (Line_interface::make_line (thick, z3, z1)); + return points_to_line_stencil (thick, points); - return tri; } + + +Stencil +Lookup::points_to_line_stencil (Real thick, vector const &points) +{ + Stencil ret; + for (vsize i = 1; i < points.size (); i++) + { + if (points[i-1].is_sane () && points[i].is_sane ()) + { + Stencil line + = Line_interface::make_line (thick, points[i-1], points[i]); + ret.add_stencil (line); + } + } + return ret; +}