1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2015 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "gm/gm.h" 9cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 10cb93a386Sopenharmony_ci#include "include/core/SkFont.h" 11cb93a386Sopenharmony_ci#include "include/core/SkImageInfo.h" 12cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 13cb93a386Sopenharmony_ci#include "include/core/SkRect.h" 14cb93a386Sopenharmony_ci#include "include/core/SkRefCnt.h" 15cb93a386Sopenharmony_ci#include "include/core/SkScalar.h" 16cb93a386Sopenharmony_ci#include "include/core/SkSize.h" 17cb93a386Sopenharmony_ci#include "include/core/SkString.h" 18cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 19cb93a386Sopenharmony_ci#include "include/core/SkSurfaceProps.h" 20cb93a386Sopenharmony_ci#include "include/core/SkTextBlob.h" 21cb93a386Sopenharmony_ci#include "include/core/SkTypeface.h" 22cb93a386Sopenharmony_ci#include "tools/ToolUtils.h" 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci// This tests that we don't try to reuse textblobs from the GPU textblob cache across pixel geometry 25cb93a386Sopenharmony_ci// changes when we have LCD. crbug/486744 26cb93a386Sopenharmony_cinamespace skiagm { 27cb93a386Sopenharmony_ciclass TextBlobGeometryChange : public GM { 28cb93a386Sopenharmony_cipublic: 29cb93a386Sopenharmony_ci TextBlobGeometryChange() { } 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ciprotected: 32cb93a386Sopenharmony_ci SkString onShortName() override { 33cb93a386Sopenharmony_ci return SkString("textblobgeometrychange"); 34cb93a386Sopenharmony_ci } 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci SkISize onISize() override { 37cb93a386Sopenharmony_ci return SkISize::Make(kWidth, kHeight); 38cb93a386Sopenharmony_ci } 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci void onDraw(SkCanvas* canvas) override { 41cb93a386Sopenharmony_ci const char text[] = "Hamburgefons"; 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ci SkFont font(ToolUtils::create_portable_typeface(), 20); 44cb93a386Sopenharmony_ci font.setEdging(SkFont::Edging::kSubpixelAntiAlias); 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci SkTextBlobBuilder builder; 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci ToolUtils::add_to_text_blob(&builder, text, font, 10, 10); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci sk_sp<SkTextBlob> blob(builder.make()); 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci SkImageInfo info = SkImageInfo::MakeN32Premul(200, 200); 53cb93a386Sopenharmony_ci SkSurfaceProps props(0, kUnknown_SkPixelGeometry); 54cb93a386Sopenharmony_ci auto surface = ToolUtils::makeSurface(canvas, info, &props); 55cb93a386Sopenharmony_ci SkCanvas* c = surface->getCanvas(); 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci // LCD text on white background 58cb93a386Sopenharmony_ci SkRect rect = SkRect::MakeLTRB(0.f, 0.f, SkIntToScalar(kWidth), kHeight / 2.f); 59cb93a386Sopenharmony_ci SkPaint rectPaint; 60cb93a386Sopenharmony_ci rectPaint.setColor(0xffffffff); 61cb93a386Sopenharmony_ci canvas->drawRect(rect, rectPaint); 62cb93a386Sopenharmony_ci canvas->drawTextBlob(blob, 10, 50, SkPaint()); 63cb93a386Sopenharmony_ci 64cb93a386Sopenharmony_ci // This should not look garbled since we should disable LCD text in this case 65cb93a386Sopenharmony_ci // (i.e., unknown pixel geometry) 66cb93a386Sopenharmony_ci c->clear(0x00ffffff); 67cb93a386Sopenharmony_ci c->drawTextBlob(blob, 10, 150, SkPaint()); 68cb93a386Sopenharmony_ci surface->draw(canvas, 0, 0); 69cb93a386Sopenharmony_ci } 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ciprivate: 72cb93a386Sopenharmony_ci inline static constexpr int kWidth = 200; 73cb93a386Sopenharmony_ci inline static constexpr int kHeight = 200; 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci using INHERITED = GM; 76cb93a386Sopenharmony_ci}; 77cb93a386Sopenharmony_ci 78cb93a386Sopenharmony_ci////////////////////////////////////////////////////////////////////////////// 79cb93a386Sopenharmony_ci 80cb93a386Sopenharmony_ciDEF_GM(return new TextBlobGeometryChange;) 81cb93a386Sopenharmony_ci} // namespace skiagm 82