diff --git a/tests/DrawTextTest.cpp b/tests/DrawTextTest.cpp index 4ae5c09105..438f558455 100644 --- a/tests/DrawTextTest.cpp +++ b/tests/DrawTextTest.cpp @@ -29,10 +29,6 @@ static void create(SkBitmap* bm, SkIRect bound) { bm->allocN32Pixels(bound.width(), bound.height()); } -static void drawBG(SkCanvas* canvas) { - canvas->drawColor(bgColor); -} - /** Assumes that the ref draw was completely inside ref canvas -- implies that everything outside is "bgColor". Checks that all overlap is the same and that all non-overlap on the @@ -82,17 +78,17 @@ DEF_TEST(DrawText_dashout, reporter) { SkCanvas emptyCanvas(emptyBitmap); SkPoint point = SkPoint::Make(25.0f, 25.0f); + SkFont font(nullptr, 20); + font.setEdging(SkFont::Edging::kSubpixelAntiAlias); + font.setSubpixel(true); + SkPaint paint; paint.setColor(SK_ColorGRAY); - paint.setTextSize(SkIntToScalar(20)); - paint.setAntiAlias(true); - paint.setSubpixelText(true); - paint.setLCDRenderText(true); paint.setStyle(SkPaint::kStroke_Style); // Draw a stroked "A" without a dash which will draw something. - drawBG(&drawTextCanvas); - drawTextCanvas.drawText("A", 1, point.fX, point.fY, paint); + drawTextCanvas.drawColor(SK_ColorWHITE); + drawTextCanvas.drawString("A", point.fX, point.fY, font, paint); // Draw an "A" but with a dash which will never draw anything. paint.setStrokeWidth(2); @@ -100,11 +96,11 @@ DEF_TEST(DrawText_dashout, reporter) { static constexpr SkScalar intervals[] = { 1, bigInterval }; paint.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 2)); - drawBG(&drawDashedTextCanvas); - drawDashedTextCanvas.drawText("A", 1, point.fX, point.fY, paint); + drawDashedTextCanvas.drawColor(SK_ColorWHITE); + drawDashedTextCanvas.drawString("A", point.fX, point.fY, font, paint); // Draw nothing. - drawBG(&emptyCanvas); + emptyCanvas.drawColor(SK_ColorWHITE); REPORTER_ASSERT(reporter, !compare(drawTextBitmap, size, emptyBitmap, size)); REPORTER_ASSERT(reporter, compare(drawDashedTextBitmap, size, emptyBitmap, size)); diff --git a/tests/FontHostStreamTest.cpp b/tests/FontHostStreamTest.cpp index 343a68c70f..c6cbbcfb3d 100644 --- a/tests/FontHostStreamTest.cpp +++ b/tests/FontHostStreamTest.cpp @@ -20,41 +20,14 @@ #include "SkTypes.h" #include "Test.h" -static const SkColor bgColor = SK_ColorWHITE; - -static void create(SkBitmap* bm, SkIRect bound) { - bm->allocN32Pixels(bound.width(), bound.height()); -} - -static void drawBG(SkCanvas* canvas) { - canvas->drawColor(bgColor); -} - -/** Assumes that the ref draw was completely inside ref canvas -- - implies that everything outside is "bgColor". - Checks that all overlap is the same and that all non-overlap on the - ref is "bgColor". - */ -static bool compare(const SkBitmap& ref, const SkIRect& iref, - const SkBitmap& test, const SkIRect& itest) -{ - const int xOff = itest.fLeft - iref.fLeft; - const int yOff = itest.fTop - iref.fTop; - +/** Checks that all is the same. */ +static bool compare(const SkBitmap& ref, const SkBitmap& test) { + if (ref.dimensions() != test.dimensions()) { + return false; + } for (int y = 0; y < test.height(); ++y) { for (int x = 0; x < test.width(); ++x) { - SkColor testColor = test.getColor(x, y); - int refX = x + xOff; - int refY = y + yOff; - SkColor refColor; - if (refX >= 0 && refX < ref.width() && - refY >= 0 && refY < ref.height()) - { - refColor = ref.getColor(refX, refY); - } else { - refColor = bgColor; - } - if (refColor != testColor) { + if (test.getColor(x, y) != ref.getColor(x, y)) { return false; } } @@ -62,52 +35,47 @@ static bool compare(const SkBitmap& ref, const SkIRect& iref, return true; } +static void draw(SkBitmap* bitmap, const SkFont& font) { + SkPaint paint; + paint.setColor(SK_ColorGRAY); + SkASSERT(bitmap); + bitmap->allocN32Pixels(64, 64); + SkCanvas canvas(*bitmap); + canvas.drawColor(SK_ColorWHITE); + canvas.drawString("A", 24, 32, font, paint); +} + DEF_TEST(FontHostStream, reporter) { - { - SkPaint paint; - paint.setColor(SK_ColorGRAY); - - SkFont font(SkTypeface::MakeFromName("Georgia", SkFontStyle()), 30); - - SkIRect origRect = SkIRect::MakeWH(64, 64); - SkBitmap origBitmap; - create(&origBitmap, origRect); - SkCanvas origCanvas(origBitmap); - - SkIRect streamRect = SkIRect::MakeWH(64, 64); - SkBitmap streamBitmap; - create(&streamBitmap, streamRect); - SkCanvas streamCanvas(streamBitmap); - - SkPoint point = SkPoint::Make(24, 32); - - // Test: origTypeface and streamTypeface from orig data draw the same - drawBG(&origCanvas); - origCanvas.drawSimpleText("A", 1, kUTF8_SkTextEncoding, point.fX, point.fY, font, paint); - - sk_sp typeface = SkPaintPriv::RefTypefaceOrDefault(paint); - int ttcIndex; - std::unique_ptr fontData(typeface->openStream(&ttcIndex)); - if (!fontData) { - // We're using a SkTypeface that can't give us a stream. - // This happens with portable or system fonts. End the test now. - return; - } - - sk_sp streamTypeface(SkTypeface::MakeFromStream(std::move(fontData))); - - SkFontDescriptor desc; - bool isLocalStream = false; - streamTypeface->getFontDescriptor(&desc, &isLocalStream); - REPORTER_ASSERT(reporter, isLocalStream); - - paint.setTypeface(streamTypeface); - drawBG(&streamCanvas); - streamCanvas.drawSimpleText("A", 1, kUTF8_SkTextEncoding, point.fX, point.fY, font, paint); - - REPORTER_ASSERT(reporter, - compare(origBitmap, origRect, streamBitmap, streamRect)); + sk_sp typeface = SkTypeface::MakeFromName("Georgia", SkFontStyle()); + if (!typeface) { + typeface = SkTypeface::MakeDefault(); } + SkFont font(typeface, 30); + SkBitmap origBitmap, streamBitmap; + + // Test: origTypeface and streamTypeface from orig data draw the same + draw(&origBitmap, font); + + int ttcIndex; + std::unique_ptr fontData(typeface->openStream(&ttcIndex)); + if (!fontData) { + // We're using a SkTypeface that can't give us a stream. + // This happens with portable or system fonts. End the test now. + return; + } + + sk_sp streamTypeface(SkTypeface::MakeFromStream(std::move(fontData))); + + SkFontDescriptor desc; + bool isLocalStream = false; + streamTypeface->getFontDescriptor(&desc, &isLocalStream); + REPORTER_ASSERT(reporter, isLocalStream); + + SkFont streamFont(streamTypeface); + draw(&streamBitmap, streamFont); + + REPORTER_ASSERT(reporter, compare(origBitmap, streamBitmap)); + //Make sure the typeface is deleted and removed. SkGraphics::PurgeFontCache(); } diff --git a/tests/FontMgrAndroidParserTest.cpp b/tests/FontMgrAndroidParserTest.cpp index 9d904e106a..06ee34aa57 100644 --- a/tests/FontMgrAndroidParserTest.cpp +++ b/tests/FontMgrAndroidParserTest.cpp @@ -5,15 +5,17 @@ * found in the LICENSE file. */ +#include "Test.h" + #include "Resources.h" #include "SkCanvas.h" #include "SkCommandLineFlags.h" #include "SkFixed.h" +#include "SkFont.h" #include "SkFontMgr_android.h" #include "SkFontMgr_android_parser.h" #include "SkOSFile.h" #include "SkTypeface.h" -#include "Test.h" #include #include @@ -301,17 +303,10 @@ DEF_TEST(FontMgrAndroidSystemVariableTypeface, reporter) { SkCanvas canvasClone(bitmapClone); canvasStream.drawColor(SK_ColorWHITE); - SkPaint paintStream; - paintStream.setColor(SK_ColorGRAY); - paintStream.setTextSize(SkIntToScalar(20)); - paintStream.setAntiAlias(true); - paintStream.setLCDRenderText(true); - - SkPaint paintClone; - paintClone.setColor(SK_ColorGRAY); - paintClone.setTextSize(SkIntToScalar(20)); - paintClone.setAntiAlias(true); - paintClone.setLCDRenderText(true); + SkPaint paint; + paint.setColor(SK_ColorGRAY); + paint.setAntiAlias(true); + constexpr float kTextSize = 20; std::unique_ptr distortableStream( GetResourceAsStream("fonts/Distortable.ttf")); @@ -319,8 +314,6 @@ DEF_TEST(FontMgrAndroidSystemVariableTypeface, reporter) { return; } - const char* text = "abc"; - const size_t textLen = strlen(text); SkPoint point = SkPoint::Make(20.0f, 20.0f); SkFourByteTag tag = SkSetFourByteTag('w', 'g', 'h', 't'); @@ -332,18 +325,24 @@ DEF_TEST(FontMgrAndroidSystemVariableTypeface, reporter) { SkFontArguments::VariationPosition position = {coordinates, SK_ARRAY_COUNT(coordinates)}; - paintStream.setTypeface(sk_sp( + SkFont fontStream( fontMgr->makeFromStream(distortableStream->duplicate(), - SkFontArguments().setVariationDesignPosition(position)))); + SkFontArguments().setVariationDesignPosition(position)), + kTextSize); + fontStream.setEdging(SkFont::Edging::kSubpixelAntiAlias); - paintClone.setTypeface(sk_sp( - typeface->makeClone(SkFontArguments().setVariationDesignPosition(position)))); + + SkFont fontClone( + typeface->makeClone(SkFontArguments().setVariationDesignPosition(position)), kTextSize); + fontClone.setEdging(SkFont::Edging::kSubpixelAntiAlias); + + constexpr char text[] = "abc"; canvasStream.drawColor(SK_ColorWHITE); - canvasStream.drawText(text, textLen, point.fX, point.fY, paintStream); + canvasStream.drawString(text, point.fX, point.fY, fontStream, paint); canvasClone.drawColor(SK_ColorWHITE); - canvasClone.drawText(text, textLen, point.fX, point.fY, paintClone); + canvasClone.drawString(text, point.fX, point.fY, fontClone, paint); bool success = bitmap_compare(bitmapStream, bitmapClone); REPORTER_ASSERT(reporter, success); diff --git a/tests/FontMgrFontConfigTest.cpp b/tests/FontMgrFontConfigTest.cpp index f2c868c4b0..74f50a9218 100644 --- a/tests/FontMgrFontConfigTest.cpp +++ b/tests/FontMgrFontConfigTest.cpp @@ -7,6 +7,7 @@ #include "Resources.h" #include "SkCanvas.h" +#include "SkFont.h" #include "SkFontMgr.h" #include "SkFontMgr_fontconfig.h" #include "SkTypeface.h" @@ -47,17 +48,10 @@ DEF_TEST(FontMgrFontConfig, reporter) { SkCanvas canvasClone(bitmapClone); canvasStream.drawColor(SK_ColorWHITE); - SkPaint paintStream; - paintStream.setColor(SK_ColorGRAY); - paintStream.setTextSize(SkIntToScalar(20)); - paintStream.setAntiAlias(true); - paintStream.setLCDRenderText(true); + SkPaint paint; + paint.setColor(SK_ColorGRAY); - SkPaint paintClone; - paintClone.setColor(SK_ColorGRAY); - paintClone.setTextSize(SkIntToScalar(20)); - paintClone.setAntiAlias(true); - paintClone.setLCDRenderText(true); + constexpr float kTextSize = 20; std::unique_ptr distortableStream( GetResourceAsStream("fonts/Distortable.ttf")); @@ -65,8 +59,6 @@ DEF_TEST(FontMgrFontConfig, reporter) { return; } - const char* text = "abc"; - const size_t textLen = strlen(text); SkPoint point = SkPoint::Make(20.0f, 20.0f); SkFourByteTag tag = SkSetFourByteTag('w', 'g', 'h', 't'); @@ -78,17 +70,23 @@ DEF_TEST(FontMgrFontConfig, reporter) { SkFontArguments::VariationPosition position = {coordinates, SK_ARRAY_COUNT(coordinates)}; - paintStream.setTypeface(sk_sp( + SkFont fontStream( fontMgr->makeFromStream(distortableStream->duplicate(), - SkFontArguments().setVariationDesignPosition(position)))); - paintClone.setTypeface(sk_sp( - typeface->makeClone(SkFontArguments().setVariationDesignPosition(position)))); + SkFontArguments().setVariationDesignPosition(position)), + kTextSize); + fontStream.setEdging(SkFont::Edging::kSubpixelAntiAlias); + + SkFont fontClone( + typeface->makeClone(SkFontArguments().setVariationDesignPosition(position)), kTextSize); + fontClone.setEdging(SkFont::Edging::kSubpixelAntiAlias); + + constexpr char text[] = "abc"; canvasStream.drawColor(SK_ColorWHITE); - canvasStream.drawText(text, textLen, point.fX, point.fY, paintStream); + canvasStream.drawString(text, point.fX, point.fY, fontStream, paint); canvasClone.drawColor(SK_ColorWHITE); - canvasClone.drawText(text, textLen, point.fX, point.fY, paintClone); + canvasClone.drawString(text, point.fX, point.fY, fontClone, paint); bool success = bitmap_compare(bitmapStream, bitmapClone); REPORTER_ASSERT(reporter, success); diff --git a/tests/PDFTaggedTest.cpp b/tests/PDFTaggedTest.cpp index f83613880d..e966f681c5 100644 --- a/tests/PDFTaggedTest.cpp +++ b/tests/PDFTaggedTest.cpp @@ -9,6 +9,7 @@ #include "SkCanvas.h" #include "SkPDFDocument.h" #include "SkStream.h" +#include "SkFont.h" using PDFTag = SkPDF::StructureElementNode; @@ -106,42 +107,42 @@ DEF_TEST(SkPDF_tagged, r) { document->beginPage(pageSize.width(), pageSize.height()); SkPDF::SetNodeId(canvas, 2); - paint.setTextSize(36); + SkFont font(nullptr, 36); const char* message = "This is the title"; canvas->translate(72, 72); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); SkPDF::SetNodeId(canvas, 3); - paint.setTextSize(14); + font.setSize(14); message = "This is a simple paragraph."; canvas->translate(0, 72); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); SkPDF::SetNodeId(canvas, 6); - paint.setTextSize(14); + font.setSize(14); message = "*"; canvas->translate(0, 72); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); SkPDF::SetNodeId(canvas, 7); message = "List item 1"; canvas->translate(36, 0); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); SkPDF::SetNodeId(canvas, 8); message = "*"; canvas->translate(-36, 36); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); SkPDF::SetNodeId(canvas, 9); message = "List item 2"; canvas->translate(36, 0); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); SkPDF::SetNodeId(canvas, 10); message = "This is a paragraph that starts on one page"; canvas->translate(-36, 6 * 72); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); document->endPage(); @@ -151,14 +152,14 @@ DEF_TEST(SkPDF_tagged, r) { SkPDF::SetNodeId(canvas, 10); message = "and finishes on the second page."; canvas->translate(72, 72); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); // This has a node ID but never shows up in the tag tree so it // won't be tagged. SkPDF::SetNodeId(canvas, 999); message = "Page 2"; canvas->translate(468, -36); - canvas->drawText(message, strlen(message), 0, 0, paint); + canvas->drawString(message, 0, 0, font, paint); document->endPage(); diff --git a/tests/SerialProcsTest.cpp b/tests/SerialProcsTest.cpp index 0c1b6d14fd..6129e0a626 100644 --- a/tests/SerialProcsTest.cpp +++ b/tests/SerialProcsTest.cpp @@ -182,10 +182,11 @@ static sk_sp make_picture(sk_sp tf0, sk_sp tf SkPictureRecorder rec; SkCanvas* canvas = rec.beginRecording(100, 100); SkPaint paint; - paint.setTypeface(tf0); canvas->drawText("hello", 5, 0, 0, paint); - paint.setTypeface(tf1); canvas->drawText("hello", 5, 0, 0, paint); - paint.setTypeface(tf0); canvas->drawText("hello", 5, 0, 0, paint); - paint.setTypeface(tf1); canvas->drawText("hello", 5, 0, 0, paint); + SkFont font; + font.setTypeface(tf0); canvas->drawString("hello", 0, 0, font, paint); + font.setTypeface(tf1); canvas->drawString("hello", 0, 0, font, paint); + font.setTypeface(tf0); canvas->drawString("hello", 0, 0, font, paint); + font.setTypeface(tf1); canvas->drawString("hello", 0, 0, font, paint); return rec.finishRecordingAsPicture(); } diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp index f13329ad82..67125755ef 100644 --- a/tests/SerializationTest.cpp +++ b/tests/SerializationTest.cpp @@ -341,11 +341,10 @@ static void compare_bitmaps(skiatest::Reporter* reporter, static void serialize_and_compare_typeface(sk_sp typeface, const char* text, skiatest::Reporter* reporter) { - // Create a paint with the typeface. + // Create a font with the typeface. SkPaint paint; paint.setColor(SK_ColorGRAY); - paint.setTextSize(SkIntToScalar(30)); - paint.setTypeface(std::move(typeface)); + SkFont font(std::move(typeface), 30); // Paint some text. SkPictureRecorder recorder; @@ -354,7 +353,7 @@ static void serialize_and_compare_typeface(sk_sp typeface, const cha SkIntToScalar(canvasRect.height()), nullptr, 0); canvas->drawColor(SK_ColorWHITE); - canvas->drawText(text, 2, 24, 32, paint); + canvas->drawString(text, 24, 32, font, paint); sk_sp picture(recorder.finishRecordingAsPicture()); // Serlialize picture and create its clone from stream. @@ -392,7 +391,7 @@ static void TestPictureTypefaceSerialization(skiatest::Reporter* reporter) { if (!typeface) { INFOF(reporter, "Could not run fontstream test because Distortable.ttf not created."); } else { - serialize_and_compare_typeface(std::move(typeface), "abc", reporter); + serialize_and_compare_typeface(std::move(typeface), "ab", reporter); } } }