| /* |
| * 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 "SkImageFilter.h" |
| |
| class SK_API SkDisplacementMapEffect : public SkImageFilter { |
| public: |
| enum ChannelSelectorType { |
| kUnknown_ChannelSelectorType, |
| kR_ChannelSelectorType, |
| kG_ChannelSelectorType, |
| kB_ChannelSelectorType, |
| kA_ChannelSelectorType |
| }; |
| |
| ~SkDisplacementMapEffect() override; |
| |
| static sk_sp<SkImageFilter> Make(ChannelSelectorType xChannelSelector, |
| ChannelSelectorType yChannelSelector, |
| SkScalar scale, |
| sk_sp<SkImageFilter> displacement, |
| sk_sp<SkImageFilter> color, |
| const CropRect* cropRect = nullptr); |
| |
| SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDisplacementMapEffect) |
| |
| SkRect computeFastBounds(const SkRect& src) const override; |
| |
| virtual SkIRect onFilterBounds(const SkIRect& src, const SkMatrix&, |
| MapDirection) const override; |
| SkIRect onFilterNodeBounds(const SkIRect&, const SkMatrix&, MapDirection) const override; |
| |
| SK_TO_STRING_OVERRIDE() |
| |
| #ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR |
| static SkImageFilter* Create(ChannelSelectorType xChannelSelector, |
| ChannelSelectorType yChannelSelector, |
| SkScalar scale, SkImageFilter* displacement, |
| SkImageFilter* color = nullptr, |
| const CropRect* cropRect = nullptr) { |
| return Make(xChannelSelector, yChannelSelector, scale, |
| sk_ref_sp<SkImageFilter>(displacement), |
| sk_ref_sp<SkImageFilter>(color), |
| cropRect).release(); |
| } |
| #endif |
| |
| protected: |
| sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&, |
| SkIPoint* offset) const override; |
| |
| SkDisplacementMapEffect(ChannelSelectorType xChannelSelector, |
| ChannelSelectorType yChannelSelector, |
| SkScalar scale, sk_sp<SkImageFilter> inputs[2], |
| const CropRect* cropRect); |
| void flatten(SkWriteBuffer&) const override; |
| |
| private: |
| ChannelSelectorType fXChannelSelector; |
| ChannelSelectorType fYChannelSelector; |
| SkScalar fScale; |
| typedef SkImageFilter INHERITED; |
| const SkImageFilter* getDisplacementInput() const { return getInput(0); } |
| const SkImageFilter* getColorInput() const { return getInput(1); } |
| }; |
| |
| #endif |