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,
3293a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed                                       SkFilterQuality,
3324e06d5244ae96e440410e1d76e039983b2efac9senorblanco                                       SkImageFilter* input = NULL);
3493a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed#ifdef SK_SUPPORT_LEGACY_FILTERLEVEL_ENUM
3593a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed    static SkMatrixImageFilter* Create(const SkMatrix& transform,
3693a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed                                       SkPaint::FilterLevel level,
3724e06d5244ae96e440410e1d76e039983b2efac9senorblanco                                       SkImageFilter* input = NULL) {
3824e06d5244ae96e440410e1d76e039983b2efac9senorblanco        return Create(transform, SkFilterQuality(level), input);
3993a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed    }
4093a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed#endif
41fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual ~SkMatrixImageFilter();
42fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
4336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void computeFastBounds(const SkRect&, SkRect*) const override;
44fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
45f3f5bad7ded35265c0b5d042cc4174386b197a33robertphillips    SK_TO_STRING_OVERRIDE()
46fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixImageFilter)
47fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
48fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgprotected:
49fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SkMatrixImageFilter(const SkMatrix& transform,
5093a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed                        SkFilterQuality,
5124e06d5244ae96e440410e1d76e039983b2efac9senorblanco                        SkImageFilter* input);
5236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void flatten(SkWriteBuffer&) const override;
53fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
54fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
5536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                               SkBitmap* result, SkIPoint* loc) const override;
56fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    virtual bool onFilterBounds(const SkIRect& src, const SkMatrix&,
5736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                                SkIRect* dst) const override;
58fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
59fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgprivate:
60fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    SkMatrix              fTransform;
6193a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed    SkFilterQuality       fFilterQuality;
62fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org    typedef SkImageFilter INHERITED;
63fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org};
64fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org
65fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#endif
66