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 18570d2f81a65fc868d6300a7edf34c0d5d048c5d6joshualittclass GrClip; 19fbcd415aa01801df5f554963d7463649b49ead73senorblanco@chromium.orgclass GrContext; 20cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.orgclass GrPaint; 2125d9c154087d2132a51d1ca74a104726f60ef380joshualittclass GrRenderTarget; 22491493119c11206c5823b76eb6420a705be243a1robertphillips@google.comclass SkBitmap; 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkBlitter; 24b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reedclass SkCachedData; 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkMatrix; 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPath; 27045e62d715f5ee9b03deb5af3c750f8318096179reed@google.comclass SkRasterClip; 28a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.comclass SkRRect; 29cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.orgclass SkStrokeRec; 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/** \class SkMaskFilter 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkMaskFilter is the base class for object that perform transformations on 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com an alpha-channel mask before drawing it. A subclass of SkMaskFilter may be 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com installed into a SkPaint. Once there, each time a primitive is drawn, it 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com is first scan converted into a SkMask::kA8_Format mask, and handed to the 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com filter, calling its filterMask() method. If this returns true, then the 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com new mask is used to render into the device. 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com Blur and emboss are implemented as subclasses of SkMaskFilter. 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com*/ 424200dfe9c1a2c0e99a7155a63fbffb01e9d1fd28bungeman@google.comclass SK_API SkMaskFilter : public SkFlattenable { 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 440456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com SK_DECLARE_INST_COUNT(SkMaskFilter) 450456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Returns the format of the resulting mask that this subclass will return 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com when its filterMask() method is called. 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 4930711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com virtual SkMask::Format getFormat() const = 0; 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com /** Create a new mask by filter the src mask. 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com If src.fImage == null, then do not allocate or create the dst image 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com but do fill out the other fields in dstMask. 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com If you do allocate a dst image, use SkMask::AllocImage() 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com If this returns false, dst mask is ignored. 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param dst the result of the filter. If src.fImage == null, dst should not allocate its image 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param src the original image to be filtered. 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param matrix the CTM 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @param margin if not null, return the buffer dx/dy need when calculating the effect. Used when 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com drawing a clipped object to know how much larger to allocate the src before 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com applying the filter. If returning false, ignore this parameter. 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com @return true if the dst mask was correctly created. 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com */ 644135f2893289dd37b662a32dd1f3d9e79a0eabf3mike@reedtribe.org virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, 6530711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com SkIPoint* margin) const; 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 67491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com#if SK_SUPPORT_GPU 68491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com /** 69b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * Returns true if the filter can be expressed a single-pass GrProcessor without requiring an 7041bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * explicit input mask. Per-pixel, the effect receives the incoming mask's coverage as 7141bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * the input color and outputs the filtered covereage value. This means that each pixel's 7241bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * filtered coverage must only depend on the unfiltered mask value for that pixel and not on 7341bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * surrounding values. 74491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com * 75b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * If effect is non-NULL, a new GrProcessor instance is stored in it. The caller assumes 76b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * ownership of the effect and must unref it. 77491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com */ 78b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture*, const SkMatrix& ctm) const; 792b75f4279a237ceea929ff8ac019f7fbd3ad08b5reed@google.com 80491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com /** 81b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * If asFragmentProcessor() fails the filter may be implemented on the GPU by a subclass 82b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * overriding filterMaskGPU (declared below). That code path requires constructing a src mask 83b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * as input. Since that is a potentially expensive operation, the subclass must also override 84b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * this function to indicate whether filterTextureMaskGPU would succeeed if the mask were to be 8541bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * created. 86491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com * 8741bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * 'maskRect' returns the device space portion of the mask that the filter needs. The mask 8841bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * passed into 'filterMaskGPU' should have the same extent as 'maskRect' but be translated 8941bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * to the upper-left corner of the mask (i.e., (maskRect.fLeft, maskRect.fTop) appears at 9041bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * (0, 0) in the mask). 91491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com */ 921842adf01320f9197b449de7375d08ccac43f389skia.committer@gmail.com virtual bool canFilterMaskGPU(const SkRect& devBounds, 93491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com const SkIRect& clipBounds, 94491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com const SkMatrix& ctm, 95491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com SkRect* maskRect) const; 96491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com 97491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com /** 98cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org * Try to directly render the mask filter into the target. Returns 99cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org * true if drawing was successful. 100cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org */ 101cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org virtual bool directFilterMaskGPU(GrContext* context, 10225d9c154087d2132a51d1ca74a104726f60ef380joshualitt GrRenderTarget* rt, 103cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org GrPaint* grp, 104570d2f81a65fc868d6300a7edf34c0d5d048c5d6joshualitt const GrClip&, 1055531d51ce7426bdae7563547326fcf0bf926a083joshualitt const SkMatrix& viewMatrix, 106cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org const SkStrokeRec& strokeRec, 107cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org const SkPath& path) const; 108821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org /** 109821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org * Try to directly render a rounded rect mask filter into the target. Returns 110821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org * true if drawing was successful. 111821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org */ 112821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org virtual bool directFilterRRectMaskGPU(GrContext* context, 11325d9c154087d2132a51d1ca74a104726f60ef380joshualitt GrRenderTarget* rt, 114821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org GrPaint* grp, 115570d2f81a65fc868d6300a7edf34c0d5d048c5d6joshualitt const GrClip&, 1165531d51ce7426bdae7563547326fcf0bf926a083joshualitt const SkMatrix& viewMatrix, 117821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org const SkStrokeRec& strokeRec, 118821397018fdabea6b434ecb96f84fb5449c4025fcommit-bot@chromium.org const SkRRect& rrect) const; 119cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org 120cf34bc06347dd2734a7fdaef5cf8853e92979d5ecommit-bot@chromium.org /** 12141bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * This function is used to implement filters that require an explicit src mask. It should only 12241bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * be called if canFilterMaskGPU returned true and the maskRect param should be the output from 12341bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * that call. canOverwriteSrc indicates whether the implementation may treat src as a scratch 12441bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * texture and overwrite its contents. When true it is also legal to return src as the result. 12541bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * Implementations are free to get the GrContext from the src texture in order to create 12641bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org * additional textures and perform multiple passes. 1272b75f4279a237ceea929ff8ac019f7fbd3ad08b5reed@google.com */ 1281842adf01320f9197b449de7375d08ccac43f389skia.committer@gmail.com virtual bool filterMaskGPU(GrTexture* src, 12941bf930039314cc71039b12957195f1c65c30ce1commit-bot@chromium.org const SkMatrix& ctm, 1301842adf01320f9197b449de7375d08ccac43f389skia.committer@gmail.com const SkRect& maskRect, 131491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com GrTexture** result, 132491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com bool canOverwriteSrc) const; 133491493119c11206c5823b76eb6420a705be243a1robertphillips@google.com#endif 1342b75f4279a237ceea929ff8ac019f7fbd3ad08b5reed@google.com 1359efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com /** 1369efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * The fast bounds function is used to enable the paint to be culled early 1379efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * in the drawing pipeline. This function accepts the current bounds of the 1389efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * paint as its src param and the filter adjust those bounds using its 1399efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * current mask and returns the result using the dest param. Callers are 1409efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * allowed to provide the same struct for both src and dest so each 1419efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * implementation must accomodate that behavior. 1429efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * 1439efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * The default impl calls filterMask with the src mask having no image, 1449efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com * but subclasses may override this if they can compute the rect faster. 1459efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com */ 14630711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com virtual void computeFastBounds(const SkRect& src, SkRect* dest) const; 1479efd9a048aebaa6681afb76b18e1a7dd642078d3reed@google.com 148daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com struct BlurRec { 149daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com SkScalar fSigma; 150daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com SkBlurStyle fStyle; 151daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com SkBlurQuality fQuality; 152daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com }; 153daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com /** 154daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com * If this filter can be represented by a BlurRec, return true and (if not null) fill in the 155daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com * provided BlurRec parameter. If this effect cannot be represented as a BlurRec, return false 156daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com * and ignore the BlurRec parameter. 157daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com */ 158daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com virtual bool asABlur(BlurRec*) const; 159daaafa6e81860e3dc52660ba019c336f0a43f1e7reed@google.com 1600f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org SK_TO_STRING_PUREVIRT() 161c0b7e10c6a68f59e1653e6c18e6bc954b3c3f0cfcommit-bot@chromium.org SK_DEFINE_FLATTENABLE_TYPE(SkMaskFilter) 1620bd80fa01bba2b3f0f49937fcb17928c74bde5a6robertphillips@google.com 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 1647c9d0f3104408a64d52b84643f116179022d73bdcommit-bot@chromium.org SkMaskFilter() {} 165045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com 166d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com enum FilterReturn { 167d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com kFalse_FilterReturn, 168d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com kTrue_FilterReturn, 169d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com kUnimplemented_FilterReturn 170d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com }; 171d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com 172b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed class NinePatch : ::SkNoncopyable { 173b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed public: 174b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed NinePatch() : fCache(NULL) { 175b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed fMask.fImage = NULL; 176b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed } 177b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed ~NinePatch(); 178b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed 179dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com SkMask fMask; // fBounds must have [0,0] in its top-left 180dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com SkIRect fOuterRect; // width/height must be >= fMask.fBounds' 181dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com SkIPoint fCenter; // identifies center row/col for stretching 182b0df8be137d8fb49436e46d1fd1a5aec8b7ab562reed SkCachedData* fCache; 183dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com }; 184dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com 185d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com /** 186d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * Override if your subclass can filter a rect, and return the answer as 187d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * a ninepatch mask to be stretched over the returned outerRect. On success 188d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * return kTrue_FilterReturn. On failure (e.g. out of memory) return 189d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * kFalse_FilterReturn. If the normal filterMask() entry-point should be 190d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * called (the default) return kUnimplemented_FilterReturn. 191d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * 192d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * By convention, the caller will take the center rol/col from the returned 193d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * mask as the slice it can replicate horizontally and vertically as we 194d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * stretch the mask to fit inside outerRect. It is an error for outerRect 195d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * to be smaller than the mask's bounds. This would imply that the width 196d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * and height of the mask should be odd. This is not required, just that 197d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * the caller will call mask.fBounds.centerX() and centerY() to find the 198d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com * strips that will be replicated. 199d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com */ 200dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com virtual FilterReturn filterRectsToNine(const SkRect[], int count, 201dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com const SkMatrix&, 202dab9b4fe035c1e8a79e110139953c19bd48d66f9reed@google.com const SkIRect& clipBounds, 20330711b764be6bbb58caa30a0ac5d1474c894efe7reed@google.com NinePatch*) const; 204a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com /** 205a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com * Similar to filterRectsToNine, except it performs the work on a round rect. 206a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com */ 207a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com virtual FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&, 208a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com const SkIRect& clipBounds, 209a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com NinePatch*) const; 210d729b3e504ae547ee0978e8f7156bd8dd8124172reed@google.com 211045e62d715f5ee9b03deb5af3c750f8318096179reed@google.comprivate: 212045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com friend class SkDraw; 213045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com 214045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com /** Helper method that, given a path in device space, will rasterize it into a kA8_Format mask 215045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com and then call filterMask(). If this returns true, the specified blitter will be called 216045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com to render that mask. Returns false if filterMask() returned false. 217045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com This method is not exported to java. 218045e62d715f5ee9b03deb5af3c750f8318096179reed@google.com */ 219868074b50b0fc3e460d2aa97c1096827fe0a1935reed bool filterPath(const SkPath& devPath, const SkMatrix& ctm, const SkRasterClip&, SkBlitter*, 220868074b50b0fc3e460d2aa97c1096827fe0a1935reed SkPaint::Style) const; 22154924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com 222a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com /** Helper method that, given a roundRect in device space, will rasterize it into a kA8_Format 223a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com mask and then call filterMask(). If this returns true, the specified blitter will be called 224a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com to render that mask. Returns false if filterMask() returned false. 225a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com */ 226868074b50b0fc3e460d2aa97c1096827fe0a1935reed bool filterRRect(const SkRRect& devRRect, const SkMatrix& ctm, const SkRasterClip&, 227868074b50b0fc3e460d2aa97c1096827fe0a1935reed SkBlitter*, SkPaint::Style style) const; 228a8e33a92e27ca1523601226cad83c79a7e00c93bscroggo@google.com 22954924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com typedef SkFlattenable INHERITED; 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 233