static void test_edgeclipper() {
    SkPoint pts[] = {
        { -8.38822452e+21f, -7.69721471e+19f },
        { 1.57645875e+23f, 1.44634003e+21f },
        { 1.61519691e+23f, 1.48208059e+21f },
        { 3.13963584e+23f, 2.88057438e+21f }
    };
    SkRect clip = { 0, 0, 300, 200 };
    
    SkEdgeClipper clipper;
    clipper.clipCubic(pts, clip);
}
static void test_edgeclipper() {
    SkEdgeClipper clipper;

    const SkPoint pts[] = {
        { SkFloatToScalar(3.0995476e+010f),  SkFloatToScalar(42.929779f) },
        { SkFloatToScalar(-3.0995163e+010f), SkFloatToScalar(51.050385f) },
        { SkFloatToScalar(-3.0995157e+010f), SkFloatToScalar(51.050392f) },
        { SkFloatToScalar(-3.0995134e+010f), SkFloatToScalar(51.050400f) },
    };

    const SkRect clip = { 0, 0, SkIntToScalar(300), SkIntToScalar(200) };

    // this should not assert, even though our choppers do a poor numerical
    // job when computing their t values.
    // http://code.google.com/p/skia/issues/detail?id=444
    clipper.clipCubic(pts, clip);
}
Example #3
0
static void quad_clipper(const SkPoint src[], const SkRect& clip,
                         SkCanvas* canvas, const SkPaint& p0, const SkPaint& p1) {
    drawQuad(canvas, src, p1);
    
    SkEdgeClipper clipper;
    if (clipper.clipQuad(src, clip)) {
        SkPoint pts[4];
        SkPath::Verb verb;
        while ((verb = clipper.next(pts)) != SkPath::kDone_Verb) {
            switch (verb) {
                case SkPath::kLine_Verb:
                    check_clipper(2, pts, clip);
                    canvas->drawPoints(SkCanvas::kLines_PointMode, 2, pts, p0);
                    break;
                case SkPath::kQuad_Verb:
                    check_clipper(3, pts, clip);
                    drawQuad(canvas, pts, p0);
                    break;
                default:
                    SkASSERT(!"unexpected verb");
            }
        }
    }
}