SkDisplacementMapEffect.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright 2013 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #ifndef SkDisplacementMapEffect_DEFINED
  8. #define SkDisplacementMapEffect_DEFINED
  9. #include "SkImageFilter.h"
  10. class SK_API SkDisplacementMapEffect : public SkImageFilter {
  11. public:
  12. enum ChannelSelectorType {
  13. kUnknown_ChannelSelectorType,
  14. kR_ChannelSelectorType,
  15. kG_ChannelSelectorType,
  16. kB_ChannelSelectorType,
  17. kA_ChannelSelectorType,
  18. kLast_ChannelSelectorType = kA_ChannelSelectorType
  19. };
  20. ~SkDisplacementMapEffect() override;
  21. static sk_sp<SkImageFilter> Make(ChannelSelectorType xChannelSelector,
  22. ChannelSelectorType yChannelSelector,
  23. SkScalar scale,
  24. sk_sp<SkImageFilter> displacement,
  25. sk_sp<SkImageFilter> color,
  26. const CropRect* cropRect = nullptr);
  27. SkRect computeFastBounds(const SkRect& src) const override;
  28. virtual SkIRect onFilterBounds(const SkIRect& src, const SkMatrix& ctm,
  29. MapDirection, const SkIRect* inputRect) const override;
  30. sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
  31. SkIRect onFilterNodeBounds(const SkIRect&, const SkMatrix& ctm,
  32. MapDirection, const SkIRect* inputRect) const override;
  33. protected:
  34. sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
  35. SkIPoint* offset) const override;
  36. SkDisplacementMapEffect(ChannelSelectorType xChannelSelector,
  37. ChannelSelectorType yChannelSelector,
  38. SkScalar scale, sk_sp<SkImageFilter> inputs[2],
  39. const CropRect* cropRect);
  40. void flatten(SkWriteBuffer&) const override;
  41. private:
  42. SK_FLATTENABLE_HOOKS(SkDisplacementMapEffect)
  43. ChannelSelectorType fXChannelSelector;
  44. ChannelSelectorType fYChannelSelector;
  45. SkScalar fScale;
  46. typedef SkImageFilter INHERITED;
  47. const SkImageFilter* getDisplacementInput() const { return getInput(0); }
  48. const SkImageFilter* getColorInput() const { return getInput(1); }
  49. };
  50. #endif