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 */ 8311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SampleCode.h" 9311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SkCanvas.h" 10311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SkPaint.h" 11311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com#include "SkView.h" 12311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com 13311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com/////////////////////////////////////////////////////////////////////////////// 14311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com 155fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.orgclass LayerMaskView : public SampleView { 16311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.compublic: 17ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com LayerMaskView() { 185fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org this->setBGColor(0xFFDDDDDD); 195fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org } 20ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 21311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comprotected: 22311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com // overrides from SkEventSink 23311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com virtual bool onQuery(SkEvent* evt) { 24311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com if (SampleCode::TitleQ(*evt)) { 25311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com SampleCode::TitleR(evt, "LayerMask"); 26311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com return true; 27311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com } 28311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com return this->INHERITED::onQuery(evt); 29311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com } 30ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 31311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com void drawMask(SkCanvas* canvas, const SkRect& r) { 32311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com SkPaint paint; 33311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com paint.setAntiAlias(true); 34311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com 35311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com if (true) { 36311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com SkBitmap mask; 37e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com int w = SkScalarRoundToInt(r.width()); 38e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com int h = SkScalarRoundToInt(r.height()); 39a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org mask.allocN32Pixels(w, h); 40dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com mask.eraseColor(SK_ColorTRANSPARENT); 41311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com SkCanvas c(mask); 42311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com SkRect bounds = r; 43311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com bounds.offset(-bounds.fLeft, -bounds.fTop); 44311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com c.drawOval(bounds, paint); 45ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 460baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com paint.setXfermodeMode(SkXfermode::kDstIn_Mode); 47311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com canvas->drawBitmap(mask, r.fLeft, r.fTop, &paint); 48311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com } else { 49311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com SkPath p; 50311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com p.addOval(r); 51311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com p.setFillType(SkPath::kInverseWinding_FillType); 520baf19375466cfc24c96532df406e7c5b1d1aae8reed@android.com paint.setXfermodeMode(SkXfermode::kDstOut_Mode); 53311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com canvas->drawPath(p, paint); 54311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com } 55311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com } 56311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com 575fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org virtual void onDrawContent(SkCanvas* canvas) { 58311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com SkRect r; 59311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com r.set(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(120), SkIntToScalar(120)); 60091a594dbc4116ec2e54724432472bf37dae794acommit-bot@chromium.org canvas->saveLayer(&r, NULL); 61311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com canvas->drawColor(SK_ColorRED); 62311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com drawMask(canvas, r); 63311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com canvas->restore(); 64311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com } 65ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 66311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comprivate: 675fd9243fd6b82aa3f2a2fae7c62310e77ab7b6d3mike@reedtribe.org typedef SampleView INHERITED; 68311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com}; 69311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com 70311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com/////////////////////////////////////////////////////////////////////////////// 71311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.com 72311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comstatic SkView* MyFactory() { return new LayerMaskView; } 73311c82db3115fc6810855cbcc42a6bc6fbd48265reed@android.comstatic SkViewRegister reg(MyFactory); 74