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, 33fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkImageFilter* input = NULL); 34fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org virtual ~SkMatrixImageFilter(); 35fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org 36fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org virtual void computeFastBounds(const SkRect&, SkRect*) const SK_OVERRIDE; 37fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org 38fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMatrixImageFilter) 39fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org 40fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgprotected: 41fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkMatrixImageFilter(const SkMatrix& transform, 42fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkPaint::FilterLevel, 43fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkImageFilter* input = NULL); 44fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkMatrixImageFilter(SkReadBuffer& buffer); 45fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 46fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org 47fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&, 48fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkBitmap* result, SkIPoint* loc) const SK_OVERRIDE; 49fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org virtual bool onFilterBounds(const SkIRect& src, const SkMatrix&, 50fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkIRect* dst) const SK_OVERRIDE; 51fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org 52fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.orgprivate: 53fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkMatrix fTransform; 54fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org SkPaint::FilterLevel fFilterLevel; 55fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org typedef SkImageFilter INHERITED; 56fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org}; 57fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org 58fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#endif 59