132d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com#ifndef _SkTestImageFilters_h
232d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com#define _SkTestImageFilters_h
332d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com
432d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com#include "SkImageFilter.h"
5c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com#include "SkPoint.h"
632d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com
732d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com// Fun mode that scales down (only) and then scales back up to look pixelated
86806fe87e0b39e283291c1a1c7d1d864230aa2aatfarina@chromium.orgclass SK_API SkDownSampleImageFilter : public SkImageFilter {
932d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.compublic:
109ea3d57fde28a5fe4487a111dc3dd49418235e5esenorblanco    static SkDownSampleImageFilter* Create(SkScalar scale, SkImageFilter* input = NULL) {
119fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed        if (!SkScalarIsFinite(scale)) {
129fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed            return NULL;
139fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed        }
149fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed        // we don't support scale in this range
159fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed        if (scale > SK_Scalar1 || scale <= 0) {
169fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed            return NULL;
179fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed        }
189ea3d57fde28a5fe4487a111dc3dd49418235e5esenorblanco        return SkNEW_ARGS(SkDownSampleImageFilter, (scale, input));
19cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org    }
20fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
21ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDownSampleImageFilter)
22fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
2332d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.comprotected:
249ea3d57fde28a5fe4487a111dc3dd49418235e5esenorblanco    SkDownSampleImageFilter(SkScalar scale, SkImageFilter* input)
259ea3d57fde28a5fe4487a111dc3dd49418235e5esenorblanco      : INHERITED(1, &input), fScale(scale) {}
269fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
278b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org    SkDownSampleImageFilter(SkReadBuffer& buffer);
289fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif
298b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
30fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
314cb543d6057b692e1099e9f115155f0bf323a0c8senorblanco@chromium.org    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
32ae761f7545d8ebf181d220169afac2056b057b8ccommit-bot@chromium.org                               SkBitmap* result, SkIPoint* loc) const SK_OVERRIDE;
33fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
3432d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.comprivate:
3532d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com    SkScalar fScale;
36fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
3732d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com    typedef SkImageFilter INHERITED;
3832d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com};
3932d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com
4032d25b6f5f4355d4c5281694034ba3a5aa2cf571reed@google.com#endif
41