SampleFuzz.cpp revision 5fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3
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
34261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.comstatic float huge() {
35261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com    double d = 1e100;
36261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com    float f = (float)d;
37261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com    return f;
38261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com}
39261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com
4049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic float make_number() {
4149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  float v;
4249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  int sel;
4349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
4449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  if (return_large == true && R(3) == 1) sel = R(6); else  sel = R(4);
4549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  if (return_undef == false && sel == 0) sel = 1;
4649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
47261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com  if (R(2) == 1) v = (float)R(100); else
4849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
4949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  switch (sel) {
5049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 0: break;
5149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 1: v = 0; break;
52261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com    case 2: v = 0.000001f; break;
5349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 3: v = 10000; break;
5449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 4: v = 2000000000; break;
55261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com    case 5: v = huge(); break;
5649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  }
5749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
5849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  if (R(4) == 1) v = -v;
5949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  return v;
6049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com}
6149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
6249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkColor make_color() {
6349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  if (R(2) == 1) return 0xFFC0F0A0; else return 0xFF000090;
6449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com}
6549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
6649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
6749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkColor make_fill() {
6849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#if 0
6949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  int sel;
7049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
7149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  if (quick == true) sel = 0; else sel = R(6);
7249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
7349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  switch (sel) {
7449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
7549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 0:
7649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 1:
7749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 2:
7849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      return make_color();
7949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
8049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
8149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 3:
8249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      var r = ctx.createLinearGradient(make_number(),make_number(),make_number(),make_number());
8349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      for (i=0;i<4;i++)
8449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        r.addColorStop(make_number(),make_color());
8549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      return r;
8649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
8749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
8849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 4:
8949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      var r = ctx.createRadialGradient(make_number(),make_number(),make_number(),make_number(),make_number(),make_number());
9049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      for (i=0;i<4;i++)
9149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        r.addColorStop(make_number(),make_color());
9249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      return r;
9349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
9449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
9549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 5:
9649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      var r = ctx.createPattern(imgObj,"repeat");
9749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (R(6) == 0)
9849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        r.addColorStop(make_number(),make_color());
9949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      return r;
10049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
10149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  }
10249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#else
10349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    return make_color();
10449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com#endif
10549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com}
10649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
10749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
10849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic void do_fuzz(SkCanvas* canvas) {
10949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    SkPath path;
11049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    SkPaint paint;
11149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    paint.setAntiAlias(true);
11249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
11349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  for (int i=0;i<100;i++) {
11449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  switch (R(33)) {
11549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
11649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 0:
11749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          paint.setColor(make_fill());
11849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
11949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
12049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 1:
12149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      paint.setAlpha(gRand.nextU() & 0xFF);
12249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
12349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
12449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      case 2: {
125048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com          SkXfermode::Mode mode;
126048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com          switch (R(3)) {
127048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com              case 0: mode = SkXfermode::kSrc_Mode; break;
128048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com            case 1: mode = SkXfermode::kXor_Mode; break;
129048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com            case 2: mode = SkXfermode::kSrcOver_Mode; break;
130048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com          }
1315ebbe14f76da3028e5d4523c093a0f4a2cf8e982reed@android.com          paint.setXfermodeMode(mode);
13249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      }
13349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
13449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
13549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 3:
13649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      switch (R(2)) {
13749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 0: paint.setStrokeCap(SkPaint::kRound_Cap); break;
13849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        case 1: paint.setStrokeCap(SkPaint::kButt_Cap); break;
13949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      }
14049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
14149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
14249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 4:
14349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      switch (R(2)) {
14449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 0: paint.setStrokeJoin(SkPaint::kRound_Join); break;
14549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        case 1: paint.setStrokeJoin(SkPaint::kMiter_Join); break;
14649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      }
14749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
14849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
14949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 5:
15049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      paint.setStrokeWidth(make_number());
15149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
15249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
15349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 6:
15449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      paint.setStrokeMiter(make_number());
15549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
15649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
15749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 7:
15849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
15996959218246ffab878c45237e77a26dceb52cc29bsalomon@google.com          SkSafeUnref(paint.setMaskFilter(SkBlurMaskFilter::Create(make_number(), SkBlurMaskFilter::kNormal_BlurStyle)));
16049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
16149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
16249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 8:
16349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
16449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      //ctx.shadowColor = make_fill();
16549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
16649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
16749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 9:
16849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
16949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      //ctx.shadowOffsetX = make_number();
17049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      //ctx.shadowOffsetY = make_number();
17149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
17249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
17349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 10:
17449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      canvas->restore();
17549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
17649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
17749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 11:
17849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      canvas->rotate(make_number());
17949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
18049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
18149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 12:
18249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      canvas->save();
18349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
18449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
18549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 13:
18649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      canvas->scale(-1,-1);
18749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
18849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
18949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 14:
19049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
19149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
19249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
19349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (transval == 0) {
19449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        transval = make_number();
19549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        canvas->translate(transval,0);
19649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      } else {
19749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        canvas->translate(-transval,0);
19849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        transval = 0;
19949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      }
20049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
20149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
20249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
20349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 15: {
20449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              SkRect r;
20549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              r.set(make_number(),make_number(),make_number(),make_number());
20649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              SkPaint::Style s = paint.getStyle();
20749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              paint.setStyle(SkPaint::kFill_Style);
20849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              canvas->drawRect(r, paint);
20949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              paint.setStyle(s);
21049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              // clearrect
21149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          } break;
21249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
21349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 16:
21449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
21549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com//      ctx.drawImage(imgObj,make_number(),make_number(),make_number(),make_number(),make_number(),make_number(),make_number(),make_number());
21649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
21749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
21849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 17: {
21949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          SkRect r;
22049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          r.set(make_number(),make_number(),make_number(),make_number());
22149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              SkPaint::Style s = paint.getStyle();
22249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              paint.setStyle(SkPaint::kFill_Style);
22349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          canvas->drawRect(r, paint);
22449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              paint.setStyle(s);
22549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          } break;
22649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
22749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 18:
22849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          path.reset();
22949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
23049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
23149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 19:
23249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      // ctx.clip() is evil.
23349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
23449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
23549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 20:
23649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          path.close();
23749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
23849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
23949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 21: {
24049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          SkPaint::Style s = paint.getStyle();
24149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          paint.setStyle(SkPaint::kFill_Style);
24249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          canvas->drawPath(path, paint);
24349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          paint.setStyle(s);
24449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          } break;
24549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
24649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 22: {
24749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              SkPaint::Style s = paint.getStyle();
24849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              paint.setStyle(SkPaint::kFill_Style);
24949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              canvas->drawPath(path, paint);
25049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              paint.setStyle(s);
25149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          } break;
25249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
25349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 23: {
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::kStroke_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 24:
26349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
26449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      //ctx.arc(make_number(),make_number(),make_number(),make_number(),make_number(),true);
26549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
26649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
26749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 25:
26849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
26949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      //ctx.arcTo(make_number(),make_number(),make_number(),make_number(),make_number());
27049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
27149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
27249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 26:
27349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
27449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      //ctx.bezierCurveTo(make_number(),make_number(),make_number(),make_number(),make_number(),make_number());
27549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
27649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
27749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 27:
27849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      path.lineTo(make_number(),make_number());
27949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
28049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
28149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 28:
28249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      path.moveTo(make_number(),make_number());
28349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
28449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
28549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 29:
28649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
28749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      path.quadTo(make_number(),make_number(),make_number(),make_number());
28849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
28949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
29049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 30: {
29149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
29249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              SkMatrix matrix;
29349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      set2x3(&matrix, make_number(),make_number(),make_number(),make_number(),make_number(),make_number());
29449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com              canvas->concat(matrix);
29549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          } break;
29649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
29749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 31: {
29849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (quick == true) break;
29949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          SkMatrix matrix;
30049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          set2x3(&matrix, make_number(),make_number(),make_number(),make_number(),make_number(),make_number());
30149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          canvas->setMatrix(matrix);
30249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          } break;
30349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
30449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    case 32:
30549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
30649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      if (scale_large == true) {
30749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
30849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        switch (scval) {
30949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com          case 0: canvas->scale(-1000000000,1);
31049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com                  canvas->scale(-1000000000,1);
31149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com                  scval = 1; break;
312261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com          case 1: canvas->scale(-.000000001f,1); scval = 2; break;
313261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com          case 2: canvas->scale(-.000000001f,1); scval = 0; break;
31449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        }
31549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
31649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      }
31749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
31849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com      break;
31949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
32049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
32149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
32249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  }
32349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com  }
32449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
32549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com}
32649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
32749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com//////////////////////////////////////////////////////////////////////////////
32849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
3295fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.orgclass FuzzView : public SampleView {
33049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.compublic:
3315fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org	FuzzView() {
3325fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org        this->setBGColor(0xFFDDDDDD);
3335fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org    }
33449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
33549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comprotected:
33649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    // overrides from SkEventSink
33749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    virtual bool onQuery(SkEvent* evt) {
33849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        if (SampleCode::TitleQ(*evt)) {
33949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com            SampleCode::TitleR(evt, "Fuzzer");
34049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com            return true;
34149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        }
34249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        return this->INHERITED::onQuery(evt);
34349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    }
34449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
34549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    void drawBG(SkCanvas* canvas) {
34649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        canvas->drawColor(0xFFDDDDDD);
34749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    }
34849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
3495fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org    virtual void onDrawContent(SkCanvas* canvas) {
3505ebbe14f76da3028e5d4523c093a0f4a2cf8e982reed@android.com        SkIRect r = canvas->getTotalClip().getBounds();
35149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        do_fuzz(canvas);
35249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com        this->inval(NULL);
35349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    }
35449f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
35549f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comprivate:
35649f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com    typedef SkView INHERITED;
35749f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com};
35849f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
35949f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com//////////////////////////////////////////////////////////////////////////////
36049f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
36149f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkView* MyFactory() { return new FuzzView; }
36249f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.comstatic SkViewRegister reg(MyFactory);
36349f0ff25a046d6001dc2d095b6fa3c30f0f46b6areed@android.com
364