11a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com/*
21a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com * Copyright 2012 Google Inc.
31a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com *
41a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com * Use of this source code is governed by a BSD-style license that can be
51a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com * found in the LICENSE file.
61a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com */
72880df2609eba09b555ca37be04b6ad89290c765Tom Hudson
81a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com#include "gm.h"
91a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
101a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com#include "SkColorPriv.h"
112880df2609eba09b555ca37be04b6ad89290c765Tom Hudson#include "SkPath.h"
121a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com#include "SkShader.h"
131a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
142880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_SIMPLE_GM_BG(bigmatrix, canvas, 50, 50,
152880df2609eba09b555ca37be04b6ad89290c765Tom Hudson                 sk_tool_utils::color_to_565(0xFF66AA99)) {
161a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkMatrix m;
171a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        m.reset();
181a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        m.setRotate(33 * SK_Scalar1);
191a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        m.postScale(3000 * SK_Scalar1, 3000 * SK_Scalar1);
201a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        m.postTranslate(6000 * SK_Scalar1, -5000 * SK_Scalar1);
211a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        canvas->concat(m);
221a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
231a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkPaint paint;
241a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        paint.setColor(SK_ColorRED);
251a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        paint.setAntiAlias(true);
261a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
2757b1935dbc6f8b8857d430fdf244dbe2c2e1ae5breed@google.com        bool success = m.invert(&m);
281313086ef4d901176e569d1f4b6362250ac02cd7caryclark@google.com        SkASSERT(success);
290e51577a14f903ffeafa117a75954baeb173ffb9humper@google.com        (void) success; // silence compiler :(
301a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
311a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkPath path;
321a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
331a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkPoint pt = {10 * SK_Scalar1, 10 * SK_Scalar1};
341a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkScalar small = 1 / (500 * SK_Scalar1);
351a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
361a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        m.mapPoints(&pt, 1);
371a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        path.addCircle(pt.fX, pt.fY, small);
381a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        canvas->drawPath(path, paint);
391a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
401a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        pt.set(30 * SK_Scalar1, 10 * SK_Scalar1);
411a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        m.mapPoints(&pt, 1);
421a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkRect rect = {pt.fX - small, pt.fY - small,
431a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com                       pt.fX + small, pt.fY + small};
441a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        canvas->drawRect(rect, paint);
451a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com
461a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkBitmap bmp;
47eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com        bmp.allocN32Pixels(2, 2);
481a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        uint32_t* pixels = reinterpret_cast<uint32_t*>(bmp.getPixels());
491a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        pixels[0] = SkPackARGB32(0xFF, 0xFF, 0x00, 0x00);
501a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        pixels[1] = SkPackARGB32(0xFF, 0x00, 0xFF, 0x00);
511a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        pixels[2] = SkPackARGB32(0x80, 0x00, 0x00, 0x00);
521a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        pixels[3] = SkPackARGB32(0xFF, 0x00, 0x00, 0xFF);
531a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        pt.set(30 * SK_Scalar1, 30 * SK_Scalar1);
541a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        m.mapPoints(&pt, 1);
551a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        SkMatrix s;
561a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        s.reset();
571a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        s.setScale(SK_Scalar1 / 1000, SK_Scalar1 / 1000);
589c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org        SkShader* shader = SkShader::CreateBitmapShader(
599c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org                                            bmp,
609c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org                                            SkShader::kRepeat_TileMode,
619c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org                                            SkShader::kRepeat_TileMode,
629c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org                                            &s);
631a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        paint.setShader(shader)->unref();
641a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        paint.setAntiAlias(false);
6593a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed        paint.setFilterQuality(kLow_SkFilterQuality);
661a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        rect.setLTRB(pt.fX - small, pt.fY - small,
671a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com                     pt.fX + small, pt.fY + small);
681a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com        canvas->drawRect(rect, paint);
691a38d5508f7a0e2c186d3aa8ea807045a46b663dbsalomon@google.com}
70