blob: 1031b154662fee622ecfaf7ff0d051e361e0d932 [file] [log] [blame]
Tyler Dennistondf208a32020-10-30 16:01:54 -04001/*
2 * Copyright 2020 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
8#ifndef SkSVGFe_DEFINED
9#define SkSVGFe_DEFINED
10
11#include "modules/svg/include/SkSVGHiddenContainer.h"
12
13class SkImageFilter;
14class SkSVGFilterContext;
15
16class SkSVGFe : public SkSVGHiddenContainer {
17public:
18 ~SkSVGFe() override = default;
19
Tyler Dennistondada9602020-11-03 10:04:25 -050020 static bool IsFilterEffect(const sk_sp<SkSVGNode>& node) {
Tyler Dennistonb25caae2020-11-09 12:46:02 -050021 return node->tag() == SkSVGTag::kFeTurbulence || node->tag() == SkSVGTag::kFeColorMatrix ||
22 node->tag() == SkSVGTag::kFeComposite;
Tyler Dennistondada9602020-11-03 10:04:25 -050023 }
Tyler Dennistondf208a32020-10-30 16:01:54 -040024
25 sk_sp<SkImageFilter> makeImageFilter(const SkSVGRenderContext& ctx,
Tyler Dennistonb25caae2020-11-09 12:46:02 -050026 const SkSVGFilterContext& fctx) const;
27
28 SVG_ATTR(In, SkSVGFeInputType, SkSVGFeInputType(SkSVGFeInputType::Type::kSourceGraphic))
29 SVG_ATTR(Result, SkSVGStringType, SkSVGStringType())
Tyler Dennistondf208a32020-10-30 16:01:54 -040030
31protected:
32 explicit SkSVGFe(SkSVGTag t) : INHERITED(t) {}
33
34 virtual sk_sp<SkImageFilter> onMakeImageFilter(const SkSVGRenderContext&,
35 const SkSVGFilterContext&) const = 0;
36
Tyler Dennistonb25caae2020-11-09 12:46:02 -050037 bool parseAndSetAttribute(const char*, const char*) override;
38
Tyler Dennistondf208a32020-10-30 16:01:54 -040039private:
40 using INHERITED = SkSVGHiddenContainer;
41};
42
43#endif // SkSVGFe_DEFINED