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 */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SampleCode.h" 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h" 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkGradientShader.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPath.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkShader.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkUtils.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "Sk1DPathEffect.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCornerPathEffect.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPathMeasure.h" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRandom.h" 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorPriv.h" 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorFilter.h" 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDither.h" 23c3b3266b7db2f1a41d41ecac010c766b7ad8eebcreed#include "sk_tool_utils.h" 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 25961ddb04a0a7aba843032d829ab867518e52559ereed@google.comstatic void make_bm(SkBitmap* bm) { 26a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org const SkPMColor colors[] = { 27a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org SkPreMultiplyColor(SK_ColorRED), SkPreMultiplyColor(SK_ColorGREEN), 28a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org SkPreMultiplyColor(SK_ColorBLUE), SkPreMultiplyColor(SK_ColorWHITE) 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com }; 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkColorTable* ctable = new SkColorTable(colors, 4); 31a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org bm->allocPixels(SkImageInfo::Make(2, 2, kIndex_8_SkColorType, 32a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org kOpaque_SkAlphaType), 33a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org NULL, ctable); 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ctable->unref(); 35ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *bm->getAddr8(0, 0) = 0; 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *bm->getAddr8(1, 0) = 1; 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *bm->getAddr8(0, 1) = 2; 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *bm->getAddr8(1, 1) = 3; 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkScalar draw_bm(SkCanvas* canvas, const SkBitmap& bm, 43961ddb04a0a7aba843032d829ab867518e52559ereed@google.com SkScalar x, SkScalar y, SkPaint* paint) { 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawBitmap(bm, x, y, paint); 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return SkIntToScalar(bm.width()) * 5/4; 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 48961ddb04a0a7aba843032d829ab867518e52559ereed@google.comstatic SkScalar draw_set(SkCanvas* c, const SkBitmap& bm, SkScalar x, SkPaint* p) { 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com x += draw_bm(c, bm, x, 0, p); 504469938e92d779dff05e745559e67907bbf21e78reed@google.com p->setFilterLevel(SkPaint::kLow_FilterLevel); 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com x += draw_bm(c, bm, x, 0, p); 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com p->setDither(true); 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return x + draw_bm(c, bm, x, 0, p); 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 56961ddb04a0a7aba843032d829ab867518e52559ereed@google.comstatic SkScalar draw_row(SkCanvas* canvas, const SkBitmap& bm) { 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAutoCanvasRestore acr(canvas, true); 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint paint; 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar x = 0; 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const int scale = 32; 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setAntiAlias(true); 64c3b3266b7db2f1a41d41ecac010c766b7ad8eebcreed const char* name = sk_tool_utils::colortype_name(bm.colorType()); 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawText(name, strlen(name), x, SkIntToScalar(bm.height())*scale*5/8, 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint); 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(48), 0); 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->scale(SkIntToScalar(scale), SkIntToScalar(scale)); 70ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com x += draw_set(canvas, bm, 0, &paint); 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.reset(); 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setAlpha(0x80); 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com draw_set(canvas, bm, x, &paint); 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return x * scale / 3; 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 78961ddb04a0a7aba843032d829ab867518e52559ereed@google.comclass FilterView : public SampleView { 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkBitmap fBM8, fBM4444, fBM16, fBM32; 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 82ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com FilterView() { 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com make_bm(&fBM8); 848a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org fBM8.copyTo(&fBM4444, kARGB_4444_SkColorType); 858a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org fBM8.copyTo(&fBM16, kRGB_565_SkColorType); 8628fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org fBM8.copyTo(&fBM32, kN32_SkColorType); 87ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 88961ddb04a0a7aba843032d829ab867518e52559ereed@google.com this->setBGColor(0xFFDDDDDD); 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides from SkEventSink 93961ddb04a0a7aba843032d829ab867518e52559ereed@google.com virtual bool onQuery(SkEvent* evt) { 94961ddb04a0a7aba843032d829ab867518e52559ereed@google.com if (SampleCode::TitleQ(*evt)) { 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SampleCode::TitleR(evt, "Filter"); 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::onQuery(evt); 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 100ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 101961ddb04a0a7aba843032d829ab867518e52559ereed@google.com virtual void onDrawContent(SkCanvas* canvas) { 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar x = SkIntToScalar(10); 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar y = SkIntToScalar(10); 104ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(x, y); 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com y = draw_row(canvas, fBM8); 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(0, y); 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com y = draw_row(canvas, fBM4444); 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(0, y); 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com y = draw_row(canvas, fBM16); 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(0, y); 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com draw_row(canvas, fBM32); 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 114ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 116961ddb04a0a7aba843032d829ab867518e52559ereed@google.com typedef SampleView INHERITED; 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////// 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkView* MyFactory() { return new FilterView; } 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkViewRegister reg(MyFactory); 123