1f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org/* 2f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org * Copyright 2011 Google Inc. 3f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org * 4f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 5f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org * found in the LICENSE file. 6f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org */ 7f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 8f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 10f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 11bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "Resources.h" 12bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "SkBitmapProcState.h" 13bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "SkBitmapScaler.h" 14bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "SkGradientShader.h" 15f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org#include "SkImageEncoder.h" 16bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "SkStream.h" 17bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "SkTypeface.h" 18f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 19f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.orgstatic SkSize computeSize(const SkBitmap& bm, const SkMatrix& mat) { 20f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkRect bounds = SkRect::MakeWH(SkIntToScalar(bm.width()), 21f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkIntToScalar(bm.height())); 22f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org mat.mapRect(&bounds); 23f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org return SkSize::Make(bounds.width(), bounds.height()); 24f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org} 25f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 26c54d8db4d169ea5f2af2a9a2349df007bd428475Florin Malitastatic void draw_cell(SkCanvas* canvas, const SkBitmap& bm, const SkMatrix& mat, SkScalar dx, 2793a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed SkFilterQuality lvl) { 28f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkPaint paint; 2993a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed paint.setFilterQuality(lvl); 30f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 31f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkAutoCanvasRestore acr(canvas, true); 32f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 33f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org canvas->translate(dx, 0); 34c54d8db4d169ea5f2af2a9a2349df007bd428475Florin Malita canvas->concat(mat); 35c54d8db4d169ea5f2af2a9a2349df007bd428475Florin Malita canvas->drawBitmap(bm, 0, 0, &paint); 36c54d8db4d169ea5f2af2a9a2349df007bd428475Florin Malita} 37f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 38c54d8db4d169ea5f2af2a9a2349df007bd428475Florin Malitastatic void draw_row(SkCanvas* canvas, const SkBitmap& bm, const SkMatrix& mat, SkScalar dx) { 3993a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed draw_cell(canvas, bm, mat, 0 * dx, kNone_SkFilterQuality); 4093a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed draw_cell(canvas, bm, mat, 1 * dx, kLow_SkFilterQuality); 4193a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed draw_cell(canvas, bm, mat, 2 * dx, kMedium_SkFilterQuality); 4293a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed draw_cell(canvas, bm, mat, 3 * dx, kHigh_SkFilterQuality); 43f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org} 44f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 45f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.orgclass FilterIndiaBoxGM : public skiagm::GM { 4636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onOnceBeforeDraw() override { 47f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org this->makeBitmap(); 48f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 49f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkScalar cx = SkScalarHalf(fBM.width()); 50f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkScalar cy = SkScalarHalf(fBM.height()); 51f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 52f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org float vertScale = 30.0f/55.0f; 53f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org float horizScale = 150.0f/200.0f; 54f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 55f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org fMatrix[0].setScale(horizScale, vertScale); 56f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org fMatrix[1].setRotate(30, cx, cy); fMatrix[1].postScale(horizScale, vertScale); 57f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 58f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 59f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.orgpublic: 60f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkBitmap fBM; 61f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkMatrix fMatrix[2]; 62f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkString fName; 63f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 64bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed FilterIndiaBoxGM() { 6565cdba6ba78aaec0c0a4596bb5941020c789482bcaryclark this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD)); 66f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 67f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 68bfefc7c95fc0e8ebd5000c68f6d16e1a3ea0e71ereed FilterIndiaBoxGM(const char filename[]) : fFilename(filename) { 69f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org fName.printf("filterindiabox"); 70f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 71f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 72f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.orgprotected: 7336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 74f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org return fName; 75f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 76f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 7736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 78f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org return SkISize::Make(1024, 768); 79f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 80f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 8136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 82f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org canvas->translate(10, 10); 83f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrix); ++i) { 84f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkSize size = computeSize(fBM, fMatrix[i]); 85f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org size.fWidth += 20; 86f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org size.fHeight += 20; 87f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 88f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org draw_row(canvas, fBM, fMatrix[i], size.fWidth); 89f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org canvas->translate(0, size.fHeight); 90f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 91f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 92f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 93f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org protected: 94f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkString fFilename; 95f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org int fSize; 96f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 97f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org SkScalar getScale() { 98f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org return 192.f/fSize; 99f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 100f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 101f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org void makeBitmap() { 102e820dfebbc652bfc4a653f07a29f5fe371eb019bmsarett if (!GetResourceAsBitmap(fFilename.c_str(), &fBM)) { 103e820dfebbc652bfc4a653f07a29f5fe371eb019bmsarett fBM.allocN32Pixels(1, 1); 104e820dfebbc652bfc4a653f07a29f5fe371eb019bmsarett fBM.eraseARGB(255, 255, 0 , 0); // red == bad 105e820dfebbc652bfc4a653f07a29f5fe371eb019bmsarett } 106e820dfebbc652bfc4a653f07a29f5fe371eb019bmsarett fSize = fBM.height(); 107f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org } 108f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org private: 109f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org typedef skiagm::GM INHERITED; 110f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org}; 111f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 112f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org////////////////////////////////////////////////////////////////////////////// 113f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 114f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.org 115f449156bd00815eae1f1daea436f08068ef0f01ccommit-bot@chromium.orgDEF_GM( return new FilterIndiaBoxGM("box.gif"); ) 116