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