X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstencil-integral.cc;h=91f1333867c4d03652d264b57a481b2d67884458;hb=d2762a4f1add2bb04d6fc34d3c7ae03eeb7d500f;hp=58b2ff46ca55277930db2657c1d920a67485de77;hpb=74e4d219b24ec6d6f28d663c0285418e6c8e122e;p=lilypond.git diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc index 58b2ff46ca..91f1333867 100644 --- a/lily/stencil-integral.cc +++ b/lily/stencil-integral.cc @@ -289,7 +289,7 @@ make_partial_ellipse_boxes (vector &boxes, vector > &bui int quantization = max (1, (int) (((x_rad * trans.xx) + (y_rad * trans.yy)) * M_PI / QUANTIZATION_UNIT)); do { - for (vsize i = 0; i < 1 + quantization; i++) + for (vsize i = 0; i < 1 + (vsize) quantization; i++) { Real ang = linear_map (start, end, 0, quantization, i); complex coord = polar (1.0, ang); @@ -452,7 +452,7 @@ make_draw_bezier_boxes (vector &boxes, vector > &buildin Offset first = get_point_in_y_direction (curve.control_[0], perpendicular_slope (curve.slope_at_point (0.0)), th / 2, d); pango_matrix_transform_point (&trans, &first[X_AXIS], &first[Y_AXIS]); points[d].push_back (first); - for (vsize i = 1; i < quantization; i++) + for (vsize i = 1; i < (vsize) quantization; i++) { Real pt = (i * 1.0) / quantization; Offset inter = get_point_in_y_direction (curve.curve_point (pt), perpendicular_slope (curve.slope_at_point (pt)), th / 2, d); @@ -692,7 +692,7 @@ void make_named_glyph_boxes (vector &boxes, vector > &buildings, PangoMatrix trans, SCM expr) { SCM fm_scm = scm_car (expr); - Font_metric *fm = unsmob_metrics (fm_scm); + Font_metric *fm = Font_metric::unsmob (fm_scm); expr = scm_cdr (expr); SCM glyph = scm_car (expr); string glyph_s = ly_scm2string (glyph); @@ -731,7 +731,7 @@ void make_glyph_string_boxes (vector &boxes, vector > &buildings, PangoMatrix trans, SCM expr) { SCM fm_scm = scm_car (expr); - Font_metric *fm = unsmob_metrics (fm_scm); + Font_metric *fm = Font_metric::unsmob (fm_scm); expr = scm_cdr (expr); expr = scm_cdr (expr); // font-name expr = scm_cdr (expr); // size @@ -947,11 +947,14 @@ stencil_traverser (PangoMatrix trans, SCM expr) return stencil_traverser (trans, scm_caddr (expr)); } else if (scm_car (expr) == ly_symbol2scm ("delay-stencil-evaluation")) - return stencil_traverser (trans, scm_force (scm_cadr (expr))); + // should not use the place-holder text, but no need for the warning below + return vector (); else if (scm_car (expr) == ly_symbol2scm ("grob-cause")) return stencil_traverser (trans, scm_caddr (expr)); else if (scm_car (expr) == ly_symbol2scm ("color")) return stencil_traverser (trans, scm_caddr (expr)); + else if (scm_car (expr) == ly_symbol2scm ("transparent-stencil")) + return stencil_traverser (trans, scm_cadr (expr)); else if (scm_car (expr) == ly_symbol2scm ("id")) return stencil_traverser (trans, scm_caddr (expr)); else @@ -981,16 +984,6 @@ Grob::maybe_pure_internal_simple_skylines_from_extents (Grob *me, Axis a, bool p ? Interval (-infinity_f, infinity_f) : me->maybe_pure_extent (me, Y_AXIS, pure, beg, end); - // In horizontal spacing, there are grobs like SystemStartBracket - // that take up no vertical spcae. So, if the y extent is empty, - // we use the entire Y extent ot make the X a sort of horizontal wall. - // Ditto for vertical spacing and grobs like BassFigureAlginmentPositioning. - if (a == Y_AXIS && yex.is_empty ()) - yex.set_full (); - - if (a == X_AXIS && xex.is_empty ()) - xex.set_full (); - if (xex.is_empty () || yex.is_empty ()) return Skyline_pair ().smobbed_copy (); @@ -1002,17 +995,19 @@ MAKE_SCHEME_CALLBACK (Grob, pure_simple_vertical_skylines_from_extents, 3); SCM Grob::pure_simple_vertical_skylines_from_extents (SCM smob, SCM begscm, SCM endscm) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); int beg = robust_scm2int (begscm, 0); int end = robust_scm2int (endscm, INT_MAX); - return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, true, beg, end, dynamic_cast (me), false); + // We cannot measure the widths before line breaking, + // so we assume that the width is infinite: pass ignore_x=true + return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, true, beg, end, true, false); } MAKE_SCHEME_CALLBACK (Grob, simple_vertical_skylines_from_extents, 1); SCM Grob::simple_vertical_skylines_from_extents (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); return maybe_pure_internal_simple_skylines_from_extents (me, X_AXIS, false, 0, 0, false, false); } @@ -1020,9 +1015,12 @@ MAKE_SCHEME_CALLBACK (Grob, pure_simple_horizontal_skylines_from_extents, 3); SCM Grob::pure_simple_horizontal_skylines_from_extents (SCM smob, SCM begscm, SCM endscm) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); int beg = robust_scm2int (begscm, 0); int end = robust_scm2int (endscm, INT_MAX); + // If the grob is cross staff, we cannot measure its Y-extent before + // wayyyy downstream (after spacing of axis groups is done). + // Thus, we assume that the Y extent is infinite for cross staff grobs. return maybe_pure_internal_simple_skylines_from_extents (me, Y_AXIS, true, beg, end, false, to_boolean (me->get_property ("cross-staff"))); } @@ -1030,14 +1028,15 @@ MAKE_SCHEME_CALLBACK (Grob, simple_horizontal_skylines_from_extents, 1); SCM Grob::simple_horizontal_skylines_from_extents (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); + // See comment in function above. return maybe_pure_internal_simple_skylines_from_extents (me, Y_AXIS, false, 0, 0, false, to_boolean (me->get_property ("cross-staff"))); } SCM Stencil::skylines_from_stencil (SCM sten, Real pad, Axis a) { - Stencil *s = unsmob_stencil (sten); + Stencil *s = Stencil::unsmob (sten); if (!s) return Skyline_pair ().smobbed_copy (); @@ -1059,7 +1058,6 @@ Stencil::skylines_from_stencil (SCM sten, Real pad, Axis a) for (DOWN_and_UP (d)) out[d] = out[d].padded (pad); - out.deholify (); return out.smobbed_copy (); } @@ -1067,7 +1065,7 @@ MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_stencil, 1); SCM Grob::vertical_skylines_from_stencil (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); Real pad = robust_scm2double (me->get_property ("skyline-horizontal-padding"), 0.0); SCM out = Stencil::skylines_from_stencil (me->get_property ("stencil"), pad, X_AXIS); @@ -1079,7 +1077,7 @@ MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_stencil, 1); SCM Grob::horizontal_skylines_from_stencil (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); Real pad = robust_scm2double (me->get_property ("skyline-vertical-padding"), 0.0); SCM out = Stencil::skylines_from_stencil (me->get_property ("stencil"), pad, Y_AXIS); @@ -1141,7 +1139,7 @@ MAKE_SCHEME_CALLBACK (Grob, vertical_skylines_from_element_stencils, 1); SCM Grob::vertical_skylines_from_element_stencils (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); return internal_skylines_from_element_stencils (me, X_AXIS, false, 0, INT_MAX); } @@ -1149,7 +1147,7 @@ MAKE_SCHEME_CALLBACK (Grob, horizontal_skylines_from_element_stencils, 1); SCM Grob::horizontal_skylines_from_element_stencils (SCM smob) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); return internal_skylines_from_element_stencils (me, Y_AXIS, false, 0, INT_MAX); } @@ -1157,7 +1155,7 @@ MAKE_SCHEME_CALLBACK (Grob, pure_vertical_skylines_from_element_stencils, 3); SCM Grob::pure_vertical_skylines_from_element_stencils (SCM smob, SCM beg_scm, SCM end_scm) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); int beg = robust_scm2int (beg_scm, 0); int end = robust_scm2int (end_scm, 0); return internal_skylines_from_element_stencils (me, X_AXIS, true, beg, end); @@ -1167,7 +1165,7 @@ MAKE_SCHEME_CALLBACK (Grob, pure_horizontal_skylines_from_element_stencils, 3); SCM Grob::pure_horizontal_skylines_from_element_stencils (SCM smob, SCM beg_scm, SCM end_scm) { - Grob *me = unsmob_grob (smob); + Grob *me = Grob::unsmob (smob); int beg = robust_scm2int (beg_scm, 0); int end = robust_scm2int (end_scm, 0); return internal_skylines_from_element_stencils (me, Y_AXIS, true, beg, end);