1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SampleCode.h" 8205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkView.h" 9205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkCanvas.h" 10205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkPaint.h" 11205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkShader.h" 12205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 13205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comstatic SkBitmap createBitmap(int n) { 14205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkBitmap bitmap; 15a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org bitmap.allocN32Pixels(n, n); 16205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com bitmap.eraseColor(SK_ColorGREEN); 17ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 18205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkCanvas canvas(bitmap); 19205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkRect r; 20205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n)); 21205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkPaint paint; 22205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paint.setAntiAlias(true); 23ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 24205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paint.setColor(SK_ColorRED); 25205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas.drawOval(r, paint); 26205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paint.setColor(SK_ColorBLUE); 27205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paint.setStrokeWidth(SkIntToScalar(n)/15); 28205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paint.setStyle(SkPaint::kStroke_Style); 29205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas.drawLine(0, 0, r.fRight, r.fBottom, paint); 30205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas.drawLine(0, r.fBottom, r.fRight, 0, paint); 31ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 32205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com return bitmap; 33205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com} 34205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 3570b6125ed2dbae26f97d119f783e95e816480729reed@google.comclass AARectView : public SampleView { 36205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkBitmap fBitmap; 37205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com enum { 38205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com N = 64 39205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com }; 40205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.compublic: 41205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com AARectView() { 42205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com fBitmap = createBitmap(N); 43ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 44205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com fWidth = N; 45205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com } 46ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 47205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comprotected: 48205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com // overrides from SkEventSink 49205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com virtual bool onQuery(SkEvent* evt) { 50205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com if (SampleCode::TitleQ(*evt)) { 51205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SampleCode::TitleR(evt, "AA Rects"); 52205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com return true; 53205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com } 54205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com return this->INHERITED::onQuery(evt); 55205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com } 56205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 5770b6125ed2dbae26f97d119f783e95e816480729reed@google.com virtual void onDrawContent(SkCanvas* canvas) { 58205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); 59205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 60205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkPaint bluePaint; 61205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com bluePaint.setARGB(0xff, 0x0, 0x0, 0xff); 62205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkPaint bmpPaint; 638a21c9fe7f5fef9e87115defef27bd7218419f28reed bmpPaint.setShader(SkShader::MakeBitmapShader(fBitmap, SkShader::kRepeat_TileMode, 648a21c9fe7f5fef9e87115defef27bd7218419f28reed SkShader::kRepeat_TileMode)); 65205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com bluePaint.setStrokeWidth(3); 66205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com bmpPaint.setStrokeWidth(3); 67205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 68205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkPaint paints[] = { bluePaint, bmpPaint }; 69205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 70205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkRect rect; 71205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 72205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkScalar dx = SkIntToScalar(80); 73205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkScalar dy = SkIntToScalar(100); 74205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com SkMatrix matrix; 7564cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) { 76205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com for (int stroke = 0; stroke < 2; ++stroke) { 77205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style); 78205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com for (int a = 0; a < 3; ++ a) { 79205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paints[p].setAntiAlias(a > 0); 80205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com paints[p].setAlpha(a > 1 ? 0x80 : 0xff); 81205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 82205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->save(); 834b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.f, 844b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.f, 854b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.f, 864b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.f); 87205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 88205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 89205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 904b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.5f, 914b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.5f, 924b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.5f, 934b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.5f); 94205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 95205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 96205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 974b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.5f, 984b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.5f, 994b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.f, 1004b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.f); 101205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 102205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 103205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 1044b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.75f, 1054b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.75f, 1064b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.75f, 1074b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.75f); 108205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 109205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 110205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 111205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->save(); 1124b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org canvas->translate(.33f, .67f); 1134b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.0f, 1144b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.0f, 1154b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.0f, 1164b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.0f); 117205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 118205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->restore(); 119205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 120205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 121205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->save(); 1224b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix.setRotate(45.f); 123205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->concat(matrix); 1244b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org canvas->translate(20.0f / sqrtf(2.f), 1254b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 20.0f / sqrtf(2.f)); 1264b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(-20.0f, 1274b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org -20.0f, 1284b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 20.0f, 1294b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 20.0f); 130205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 131205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->restore(); 132205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 133205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 134205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->save(); 1354b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org canvas->rotate(90.f); 1364b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.0f, 1374b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.0f, 1384b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.0f, 1394b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org -40.0f); 140205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 141205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->restore(); 142205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 143205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 144205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->save(); 1454b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org canvas->rotate(90.f); 1464b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.5f, 1474b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.5f, 1484b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 40.5f, 1494b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org -40.5f); 150205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 151205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->restore(); 152205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 153205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 154205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->save(); 1554b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix.setScale(-1.f, -1.f); 156205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->concat(matrix); 1574b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.5f, 1584b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.5f, 1594b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org -40.5f, 1604b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org -40.5f); 161205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 162205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->restore(); 163205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 164205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 165205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->save(); 1664b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org matrix.setScale(2.1f, 4.1f); 167205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->concat(matrix); 1684b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org rect = SkRect::MakeLTRB(0.1f, 1694b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 0.1f, 1704b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 19.1f, 1714b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org 9.1f); 172205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->drawRect(rect, paints[p]); 173205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->restore(); 174205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(dx, 0); 175205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 176205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->restore(); 177205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com canvas->translate(0, dy); 178205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com } 179205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com } 180205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com } 181205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com } 182ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 183205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comprivate: 184205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com int fWidth; 185205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 18670b6125ed2dbae26f97d119f783e95e816480729reed@google.com typedef SampleView INHERITED; 187205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com}; 188205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 189205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com////////////////////////////////////////////////////////////////////////////// 190205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com 191205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comstatic SkView* MyFactory() { return new AARectView; } 192205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comstatic SkViewRegister reg(MyFactory); 193