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 BSD-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 "SkGradientShader.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkSurface.h"
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "gm.h"
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "sk_tool_utils.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void make_transparency(SkCanvas* canvas, SkScalar width, SkScalar height) {
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPoint pts[2];
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    pts[0] = SkPoint::Make(0, 0);
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    pts[1] = SkPoint::Make(width, 0);
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkColor kColors[] = {
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorBLACK,
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorGRAY,
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorWHITE,
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorRED,
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorYELLOW,
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorGREEN,
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorCYAN,
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorBLUE,
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            SK_ColorMAGENTA,
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    const SkScalar kRowHeight = height / SK_ARRAY_COUNT(kColors);
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for (size_t i = 0; i < SK_ARRAY_COUNT(kColors); ++i) {
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkColor shaderColors[2];
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        shaderColors[0] = SK_AlphaTRANSPARENT;
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        shaderColors[1] = kColors[i];
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkPaint p;
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        p.setShader(SkGradientShader::MakeLinear(pts, shaderColors, nullptr, 2,
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                                                 SkShader::kClamp_TileMode));
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->drawRect(SkRect::MakeXYWH(0, i * kRowHeight, width, kRowHeight), p);
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// http://crrev.com/834303005
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic sk_sp<SkShader> create_checkerboard_shader(SkColor c1, SkColor c2, int size) {
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkBitmap bm;
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bm.allocN32Pixels(2 * size, 2 * size);
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bm.eraseColor(c1);
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2);
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2);
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    return SkShader::MakeBitmapShader(bm, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// http://crrev.com/834303005
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void checkerboard(SkCanvas* canvas, SkColor c1, SkColor c2, int size) {
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    SkPaint paint;
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    paint.setShader(create_checkerboard_shader(c1, c2, size));
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    canvas->drawPaint(paint);
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *  This GM verifies that a transparent bitmap drawn over a
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *  checkerboard pattern looks correct.
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_SIMPLE_GM(transparency_check, canvas, 1792, 1080) {
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    checkerboard(canvas, sk_tool_utils::color_to_565(0xFF999999),
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            sk_tool_utils::color_to_565(0xFF666666), 8);
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    {
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        SkAutoCanvasRestore autoCanvasRestore(canvas, true);
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        auto surface(SkSurface::MakeRasterN32Premul(256, 9));
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        make_transparency(surface->getCanvas(), 256.0f, 9.0f);
68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        canvas->scale(7.0f, 120.0f);
69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        surface->draw(canvas, 0, 0, nullptr);
70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
72