/* * Copyright 2014 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkMatrixImageFilter_DEFINED #define SkMatrixImageFilter_DEFINED #include "SkFlattenable.h" #include "SkImageFilter.h" #include "SkMatrix.h" /*! \class SkMatrixImageFilter Matrix transformation image filter. This filter draws its source input transformed by the given matrix. */ class SkMatrixImageFilter : public SkImageFilter { public: /** Construct a 2D transformation image filter. * @param transform The matrix to apply when drawing the src bitmap * @param filterQuality The quality of filtering to apply when scaling. * @param input The input image filter. If nullptr, the src bitmap * passed to filterImage() is used instead. */ static sk_sp Make(const SkMatrix& transform, SkFilterQuality filterQuality, sk_sp input); SkRect computeFastBounds(const SkRect&) const override; Factory getFactory() const override { return CreateProc; } protected: SkMatrixImageFilter(const SkMatrix& transform, SkFilterQuality, sk_sp input); void flatten(SkWriteBuffer&) const override; sk_sp onFilterImage(SkSpecialImage* source, const Context&, SkIPoint* offset) const override; sk_sp onMakeColorSpace(SkColorSpaceXformer*) const override; SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix& ctm, MapDirection, const SkIRect* inputRect) const override; private: static sk_sp CreateProc(SkReadBuffer&); friend class SkFlattenable::PrivateInitializer; SkMatrix fTransform; SkFilterQuality fFilterQuality; typedef SkImageFilter INHERITED; }; #endif