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