SampleFuzz.cpp revision 5ebbe14f76da3028e5d4523c093a0f4a2cf8e982
149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SampleCode.h" 249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkView.h" 349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkCanvas.h" 449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkBlurMaskFilter.h" 549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkPaint.h" 649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkPath.h" 749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkXfermode.h" 849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkMatrix.h" 949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkColor.h" 1049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#include "SkRandom.h" 1149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 1249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic void set2x3(SkMatrix* m, float a, float b, float c, float d, float e, float f) { 1349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->reset(); 1449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(0, a); 1549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(1, b); 1649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(2, c); 1749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(3, d); 1849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(4, e); 1949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com m->set(5, f); 2049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 2149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 2249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkRandom gRand; 2349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool return_large; 2449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool return_undef; 2549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool quick; 2649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic bool scale_large; 2749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic int scval = 1; 2849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic float transval = 0; 2949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 3049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic int R(float x) { 3149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return (int)floor(SkScalarToFloat(gRand.nextUScalar1()) * x); 3249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 3349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 3449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic float make_number() { 3549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com float v; 3649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com int sel; 3749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 3849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (return_large == true && R(3) == 1) sel = R(6); else sel = R(4); 3949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (return_undef == false && sel == 0) sel = 1; 4049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 4149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (R(2) == 1) v = R(100); else 4249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 4349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (sel) { 4449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: break; 4549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: v = 0; break; 4649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 2: v = 0.000001; break; 4749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 3: v = 10000; break; 4849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 4: v = 2000000000; break; 4949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 5: v = 1e100; break; 5049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 5149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 5249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (R(4) == 1) v = -v; 5349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return v; 5449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 5549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 5649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkColor make_color() { 5749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (R(2) == 1) return 0xFFC0F0A0; else return 0xFF000090; 5849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 5949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 6049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 6149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkColor make_fill() { 6249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#if 0 6349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com int sel; 6449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 6549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) sel = 0; else sel = R(6); 6649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 6749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (sel) { 6849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 6949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: 7049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: 7149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 2: 7249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return make_color(); 7349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 7449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 7549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 3: 7649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com var r = ctx.createLinearGradient(make_number(),make_number(),make_number(),make_number()); 7749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com for (i=0;i<4;i++) 7849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.addColorStop(make_number(),make_color()); 7949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return r; 8049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 8149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 8249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 4: 8349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com var r = ctx.createRadialGradient(make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 8449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com for (i=0;i<4;i++) 8549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.addColorStop(make_number(),make_color()); 8649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return r; 8749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 8849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 8949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 5: 9049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com var r = ctx.createPattern(imgObj,"repeat"); 9149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (R(6) == 0) 9249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.addColorStop(make_number(),make_color()); 9349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return r; 9449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 9549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 9649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#else 9749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return make_color(); 9849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#endif 9949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 10049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 10149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 10249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic void do_fuzz(SkCanvas* canvas) { 10349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPath path; 10449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint paint; 10549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setAntiAlias(true); 10649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 10749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com for (int i=0;i<100;i++) { 10849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (R(33)) { 10949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 11049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: 11149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setColor(make_fill()); 11249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 11349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 11449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: 11549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setAlpha(gRand.nextU() & 0xFF); 11649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 11749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 11849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 2: { 119048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com SkXfermode::Mode mode; 120048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com switch (R(3)) { 121048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com case 0: mode = SkXfermode::kSrc_Mode; break; 122048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com case 1: mode = SkXfermode::kXor_Mode; break; 123048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com case 2: mode = SkXfermode::kSrcOver_Mode; break; 124048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com } 1255ebbe14f76da3028e5d4523c093a0f4a2cf8e982reed@android.com paint.setXfermodeMode(mode); 12649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 12749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 12849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 12949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 3: 13049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (R(2)) { 13149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: paint.setStrokeCap(SkPaint::kRound_Cap); break; 13249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: paint.setStrokeCap(SkPaint::kButt_Cap); break; 13349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 13449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 13549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 13649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 4: 13749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (R(2)) { 13849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: paint.setStrokeJoin(SkPaint::kRound_Join); break; 13949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: paint.setStrokeJoin(SkPaint::kMiter_Join); break; 14049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 14149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 14249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 14349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 5: 14449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStrokeWidth(make_number()); 14549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 14649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 14749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 6: 14849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStrokeMiter(make_number()); 14949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 15049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 15149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 7: 15249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 15349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setMaskFilter(SkBlurMaskFilter::Create(make_number(), SkBlurMaskFilter::kNormal_BlurStyle))->safeUnref(); 15449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 15549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 15649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 8: 15749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 15849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.shadowColor = make_fill(); 15949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 16049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 16149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 9: 16249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 16349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.shadowOffsetX = make_number(); 16449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.shadowOffsetY = make_number(); 16549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 16649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 16749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 10: 16849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->restore(); 16949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 17049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 17149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 11: 17249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->rotate(make_number()); 17349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 17449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 17549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 12: 17649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->save(); 17749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 17849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 17949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 13: 18049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->scale(-1,-1); 18149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 18249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 18349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 14: 18449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 18549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 18649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 18749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (transval == 0) { 18849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com transval = make_number(); 18949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->translate(transval,0); 19049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } else { 19149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->translate(-transval,0); 19249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com transval = 0; 19349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 19449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 19549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 19649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 19749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 15: { 19849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkRect r; 19949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.set(make_number(),make_number(),make_number(),make_number()); 20049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 20149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 20249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawRect(r, paint); 20349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 20449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com // clearrect 20549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 20649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 20749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 16: 20849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 20949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com// ctx.drawImage(imgObj,make_number(),make_number(),make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 21049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 21149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 21249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 17: { 21349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkRect r; 21449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.set(make_number(),make_number(),make_number(),make_number()); 21549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 21649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 21749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawRect(r, paint); 21849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 21949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 22049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 22149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 18: 22249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.reset(); 22349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 22449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 22549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 19: 22649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com // ctx.clip() is evil. 22749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 22849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 22949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 20: 23049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.close(); 23149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 23249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 23349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 21: { 23449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 23549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 23649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawPath(path, paint); 23749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 23849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 23949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 24049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 22: { 24149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 24249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kFill_Style); 24349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawPath(path, paint); 24449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 24549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 24649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 24749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 23: { 24849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkRect r; 24949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com r.set(make_number(),make_number(),make_number(),make_number()); 25049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkPaint::Style s = paint.getStyle(); 25149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(SkPaint::kStroke_Style); 25249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawRect(r, paint); 25349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com paint.setStyle(s); 25449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 25549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 25649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 24: 25749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 25849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.arc(make_number(),make_number(),make_number(),make_number(),make_number(),true); 25949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 26049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 26149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 25: 26249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 26349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.arcTo(make_number(),make_number(),make_number(),make_number(),make_number()); 26449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 26549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 26649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 26: 26749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 26849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com //ctx.bezierCurveTo(make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 26949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 27049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 27149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 27: 27249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.lineTo(make_number(),make_number()); 27349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 27449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 27549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 28: 27649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.moveTo(make_number(),make_number()); 27749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 27849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 27949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 29: 28049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 28149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com path.quadTo(make_number(),make_number(),make_number(),make_number()); 28249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 28349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 28449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 30: { 28549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 28649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkMatrix matrix; 28749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com set2x3(&matrix, make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 28849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->concat(matrix); 28949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 29049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 29149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 31: { 29249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (quick == true) break; 29349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SkMatrix matrix; 29449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com set2x3(&matrix, make_number(),make_number(),make_number(),make_number(),make_number(),make_number()); 29549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->setMatrix(matrix); 29649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } break; 29749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 29849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 32: 29949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 30049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (scale_large == true) { 30149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 30249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com switch (scval) { 30349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 0: canvas->scale(-1000000000,1); 30449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->scale(-1000000000,1); 30549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com scval = 1; break; 30649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 1: canvas->scale(-.000000001,1); scval = 2; break; 30749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com case 2: canvas->scale(-.000000001,1); scval = 0; break; 30849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 30949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 31149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com break; 31349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 31749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 31849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 31949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com} 32049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 32149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com////////////////////////////////////////////////////////////////////////////// 32249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 32349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comclass FuzzView : public SkView { 32449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.compublic: 32549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com FuzzView() {} 32649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 32749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comprotected: 32849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com // overrides from SkEventSink 32949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com virtual bool onQuery(SkEvent* evt) { 33049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com if (SampleCode::TitleQ(*evt)) { 33149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com SampleCode::TitleR(evt, "Fuzzer"); 33249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return true; 33349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 33449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com return this->INHERITED::onQuery(evt); 33549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 33649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 33749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com void drawBG(SkCanvas* canvas) { 33849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com canvas->drawColor(0xFFDDDDDD); 33949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 34049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 34149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com virtual void onDraw(SkCanvas* canvas) { 3425ebbe14f76da3028e5d4523c093a0f4a2cf8e982reed@android.com SkIRect r = canvas->getTotalClip().getBounds(); 34349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com this->drawBG(canvas); 34449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com do_fuzz(canvas); 34549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com this->inval(NULL); 34649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com } 34749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 34849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comprivate: 34949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com typedef SkView INHERITED; 35049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com}; 35149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 35249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com////////////////////////////////////////////////////////////////////////////// 35349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 35449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkView* MyFactory() { return new FuzzView; } 35549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkViewRegister reg(MyFactory); 35649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com 357