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