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 */ 849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SampleCode.h" 949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkView.h" 1049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkCanvas.h" 1149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkBlurMaskFilter.h" 1249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkPaint.h" 1349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkPath.h" 1449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkXfermode.h" 1549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkMatrix.h" 1649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkColor.h" 1749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkRandom.h" 1849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 1949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic void set2x3(SkMatrix* m, float a, float b, float c, float d, float e, float f) { 2049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->reset(); 2149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(0, a); 2249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(1, b); 2349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(2, c); 2449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(3, d); 2549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(4, e); 2649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(5, f); 2749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 2849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 2949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkRandom gRand; 3049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool return_large; 3149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool return_undef; 3249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool quick; 3349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool scale_large; 3449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic int scval = 1; 3549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic float transval = 0; 3649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 3749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic int R(float x) { 3849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return (int)floor(SkScalarToFloat(gRand.nextUScalar1()) * x); 3949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 4049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 41706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com#if defined _WIN32 42706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com#pragma warning ( push ) 43706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com// we are intentionally causing an overflow here 44706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com// (warning C4756: overflow in constant arithmetic) 45706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com#pragma warning ( disable : 4756 ) 46706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com#endif 47706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com 48261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.comstatic float huge() { 49261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com double d = 1e100; 50261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com float f = (float)d; 51261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com return f; 52261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com} 53261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com 54706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com#if defined _WIN32 55706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com#pragma warning ( pop ) 56706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com#endif 57706f6212c60dd8861a0ae922a77c455a08360aa3robertphillips@google.com 5849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic float make_number() { 592c2508d2ede7e6a8eb43dba0ef2419905ccbb3d8tomhudson@google.com float v = 0; 6049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com int sel; 6149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 62b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com if (return_large == true && R(3) == 1) { 63b3ec29d2d81ae391e433fbdf8aabc791e426ee38skia.committer@gmail.com sel = R(6); 64b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com } else { 65b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com sel = R(4); 66b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com } 6749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 68b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com if (return_undef == false && sel == 0) { 69b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com sel = 1; 70b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com } 7149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 72b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com if (R(2) == 1) { 73b3ec29d2d81ae391e433fbdf8aabc791e426ee38skia.committer@gmail.com v = (float)R(100); 74b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com } else { 75b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com 76b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com switch (sel) { 77b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com case 0: break; 78b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com case 1: v = 0; break; 79b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com case 2: v = 0.000001f; break; 80b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com case 3: v = 10000; break; 81b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com case 4: v = 2000000000; break; 82b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com case 5: v = huge(); break; 83b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com } 84b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com 85b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com } 86b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com 87b3ec29d2d81ae391e433fbdf8aabc791e426ee38skia.committer@gmail.com if (R(4) == 1) { 88b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com v = -v; 8949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 9049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 9149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return v; 9249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 9349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 9449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkColor make_color() { 9549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (R(2) == 1) return 0xFFC0F0A0; else return 0xFF000090; 9649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 9749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 9849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 9949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkColor make_fill() { 10049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#if 0 10149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com int sel; 10249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 10349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) sel = 0; else sel = R(6); 10449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 10549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (sel) { 106ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 10749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: 10849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: 10949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 2: 11049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return make_color(); 11149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 11249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 11349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 3: 11449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com var r = ctx.createLinearGradient(make_number(),make_number(),make_number(),make_number()); 11549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com for (i=0;i<4;i++) 11649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.addColorStop(make_number(),make_color()); 11749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return r; 11849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 11949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 12049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 4: 12149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com var r = ctx.createRadialGradient(make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 12249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com for (i=0;i<4;i++) 12349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.addColorStop(make_number(),make_color()); 12449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return r; 12549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 12649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 12749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 5: 12849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com var r = ctx.createPattern(imgObj,"repeat"); 12949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (R(6) == 0) 13049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.addColorStop(make_number(),make_color()); 13149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return r; 13249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 13349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 13449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#else 13549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return make_color(); 13649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#endif 13749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 138ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 13949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 14049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic void do_fuzz(SkCanvas* canvas) { 14149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPath path; 14249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint paint; 14349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setAntiAlias(true); 144ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 14549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com for (int i=0;i<100;i++) { 14649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (R(33)) { 14749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 14849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: 14949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setColor(make_fill()); 15049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 15149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 15249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: 15349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setAlpha(gRand.nextU() & 0xFF); 15449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 15549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 15649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 2: { 157048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com SkXfermode::Mode mode; 158048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com switch (R(3)) { 15983a444602ec580a0040713eed588c245b4ae0ee9tomhudson@google.com case 0: mode = SkXfermode::kSrc_Mode; break; 160048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com case 1: mode = SkXfermode::kXor_Mode; break; 16183a444602ec580a0040713eed588c245b4ae0ee9tomhudson@google.com case 2: 16283a444602ec580a0040713eed588c245b4ae0ee9tomhudson@google.com default: // silence warning 16383a444602ec580a0040713eed588c245b4ae0ee9tomhudson@google.com mode = SkXfermode::kSrcOver_Mode; break; 164048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com } 1655ebbe14f76da3028e5d4523c093a0f4a2cf8e982reed@android.com paint.setXfermodeMode(mode); 16649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 16749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 16849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 16949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 3: 17049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (R(2)) { 17149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: paint.setStrokeCap(SkPaint::kRound_Cap); break; 17249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: paint.setStrokeCap(SkPaint::kButt_Cap); break; 173ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com } 17449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 17549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 17649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 4: 17749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (R(2)) { 17849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: paint.setStrokeJoin(SkPaint::kRound_Join); break; 17949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: paint.setStrokeJoin(SkPaint::kMiter_Join); break; 180ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com } 18149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 18249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 183ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com case 5: 184ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com paint.setStrokeWidth(make_number()); 18549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 18649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 187ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com case 6: 18849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStrokeMiter(make_number()); 18949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 19049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 191ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com case 7: 19249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 193e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org SkSafeUnref(paint.setMaskFilter(SkBlurMaskFilter::Create(kNormal_SkBlurStyle, 194e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org make_number()))); 19549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 19649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 197ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com case 8: 19849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 199ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com //ctx.shadowColor = make_fill(); 20049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 20149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 202ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com case 9: 20349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 20449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.shadowOffsetX = make_number(); 20549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.shadowOffsetY = make_number(); 20649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 20749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 20849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 10: 20949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->restore(); 21049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 21149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 21249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 11: 21349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->rotate(make_number()); 21449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 21549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 21649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 12: 21749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->save(); 21849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 21949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 22049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 13: 22149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->scale(-1,-1); 22249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 22349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 22449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 14: 22549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 22649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 22749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 22849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (transval == 0) { 22949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com transval = make_number(); 23049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->translate(transval,0); 23149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } else { 23249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->translate(-transval,0); 23349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com transval = 0; 23449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 23549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 23649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 23749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 23849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 15: { 23949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkRect r; 24049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.set(make_number(),make_number(),make_number(),make_number()); 24149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 24249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 24349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawRect(r, paint); 24449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 24549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com // clearrect 24649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 24749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 24849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 16: 24949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 25049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com// ctx.drawImage(imgObj,make_number(),make_number(),make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 25149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 25249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 25349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 17: { 25449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkRect r; 25549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.set(make_number(),make_number(),make_number(),make_number()); 25649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 25749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 25849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawRect(r, paint); 25949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 26049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 26149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 26249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 18: 26349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.reset(); 26449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 26549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 26649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 19: 26749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com // ctx.clip() is evil. 26849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 26949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 27049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 20: 27149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.close(); 27249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 27349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 27449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 21: { 27549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 27649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 27749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawPath(path, paint); 27849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 27949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 28049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 28149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 22: { 28249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 28349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 28449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawPath(path, paint); 28549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 28649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 287ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 28849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 23: { 28949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkRect r; 29049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.set(make_number(),make_number(),make_number(),make_number()); 29149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 29249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kStroke_Style); 29349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawRect(r, paint); 29449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 29549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 296ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 29749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 24: 29849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 29949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.arc(make_number(),make_number(),make_number(),make_number(),make_number(),true); 30049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 30149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 30249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 25: 30349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 30449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.arcTo(make_number(),make_number(),make_number(),make_number(),make_number()); 30549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 30649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 30749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 26: 30849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 30949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.bezierCurveTo(make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 31049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 31149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 27: 31349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.lineTo(make_number(),make_number()); 31449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 31549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 28: 31749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.moveTo(make_number(),make_number()); 31849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 31949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 32049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 29: 32149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 32249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.quadTo(make_number(),make_number(),make_number(),make_number()); 32349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 32449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 32549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 30: { 32649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 32749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkMatrix matrix; 32849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com set2x3(&matrix, make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 32949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->concat(matrix); 33049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 33149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 33249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 31: { 33349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 33449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkMatrix matrix; 33549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com set2x3(&matrix, make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 33649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->setMatrix(matrix); 33749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 33849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 33949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 32: 34049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 34149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (scale_large == true) { 34249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 34349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (scval) { 344ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com case 0: canvas->scale(-1000000000,1); 34549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->scale(-1000000000,1); 34649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com scval = 1; break; 347261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com case 1: canvas->scale(-.000000001f,1); scval = 2; break; 348261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com case 2: canvas->scale(-.000000001f,1); scval = 0; break; 34949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 35049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 35149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 35249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 35349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 35449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 35549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 35649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 35749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 35849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 35949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 36049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 36149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 36249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com////////////////////////////////////////////////////////////////////////////// 36349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 3645fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.orgclass FuzzView : public SampleView { 36549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.compublic: 366ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com FuzzView() { 3675fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org this->setBGColor(0xFFDDDDDD); 3685fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org } 369ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 37049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comprotected: 37149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com // overrides from SkEventSink 37249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com virtual bool onQuery(SkEvent* evt) { 37349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (SampleCode::TitleQ(*evt)) { 37449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SampleCode::TitleR(evt, "Fuzzer"); 37549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return true; 37649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 37749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return this->INHERITED::onQuery(evt); 37849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 379ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 38049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com void drawBG(SkCanvas* canvas) { 38149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawColor(0xFFDDDDDD); 38249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 383ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 3845fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org virtual void onDrawContent(SkCanvas* canvas) { 38549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com do_fuzz(canvas); 38649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com this->inval(NULL); 38749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 388ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 38949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comprivate: 39049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com typedef SkView INHERITED; 39149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com}; 39249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 39349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com////////////////////////////////////////////////////////////////////////////// 39449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 39549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkView* MyFactory() { return new FuzzView; } 39649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkViewRegister reg(MyFactory); 397