/* * Copyright 2024 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSVGFeComponentTransfer_DEFINED #define SkSVGFeComponentTransfer_DEFINED #include "include/core/SkRefCnt.h" #include "include/private/base/SkAPI.h" #include "modules/svg/include/SkSVGFe.h" #include "modules/svg/include/SkSVGHiddenContainer.h" #include "modules/svg/include/SkSVGNode.h" #include "modules/svg/include/SkSVGTypes.h" #include #include class SkImageFilter; class SkSVGFilterContext; class SkSVGRenderContext; class SkSVGFeFunc final : public SkSVGHiddenContainer { public: static sk_sp MakeFuncA() { return sk_sp(new SkSVGFeFunc(SkSVGTag::kFeFuncA)); } static sk_sp MakeFuncR() { return sk_sp(new SkSVGFeFunc(SkSVGTag::kFeFuncR)); } static sk_sp MakeFuncG() { return sk_sp(new SkSVGFeFunc(SkSVGTag::kFeFuncG)); } static sk_sp MakeFuncB() { return sk_sp(new SkSVGFeFunc(SkSVGTag::kFeFuncB)); } SVG_ATTR(Amplitude , SkSVGNumberType, 1) SVG_ATTR(Exponent , SkSVGNumberType, 1) SVG_ATTR(Intercept , SkSVGNumberType, 0) SVG_ATTR(Offset , SkSVGNumberType, 0) SVG_ATTR(Slope , SkSVGNumberType, 1) SVG_ATTR(TableValues, std::vector, {}) SVG_ATTR(Type , SkSVGFeFuncType, SkSVGFeFuncType::kIdentity) std::vector getTable() const; protected: bool parseAndSetAttribute(const char*, const char*) override; private: SkSVGFeFunc(SkSVGTag tag) : INHERITED(tag) {} using INHERITED = SkSVGHiddenContainer; }; class SK_API SkSVGFeComponentTransfer final : public SkSVGFe { public: static constexpr SkSVGTag tag = SkSVGTag::kFeComponentTransfer; static sk_sp Make() { return sk_sp(new SkSVGFeComponentTransfer()); } protected: sk_sp onMakeImageFilter(const SkSVGRenderContext&, const SkSVGFilterContext&) const override; std::vector getInputs() const override { return {this->getIn()}; } private: SkSVGFeComponentTransfer() : INHERITED(tag) {} using INHERITED = SkSVGFe; }; #endif // SkSVGFeComponentTransfer_DEFINED