diff options
author | Bruce Wang <brucewang@google.com> | 2018-06-22 11:16:44 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-22 17:49:27 +0000 |
commit | 96b1ecc25d00a3d52dcc51a788b0df0acdd1dad9 (patch) | |
tree | 96eaf858448d069e19f54ef3d9601cd4873e299a /tests | |
parent | 418ff4a4e83e1b6234346112b214de0de54660ba (diff) |
Implement onMakeClone(const SkFontArguments& args) in class SkTypeface_fontconfig.
Create FontMgrFontConfigTest.cpp file to test the above function.
Change-Id: I7716355f702af3d6f25574305914f0b82a4147ce
Reviewed-on: https://skia-review.googlesource.com/137133
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/FontMgrFontConfigTest.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/FontMgrFontConfigTest.cpp b/tests/FontMgrFontConfigTest.cpp new file mode 100644 index 0000000000..0ecca63034 --- /dev/null +++ b/tests/FontMgrFontConfigTest.cpp @@ -0,0 +1,95 @@ +/* + * Copyright 2014 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include <fontconfig/fontconfig.h> +#include "Resources.h" +#include "SkCanvas.h" +#include "SkFontMgr.h" +#include "SkFontMgr_fontconfig.h" +#include "SkTypeface.h" +#include "Test.h" + +static bool bitmap_compare(const SkBitmap& ref, const SkBitmap& test) { + for (int y = 0; y < test.height(); ++y) { + for (int x = 0; x < test.width(); ++x) { + SkColor testColor = test.getColor(x, y); + SkColor refColor = ref.getColor(x, y); + if (refColor != testColor) { + return false; + } + } + } + return true; +} + +DEF_TEST(FontMgrFontConfig, reporter) { + FcConfig* config = FcConfigCreate(); + SkString distortablePath = GetResourcePath("fonts/Distortable.ttf"); + FcConfigAppFontAddFile( + config, reinterpret_cast<const FcChar8*>(distortablePath.c_str())); + FcConfigBuildFonts(config); + + sk_sp<SkFontMgr> fontMgr(SkFontMgr_New_FontConfig(config)); + sk_sp<SkTypeface> typeface(fontMgr->legacyMakeTypeface("Distortable", SkFontStyle())); + + SkBitmap bitmapStream; + bitmapStream.allocN32Pixels(64, 64); + SkCanvas canvasStream(bitmapStream); + canvasStream.drawColor(SK_ColorWHITE); + + SkBitmap bitmapClone; + bitmapClone.allocN32Pixels(64, 64); + 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); + + std::unique_ptr<SkStreamAsset> distortableStream( + GetResourceAsStream("fonts/Distortable.ttf")); + if (!distortableStream) { + 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'); + + for (int i = 0; i < 10; ++i) { + SkScalar styleValue = + SkDoubleToScalar(0.5 + i * ((2.0 - 0.5) / 10)); + SkFontArguments::VariationPosition::Coordinate + coordinates[] = {{tag, styleValue}}; + SkFontArguments::VariationPosition + position = {coordinates, SK_ARRAY_COUNT(coordinates)}; + + paintStream.setTypeface(sk_sp<SkTypeface>( + fontMgr->makeFromStream(distortableStream->duplicate(), + SkFontArguments().setVariationDesignPosition(position)))); + paintClone.setTypeface(sk_sp<SkTypeface>( + typeface->makeClone(SkFontArguments().setVariationDesignPosition(position)))); + + canvasStream.drawColor(SK_ColorWHITE); + canvasStream.drawText(text, textLen, point.fX, point.fY, paintStream); + + canvasClone.drawColor(SK_ColorWHITE); + canvasClone.drawText(text, textLen, point.fX, point.fY, paintClone); + + bool success = bitmap_compare(bitmapStream, bitmapClone); + REPORTER_ASSERT(reporter, success); + } +}
\ No newline at end of file |