11a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 21a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com/* 31a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com * Copyright 2012 Google Inc. 41a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com * 51a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 61a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com * found in the LICENSE file. 71a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com */ 81a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com#include "gm.h" 91a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 101a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com#include "SkColorPriv.h" 111a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com#include "SkShader.h" 121a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 131a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.comnamespace skiagm { 141a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 151a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.comclass BigMatrixGM : public GM { 161a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.compublic: 171a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com BigMatrixGM() { 181a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com this->setBGColor(0xFF66AA99); 191a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com } 201a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 211a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.comprotected: 221a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com virtual SkString onShortName() { 231a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com return SkString("bigmatrix"); 241a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com } 251a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 261a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com virtual SkISize onISize() { 27f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(50, 50); 281a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com } 291a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 301a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com virtual void onDraw(SkCanvas* canvas) { 311a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkMatrix m; 321a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com m.reset(); 331a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com m.setRotate(33 * SK_Scalar1); 341a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com m.postScale(3000 * SK_Scalar1, 3000 * SK_Scalar1); 351a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com m.postTranslate(6000 * SK_Scalar1, -5000 * SK_Scalar1); 361a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com canvas->concat(m); 371a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 381a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkPaint paint; 391a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com paint.setColor(SK_ColorRED); 401a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com paint.setAntiAlias(true); 411a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 4257b1935dbc6f8b8857d430fdf244dbe2c2e1ae5breed@google.com bool success = m.invert(&m); 431313086ef4d901176e569d1f4b6362250ac02cd7caryclark@google.com SkASSERT(success); 440e51577a14f903ffeafa117a75954baeb173ffb9humper@google.com (void) success; // silence compiler :( 451a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 461a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkPath path; 471a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 481a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkPoint pt = {10 * SK_Scalar1, 10 * SK_Scalar1}; 491a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkScalar small = 1 / (500 * SK_Scalar1); 501a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 511a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com m.mapPoints(&pt, 1); 521a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com path.addCircle(pt.fX, pt.fY, small); 531a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com canvas->drawPath(path, paint); 541a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 551a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pt.set(30 * SK_Scalar1, 10 * SK_Scalar1); 561a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com m.mapPoints(&pt, 1); 571a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkRect rect = {pt.fX - small, pt.fY - small, 581a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pt.fX + small, pt.fY + small}; 591a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com canvas->drawRect(rect, paint); 601a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 611a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkBitmap bmp; 62eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com bmp.allocN32Pixels(2, 2); 631a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com uint32_t* pixels = reinterpret_cast<uint32_t*>(bmp.getPixels()); 641a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pixels[0] = SkPackARGB32(0xFF, 0xFF, 0x00, 0x00); 651a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pixels[1] = SkPackARGB32(0xFF, 0x00, 0xFF, 0x00); 661a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pixels[2] = SkPackARGB32(0x80, 0x00, 0x00, 0x00); 671a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pixels[3] = SkPackARGB32(0xFF, 0x00, 0x00, 0xFF); 681a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pt.set(30 * SK_Scalar1, 30 * SK_Scalar1); 691a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com m.mapPoints(&pt, 1); 701a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com SkMatrix s; 711a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com s.reset(); 721a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com s.setScale(SK_Scalar1 / 1000, SK_Scalar1 / 1000); 739c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org SkShader* shader = SkShader::CreateBitmapShader( 749c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org bmp, 759c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org SkShader::kRepeat_TileMode, 769c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org SkShader::kRepeat_TileMode, 779c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org &s); 781a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com paint.setShader(shader)->unref(); 791a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com paint.setAntiAlias(false); 804469938e92d779dff05e745559e67907bbf21e78reed@google.com paint.setFilterLevel(SkPaint::kLow_FilterLevel); 811a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com rect.setLTRB(pt.fX - small, pt.fY - small, 821a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com pt.fX + small, pt.fY + small); 831a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com canvas->drawRect(rect, paint); 841a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com } 851a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 861a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.comprivate: 871a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com typedef GM INHERITED; 881a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com}; 891a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 901a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com////////////////////////////////////////////////////////////////////////////// 911a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 921a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.comstatic GM* MyFactory(void*) { return new BigMatrixGM; } 931a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.comstatic GMRegistry reg(MyFactory); 941a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com 951a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com} 96