Ejemplo n.º 1
0
    virtual void onDraw(SkCanvas* canvas) {
        SkScalar x = SkIntToScalar(100);
        SkScalar y = SkIntToScalar(88);

        SkPaint paint;
        paint.setAntiAlias(true);
        paint.setTextSize(SkIntToScalar(100));
        paint.setStrokeWidth(SkIntToScalar(5));

        SkTypeface* face = SkTypeface::CreateFromName("Papyrus", SkTypeface::kNormal);
        SkSafeUnref(paint.setTypeface(face));
        show_bold(canvas, "Hello", 5, x, y, paint);

        face = SkTypeface::CreateFromName("Hiragino Maru Gothic Pro", SkTypeface::kNormal);
        SkSafeUnref(paint.setTypeface(face));
        const unsigned char hyphen[] = { 0xE3, 0x83, 0xBC };
        show_bold(canvas, hyphen, SK_ARRAY_COUNT(hyphen), x + SkIntToScalar(300), y, paint);

        paint.setStyle(SkPaint::kStrokeAndFill_Style);

        SkPath path;
        path.setFillType(SkPath::kWinding_FillType);
        path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
        path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction);
        canvas->drawPath(path, paint);

        SkPath path2;
        path2.setFillType(SkPath::kWinding_FillType);
        path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
        path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction);
        canvas->drawPath(path2, paint);

        path2.reset();
        path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
        canvas->drawPath(path2, paint);
        SkASSERT(path2.cheapIsDirection(SkPath::kCCW_Direction));

        path2.reset();
        SkASSERT(!path2.cheapComputeDirection(NULL));
        path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
        SkASSERT(path2.cheapIsDirection(SkPath::kCW_Direction));
        canvas->drawPath(path2, paint);
    }
Ejemplo n.º 2
0
    void onDraw(SkCanvas* canvas) override {
        SkScalar x = SkIntToScalar(100);
        SkScalar y = SkIntToScalar(88);

        SkPaint paint;
        paint.setAntiAlias(true);
        paint.setTextSize(SkIntToScalar(100));
        paint.setStrokeWidth(SkIntToScalar(5));
        
        // use paths instead of text to test the path data on all platforms, since the
        // Mac-specific font may change or is not available everywhere
        path_bold(canvas, papyrus_hello(), paint);
        path_bold(canvas, hiragino_maru_gothic_pro_dash(), paint);
        
        // use the portable typeface to generically test the fake bold code everywhere
        // (as long as the freetype option to do the bolding itself isn't enabled)
        sk_tool_utils::set_portable_typeface(&paint, "serif");
        const unsigned char hiThere[] = "Hi There";
        show_bold(canvas, hiThere, SK_ARRAY_COUNT(hiThere), x + SkIntToScalar(430), y, paint);

        paint.setStyle(SkPaint::kStrokeAndFill_Style);

        SkPath path;
        path.setFillType(SkPath::kWinding_FillType);
        path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
        path.addCircle(x, y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCCW_Direction);
        canvas->drawPath(path, paint);

        SkPath path2;
        path2.setFillType(SkPath::kWinding_FillType);
        path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
        path2.addCircle(x + SkIntToScalar(120), y + SkIntToScalar(200), SkIntToScalar(40), SkPath::kCW_Direction);
        canvas->drawPath(path2, paint);

        path2.reset();
        path2.addCircle(x + SkIntToScalar(240), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCCW_Direction);
        canvas->drawPath(path2, paint);
        SkASSERT(SkPathPriv::CheapIsFirstDirection(path2, SkPathPriv::kCCW_FirstDirection));

        path2.reset();
        SkASSERT(!SkPathPriv::CheapComputeFirstDirection(path2, nullptr));
        path2.addCircle(x + SkIntToScalar(360), y + SkIntToScalar(200), SkIntToScalar(50), SkPath::kCW_Direction);
        SkASSERT(SkPathPriv::CheapIsFirstDirection(path2, SkPathPriv::kCW_FirstDirection));
        canvas->drawPath(path2, paint);

        SkRect r = SkRect::MakeXYWH(x - SkIntToScalar(50), y + SkIntToScalar(280),
                                    SkIntToScalar(100), SkIntToScalar(100));
        SkPath path3;
        path3.setFillType(SkPath::kWinding_FillType);
        path3.addRect(r, SkPath::kCW_Direction);
        r.inset(SkIntToScalar(10), SkIntToScalar(10));
        path3.addRect(r, SkPath::kCCW_Direction);
        canvas->drawPath(path3, paint);

        r = SkRect::MakeXYWH(x + SkIntToScalar(70), y + SkIntToScalar(280), 
                             SkIntToScalar(100), SkIntToScalar(100));
        SkPath path4;
        path4.setFillType(SkPath::kWinding_FillType);
        path4.addRect(r, SkPath::kCCW_Direction);
        r.inset(SkIntToScalar(10), SkIntToScalar(10));
        path4.addRect(r, SkPath::kCW_Direction);
        canvas->drawPath(path4, paint);

        r = SkRect::MakeXYWH(x + SkIntToScalar(190), y + SkIntToScalar(280), 
                             SkIntToScalar(100), SkIntToScalar(100));
        path4.reset();
        SkASSERT(!SkPathPriv::CheapComputeFirstDirection(path4, nullptr));
        path4.addRect(r, SkPath::kCCW_Direction);
        SkASSERT(SkPathPriv::CheapIsFirstDirection(path4, SkPathPriv::kCCW_FirstDirection));
        path4.moveTo(0, 0); // test for crbug.com/247770
        canvas->drawPath(path4, paint);

        r = SkRect::MakeXYWH(x + SkIntToScalar(310), y + SkIntToScalar(280), 
                             SkIntToScalar(100), SkIntToScalar(100));
        path4.reset();
        SkASSERT(!SkPathPriv::CheapComputeFirstDirection(path4, nullptr));
        path4.addRect(r, SkPath::kCW_Direction);
        SkASSERT(SkPathPriv::CheapIsFirstDirection(path4, SkPathPriv::kCW_FirstDirection));
        path4.moveTo(0, 0); // test for crbug.com/247770
        canvas->drawPath(path4, paint);
    }