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