1fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org/*
2fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org * Copyright 2014 The Android Open Source Project
3fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org *
4fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be
5fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org * found in the LICENSE file.
6fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org */
7fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
8fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#ifndef SkMatrixImageFilter_DEFINED
9fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#define SkMatrixImageFilter_DEFINED
10fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
11fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#include "SkImageFilter.h"
12fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#include "SkScalar.h"
13fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#include "SkSize.h"
14fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#include "SkPoint.h"
15fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#include "SkPaint.h"
16fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
17fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org/*! \class SkMatrixImageFilter
18fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    Matrix transformation image filter.  This filter draws its source
19fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    input transformed by the given matrix.
20fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org */
21fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
22fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgclass SK_API SkMatrixImageFilter : public SkImageFilter {
23fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgpublic:
24fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    /** Construct a 2D transformation image filter.
25fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org     *  @param transform    The matrix to apply when drawing the src bitmap
26fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org     *  @param filterLevel  The quality of filtering to apply when scaling.
27fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org     *  @param input        The input image filter.  If NULL, the src bitmap
28fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org     *                      passed to filterImage() is used instead.
29fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org     */
30fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
31fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    static SkMatrixImageFilter* Create(const SkMatrix& transform,
32fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org                                       SkPaint::FilterLevel,
335e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco                                       SkImageFilter* input = NULL,
345e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco                                       uint32_t uniqueID = 0);
35fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual ~SkMatrixImageFilter();
36fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
37fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual void computeFastBounds(const SkRect&, SkRect*) const SK_OVERRIDE;
38fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
39fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixImageFilter)
40fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
41fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgprotected:
42fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SkMatrixImageFilter(const SkMatrix& transform,
43fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org                        SkPaint::FilterLevel,
445e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco                        SkImageFilter* input,
455e5f948b6b363dbfc8c076d8ff0c6b8e9ea99958senorblanco                        uint32_t uniqueID);
469fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
47fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SkMatrixImageFilter(SkReadBuffer& buffer);
489fa60daad4d5f54c0dbe3dbcc7608a8f6d721187reed#endif
49fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
50fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
51fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
52fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org                               SkBitmap* result, SkIPoint* loc) const SK_OVERRIDE;
53fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual bool onFilterBounds(const SkIRect& src, const SkMatrix&,
54fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org                                SkIRect* dst) const SK_OVERRIDE;
55fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
56fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgprivate:
57fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SkMatrix              fTransform;
58fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SkPaint::FilterLevel  fFilterLevel;
59fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    typedef SkImageFilter INHERITED;
60fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org};
61fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
62fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#endif
63