1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7bf0001d0472d727266762c5967ec0d919a6df083reed@google.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SampleCode.h" 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h" 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h" 118b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkReadBuffer.h" 128b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkWriteBuffer.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkGradientShader.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkGraphics.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkImageDecoder.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPath.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRandom.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkShader.h" 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkUtils.h" 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorPriv.h" 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorFilter.h" 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTime.h" 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkTypeface.h" 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkXfermode.h" 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkStream.h" 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkXMLParser.h" 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 309e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.comstatic void test_breakText() { 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint paint; 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* text = "sdfkljAKLDFJKEWkldfjlk#$%&sdfs.dsj"; 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t length = strlen(text); 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar width = paint.measureText(text, length); 3582065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar mm = 0; 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar nn = 0; 389e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com for (SkScalar w = 0; w <= width; w += SK_Scalar1) { 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar m; 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t n = paint.breakText(text, length, w, &m, 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint::kBackward_TextBufferDirection); 4282065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(n <= length); 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(m <= width); 4582065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 469e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com if (n == 0) { 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(m == 0); 489e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com } else { 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // now assert that we're monotonic 509e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com if (n == nn) { 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(m == mm); 529e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com } else { 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(n > nn); 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(m > mm); 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 57ffe39bd3b66eb5090684959e7f2409346ab72d93tomhudson@google.com nn = SkIntToScalar((unsigned int)n); 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com mm = m; 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 6164cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org SkDEBUGCODE(size_t length2 =) paint.breakText(text, length, width, &mm); 62261b8e2ca1cf22303ad95267f0bdc6e87e1bbe70reed@google.com SkASSERT(length2 == length); 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(mm == width); 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 66e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic SkRandom gRand; 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPowerMode : public SkXfermode { 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPowerMode(SkScalar exponent) { this->init(exponent); } 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 729e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count, 733af2b8def636eb36b69b1b334013320646dc7465mike@reedtribe.org const SkAlpha aa[]) const SK_OVERRIDE; 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 758b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org typedef SkFlattenable* (*Factory)(SkReadBuffer&); 7682065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 770f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org SK_TO_STRING_OVERRIDE() 78ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPowerMode) 7982065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar fExp; // user's value 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint8_t fTable[256]; // cache 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void init(SkScalar exponent); 858b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org SkPowerMode(SkReadBuffer& b) : INHERITED(b) { 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // read the exponent 87c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com this->init(SkFixedToScalar(b.readFixed())); 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 898b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org virtual void flatten(SkWriteBuffer& b) const SK_OVERRIDE { 9054924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com this->INHERITED::flatten(b); 91c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com b.writeFixed(SkScalarToFixed(fExp)); 9254924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com } 9382065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com typedef SkXfermode INHERITED; 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 979e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.comvoid SkPowerMode::init(SkScalar e) { 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fExp = e; 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com float ee = SkScalarToFloat(e); 10082065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com printf("------ %g\n", ee); 1029e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com for (int i = 0; i < 256; i++) { 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com float x = i / 255.f; 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // printf(" %d %g", i, x); 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com x = powf(x, ee); 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // printf(" %g", x); 107e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com int xx = SkScalarRoundToInt(x * 255); 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // printf(" %d\n", xx); 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fTable[i] = SkToU8(xx); 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1139e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.comvoid SkPowerMode::xfer16(uint16_t dst[], const SkPMColor src[], int count, 1143af2b8def636eb36b69b1b334013320646dc7465mike@reedtribe.org const SkAlpha aa[]) const { 1159e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com for (int i = 0; i < count; i++) { 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPMColor c = src[i]; 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int r = SkGetPackedR32(c); 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int g = SkGetPackedG32(c); 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int b = SkGetPackedB32(c); 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r = fTable[r]; 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com g = fTable[g]; 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com b = fTable[b]; 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dst[i] = SkPack888ToRGB16(r, g, b); 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1270f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org#ifndef SK_IGNORE_TO_STRING 128b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.comvoid SkPowerMode::toString(SkString* str) const { 129b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com str->append("SkPowerMode: exponent "); 130b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com str->appendScalar(fExp); 131b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com} 132b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com#endif 133b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic const struct { 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* fName; 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com uint32_t fFlags; 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool fFlushCache; 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} gHints[] = { 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { "Linear", SkPaint::kLinearText_Flag, false }, 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { "Normal", 0, true }, 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { "Subpixel", SkPaint::kSubpixelText_Flag, true } 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 144e003aecb30fe40b0cbf4b0d38147bf794752422acommit-bot@chromium.orgstatic void DrawTheText(SkCanvas* canvas, const char text[], size_t length, SkScalar x, SkScalar y, 145e003aecb30fe40b0cbf4b0d38147bf794752422acommit-bot@chromium.org const SkPaint& paint, SkScalar clickX) { 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint p(paint); 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if 0 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawText(text, length, x, y, paint); 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#else 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPoint pts[1000]; 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar xpos = x; 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(length <= SK_ARRAY_COUNT(pts)); 1559e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com for (size_t i = 0; i < length; i++) { 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com pts[i].set(xpos, y), xpos += paint.getTextSize(); 1579e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com } 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawPosText(text, length, pts, paint); 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setSubpixelText(true); 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com x += SkIntToScalar(180); 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawText(text, length, x, y, p); 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DEBUG 1679e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com if (true) { 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setSubpixelText(false); 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p.setLinearText(true); 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com x += SkIntToScalar(180); 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawText(text, length, x, y, p); 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1769e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.comclass TextSpeedView : public SampleView { 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 178ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com TextSpeedView() { 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fHints = 0; 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fClickX = 0; 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 18282065d667f64e232bcde2ad849756a6096fcbe6freed@google.com test_breakText(); 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 18482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides from SkEventSink 1879e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com virtual bool onQuery(SkEvent* evt) { 1889e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com if (SampleCode::TitleQ(*evt)) { 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SampleCode::TitleR(evt, "Text"); 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::onQuery(evt); 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 19482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 1959e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com static void make_textstrip(SkBitmap* bm) { 196a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org bm->allocPixels(SkImageInfo::Make(200, 18, kRGB_565_SkColorType, 197a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org kOpaque_SkAlphaType)); 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bm->eraseColor(SK_ColorWHITE); 19982065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkCanvas canvas(*bm); 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint paint; 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* s = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit"; 20382065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setFlags(paint.getFlags() | SkPaint::kAntiAlias_Flag 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com | SkPaint::kDevKernText_Flag); 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setTextSize(SkIntToScalar(14)); 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas.drawText(s, strlen(s), SkIntToScalar(8), SkIntToScalar(14), paint); 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 20982065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 210e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) { 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com for (size_t i = 0; i < n; i++) 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com pts[i].set(rand->nextUScalar1() * 640, rand->nextUScalar1() * 480); 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 21482065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2159e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com virtual void onDrawContent(SkCanvas* canvas) { 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAutoCanvasRestore restore(canvas, false); 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect r; 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com r.set(0, 0, SkIntToScalar(1000), SkIntToScalar(20)); 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // canvas->saveLayer(&r, NULL, SkCanvas::kHasAlphaLayer_SaveFlag); 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint paint; 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// const uint16_t glyphs[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 }; 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int index = fHints % SK_ARRAY_COUNT(gHints); 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com index = 1; 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// const char* style = gHints[index].fName; 22882065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// canvas->translate(0, SkIntToScalar(50)); 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // canvas->drawText(style, strlen(style), SkIntToScalar(20), SkIntToScalar(20), paint); 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 23304d86c6a6b8eb8631752b3680f1292fa0a2c7119reed@android.com SkSafeUnref(paint.setTypeface(SkTypeface::CreateFromFile("/skimages/samplefont.ttf"))); 2348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setAntiAlias(true); 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setFlags(paint.getFlags() | gHints[index].fFlags); 23682065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkRect clip; 2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com clip.set(SkIntToScalar(25), SkIntToScalar(34), SkIntToScalar(88), SkIntToScalar(155)); 23982065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* text = "Hamburgefons"; 2418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t length = strlen(text); 2428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2432f3dc9dc4c970bd066be329a842a791d91f524e2reed@google.com SkScalar y = SkIntToScalar(0); 2442f3dc9dc4c970bd066be329a842a791d91f524e2reed@google.com for (int i = 9; i <= 24; i++) { 2452f3dc9dc4c970bd066be329a842a791d91f524e2reed@google.com paint.setTextSize(SkIntToScalar(i) /*+ (gRand.nextU() & 0xFFFF)*/); 2469e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com for (SkScalar dx = 0; dx <= SkIntToScalar(3)/4; 2479e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com dx += SkIntToScalar(1) /* /4 */) { 2482f3dc9dc4c970bd066be329a842a791d91f524e2reed@google.com y += paint.getFontSpacing(); 249e003aecb30fe40b0cbf4b0d38147bf794752422acommit-bot@chromium.org DrawTheText(canvas, text, length, SkIntToScalar(20) + dx, y, paint, fClickX); 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2522f3dc9dc4c970bd066be329a842a791d91f524e2reed@google.com if (gHints[index].fFlushCache) { 2532f3dc9dc4c970bd066be329a842a791d91f524e2reed@google.com// SkGraphics::SetFontCacheUsed(0); 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 25682065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2574d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, 2584d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com unsigned modi) SK_OVERRIDE { 2598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fClickX = x; 2608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com this->inval(NULL); 2614d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com return this->INHERITED::onFindClickHandler(x, y, modi); 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 26382065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2649e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com virtual bool onClick(Click* click) { 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::onClick(click); 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 26782065d667f64e232bcde2ad849756a6096fcbe6freed@google.com 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int fHints; 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar fClickX; 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2729e39bb3603ee33e7753ee66eb76ebcfc412396f1reed@google.com typedef SampleView INHERITED; 2738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////// 2768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkView* MyFactory() { return new TextSpeedView; } 2788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkViewRegister reg(MyFactory); 279