1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.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. 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkMaskFilter_DEFINED 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkMaskFilter_DEFINED 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 13daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com#include "SkBlurTypes.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkFlattenable.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMask.h" 162ac4ef5e6e0c9c95c9200408ba25a95ca758eac2junov@chromium.org#include "SkPaint.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 18fbcd415aa01801df5f554963d7463649b49ead73senorblanco@chromium.orgclass GrContext; 19cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.orgclass GrPaint; 20491493119c11206c5823b76eb6420a705be243a1robertphillips@google.comclass SkBitmap; 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkBlitter; 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkMatrix; 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPath; 24045e62d715f5ee9b03deb5af3c750f8318096179reed@google.comclass SkRasterClip; 25a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.comclass SkRRect; 26cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.orgclass SkStrokeRec; 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkMaskFilter 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkMaskFilter is the base class for object that perform transformations on 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com an alpha-channel mask before drawing it. A subclass of SkMaskFilter may be 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com installed into a SkPaint. Once there, each time a primitive is drawn, it 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com is first scan converted into a SkMask::kA8_Format mask, and handed to the 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com filter, calling its filterMask() method. If this returns true, then the 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com new mask is used to render into the device. 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Blur and emboss are implemented as subclasses of SkMaskFilter. 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 394200dfe9c1a2c0e99a7155a63fbffb01e9d1fd28bungeman@google.comclass SK_API SkMaskFilter : public SkFlattenable { 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 410456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com SK_DECLARE_INST_COUNT(SkMaskFilter) 420456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Returns the format of the resulting mask that this subclass will return 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com when its filterMask() method is called. 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 4630711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com virtual SkMask::Format getFormat() const = 0; 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Create a new mask by filter the src mask. 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com If src.fImage == null, then do not allocate or create the dst image 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com but do fill out the other fields in dstMask. 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com If you do allocate a dst image, use SkMask::AllocImage() 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com If this returns false, dst mask is ignored. 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param dst the result of the filter. If src.fImage == null, dst should not allocate its image 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param src the original image to be filtered. 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param matrix the CTM 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param margin if not null, return the buffer dx/dy need when calculating the effect. Used when 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawing a clipped object to know how much larger to allocate the src before 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com applying the filter. If returning false, ignore this parameter. 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @return true if the dst mask was correctly created. 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 614135f2893289dd37b662a32dd1f3d9e79a0eabf3mike@reedtribe.org virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, 6230711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com SkIPoint* margin) const; 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 64491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com#if SK_SUPPORT_GPU 65491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com /** 66b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * Returns true if the filter can be expressed a single-pass GrProcessor without requiring an 6741bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * explicit input mask. Per-pixel, the effect receives the incoming mask's coverage as 6841bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * the input color and outputs the filtered covereage value. This means that each pixel's 6941bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * filtered coverage must only depend on the unfiltered mask value for that pixel and not on 7041bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * surrounding values. 71491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com * 72b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * If effect is non-NULL, a new GrProcessor instance is stored in it. The caller assumes 73b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * ownership of the effect and must unref it. 74491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com */ 75b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const SkMatrix& ctm) const; 762b75f4279a237ceea929ff8ac019f7fbd3ad08b5reed@google.com 77491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com /** 78b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * If asFragmentProcessor() fails the filter may be implemented on the GPU by a subclass 79b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * overriding filterMaskGPU (declared below). That code path requires constructing a src mask 80b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * as input. Since that is a potentially expensive operation, the subclass must also override 81b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * this function to indicate whether filterTextureMaskGPU would succeeed if the mask were to be 8241bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * created. 83491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com * 8441bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * 'maskRect' returns the device space portion of the mask that the filter needs. The mask 8541bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * passed into 'filterMaskGPU' should have the same extent as 'maskRect' but be translated 8641bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * to the upper-left corner of the mask (i.e., (maskRect.fLeft, maskRect.fTop) appears at 8741bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * (0, 0) in the mask). 88491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com */ 891842adf01320f9197b449de7375d08ccac43f389skia.committer@gmail.com virtual bool canFilterMaskGPU(const SkRect& devBounds, 90491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com const SkIRect& clipBounds, 91491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com const SkMatrix& ctm, 92491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com SkRect* maskRect) const; 93491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com 94491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com /** 95cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org * Try to directly render the mask filter into the target. Returns 96cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org * true if drawing was successful. 97cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org */ 98cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org virtual bool directFilterMaskGPU(GrContext* context, 99cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org GrPaint* grp, 100cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org const SkStrokeRec& strokeRec, 101cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org const SkPath& path) const; 102821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org /** 103821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org * Try to directly render a rounded rect mask filter into the target. Returns 104821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org * true if drawing was successful. 105821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org */ 106821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org virtual bool directFilterRRectMaskGPU(GrContext* context, 107821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org GrPaint* grp, 108821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org const SkStrokeRec& strokeRec, 109821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org const SkRRect& rrect) const; 110cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org 111cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org /** 11241bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * This function is used to implement filters that require an explicit src mask. It should only 11341bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * be called if canFilterMaskGPU returned true and the maskRect param should be the output from 11441bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * that call. canOverwriteSrc indicates whether the implementation may treat src as a scratch 11541bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * texture and overwrite its contents. When true it is also legal to return src as the result. 11641bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * Implementations are free to get the GrContext from the src texture in order to create 11741bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * additional textures and perform multiple passes. 1182b75f4279a237ceea929ff8ac019f7fbd3ad08b5reed@google.com */ 1191842adf01320f9197b449de7375d08ccac43f389skia.committer@gmail.com virtual bool filterMaskGPU(GrTexture* src, 12041bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org const SkMatrix& ctm, 1211842adf01320f9197b449de7375d08ccac43f389skia.committer@gmail.com const SkRect& maskRect, 122491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com GrTexture** result, 123491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com bool canOverwriteSrc) const; 124491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com#endif 1252b75f4279a237ceea929ff8ac019f7fbd3ad08b5reed@google.com 1269efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com /** 1279efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * The fast bounds function is used to enable the paint to be culled early 1289efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * in the drawing pipeline. This function accepts the current bounds of the 1299efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * paint as its src param and the filter adjust those bounds using its 1309efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * current mask and returns the result using the dest param. Callers are 1319efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * allowed to provide the same struct for both src and dest so each 1329efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * implementation must accomodate that behavior. 1339efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * 1349efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * The default impl calls filterMask with the src mask having no image, 1359efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * but subclasses may override this if they can compute the rect faster. 1369efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com */ 13730711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com virtual void computeFastBounds(const SkRect& src, SkRect* dest) const; 1389efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com 139daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com struct BlurRec { 140daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com SkScalar fSigma; 141daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com SkBlurStyle fStyle; 142daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com SkBlurQuality fQuality; 143daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com }; 144daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com /** 145daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com * If this filter can be represented by a BlurRec, return true and (if not null) fill in the 146daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com * provided BlurRec parameter. If this effect cannot be represented as a BlurRec, return false 147daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com * and ignore the BlurRec parameter. 148daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com */ 149daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com virtual bool asABlur(BlurRec*) const; 150daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com 1510f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org SK_TO_STRING_PUREVIRT() 152c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org SK_DEFINE_FLATTENABLE_TYPE(SkMaskFilter) 1530bd80fa01bba2b3f0f49937fcb17928c74bde5a6robertphillips@google.com 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1557c9d0f3104408a64d52b84643f116179022d73bdcommit-bot@chromium.org SkMaskFilter() {} 1569fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // empty for now, but lets get our subclass to remember to init us for the future 1588b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org SkMaskFilter(SkReadBuffer& buffer) : INHERITED(buffer) {} 1599fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif 160045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com 161d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com enum FilterReturn { 162d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com kFalse_FilterReturn, 163d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com kTrue_FilterReturn, 164d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com kUnimplemented_FilterReturn 165d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com }; 166d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com 167dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com struct NinePatch { 168dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com SkMask fMask; // fBounds must have [0,0] in its top-left 169dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com SkIRect fOuterRect; // width/height must be >= fMask.fBounds' 170dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com SkIPoint fCenter; // identifies center row/col for stretching 171dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com }; 172dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com 173d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com /** 174d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * Override if your subclass can filter a rect, and return the answer as 175d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * a ninepatch mask to be stretched over the returned outerRect. On success 176d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * return kTrue_FilterReturn. On failure (e.g. out of memory) return 177d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * kFalse_FilterReturn. If the normal filterMask() entry-point should be 178d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * called (the default) return kUnimplemented_FilterReturn. 179d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * 180d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * By convention, the caller will take the center rol/col from the returned 181d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * mask as the slice it can replicate horizontally and vertically as we 182d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * stretch the mask to fit inside outerRect. It is an error for outerRect 183d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * to be smaller than the mask's bounds. This would imply that the width 184d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * and height of the mask should be odd. This is not required, just that 185d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * the caller will call mask.fBounds.centerX() and centerY() to find the 186d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * strips that will be replicated. 187d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com */ 188dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com virtual FilterReturn filterRectsToNine(const SkRect[], int count, 189dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com const SkMatrix&, 190dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com const SkIRect& clipBounds, 19130711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com NinePatch*) const; 192a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com /** 193a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com * Similar to filterRectsToNine, except it performs the work on a round rect. 194a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com */ 195a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com virtual FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&, 196a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com const SkIRect& clipBounds, 197a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com NinePatch*) const; 198d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com 199045e62d715f5ee9b03deb5af3c750f8318096179reed@google.comprivate: 200045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com friend class SkDraw; 201045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com 202045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com /** Helper method that, given a path in device space, will rasterize it into a kA8_Format mask 203045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com and then call filterMask(). If this returns true, the specified blitter will be called 204045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com to render that mask. Returns false if filterMask() returned false. 205045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com This method is not exported to java. 206045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com */ 207868074b50b0fc3e460d2aa97c1096827fe0a1935reed bool filterPath(const SkPath& devPath, const SkMatrix& ctm, const SkRasterClip&, SkBlitter*, 208868074b50b0fc3e460d2aa97c1096827fe0a1935reed SkPaint::Style) const; 20954924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com 210a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com /** Helper method that, given a roundRect in device space, will rasterize it into a kA8_Format 211a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com mask and then call filterMask(). If this returns true, the specified blitter will be called 212a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com to render that mask. Returns false if filterMask() returned false. 213a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com */ 214868074b50b0fc3e460d2aa97c1096827fe0a1935reed bool filterRRect(const SkRRect& devRRect, const SkMatrix& ctm, const SkRasterClip&, 215868074b50b0fc3e460d2aa97c1096827fe0a1935reed SkBlitter*, SkPaint::Style style) const; 216a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com 21754924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com typedef SkFlattenable INHERITED; 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 221