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