From 41868fe5625fc3bd70daa3f461c881b5db6a9265 Mon Sep 17 00:00:00 2001 From: bungeman Date: Wed, 20 May 2015 09:21:04 -0700 Subject: Font variations. Multiple Master and TrueType fonts support variation axes. This implements back-end support for axes on platforms which support it. Committed: https://skia.googlesource.com/skia/+/05773ed30920c0214d1433c07cf6360a05476c97 Committed: https://skia.googlesource.com/skia/+/3489ee0f4fa34f124f9de090d12bdc2107d52aa9 Review URL: https://codereview.chromium.org/1027373002 --- gm/fontscalerdistortable.cpp | 95 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 gm/fontscalerdistortable.cpp (limited to 'gm/fontscalerdistortable.cpp') diff --git a/gm/fontscalerdistortable.cpp b/gm/fontscalerdistortable.cpp new file mode 100644 index 0000000000..715f32169c --- /dev/null +++ b/gm/fontscalerdistortable.cpp @@ -0,0 +1,95 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#include "gm.h" +#include "Resources.h" +#include "SkFixed.h" +#include "SkFontDescriptor.h" +#include "SkFontMgr.h" +#include "SkTypeface.h" + +namespace skiagm { + +class FontScalerDistortableGM : public GM { +public: + FontScalerDistortableGM() { + this->setBGColor(0xFFFFFFFF); + } + + virtual ~FontScalerDistortableGM() { } + +protected: + + SkString onShortName() override { + return SkString("fontscalerdistortable"); + } + + SkISize onISize() override { + return SkISize::Make(550, 700); + } + + static void rotate_about(SkCanvas* canvas, SkScalar degrees, SkScalar px, SkScalar py) { + canvas->translate(px, py); + canvas->rotate(degrees); + canvas->translate(-px, -py); + } + + void onDraw(SkCanvas* canvas) override { + SkPaint paint; + paint.setAntiAlias(true); + paint.setLCDRenderText(true); + + SkAutoTDelete distortable(GetResourceAsStream("/fonts/Distortable.ttf")); + if (!distortable) { + return; + } + const char* text = "abc"; + const size_t textLen = strlen(text); + + for (int j = 0; j < 2; ++j) { + for (int i = 0; i < 5; ++i) { + SkScalar x = SkIntToScalar(10); + SkScalar y = SkIntToScalar(20); + + SkFixed axis = SkDoubleToFixed(0.5 + (5*j + i) * ((2.0 - 0.5) / (2 * 5))); + SkAutoTUnref typeface(SkTypeface::CreateFromFontData( + new SkFontData(distortable->duplicate(), 0, &axis, 1))); + paint.setTypeface(typeface); + + SkAutoCanvasRestore acr(canvas, true); + canvas->translate(SkIntToScalar(30 + i * 100), SkIntToScalar(20)); + rotate_about(canvas, SkIntToScalar(i * 5), x, y * 10); + + { + SkPaint p; + p.setAntiAlias(true); + SkRect r; + r.set(x - SkIntToScalar(3), SkIntToScalar(15), + x - SkIntToScalar(1), SkIntToScalar(280)); + canvas->drawRect(r, p); + } + + for (int ps = 6; ps <= 22; ps++) { + paint.setTextSize(SkIntToScalar(ps)); + canvas->drawText(text, textLen, x, y, paint); + y += paint.getFontMetrics(NULL); + } + } + canvas->translate(0, SkIntToScalar(360)); + paint.setSubpixelText(true); + } + } + +private: + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new FontScalerDistortableGM; } +static GMRegistry reg(MyFactory); + +} -- cgit v1.2.3