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