/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkDisplacementMapEffect_DEFINED #define SkDisplacementMapEffect_DEFINED #include "include/core/SkImageFilter.h" class SK_API SkDisplacementMapEffect : public SkImageFilter { public: enum ChannelSelectorType { kUnknown_ChannelSelectorType, kR_ChannelSelectorType, kG_ChannelSelectorType, kB_ChannelSelectorType, kA_ChannelSelectorType, kLast_ChannelSelectorType = kA_ChannelSelectorType }; ~SkDisplacementMapEffect() override; static sk_sp Make(ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, SkScalar scale, sk_sp displacement, sk_sp color, const CropRect* cropRect = nullptr); SkRect computeFastBounds(const SkRect& src) const override; virtual SkIRect onFilterBounds(const SkIRect& src, const SkMatrix& ctm, MapDirection, const SkIRect* inputRect) const override; SkIRect onFilterNodeBounds(const SkIRect&, const SkMatrix& ctm, MapDirection, const SkIRect* inputRect) const override; protected: sk_sp onFilterImage(SkSpecialImage* source, const Context&, SkIPoint* offset) const override; SkDisplacementMapEffect(ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, SkScalar scale, sk_sp inputs[2], const CropRect* cropRect); void flatten(SkWriteBuffer&) const override; private: SK_FLATTENABLE_HOOKS(SkDisplacementMapEffect) ChannelSelectorType fXChannelSelector; ChannelSelectorType fYChannelSelector; SkScalar fScale; typedef SkImageFilter INHERITED; const SkImageFilter* getDisplacementInput() const { return getInput(0); } const SkImageFilter* getColorInput() const { return getInput(1); } }; #endif