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); }
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); }