SampleAARects.cpp revision 0b15698a8c76bb8abc1b555c1d91892669b4118f
10b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SampleCode.h" 20b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkView.h" 30b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkCanvas.h" 40b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkDevice.h" 50b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkPaint.h" 60b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkShader.h" 70b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 80b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkBitmap createBitmap(int n) { 90b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkBitmap bitmap; 100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bitmap.setConfig(SkBitmap::kARGB_8888_Config, n, n); 110b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bitmap.allocPixels(); 120b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bitmap.eraseColor(SK_ColorGREEN); 130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkCanvas canvas(bitmap); 150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkRect r; 160b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n)); 170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkPaint paint; 180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paint.setAntiAlias(true); 190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paint.setColor(SK_ColorRED); 210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas.drawOval(r, paint); 220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paint.setColor(SK_ColorBLUE); 230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paint.setStrokeWidth(SkIntToScalar(n)/15); 240b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paint.setStyle(SkPaint::kStroke_Style); 250b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas.drawLine(0, 0, r.fRight, r.fBottom, paint); 260b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas.drawLine(0, r.fBottom, r.fRight, 0, paint); 270b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 280b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger return bitmap; 290b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger} 300b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 310b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass AARectView : public SampleView { 320b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkBitmap fBitmap; 330b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger enum { 340b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger N = 64 350b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger }; 360b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerpublic: 370b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger AARectView() { 380b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger fBitmap = createBitmap(N); 390b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 400b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger fWidth = N; 410b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 420b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 430b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprotected: 440b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger // overrides from SkEventSink 450b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger virtual bool onQuery(SkEvent* evt) { 460b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger if (SampleCode::TitleQ(*evt)) { 470b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SampleCode::TitleR(evt, "AA Rects"); 480b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger return true; 490b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 500b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger return this->INHERITED::onQuery(evt); 510b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 520b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 530b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger virtual void onDrawContent(SkCanvas* canvas) { 540b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); 550b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 560b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkPaint bluePaint; 570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bluePaint.setARGB(0xff, 0x0, 0x0, 0xff); 580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkPaint bmpPaint; 590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkShader* bmpShader = SkShader::CreateBitmapShader(fBitmap, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode); 600b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bmpPaint.setShader(bmpShader); 610b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bmpShader->unref(); 620b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 630b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bluePaint.setStrokeWidth(3); 640b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger bmpPaint.setStrokeWidth(3); 650b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 660b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkPaint paints[] = { bluePaint, bmpPaint }; 670b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 680b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkRect rect; 690b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 700b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkScalar dx = SkIntToScalar(80); 710b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkScalar dy = SkIntToScalar(100); 720b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkMatrix matrix; 730b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) { 740b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger for (int stroke = 0; stroke < 2; ++stroke) { 750b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style); 760b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger for (int a = 0; a < 3; ++ a) { 770b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paints[p].setAntiAlias(a > 0); 780b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger paints[p].setAlpha(a > 1 ? 0x80 : 0xff); 790b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 800b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->save(); 810b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.f), 820b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.f), 830b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.f), 840b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.f)); 850b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 860b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 870b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 880b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f), 890b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.5f), 900b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.5f), 910b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.5f)); 920b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 930b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 940b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 950b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f), 960b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.5f), 970b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.f), 980b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.f)); 990b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1000b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1010b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1020b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.75f), 1030b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.75f), 1040b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.75f), 1050b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.75f)); 1060b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1070b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1080b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1090b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->save(); 1100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(SkFloatToScalar(.33f), SkFloatToScalar(.67f)); 1110b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f), 1120b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.0f), 1130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.0f), 1140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.0f)); 1150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1160b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->restore(); 1170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->save(); 1200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger matrix.setRotate(SkFloatToScalar(45.f)); 1210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->concat(matrix); 1220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(SkFloatToScalar(20.0f / sqrtf(2.f)), 1230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(20.0f / sqrtf(2.f))); 1240b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(-20.0f), 1250b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(-20.0f), 1260b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(20.0f), 1270b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(20.0f)); 1280b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1290b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->restore(); 1300b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1310b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1320b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->save(); 1330b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->rotate(SkFloatToScalar(90.f)); 1340b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.0f), 1350b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.0f), 1360b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.0f), 1370b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(-40.0f)); 1380b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1390b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->restore(); 1400b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1410b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1420b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->save(); 1430b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->rotate(SkFloatToScalar(90.f)); 1440b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f), 1450b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.5f), 1460b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(40.5f), 1470b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(-40.5f)); 1480b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1490b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->restore(); 1500b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1510b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1520b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->save(); 1530b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger matrix.setScale(SkFloatToScalar(-1.f), SkFloatToScalar(-1.f)); 1540b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->concat(matrix); 1550b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.5f), 1560b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.5f), 1570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(-40.5f), 1580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(-40.5f)); 1590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1600b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->restore(); 1610b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1620b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1630b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->save(); 1640b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger matrix.setScale(SkFloatToScalar(2.1f), SkFloatToScalar(4.1f)); 1650b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->concat(matrix); 1660b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger rect = SkRect::MakeLTRB(SkFloatToScalar(0.1f), 1670b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(0.1f), 1680b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(19.1f), 1690b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger SkFloatToScalar(9.1f)); 1700b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->drawRect(rect, paints[p]); 1710b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->restore(); 1720b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(dx, 0); 1730b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1740b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->restore(); 1750b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger canvas->translate(0, dy); 1760b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 1770b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 1780b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 1790b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger } 1800b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1810b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprivate: 1820b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger int fWidth; 1830b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1840b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger typedef SampleView INHERITED; 1850b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger}; 1860b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1870b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger////////////////////////////////////////////////////////////////////////////// 1880b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 1890b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkView* MyFactory() { return new AARectView; } 1900b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkViewRegister reg(MyFactory); 1910b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 192