150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org/* 250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org * Copyright 2012 Google Inc. 350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org * 450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org * Use of this source code is governed by a BSD-style license that can be 550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org * found in the LICENSE file. 650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org */ 750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SampleCode.h" 950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkView.h" 1050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkCanvas.h" 1150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkPath.h" 1250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkRegion.h" 1350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkShader.h" 1450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkUtils.h" 1550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkImage.h" 1650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org#include "SkSurface.h" 1750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 18c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com#define FAT_PIXEL_COLOR SK_ColorBLACK 19c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com#define PIXEL_CENTER_SIZE 3 20c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com#define WIRE_FRAME_COLOR 0xFFFF0000 /*0xFF00FFFF*/ 21c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com#define WIRE_FRAME_SIZE 1.5f 22c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 23bbe66f0824dc47823826f6265879d7a57843fed3reed@google.comstatic SkScalar apply_grid(SkScalar x) { 24bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com const SkScalar grid = 2; 25bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com return SkScalarRoundToScalar(x * grid) / grid; 26bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com} 27bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 28bbe66f0824dc47823826f6265879d7a57843fed3reed@google.comstatic void apply_grid(SkPoint pts[], int count) { 29bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com for (int i = 0; i < count; ++i) { 30bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com pts[i].set(apply_grid(pts[i].fX), apply_grid(pts[i].fY)); 31bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com } 32bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com} 33bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 3450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgstatic void erase(SkSurface* surface) { 35dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com surface->getCanvas()->clear(SK_ColorTRANSPARENT); 3650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org} 3750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 385970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.orgstatic SkShader* createChecker(const SkMatrix& localMatrix) { 399c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com// SkColor colors[] = { 0xFFFDFDFD, 0xFFF4F4F4 }; 409c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com SkColor colors[] = { 0xFFFFFFFF, 0xFFFFFFFF }; 4150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkBitmap bm; 42a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org bm.allocN32Pixels(2, 2); 4350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org bm.lockPixels(); 449c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com *bm.getAddr32(0, 0) = *bm.getAddr32(1, 1) = SkPreMultiplyColor(colors[0]); 459c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com *bm.getAddr32(0, 1) = *bm.getAddr32(1, 0) = SkPreMultiplyColor(colors[1]); 469c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org return SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode, 475970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org SkShader::kRepeat_TileMode, &localMatrix); 4850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org} 4950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 5050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgclass FatBits { 5150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgpublic: 525970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org FatBits() { 5350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fAA = false; 5450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fStyle = kHair_Style; 5550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fGrid = true; 56c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com fShowSkeleton = true; 57c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com fUseGPU = false; 589c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fUseClip = false; 5964494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org fRectAsOval = false; 60bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fUseTriangle = false; 611aa90cf11e136a722bce71dd77f4bb03cc2b56f8skia.committer@gmail.com 629c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fClipRect.set(2, 2, 11, 8 ); 6350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 6450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 65ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com int getZoom() const { return fZoom; } 66c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 6750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org bool getAA() const { return fAA; } 6850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void setAA(bool aa) { fAA = aa; } 6950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 7050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org bool getGrid() const { return fGrid; } 7150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void setGrid(bool g) { fGrid = g; } 7245ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 73c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com bool getShowSkeleton() const { return fShowSkeleton; } 74c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com void setShowSkeleton(bool ss) { fShowSkeleton = ss; } 7545ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 76c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com bool getUseGPU() const { return fUseGPU; } 77c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com void setUseGPU(bool ug) { fUseGPU = ug; } 787ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 79bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com bool getTriangle() const { return fUseTriangle; } 80bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com void setTriangle(bool ut) { fUseTriangle = ut; } 817ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 8264494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org void toggleRectAsOval() { fRectAsOval = !fRectAsOval; } 8364494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org 849c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com bool getUseClip() const { return fUseClip; } 859c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com void setUseClip(bool uc) { fUseClip = uc; } 869c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com 8750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org enum Style { 8850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org kHair_Style, 89c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com kStroke_Style, 9050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org }; 9150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org Style getStyle() const { return fStyle; } 9250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void setStyle(Style s) { fStyle = s; } 9350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 9450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void setWHZ(int width, int height, int zoom) { 9550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fW = width; 9650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fH = height; 97ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com fZoom = zoom; 9850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fBounds.set(0, 0, SkIntToScalar(width * zoom), SkIntToScalar(height * zoom)); 9950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fMatrix.setScale(SkIntToScalar(zoom), SkIntToScalar(zoom)); 10050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fInverse.setScale(SK_Scalar1 / zoom, SK_Scalar1 / zoom); 1015970f625e96cdc007c563ae72f343ae0d71719a1commit-bot@chromium.org fShader.reset(createChecker(fMatrix)); 10245ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 10332678d9a453e2c9fd26e92be429cdd84250b4d85commit-bot@chromium.org SkImageInfo info = SkImageInfo::MakeN32Premul(width, height); 104bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fMinSurface.reset(SkSurface::NewRaster(info)); 105bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com info.fWidth *= zoom; 106bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com info.fHeight *= zoom; 107bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fMaxSurface.reset(SkSurface::NewRaster(info)); 10850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 10950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 11050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void drawBG(SkCanvas*); 11150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void drawFG(SkCanvas*); 11250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void drawLine(SkCanvas*, SkPoint pts[2]); 11350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void drawRect(SkCanvas* canvas, SkPoint pts[2]); 114bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com void drawTriangle(SkCanvas* canvas, SkPoint pts[3]); 11550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 11650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgprivate: 117bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com bool fAA, fGrid, fShowSkeleton, fUseGPU, fUseClip, fRectAsOval, fUseTriangle; 11850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org Style fStyle; 119ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com int fW, fH, fZoom; 12050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkMatrix fMatrix, fInverse; 1219c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com SkRect fBounds, fClipRect; 12250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkAutoTUnref<SkShader> fShader; 12350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkAutoTUnref<SkSurface> fMinSurface; 12450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkAutoTUnref<SkSurface> fMaxSurface; 12550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 12650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void setupPaint(SkPaint* paint) { 12750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org bool aa = this->getAA(); 12850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org switch (fStyle) { 12950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org case kHair_Style: 13050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org paint->setStrokeWidth(0); 13150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org break; 13250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org case kStroke_Style: 133cdbcb3ecc78a48a62503c67b01a0e2322d07fe29reed@google.com paint->setStrokeWidth(SK_Scalar1); 13450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org break; 13550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 13650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org paint->setAntiAlias(aa); 13750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 13850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 139c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com void setupSkeletonPaint(SkPaint* paint) { 140c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com paint->setStyle(SkPaint::kStroke_Style); 141c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com paint->setStrokeWidth(WIRE_FRAME_SIZE); 142c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com paint->setColor(fShowSkeleton ? WIRE_FRAME_COLOR : 0); 143c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com paint->setAntiAlias(true); 144c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com } 145c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 146bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com void drawTriangleSkeleton(SkCanvas* max, const SkPoint pts[]); 14750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void drawLineSkeleton(SkCanvas* max, const SkPoint pts[]); 14850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void drawRectSkeleton(SkCanvas* max, const SkRect& r) { 14950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPaint paint; 150c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com this->setupSkeletonPaint(&paint); 151c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com SkPath path; 152c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 153c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com if (fUseGPU && fAA) { 154c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com SkRect rr = r; 155ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com rr.inset(SkIntToScalar(fZoom)/2, SkIntToScalar(fZoom)/2); 156c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.addRect(rr); 157c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.moveTo(rr.fLeft, rr.fTop); 158c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.lineTo(rr.fRight, rr.fBottom); 159c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com rr = r; 160ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com rr.inset(-SkIntToScalar(fZoom)/2, -SkIntToScalar(fZoom)/2); 161c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.addRect(rr); 162c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com } else { 16364494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org fRectAsOval ? path.addOval(r) : path.addRect(r); 164c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com if (fUseGPU) { 165c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.moveTo(r.fLeft, r.fTop); 166c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.lineTo(r.fRight, r.fBottom); 167c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com } 168c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com } 169c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com max->drawPath(path, paint); 17050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 17145ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 17250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void copyMinToMax() { 17350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org erase(fMaxSurface); 17450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkCanvas* canvas = fMaxSurface->getCanvas(); 17550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org canvas->save(); 17650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org canvas->concat(fMatrix); 17750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fMinSurface->draw(canvas, 0, 0, NULL); 17850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org canvas->restore(); 17950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 18050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPaint paint; 18150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org paint.setXfermodeMode(SkXfermode::kClear_Mode); 18250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org for (int iy = 1; iy < fH; ++iy) { 183ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com SkScalar y = SkIntToScalar(iy * fZoom); 18450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org canvas->drawLine(0, y - SK_ScalarHalf, 999, y - SK_ScalarHalf, paint); 18550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 18650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org for (int ix = 1; ix < fW; ++ix) { 187ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com SkScalar x = SkIntToScalar(ix * fZoom); 18850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org canvas->drawLine(x - SK_ScalarHalf, 0, x - SK_ScalarHalf, 999, paint); 18950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 19050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 19150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org}; 19250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 19350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgvoid FatBits::drawBG(SkCanvas* canvas) { 19450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPaint paint; 19550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 19650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org paint.setShader(fShader); 19750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org canvas->drawRect(fBounds, paint); 19850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org paint.setShader(NULL); 19950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org} 20050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 20150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgvoid FatBits::drawFG(SkCanvas* canvas) { 202c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com SkPaint inner, outer; 203c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 204c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com inner.setAntiAlias(true); 205c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com inner.setColor(SK_ColorBLACK); 206c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com inner.setStrokeWidth(PIXEL_CENTER_SIZE); 207c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com 208c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com outer.setAntiAlias(true); 209c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com outer.setColor(SK_ColorWHITE); 210c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com outer.setStrokeWidth(PIXEL_CENTER_SIZE + 2); 21150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 212ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com SkScalar half = SkIntToScalar(fZoom) / 2; 21350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org for (int iy = 0; iy < fH; ++iy) { 214ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com SkScalar y = SkIntToScalar(iy * fZoom) + half; 21550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org for (int ix = 0; ix < fW; ++ix) { 216ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com SkScalar x = SkIntToScalar(ix * fZoom) + half; 21745ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 218c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com canvas->drawPoint(x, y, outer); 219c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com canvas->drawPoint(x, y, inner); 22050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 22150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 2229c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com 2239c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com if (fUseClip) { 2249c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com SkPaint p; 2259c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com p.setStyle(SkPaint::kStroke_Style); 2269c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com p.setColor(SK_ColorLTGRAY); 2279c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com SkRect r = { 228ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com fClipRect.fLeft * fZoom, 229ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com fClipRect.fTop * fZoom, 230ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com fClipRect.fRight * fZoom, 231ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com fClipRect.fBottom * fZoom 2329c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com }; 2339c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com canvas->drawRect(r, p); 2349c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com } 23550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org} 23650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 23750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgvoid FatBits::drawLineSkeleton(SkCanvas* max, const SkPoint pts[]) { 23850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPaint paint; 239c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com this->setupSkeletonPaint(&paint); 24045ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 24150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPath path; 24250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org path.moveTo(pts[0]); 24350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org path.lineTo(pts[1]); 24445ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 24550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org switch (fStyle) { 24650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org case kHair_Style: 247c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com if (fUseGPU) { 248c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com SkPaint p; 249c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com p.setStyle(SkPaint::kStroke_Style); 250ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com p.setStrokeWidth(SK_Scalar1 * fZoom); 251c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com SkPath dst; 252c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com p.getFillPath(path, &dst); 253c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.addPath(dst); 254c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com } 25550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org break; 25650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org case kStroke_Style: { 25750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPaint p; 25850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org p.setStyle(SkPaint::kStroke_Style); 259ca47aae7ecfdafb5e88baee13737908b79a4c716robertphillips@google.com p.setStrokeWidth(SK_Scalar1 * fZoom); 26050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPath dst; 26150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org p.getFillPath(path, &dst); 26250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org path = dst; 26345ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 264c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com if (fUseGPU) { 265c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.moveTo(dst.getPoint(0)); 266c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com path.lineTo(dst.getPoint(2)); 267c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com } 26850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } break; 26950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 27050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org max->drawPath(path, paint); 27150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org} 27250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 27350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgvoid FatBits::drawLine(SkCanvas* canvas, SkPoint pts[]) { 27450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPaint paint; 27545ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 27650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fInverse.mapPoints(pts, 2); 27745ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 27850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org if (fGrid) { 279bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com apply_grid(pts, 2); 28050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 28145ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 28250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org erase(fMinSurface); 28350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->setupPaint(&paint); 284c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com paint.setColor(FAT_PIXEL_COLOR); 2859c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com if (fUseClip) { 2869c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fMinSurface->getCanvas()->save(); 2879c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com SkRect r = fClipRect; 2889c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com r.inset(SK_Scalar1/3, SK_Scalar1/3); 2899c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fMinSurface->getCanvas()->clipRect(r, SkRegion::kIntersect_Op, true); 2909c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com } 29150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fMinSurface->getCanvas()->drawLine(pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, paint); 2929c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com if (fUseClip) { 2939c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fMinSurface->getCanvas()->restore(); 2949c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com } 29550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->copyMinToMax(); 29645ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 29750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkCanvas* max = fMaxSurface->getCanvas(); 29845ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 29950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fMatrix.mapPoints(pts, 2); 30050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->drawLineSkeleton(max, pts); 30145ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 30250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fMaxSurface->draw(canvas, 0, 0, NULL); 30350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org} 30450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 30550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgvoid FatBits::drawRect(SkCanvas* canvas, SkPoint pts[2]) { 30650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPaint paint; 30745ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 30850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fInverse.mapPoints(pts, 2); 30945ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 31050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org if (fGrid) { 311bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com apply_grid(pts, 2); 31250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 31345ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 31450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkRect r; 31550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org r.set(pts, 2); 31650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 31750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org erase(fMinSurface); 31850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->setupPaint(&paint); 319c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com paint.setColor(FAT_PIXEL_COLOR); 32064494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org { 32164494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org SkCanvas* c = fMinSurface->getCanvas(); 32264494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org fRectAsOval ? c->drawOval(r, paint) : c->drawRect(r, paint); 32364494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org } 32450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->copyMinToMax(); 32545ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 32650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkCanvas* max = fMaxSurface->getCanvas(); 32745ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 32850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fMatrix.mapPoints(pts, 2); 32950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org r.set(pts, 2); 33050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->drawRectSkeleton(max, r); 33145ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 33250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fMaxSurface->draw(canvas, 0, 0, NULL); 33350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org} 33450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 335bbe66f0824dc47823826f6265879d7a57843fed3reed@google.comvoid FatBits::drawTriangleSkeleton(SkCanvas* max, const SkPoint pts[]) { 336bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SkPaint paint; 337bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com this->setupSkeletonPaint(&paint); 3387ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 339bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SkPath path; 340bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.moveTo(pts[0]); 341bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.lineTo(pts[1]); 342bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.lineTo(pts[2]); 343bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.close(); 3447ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 345bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com max->drawPath(path, paint); 346bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com} 347bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 348bbe66f0824dc47823826f6265879d7a57843fed3reed@google.comvoid FatBits::drawTriangle(SkCanvas* canvas, SkPoint pts[3]) { 349bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SkPaint paint; 3507ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 351bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fInverse.mapPoints(pts, 3); 3527ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 353bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com if (fGrid) { 354bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com apply_grid(pts, 3); 355bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com } 3567ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 357bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SkPath path; 358bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.moveTo(pts[0]); 359bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.lineTo(pts[1]); 360bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.lineTo(pts[2]); 361bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com path.close(); 3627ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 363bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com erase(fMinSurface); 364bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com this->setupPaint(&paint); 365bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com paint.setColor(FAT_PIXEL_COLOR); 366bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fMinSurface->getCanvas()->drawPath(path, paint); 367bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com this->copyMinToMax(); 3687ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 369bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SkCanvas* max = fMaxSurface->getCanvas(); 3707ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 371bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fMatrix.mapPoints(pts, 3); 372bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com this->drawTriangleSkeleton(max, pts); 3737ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 374bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fMaxSurface->draw(canvas, 0, 0, NULL); 375bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com} 376bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com 37750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org/////////////////////////////////////////////////////////////////////////////////////////////////// 37850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 37950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgclass IndexClick : public SkView::Click { 38050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org int fIndex; 38150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgpublic: 38250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org IndexClick(SkView* v, int index) : SkView::Click(v), fIndex(index) {} 38345ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 38450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org static int GetIndex(SkView::Click* click) { 38550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return ((IndexClick*)click)->fIndex; 38650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 38750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org}; 38850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 38950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgclass DrawLineView : public SampleView { 39050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org FatBits fFB; 391bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com SkPoint fPts[3]; 39250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org bool fIsRect; 39350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgpublic: 39450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org DrawLineView() { 39550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.setWHZ(24, 16, 48); 396cdbcb3ecc78a48a62503c67b01a0e2322d07fe29reed@google.com fPts[0].set(48, 48); 397cdbcb3ecc78a48a62503c67b01a0e2322d07fe29reed@google.com fPts[1].set(48 * 5, 48 * 4); 398bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fPts[2].set(48 * 2, 48 * 6); 399cdbcb3ecc78a48a62503c67b01a0e2322d07fe29reed@google.com fIsRect = false; 40050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 40145ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 40250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org void setStyle(FatBits::Style s) { 40350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.setStyle(s); 40450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->inval(NULL); 40550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 40650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 40750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgprotected: 40850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org virtual bool onQuery(SkEvent* evt) SK_OVERRIDE { 40950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org if (SampleCode::TitleQ(*evt)) { 41050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SampleCode::TitleR(evt, "FatBits"); 41150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return true; 41250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 41350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkUnichar uni; 41450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org if (SampleCode::CharQ(*evt, &uni)) { 41550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org switch (uni) { 4169c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com case 'c': 4179c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fFB.setUseClip(!fFB.getUseClip()); 4189c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com this->inval(NULL); 4199c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com return true; 42050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org case 'r': 42150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fIsRect = !fIsRect; 42250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->inval(NULL); 42350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return true; 42464494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org case 'o': 42564494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org fFB.toggleRectAsOval(); 42664494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org this->inval(NULL); 42764494e99af8f834a0343a4d1ee0aa4c2860e13a3mike@reedtribe.org return true; 428c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com case 'x': 42950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.setGrid(!fFB.getGrid()); 43050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->inval(NULL); 43150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return true; 43250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org case 's': 43350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org if (FatBits::kStroke_Style == fFB.getStyle()) { 43450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->setStyle(FatBits::kHair_Style); 43550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } else { 43650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->setStyle(FatBits::kStroke_Style); 43750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 43850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return true; 43950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org case 'a': 44050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.setAA(!fFB.getAA()); 44150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->inval(NULL); 44250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return true; 443c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com case 'w': 444c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com fFB.setShowSkeleton(!fFB.getShowSkeleton()); 445c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com this->inval(NULL); 446c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com return true; 447c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com case 'g': 448c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com fFB.setUseGPU(!fFB.getUseGPU()); 449c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com this->inval(NULL); 450c83e352c18858b7fd5fad62b395e83d09a4feaa6reed@google.com return true; 451bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com case 't': 452bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fFB.setTriangle(!fFB.getTriangle()); 453bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com this->inval(NULL); 454bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com return true; 45550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 45650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 45750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return this->INHERITED::onQuery(evt); 45850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 45945ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 46050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org virtual void onDrawContent(SkCanvas* canvas) { 46150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.drawBG(canvas); 462bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com if (fFB.getTriangle()) { 463bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fFB.drawTriangle(canvas, fPts); 464bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com } 465bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com else if (fIsRect) { 46650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.drawRect(canvas, fPts); 46750e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } else { 46850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.drawLine(canvas, fPts); 46950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 47050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org fFB.drawFG(canvas); 4711e34ff7030c95a96c3cd5940de9b4dda4e1cef86skia.committer@gmail.com 472ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com { 473ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com SkString str; 4749c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com str.printf("%s %s %s %s", 475ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com fFB.getAA() ? "AA" : "BW", 476ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com FatBits::kHair_Style == fFB.getStyle() ? "Hair" : "Stroke", 4779c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fFB.getUseGPU() ? "GPU" : "CPU", 4789c0bef18e30c37dc01d325fe6c930cd7861207f5reed@google.com fFB.getUseClip() ? "clip" : "noclip"); 479ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com SkPaint paint; 480ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com paint.setAntiAlias(true); 481ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com paint.setTextSize(16); 482ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com paint.setColor(SK_ColorBLUE); 483ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com canvas->drawText(str.c_str(), str.size(), 10, 16, paint); 484ffe9d01e39a46376e8b233d5fded3dbaec0d492ereed@google.com } 48550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 48650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 487093455c116c016e95c47740ef7385f8a3372f160mike@reedtribe.org virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, 488093455c116c016e95c47740ef7385f8a3372f160mike@reedtribe.org unsigned modi) SK_OVERRIDE { 48950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org SkPoint pt = { x, y }; 49050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org int index = -1; 491bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com int count = fFB.getTriangle() ? 3 : 2; 492cdbcb3ecc78a48a62503c67b01a0e2322d07fe29reed@google.com SkScalar tol = 12; 4937ed98df9ba14bdb58e381508eb0505c963a4b6dbskia.committer@gmail.com 494bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com for (int i = 0; i < count; ++i) { 495bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com if (fPts[i].equalsWithinTolerance(pt, tol)) { 496bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com index = i; 497bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com break; 498bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com } 49950e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 500c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org return new IndexClick(this, index); 50150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 50245ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 503093455c116c016e95c47740ef7385f8a3372f160mike@reedtribe.org virtual bool onClick(Click* click) SK_OVERRIDE { 50450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org int index = IndexClick::GetIndex(click); 505bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com if (index >= 0 && index <= 2) { 506c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org fPts[index] = click->fCurr; 507c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org } else { 508c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org SkScalar dx = click->fCurr.fX - click->fPrev.fX; 509c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org SkScalar dy = click->fCurr.fY - click->fPrev.fY; 510c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org fPts[0].offset(dx, dy); 511c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org fPts[1].offset(dx, dy); 512bbe66f0824dc47823826f6265879d7a57843fed3reed@google.com fPts[2].offset(dx, dy); 513c892a153aabb04da31756acad076fddc6b1ea00emike@reedtribe.org } 51450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org this->inval(NULL); 51550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org return true; 51650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org } 51745ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 51850e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgprivate: 51945ba2f773364771dc4a4831246bcb1e0f0992bedskia.committer@gmail.com 52050e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org typedef SampleView INHERITED; 52150e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org}; 52250e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 52350e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org////////////////////////////////////////////////////////////////////////////// 52450e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.org 52550e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgstatic SkView* MyFactory() { return new DrawLineView; } 52650e4c72445e012f070cd42124f636cf8cb837307mike@reedtribe.orgstatic SkViewRegister reg(MyFactory); 527