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