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