1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SampleCode.h" 9837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkView.h" 10837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkCanvas.h" 118b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkReadBuffer.h" 128b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkWriteBuffer.h" 13837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkGradientShader.h" 14837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkPath.h" 15837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkRegion.h" 16837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkShader.h" 17837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkUtils.h" 18837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkColorPriv.h" 19837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkColorFilter.h" 20837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkTypeface.h" 21837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkAvoidXfermode.h" 22837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 23102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.orgstatic inline SkPMColor rgb2gray(SkPMColor c) { 24837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com unsigned r = SkGetPackedR32(c); 25837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com unsigned g = SkGetPackedG32(c); 26837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com unsigned b = SkGetPackedB32(c); 27dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 2864cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org unsigned x = (r * 5 + g * 7 + b * 4) >> 4; 29dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 30837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return SkPackARGB32(0, x, x, x) | (c & (SK_A32_MASK << SK_A32_SHIFT)); 31837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com} 32837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 33837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comclass SkGrayScaleColorFilter : public SkColorFilter { 34837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.compublic: 35102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org virtual void filterSpan(const SkPMColor src[], int count, 36102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org SkPMColor result[]) const SK_OVERRIDE { 37102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org for (int i = 0; i < count; i++) { 38837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com result[i] = rgb2gray(src[i]); 39102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org } 40837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 41837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 42837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 43837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comclass SkChannelMaskColorFilter : public SkColorFilter { 44837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.compublic: 45102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org SkChannelMaskColorFilter(U8CPU redMask, U8CPU greenMask, U8CPU blueMask) { 46837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fMask = SkPackARGB32(0xFF, redMask, greenMask, blueMask); 47837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 48837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 49102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org virtual void filterSpan(const SkPMColor src[], int count, 50102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org SkPMColor result[]) const SK_OVERRIDE { 51837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPMColor mask = fMask; 52102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org for (int i = 0; i < count; i++) { 53837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com result[i] = src[i] & mask; 54102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org } 55837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 56dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 57837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprivate: 58837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPMColor fMask; 59837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 60837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 61102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org/////////////////////////////////////////////////////////////////////////////// 62837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 63837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkGradientShader.h" 64837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkLayerRasterizer.h" 65837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkBlurMaskFilter.h" 66837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 67837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "Sk2DPathEffect.h" 68837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 69837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comclass Dot2DPathEffect : public Sk2DPathEffect { 70837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.compublic: 71837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com Dot2DPathEffect(SkScalar radius, const SkMatrix& matrix, 72837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTDArray<SkPoint>* pts) 73837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com : Sk2DPathEffect(matrix), fRadius(radius), fPts(pts) {} 74837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 75ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Dot2DPathEffect) 76837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 77837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprotected: 78548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com virtual void begin(const SkIRect& uvBounds, SkPath* dst) const SK_OVERRIDE { 79837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com if (fPts) { 80837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fPts->reset(); 81837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 82837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com this->INHERITED::begin(uvBounds, dst); 83837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 84548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com 85548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com virtual void next(const SkPoint& loc, int u, int v, 86548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com SkPath* dst) const SK_OVERRIDE { 87837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com if (fPts) { 88837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com *fPts->append() = loc; 89837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 90837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com dst->addCircle(loc.fX, loc.fY, fRadius); 91837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 92dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 938b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org Dot2DPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) { 94837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fRadius = buffer.readScalar(); 95837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fPts = NULL; 96837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 97548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com 988b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { 9954924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com this->INHERITED::flatten(buffer); 10054924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com buffer.writeScalar(fRadius); 10154924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com } 10254924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com 103837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprivate: 104837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar fRadius; 105837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTDArray<SkPoint>* fPts; 106837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 107837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com typedef Sk2DPathEffect INHERITED; 108837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 109837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 110837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comclass InverseFillPE : public SkPathEffect { 111837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.compublic: 112837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com InverseFillPE() {} 113548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com virtual bool filterPath(SkPath* dst, const SkPath& src, 1144bbdeac58cc928dc66296bde3bd06e78070d96b7reed@google.com SkStrokeRec*, const SkRect*) const SK_OVERRIDE { 115837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com *dst = src; 116837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com dst->setFillType(SkPath::kInverseWinding_FillType); 117837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return true; 118837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 119ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(InverseFillPE) 120ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 121837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprotected: 1228b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org InverseFillPE(SkReadBuffer& buffer) : INHERITED(buffer) {} 123837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprivate: 124ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 125837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com typedef SkPathEffect INHERITED; 126837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 127837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 128837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comstatic SkPathEffect* makepe(float interp, SkTDArray<SkPoint>* pts) { 129837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkMatrix lattice; 130837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar rad = 3 + SkIntToScalar(4) * (1 - interp); 131837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com lattice.setScale(rad*2, rad*2, 0, 0); 132837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com lattice.postSkew(SK_Scalar1/3, 0, 0, 0); 133837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return new Dot2DPathEffect(rad, lattice, pts); 134837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com} 135837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 136f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r7(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p, SkScalar interp) { 137c6ce750c73c6586a5c2e88a0620b04e9569af401robertphillips@google.com p.setPathEffect(makepe(SkScalarToFloat(interp), NULL))->unref(); 138f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 139837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#if 0 140837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setPathEffect(new InverseFillPE())->unref(); 141837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setXfermodeMode(SkXfermode::kSrcIn_Mode); 142837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 143837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setAlpha((1 - interp) * 255); 144f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 145837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#endif 146837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com} 147837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 148837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comtypedef void (*raster_proc)(SkLayerRasterizer*, SkPaint&); 149837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 150837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkXfermode.h" 151837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 152837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comstatic void apply_shader(SkPaint* paint, float scale) 153dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com{ 154837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPaint p; 155f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org SkLayerRasterizer::Builder rastBuilder; 156837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 157837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setAntiAlias(true); 158f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org r7(&rastBuilder, p, scale); 159f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org paint->setRasterizer(rastBuilder.detachRasterizer())->unref(); 160837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 161837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint->setColor(SK_ColorBLUE); 162837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com} 163837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 164837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comclass ClockFaceView : public SkView { 165837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTypeface* fFace; 166837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar fInterp; 167837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar fDx; 168102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org 169837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.compublic: 170102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org ClockFaceView() { 171837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fFace = SkTypeface::CreateFromFile("/Users/reed/Downloads/p052024l.pfb"); 172837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp = 0; 173837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fDx = SK_Scalar1/64; 174837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 175dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 176102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org virtual ~ClockFaceView() { 177dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com SkSafeUnref(fFace); 178837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 179837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 180837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprotected: 181837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com // overrides from SkEventSink 182102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org virtual bool onQuery(SkEvent* evt) { 183102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org if (SampleCode::TitleQ(*evt)) { 184837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SampleCode::TitleR(evt, "Text Effects"); 185837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return true; 186837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 187837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return this->INHERITED::onQuery(evt); 188837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 189dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 190102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org void drawBG(SkCanvas* canvas) { 191837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com// canvas->drawColor(0xFFDDDDDD); 192837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com canvas->drawColor(SK_ColorWHITE); 193837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 194dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 195837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com static void drawdots(SkCanvas* canvas, const SkPaint& orig) { 196837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTDArray<SkPoint> pts; 197837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPathEffect* pe = makepe(0, &pts); 198dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 199fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkStrokeRec rec(SkStrokeRec::kFill_InitStyle); 200837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPath path, dstPath; 201837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com orig.getTextPath("9", 1, 0, 0, &path); 2024bbdeac58cc928dc66296bde3bd06e78070d96b7reed@google.com pe->filterPath(&dstPath, path, &rec, NULL); 203dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 204837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPaint p; 205837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setAntiAlias(true); 206837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setStrokeWidth(10); 207837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setColor(SK_ColorRED); 208837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com canvas->drawPoints(SkCanvas::kPoints_PointMode, pts.count(), pts.begin(), 209837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p); 210837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 211dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 212837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com virtual void onDraw(SkCanvas* canvas) { 213837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com this->drawBG(canvas); 214dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 215837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar x = SkIntToScalar(20); 216837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar y = SkIntToScalar(300); 217837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPaint paint; 218dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 219837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setAntiAlias(true); 220837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setTextSize(SkIntToScalar(240)); 221837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setTypeface(SkTypeface::CreateFromName("sans-serif", 222837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTypeface::kBold)); 223837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 224837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkString str("9"); 225837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 226837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setTypeface(fFace); 227dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 228c6ce750c73c6586a5c2e88a0620b04e9569af401robertphillips@google.com apply_shader(&paint, SkScalarToFloat(fInterp)); 229837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com canvas->drawText(str.c_str(), str.size(), x, y, paint); 230837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 231837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com // drawdots(canvas, paint); 232837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 233837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com if (false) { 234837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp += fDx; 235837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com if (fInterp > 1) { 236837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp = 1; 237837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fDx = -fDx; 238837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } else if (fInterp < 0) { 239837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp = 0; 240837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fDx = -fDx; 241837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 242837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com this->inval(NULL); 243837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 244837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 245837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 246837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprivate: 247837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com typedef SkView INHERITED; 248837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 249837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 250837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com////////////////////////////////////////////////////////////////////////////// 251837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 252837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comstatic SkView* MyFactory() { return new ClockFaceView; } 253837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comstatic SkViewRegister reg(MyFactory); 254