SkBlurMaskFilter.h revision 7bd141dce43ea3405bc60c9c84e6f910b851b079
15faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org/*
25faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Copyright 2006 The Android Open Source Project
35faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org *
45faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be
55faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org * found in the LICENSE file.
65faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org */
75faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
85faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#ifndef SkBlurMaskFilter_DEFINED
93bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org#define SkBlurMaskFilter_DEFINED
105faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
113bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org// we include this since our callers will need to at least be able to ref/unref
125faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#include "SkMaskFilter.h"
135faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#include "SkScalar.h"
145faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
155faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgclass SK_API SkBlurMaskFilter {
165faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.orgpublic:
175faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    enum BlurStyle {
185faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        kNormal_BlurStyle,  //!< fuzzy inside and outside
195faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        kSolid_BlurStyle,   //!< solid inside, fuzzy outside
205faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        kOuter_BlurStyle,   //!< nothing inside, fuzzy outside
215faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        kInner_BlurStyle,   //!< fuzzy inside, nothing outside
22a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
23a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        kBlurStyleCount
24a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    };
25a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
265faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    enum BlurFlags {
275faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        kNone_BlurFlag = 0x00,
285faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        /** The blur layer's radius is not affected by transforms */
295faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        kIgnoreTransform_BlurFlag   = 0x01,
305faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        /** Use a smother, higher qulity blur algorithm */
31eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com        kHighQuality_BlurFlag       = 0x02,
32c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org        /** mask for all blur flags */
335faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        kAll_BlurFlag = 0x03
345faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    };
355faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
365faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    /**
375faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org     *  DEPRECATED - radius-based
383bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org     */
393bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org    static SkMaskFilter* Create(SkScalar radius, BlurStyle style,
403bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org                                uint32_t flags = kNone_BlurFlag);
413bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org
423bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org    /** Create a blur maskfilter.
433bc16c8bc1ecb9ac4450f58093cc9e3edb8a50b8senorblanco@chromium.org        @param style    The BlurStyle to use
445faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        @param sigma    Standard deviation of the Gaussian blur to apply. Must be > 0.
455faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        @param flags    Flags to use - defaults to none
465faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        @return The new blur maskfilter
475faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    */
485faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    static SkMaskFilter* Create(BlurStyle style, SkScalar sigma,
49f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina                                uint32_t flags = kNone_BlurFlag);
505faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org
515faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    /** Create an emboss maskfilter
5284cd099704b3896ca66081a96508572a924f850ccommit-bot@chromium.org        @param blurSigma    standard deviation of the Gaussian blur to apply
537938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org                            before applying lighting (e.g. 3)
547938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org        @param direction    array of 3 scalars [x, y, z] specifying the direction of the light source
555faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        @param ambient      0...1 amount of ambient light
565faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        @param specular     coefficient for specular highlights (e.g. 8)
575faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org        @return the emboss maskfilter
585faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    */
595faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    static SkMaskFilter* CreateEmboss(SkScalar blurSigma, const SkScalar direction[3],
605faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org                                      SkScalar ambient, SkScalar specular);
614b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org
625faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org    // DEPRECATED - radius-based
637938bae14af94c1d48d122a2d686e123b66411a7senorblanco@chromium.org    static SkMaskFilter* CreateEmboss(const SkScalar direction[3],
64cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org                                      SkScalar ambient, SkScalar specular,
65cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org                                      SkScalar blurRadius);
66cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org
67cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org    SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
6884cd099704b3896ca66081a96508572a924f850ccommit-bot@chromium.org
69cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.orgprivate:
70cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org    SkBlurMaskFilter(); // can't be instantiated
71cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org};
72cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org
735faa2dc266ec933b3961f985e5718236f1ecbe47senorblanco@chromium.org#endif
74ff06af20fde68aa737b540dc6e42924532873b22junov@chromium.org