Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
modules
svg
src
SkSVGFeMorphology.cpp
Go to the documentation of this file.
1
/*
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
#include "
include/effects/SkImageFilters.h
"
9
#include "
modules/svg/include/SkSVGAttributeParser.h
"
10
#include "
modules/svg/include/SkSVGFeMorphology.h
"
11
#include "
modules/svg/include/SkSVGFilterContext.h
"
12
#include "
modules/svg/include/SkSVGRenderContext.h
"
13
#include "
modules/svg/include/SkSVGValue.h
"
14
15
bool
SkSVGFeMorphology::parseAndSetAttribute
(
const
char
*
name
,
const
char
* value) {
16
return
INHERITED::parseAndSetAttribute
(
name
,
value
) ||
17
this->setOperator(SkSVGAttributeParser::parse<SkSVGFeMorphology::Operator>(
18
"operator"
,
name
,
value
)) ||
19
this->setRadius(SkSVGAttributeParser::parse<SkSVGFeMorphology::Radius>(
20
"radius"
,
name
,
value
));
21
}
22
23
sk_sp<SkImageFilter>
SkSVGFeMorphology::onMakeImageFilter
(
const
SkSVGRenderContext
& ctx,
24
const
SkSVGFilterContext
& fctx)
const
{
25
const
SkRect
cropRect = this->
resolveFilterSubregion
(ctx, fctx);
26
const
SkSVGColorspace
colorspace = this->
resolveColorspace
(ctx, fctx);
27
sk_sp<SkImageFilter>
input = fctx.
resolveInput
(ctx, this->getIn(), colorspace);
28
29
const
auto
r =
SkV2
{fRadius.
fX
, fRadius.
fY
}
30
* ctx.
transformForCurrentOBB
(fctx.
primitiveUnits
()).
scale
;
31
switch
(fOperator) {
32
case
Operator::kErode
:
33
return
SkImageFilters::Erode
(r.x, r.y, input, cropRect);
34
case
Operator::kDilate
:
35
return
SkImageFilters::Dilate
(r.x, r.y, input, cropRect);
36
}
37
38
SkUNREACHABLE
;
39
}
40
41
template
<>
42
bool
SkSVGAttributeParser::parse<SkSVGFeMorphology::Operator>(
SkSVGFeMorphology::Operator
* op) {
43
static
constexpr
std::tuple<const char*, SkSVGFeMorphology::Operator> gMap[] = {
44
{
"dilate"
,
SkSVGFeMorphology::Operator::kDilate
},
45
{
"erode"
,
SkSVGFeMorphology::Operator::kErode
},
46
};
47
48
return
this->parseEnumMap(gMap, op) && this->parseEOSToken();
49
}
50
51
template
<>
52
bool
SkSVGAttributeParser::parse<SkSVGFeMorphology::Radius>(
SkSVGFeMorphology::Radius
* radius) {
53
std::vector<SkSVGNumberType> values;
54
if
(!this->parse(&values)) {
55
return
false
;
56
}
57
58
radius->
fX
= values[0];
59
radius->
fY
= values.size() > 1 ? values[1] : values[0];
60
return
true
;
61
}
SkUNREACHABLE
#define SkUNREACHABLE
Definition
SkAssert.h:135
SkImageFilters.h
SkSVGAttributeParser.h
SkSVGFeMorphology.h
SkSVGFilterContext.h
SkSVGRenderContext.h
SkSVGColorspace
SkSVGColorspace
Definition
SkSVGTypes.h:719
SkSVGValue.h
SkImageFilters::Erode
static sk_sp< SkImageFilter > Erode(SkScalar radiusX, SkScalar radiusY, sk_sp< SkImageFilter > input, const CropRect &cropRect={})
Definition
SkMorphologyImageFilter.cpp:233
SkImageFilters::Dilate
static sk_sp< SkImageFilter > Dilate(SkScalar radiusX, SkScalar radiusY, sk_sp< SkImageFilter > input, const CropRect &cropRect={})
Definition
SkMorphologyImageFilter.cpp:227
SkSVGFeMorphology::parseAndSetAttribute
bool parseAndSetAttribute(const char *, const char *) override
Definition
SkSVGFeMorphology.cpp:15
SkSVGFeMorphology::onMakeImageFilter
sk_sp< SkImageFilter > onMakeImageFilter(const SkSVGRenderContext &, const SkSVGFilterContext &) const override
Definition
SkSVGFeMorphology.cpp:23
SkSVGFeMorphology::Operator
Operator
Definition
SkSVGFeMorphology.h:21
SkSVGFeMorphology::Operator::kErode
@ kErode
SkSVGFeMorphology::Operator::kDilate
@ kDilate
SkSVGFe::resolveFilterSubregion
SkRect resolveFilterSubregion(const SkSVGRenderContext &, const SkSVGFilterContext &) const
Definition
SkSVGFe.cpp:54
SkSVGFe::parseAndSetAttribute
bool parseAndSetAttribute(const char *, const char *) override
Definition
SkSVGFe.cpp:93
SkSVGFe::resolveColorspace
virtual SkSVGColorspace resolveColorspace(const SkSVGRenderContext &, const SkSVGFilterContext &) const
Definition
SkSVGFe.cpp:84
SkSVGFilterContext
Definition
SkSVGFilterContext.h:21
SkSVGFilterContext::resolveInput
sk_sp< SkImageFilter > resolveInput(const SkSVGRenderContext &, const SkSVGFeInputType &) const
Definition
SkSVGFilterContext.cpp:145
SkSVGFilterContext::primitiveUnits
const SkSVGObjectBoundingBoxUnits & primitiveUnits() const
Definition
SkSVGFilterContext.h:33
SkSVGRenderContext
Definition
SkSVGRenderContext.h:63
SkSVGRenderContext::transformForCurrentOBB
OBBTransform transformForCurrentOBB(SkSVGObjectBoundingBoxUnits) const
Definition
SkSVGRenderContext.cpp:493
sk_sp
Definition
SkRefCnt.h:220
value
uint8_t value
Definition
fl_standard_message_codec.cc:36
name
const char * name
Definition
fuchsia.cc:50
SkPoint::fX
float fX
x-axis value
Definition
SkPoint_impl.h:164
SkPoint::fY
float fY
y-axis value
Definition
SkPoint_impl.h:165
SkRect
Definition
extension.cpp:13
SkSVGFeMorphology::Radius
Definition
SkSVGFeMorphology.h:16
SkSVGFeMorphology::Radius::fY
SkSVGNumberType fY
Definition
SkSVGFeMorphology.h:18
SkSVGFeMorphology::Radius::fX
SkSVGNumberType fX
Definition
SkSVGFeMorphology.h:17
SkSVGRenderContext::OBBTransform::scale
SkV2 scale
Definition
SkSVGRenderContext.h:156
SkV2
Definition
SkM44.h:19
Generated on Fri Apr 26 2024 06:16:28 for Flutter Engine by
1.9.8