1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 #include "SampleCode.h" 9 #include "SkView.h" 10 #include "SkCanvas.h" 11 #include "SkDevice.h" 12 #include "SkPaint.h" 13 #include "SkShader.h" 14 15 static SkBitmap createBitmap(int n) { 16 SkBitmap bitmap; 17 bitmap.allocN32Pixels(n, n); 18 bitmap.eraseColor(SK_ColorGREEN); 19 20 SkCanvas canvas(bitmap); 21 SkRect r; 22 r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n)); 23 SkPaint paint; 24 paint.setAntiAlias(true); 25 26 paint.setColor(SK_ColorRED); 27 canvas.drawOval(r, paint); 28 paint.setColor(SK_ColorBLUE); 29 paint.setStrokeWidth(SkIntToScalar(n)/15); 30 paint.setStyle(SkPaint::kStroke_Style); 31 canvas.drawLine(0, 0, r.fRight, r.fBottom, paint); 32 canvas.drawLine(0, r.fBottom, r.fRight, 0, paint); 33 34 return bitmap; 35 } 36 37 class AARectView : public SampleView { 38 SkBitmap fBitmap; 39 enum { 40 N = 64 41 }; 42 public: 43 AARectView() { 44 fBitmap = createBitmap(N); 45 46 fWidth = N; 47 } 48 49 protected: 50 // overrides from SkEventSink 51 virtual bool onQuery(SkEvent* evt) { 52 if (SampleCode::TitleQ(*evt)) { 53 SampleCode::TitleR(evt, "AA Rects"); 54 return true; 55 } 56 return this->INHERITED::onQuery(evt); 57 } 58 59 virtual void onDrawContent(SkCanvas* canvas) { 60 canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); 61 62 SkPaint bluePaint; 63 bluePaint.setARGB(0xff, 0x0, 0x0, 0xff); 64 SkPaint bmpPaint; 65 SkShader* bmpShader = SkShader::CreateBitmapShader(fBitmap, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode); 66 bmpPaint.setShader(bmpShader); 67 bmpShader->unref(); 68 69 bluePaint.setStrokeWidth(3); 70 bmpPaint.setStrokeWidth(3); 71 72 SkPaint paints[] = { bluePaint, bmpPaint }; 73 74 SkRect rect; 75 76 SkScalar dx = SkIntToScalar(80); 77 SkScalar dy = SkIntToScalar(100); 78 SkMatrix matrix; 79 for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) { 80 for (int stroke = 0; stroke < 2; ++stroke) { 81 paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style); 82 for (int a = 0; a < 3; ++ a) { 83 paints[p].setAntiAlias(a > 0); 84 paints[p].setAlpha(a > 1 ? 0x80 : 0xff); 85 86 canvas->save(); 87 rect = SkRect::MakeLTRB(0.f, 88 0.f, 89 40.f, 90 40.f); 91 canvas->drawRect(rect, paints[p]); 92 canvas->translate(dx, 0); 93 94 rect = SkRect::MakeLTRB(0.5f, 95 0.5f, 96 40.5f, 97 40.5f); 98 canvas->drawRect(rect, paints[p]); 99 canvas->translate(dx, 0); 100 101 rect = SkRect::MakeLTRB(0.5f, 102 0.5f, 103 40.f, 104 40.f); 105 canvas->drawRect(rect, paints[p]); 106 canvas->translate(dx, 0); 107 108 rect = SkRect::MakeLTRB(0.75f, 109 0.75f, 110 40.75f, 111 40.75f); 112 canvas->drawRect(rect, paints[p]); 113 canvas->translate(dx, 0); 114 115 canvas->save(); 116 canvas->translate(.33f, .67f); 117 rect = SkRect::MakeLTRB(0.0f, 118 0.0f, 119 40.0f, 120 40.0f); 121 canvas->drawRect(rect, paints[p]); 122 canvas->restore(); 123 canvas->translate(dx, 0); 124 125 canvas->save(); 126 matrix.setRotate(45.f); 127 canvas->concat(matrix); 128 canvas->translate(20.0f / sqrtf(2.f), 129 20.0f / sqrtf(2.f)); 130 rect = SkRect::MakeLTRB(-20.0f, 131 -20.0f, 132 20.0f, 133 20.0f); 134 canvas->drawRect(rect, paints[p]); 135 canvas->restore(); 136 canvas->translate(dx, 0); 137 138 canvas->save(); 139 canvas->rotate(90.f); 140 rect = SkRect::MakeLTRB(0.0f, 141 0.0f, 142 40.0f, 143 -40.0f); 144 canvas->drawRect(rect, paints[p]); 145 canvas->restore(); 146 canvas->translate(dx, 0); 147 148 canvas->save(); 149 canvas->rotate(90.f); 150 rect = SkRect::MakeLTRB(0.5f, 151 0.5f, 152 40.5f, 153 -40.5f); 154 canvas->drawRect(rect, paints[p]); 155 canvas->restore(); 156 canvas->translate(dx, 0); 157 158 canvas->save(); 159 matrix.setScale(-1.f, -1.f); 160 canvas->concat(matrix); 161 rect = SkRect::MakeLTRB(0.5f, 162 0.5f, 163 -40.5f, 164 -40.5f); 165 canvas->drawRect(rect, paints[p]); 166 canvas->restore(); 167 canvas->translate(dx, 0); 168 169 canvas->save(); 170 matrix.setScale(2.1f, 4.1f); 171 canvas->concat(matrix); 172 rect = SkRect::MakeLTRB(0.1f, 173 0.1f, 174 19.1f, 175 9.1f); 176 canvas->drawRect(rect, paints[p]); 177 canvas->restore(); 178 canvas->translate(dx, 0); 179 180 canvas->restore(); 181 canvas->translate(0, dy); 182 } 183 } 184 } 185 } 186 187 private: 188 int fWidth; 189 190 typedef SampleView INHERITED; 191 }; 192 193 ////////////////////////////////////////////////////////////////////////////// 194 195 static SkView* MyFactory() { return new AARectView; } 196 static SkViewRegister reg(MyFactory); 197