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