ClockFaceView.cpp revision a439334b6e758d38501e225e2e5d0ab73e2fb6eb
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" 20435657fd62960ceffb1c3c63f63e836373560bc5halcanary#include "SkStrokeRec.h" 21837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkTypeface.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, 3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkPMColor result[]) const 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, 5036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkPMColor result[]) const 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: 7836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void begin(const SkIRect& uvBounds, SkPath* dst) const 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, 8636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkPath* dst) const 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 9336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void flatten(SkWriteBuffer& buffer) const override { 949fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed buffer.writeMatrix(this->getMatrix()); 9554924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com buffer.writeScalar(fRadius); 9654924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com } 9754924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com 98837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprivate: 99837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar fRadius; 100837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTDArray<SkPoint>* fPts; 101837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 102837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com typedef Sk2DPathEffect INHERITED; 103837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 104837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 1059fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reedSkFlattenable* Dot2DPathEffect::CreateProc(SkReadBuffer& buffer) { 1069fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed SkMatrix matrix; 1079fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed buffer.readMatrix(&matrix); 10896fcdcc219d2a0d3579719b84b28bede76efba64halcanary return new Dot2DPathEffect(buffer.readScalar(), matrix, nullptr); 1099fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed} 1109fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed 111837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comclass InverseFillPE : public SkPathEffect { 112837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.compublic: 113837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com InverseFillPE() {} 114548a1f321011292359ef163f78c8a1d4871b3b7freed@google.com virtual bool filterPath(SkPath* dst, const SkPath& src, 11536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkStrokeRec*, const SkRect*) const override { 116837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com *dst = src; 117837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com dst->setFillType(SkPath::kInverseWinding_FillType); 118837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return true; 119837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 12042dbfa8651861f2f686879c996aab9f9f82277ddrobertphillips 12142dbfa8651861f2f686879c996aab9f9f82277ddrobertphillips#ifndef SK_IGNORE_TO_STRING 12236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void toString(SkString* str) const override { 12342dbfa8651861f2f686879c996aab9f9f82277ddrobertphillips str->appendf("InverseFillPE: ()"); 12442dbfa8651861f2f686879c996aab9f9f82277ddrobertphillips } 12542dbfa8651861f2f686879c996aab9f9f82277ddrobertphillips#endif 12642dbfa8651861f2f686879c996aab9f9f82277ddrobertphillips 127ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(InverseFillPE) 128ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com 129837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprivate: 130837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com typedef SkPathEffect INHERITED; 131837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 132837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 133385fe4d4b62d7d1dd76116dd570df3290a2f487bhalcanarySkFlattenable* InverseFillPE::CreateProc(SkReadBuffer& buffer) { return new InverseFillPE; } 1349fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed 135a439334b6e758d38501e225e2e5d0ab73e2fb6ebreedstatic sk_sp<SkPathEffect> makepe(float interp, SkTDArray<SkPoint>* pts) { 136837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkMatrix lattice; 137837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar rad = 3 + SkIntToScalar(4) * (1 - interp); 138837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com lattice.setScale(rad*2, rad*2, 0, 0); 139837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com lattice.postSkew(SK_Scalar1/3, 0, 0, 0); 140a439334b6e758d38501e225e2e5d0ab73e2fb6ebreed return sk_make_sp<Dot2DPathEffect>(rad, lattice, pts); 141837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com} 142837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 143f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r7(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p, SkScalar interp) { 144a439334b6e758d38501e225e2e5d0ab73e2fb6ebreed p.setPathEffect(makepe(SkScalarToFloat(interp), nullptr)); 145f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 146837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#if 0 147837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setPathEffect(new InverseFillPE())->unref(); 148837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setXfermodeMode(SkXfermode::kSrcIn_Mode); 149837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 150837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setAlpha((1 - interp) * 255); 151f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 152837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#endif 153837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com} 154837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 155837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comtypedef void (*raster_proc)(SkLayerRasterizer*, SkPaint&); 156837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 157837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com#include "SkXfermode.h" 158837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 159837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comstatic void apply_shader(SkPaint* paint, float scale) 160dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com{ 161837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPaint p; 162f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org SkLayerRasterizer::Builder rastBuilder; 163837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 164837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setAntiAlias(true); 165f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org r7(&rastBuilder, p, scale); 166f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org paint->setRasterizer(rastBuilder.detachRasterizer())->unref(); 167837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 168837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint->setColor(SK_ColorBLUE); 169837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com} 170837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 171837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comclass ClockFaceView : public SkView { 172837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTypeface* fFace; 173837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar fInterp; 174837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar fDx; 175102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org 176837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.compublic: 177102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org ClockFaceView() { 178837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fFace = SkTypeface::CreateFromFile("/Users/reed/Downloads/p052024l.pfb"); 179837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp = 0; 180837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fDx = SK_Scalar1/64; 181837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 182dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 183102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org virtual ~ClockFaceView() { 184dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com SkSafeUnref(fFace); 185837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 186837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 187837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprotected: 188837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com // overrides from SkEventSink 189102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org virtual bool onQuery(SkEvent* evt) { 190102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org if (SampleCode::TitleQ(*evt)) { 191837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SampleCode::TitleR(evt, "Text Effects"); 192837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return true; 193837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 194837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com return this->INHERITED::onQuery(evt); 195837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 196dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 197102b4d57afa42587d0bc9bcbb0bff6fae791af85mike@reedtribe.org void drawBG(SkCanvas* canvas) { 198837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com// canvas->drawColor(0xFFDDDDDD); 199837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com canvas->drawColor(SK_ColorWHITE); 200837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 201dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 202837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com static void drawdots(SkCanvas* canvas, const SkPaint& orig) { 203837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTDArray<SkPoint> pts; 204a439334b6e758d38501e225e2e5d0ab73e2fb6ebreed auto pe = makepe(0, &pts); 205dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 206fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com SkStrokeRec rec(SkStrokeRec::kFill_InitStyle); 207837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPath path, dstPath; 208837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com orig.getTextPath("9", 1, 0, 0, &path); 20996fcdcc219d2a0d3579719b84b28bede76efba64halcanary pe->filterPath(&dstPath, path, &rec, nullptr); 210dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 211837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPaint p; 212837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setAntiAlias(true); 213837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setStrokeWidth(10); 214837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com p.setColor(SK_ColorRED); 215a439334b6e758d38501e225e2e5d0ab73e2fb6ebreed canvas->drawPoints(SkCanvas::kPoints_PointMode, pts.count(), pts.begin(), p); 216837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 217dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 218837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com virtual void onDraw(SkCanvas* canvas) { 219837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com this->drawBG(canvas); 220dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 221837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar x = SkIntToScalar(20); 222837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkScalar y = SkIntToScalar(300); 223837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkPaint paint; 224dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 225837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setAntiAlias(true); 226837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setTextSize(SkIntToScalar(240)); 227837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setTypeface(SkTypeface::CreateFromName("sans-serif", 228837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkTypeface::kBold)); 229837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 230837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com SkString str("9"); 231837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 232837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com paint.setTypeface(fFace); 233dd53d91b60e368f1bbff6fb22d796765205ae25dbsalomon@google.com 234c6ce750c73c6586a5c2e88a0620b04e9569af401robertphillips@google.com apply_shader(&paint, SkScalarToFloat(fInterp)); 235837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com canvas->drawText(str.c_str(), str.size(), x, y, paint); 236837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 237837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com // drawdots(canvas, paint); 238837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 239837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com if (false) { 240837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp += fDx; 241837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com if (fInterp > 1) { 242837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp = 1; 243837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fDx = -fDx; 244837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } else if (fInterp < 0) { 245837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fInterp = 0; 246837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com fDx = -fDx; 247837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 24896fcdcc219d2a0d3579719b84b28bede76efba64halcanary this->inval(nullptr); 249837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 250837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com } 251837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 252837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comprivate: 253837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com typedef SkView INHERITED; 254837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com}; 255837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 256837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com////////////////////////////////////////////////////////////////////////////// 257837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.com 258837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comstatic SkView* MyFactory() { return new ClockFaceView; } 259837cf7866e62e6a9f831e4e6de414c172a9d711areed@android.comstatic SkViewRegister reg(MyFactory); 260