Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2012 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "gm.h"
      9 
     10 #include "SkColorPriv.h"
     11 #include "SkPath.h"
     12 #include "SkShader.h"
     13 
     14 DEF_SIMPLE_GM_BG(bigmatrix, canvas, 50, 50,
     15                  sk_tool_utils::color_to_565(0xFF66AA99)) {
     16         SkMatrix m;
     17         m.reset();
     18         m.setRotate(33 * SK_Scalar1);
     19         m.postScale(3000 * SK_Scalar1, 3000 * SK_Scalar1);
     20         m.postTranslate(6000 * SK_Scalar1, -5000 * SK_Scalar1);
     21         canvas->concat(m);
     22 
     23         SkPaint paint;
     24         paint.setColor(SK_ColorRED);
     25         paint.setAntiAlias(true);
     26 
     27         bool success = m.invert(&m);
     28         SkASSERT(success);
     29         (void) success; // silence compiler :(
     30 
     31         SkPath path;
     32 
     33         SkPoint pt = {10 * SK_Scalar1, 10 * SK_Scalar1};
     34         SkScalar small = 1 / (500 * SK_Scalar1);
     35 
     36         m.mapPoints(&pt, 1);
     37         path.addCircle(pt.fX, pt.fY, small);
     38         canvas->drawPath(path, paint);
     39 
     40         pt.set(30 * SK_Scalar1, 10 * SK_Scalar1);
     41         m.mapPoints(&pt, 1);
     42         SkRect rect = {pt.fX - small, pt.fY - small,
     43                        pt.fX + small, pt.fY + small};
     44         canvas->drawRect(rect, paint);
     45 
     46         SkBitmap bmp;
     47         bmp.allocN32Pixels(2, 2);
     48         uint32_t* pixels = reinterpret_cast<uint32_t*>(bmp.getPixels());
     49         pixels[0] = SkPackARGB32(0xFF, 0xFF, 0x00, 0x00);
     50         pixels[1] = SkPackARGB32(0xFF, 0x00, 0xFF, 0x00);
     51         pixels[2] = SkPackARGB32(0x80, 0x00, 0x00, 0x00);
     52         pixels[3] = SkPackARGB32(0xFF, 0x00, 0x00, 0xFF);
     53         pt.set(30 * SK_Scalar1, 30 * SK_Scalar1);
     54         m.mapPoints(&pt, 1);
     55         SkMatrix s;
     56         s.reset();
     57         s.setScale(SK_Scalar1 / 1000, SK_Scalar1 / 1000);
     58         SkShader* shader = SkShader::CreateBitmapShader(
     59                                             bmp,
     60                                             SkShader::kRepeat_TileMode,
     61                                             SkShader::kRepeat_TileMode,
     62                                             &s);
     63         paint.setShader(shader)->unref();
     64         paint.setAntiAlias(false);
     65         paint.setFilterQuality(kLow_SkFilterQuality);
     66         rect.setLTRB(pt.fX - small, pt.fY - small,
     67                      pt.fX + small, pt.fY + small);
     68         canvas->drawRect(rect, paint);
     69 }
     70