1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com#include "SampleCode.h" 9da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com#include "SkCanvas.h" 10da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com#include "SkPaint.h" 11da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com#include "SkView.h" 12da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com#include "SkLayer.h" 13da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 14c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com#include "SkMatrix44.h" 15c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.comstatic void test_inv(const char label[], const SkMatrix44& mat) { 16c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com SkDebugf("%s\n", label); 17c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com mat.dump(); 18c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com 19c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com SkMatrix44 inv; 20c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com if (mat.invert(&inv)) { 21c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com inv.dump(); 22c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com } else { 23c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com SkDebugf("--- invert failed\n"); 24c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com } 25c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com 26c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com SkMatrix44 a, b; 27c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com a.setConcat(mat, inv); 28c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com b.setConcat(inv, mat); 29c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com SkDebugf("concat mat with inverse pre=%d post=%d\n", a.isIdentity(), b.isIdentity()); 30c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com if (!a.isIdentity()) { 31c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com a.dump(); 32c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com } 33c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com if (!b.isIdentity()) { 34c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com b.dump(); 35c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com } 36c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com SkDebugf("\n"); 37c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com} 38c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com 39b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.comstatic void test_map(SkScalar x0, SkScalar y0, SkScalar z0, 40b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com const SkMatrix44& mat, 41b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com SkScalar x1, SkScalar y1, SkScalar z1) { 42b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com SkVector4 src, dst; 43b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com src.set(x0, y0, z0); 44b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com dst = mat * src; 45b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com SkDebugf("map: src: %g %g %g dst: %g %g %g (%g) expected: %g %g %g match: %d\n", 46b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com x0, y0, z0, 47b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com dst.fData[0], dst.fData[1], dst.fData[2], dst.fData[3], 48b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com x1, y1, z1, 49b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com dst.fData[0] == x1 && dst.fData[1] == y1 && dst.fData[2] == z1); 50b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com} 517d970c739d44486d3382eed8acc4eecccecf3453reed@android.com 527d970c739d44486d3382eed8acc4eecccecf3453reed@android.comstatic void test_33(const SkMatrix44& mat, 537d970c739d44486d3382eed8acc4eecccecf3453reed@android.com SkScalar x0, SkScalar x1, SkScalar x2, 547d970c739d44486d3382eed8acc4eecccecf3453reed@android.com SkScalar y0, SkScalar y1, SkScalar y2) { 557d970c739d44486d3382eed8acc4eecccecf3453reed@android.com SkMatrix dst = mat; 567d970c739d44486d3382eed8acc4eecccecf3453reed@android.com if (dst[0] != x0 || dst[1] != x1 || dst[2] != x2 || 577d970c739d44486d3382eed8acc4eecccecf3453reed@android.com dst[3] != y0 || dst[4] != y1 || dst[5] != y2) { 587d970c739d44486d3382eed8acc4eecccecf3453reed@android.com SkString str; 5976f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com dst.toString(&str); 607d970c739d44486d3382eed8acc4eecccecf3453reed@android.com SkDebugf("3x3: expected 3x3 [%g %g %g] [%g %g %g] bug got %s\n", 617d970c739d44486d3382eed8acc4eecccecf3453reed@android.com x0, x1, x2, y0, y1, y2, str.c_str()); 627d970c739d44486d3382eed8acc4eecccecf3453reed@android.com } 637d970c739d44486d3382eed8acc4eecccecf3453reed@android.com} 647d970c739d44486d3382eed8acc4eecccecf3453reed@android.com 65c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.comstatic void test44() { 66c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com SkMatrix44 m0, m1, m2; 67c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com 68c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test_inv("identity", m0); 69c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.setTranslate(2,3,4); 70c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test_inv("translate", m0); 71c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.setScale(2,3,4); 72c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test_inv("scale", m0); 73c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.postTranslate(5, 6, 7); 74c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test_inv("postTranslate", m0); 75c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.setScale(2,3,4); 76c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m1.setTranslate(5, 6, 7); 77c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.setConcat(m0, m1); 78c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test_inv("postTranslate2", m0); 79c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.setScale(2,3,4); 80c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.preTranslate(5, 6, 7); 81c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test_inv("preTranslate", m0); 82ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 83c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.setScale(2, 4, 6); 84c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com m0.postScale(SkDoubleToMScalar(0.5)); 85c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test_inv("scale/postscale to 1,2,3", m0); 86b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com 87b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com m0.reset(); 88b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(1, 0, 0, m0, 1, 0, 0); 89b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(0, 1, 0, m0, 0, 1, 0); 90b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(0, 0, 1, m0, 0, 0, 1); 91b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com m0.setScale(2, 3, 4); 92b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(1, 0, 0, m0, 2, 0, 0); 93b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(0, 1, 0, m0, 0, 3, 0); 94b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(0, 0, 1, m0, 0, 0, 4); 95b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com m0.setTranslate(2, 3, 4); 96b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(0, 0, 0, m0, 2, 3, 4); 97b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com m0.preScale(5, 6, 7); 98b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(1, 0, 0, m0, 7, 3, 4); 99b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(0, 1, 0, m0, 2, 9, 4); 100b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com test_map(0, 0, 1, m0, 2, 3, 11); 1017d970c739d44486d3382eed8acc4eecccecf3453reed@android.com 1027d970c739d44486d3382eed8acc4eecccecf3453reed@android.com SkMScalar deg = 45; 1037d970c739d44486d3382eed8acc4eecccecf3453reed@android.com m0.setRotateDegreesAbout(0, 0, 1, deg); 1047d970c739d44486d3382eed8acc4eecccecf3453reed@android.com test_map(1, 0, 0, m0, 0.707106769, -0.707106769, 0); 1057d970c739d44486d3382eed8acc4eecccecf3453reed@android.com 1067d970c739d44486d3382eed8acc4eecccecf3453reed@android.com m0.reset(); 1077d970c739d44486d3382eed8acc4eecccecf3453reed@android.com test_33(m0, 1, 0, 0, 0, 1, 0); 1087d970c739d44486d3382eed8acc4eecccecf3453reed@android.com m0.setTranslate(3, 4, 5); 1097d970c739d44486d3382eed8acc4eecccecf3453reed@android.com test_33(m0, 1, 0, 3, 0, 1, 4); 110c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com} 111ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 112da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com/////////////////////////////////////////////////////////////////////////////// 113da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 114745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.comstatic void dump_layers(const SkLayer* layer, int tab = 0) { 115745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkMatrix matrix; 116745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkString matrixStr; 117745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com 118745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com layer->getLocalTransform(&matrix); 11976f9e938df0b5826fd4c80b854ceafaf385cfbe1robertphillips@google.com matrix.toString(&matrixStr); 120745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com 121745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com for (int j = 0; j < tab; j++) { 122745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkDebugf(" "); 123745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com } 124745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkDebugf("layer=%p parent=%p size=[%g %g] transform=%s\n", 125745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com layer, layer->getParent(), layer->getWidth(), layer->getHeight(), 126745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com matrixStr.c_str()); 127745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com for (int i = 0; i < layer->countChildren(); i++) { 128745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com dump_layers(layer->getChild(i), tab + 4); 129745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com } 130745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com} 131745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com 132da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comclass TestLayer : public SkLayer { 133da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.compublic: 134da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com TestLayer(SkColor c) : fColor(c) {} 135da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 136da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comprotected: 137da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com virtual void onDraw(SkCanvas* canvas, SkScalar opacity) { 138da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SkRect r; 139da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com r.set(0, 0, this->getWidth(), this->getHeight()); 140da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 141da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SkPaint paint; 142da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com paint.setColor(fColor); 143e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com paint.setAlpha(SkScalarRoundToInt(opacity * 255)); 144da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 145da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com canvas->drawRect(r, paint); 146da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } 147da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 148da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comprivate: 149da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SkColor fColor; 150da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com}; 151da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 152da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comclass SkLayerView : public SkView { 153da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comprivate: 154da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SkLayer* fRootLayer; 155745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkLayer* fLastChild; 156da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.compublic: 157ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com SkLayerView() { 158c8c49c573bda7c6d74eed390842b7a0bbdf873f5reed@android.com test44(); 1592bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com static const int W = 600; 1602bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com static const int H = 440; 161da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com static const struct { 162da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com int fWidth; 163da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com int fHeight; 164da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SkColor fColor; 165da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com int fPosX; 166da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com int fPosY; 167da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } gData[] = { 168da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com { 120, 80, SK_ColorRED, 0, 0 }, 169da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com { 120, 80, SK_ColorGREEN, W - 120, 0 }, 170da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com { 120, 80, SK_ColorBLUE, 0, H - 80 }, 171da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com { 120, 80, SK_ColorMAGENTA, W - 120, H - 80 }, 172da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com }; 173da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 1742bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com fRootLayer = new TestLayer(0xFFDDDDDD); 175da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com fRootLayer->setSize(W, H); 176da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gData); i++) { 177da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SkLayer* child = new TestLayer(gData[i].fColor); 178da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com child->setSize(gData[i].fWidth, gData[i].fHeight); 179da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com child->setPosition(gData[i].fPosX, gData[i].fPosY); 180da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com fRootLayer->addChild(child)->unref(); 181da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } 182ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1832bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com SkLayer* child = new TestLayer(0xFFDD8844); 1842bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com child->setSize(120, 80); 1852bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com child->setPosition(fRootLayer->getWidth()/2 - child->getWidth()/2, 1862bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com fRootLayer->getHeight()/2 - child->getHeight()/2); 1872bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com child->setAnchorPoint(SK_ScalarHalf, SK_ScalarHalf); 1882bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com { 1892bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com SkMatrix m; 1902bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com m.setRotate(SkIntToScalar(30)); 1912bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com child->setMatrix(m); 1922bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com } 193745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com fLastChild = child; 1942bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com fRootLayer->addChild(child)->unref(); 195ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 196745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com if (false) { 197745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkMatrix matrix; 198745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com matrix.setScale(0.5, 0.5); 199745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com fRootLayer->setMatrix(matrix); 200745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com } 201745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com 202b5d0f7bd47c181107a646e09bb0182e387ba0857reed@android.com// dump_layers(fRootLayer); 203da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } 204ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 205da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com virtual ~SkLayerView() { 206da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SkSafeUnref(fRootLayer); 207da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } 208ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 209da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comprotected: 210da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com // overrides from SkEventSink 211da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com virtual bool onQuery(SkEvent* evt) { 212da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com if (SampleCode::TitleQ(*evt)) { 213da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com SampleCode::TitleR(evt, "SkLayer"); 214da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com return true; 215da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } 216da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com return this->INHERITED::onQuery(evt); 217da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } 218ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 219745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com virtual void onDraw(SkCanvas* canvas) { 2202bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com canvas->drawColor(SK_ColorWHITE); 221ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 2222bd703b3163fe1da3ea55f6459c5e162f32cce12reed@android.com canvas->translate(20, 20); 223da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com fRootLayer->draw(canvas); 224ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 225745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com // visual test of getLocalTransform 226745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com if (true) { 227745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkMatrix matrix; 228745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com fLastChild->localToGlobal(&matrix); 229745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com SkPaint paint; 230745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com paint.setStyle(SkPaint::kStroke_Style); 231745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com paint.setStrokeWidth(5); 232745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com paint.setColor(0x88FF0000); 233745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com canvas->concat(matrix); 234745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com canvas->drawRect(SkRect::MakeSize(fLastChild->getSize()), paint); 235745bfbd74d1bcd62b9c597b62907875bca5cf84ereed@android.com } 236da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com } 237ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 238da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comprivate: 239da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com typedef SkView INHERITED; 240da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com}; 241da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 242da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com/////////////////////////////////////////////////////////////////////////////// 243da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com 244da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comstatic SkView* MyFactory() { return new SkLayerView; } 245da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comstatic SkViewRegister reg(MyFactory); 246