Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
modules
svg
src
SkSVGFeBlend.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/core/SkBlendMode.h
"
9
#include "
include/effects/SkImageFilters.h
"
10
#include "
modules/svg/include/SkSVGAttributeParser.h
"
11
#include "
modules/svg/include/SkSVGFeBlend.h
"
12
#include "
modules/svg/include/SkSVGFilterContext.h
"
13
#include "
modules/svg/include/SkSVGRenderContext.h
"
14
#include "
modules/svg/include/SkSVGValue.h
"
15
16
bool
SkSVGFeBlend::parseAndSetAttribute
(
const
char
*
name
,
const
char
* value) {
17
return
INHERITED::parseAndSetAttribute
(
name
,
value
) ||
18
this->setIn2(SkSVGAttributeParser::parse<SkSVGFeInputType>(
"in2"
,
name
,
value
)) ||
19
this->setMode(SkSVGAttributeParser::parse<SkSVGFeBlend::Mode>(
"mode"
,
name
,
value
));
20
}
21
22
static
SkBlendMode
GetBlendMode
(
SkSVGFeBlend::Mode
mode) {
23
switch
(mode) {
24
case
SkSVGFeBlend::Mode::kNormal
:
25
return
SkBlendMode::kSrcOver
;
26
case
SkSVGFeBlend::Mode::kMultiply
:
27
return
SkBlendMode::kMultiply
;
28
case
SkSVGFeBlend::Mode::kScreen
:
29
return
SkBlendMode::kScreen
;
30
case
SkSVGFeBlend::Mode::kDarken
:
31
return
SkBlendMode::kDarken
;
32
case
SkSVGFeBlend::Mode::kLighten
:
33
return
SkBlendMode::kLighten
;
34
}
35
36
SkUNREACHABLE
;
37
}
38
39
sk_sp<SkImageFilter>
SkSVGFeBlend::onMakeImageFilter
(
const
SkSVGRenderContext
& ctx,
40
const
SkSVGFilterContext
& fctx)
const
{
41
const
SkRect
cropRect = this->
resolveFilterSubregion
(ctx, fctx);
42
const
SkBlendMode
blendMode =
GetBlendMode
(this->getMode());
43
const
SkSVGColorspace
colorspace = this->
resolveColorspace
(ctx, fctx);
44
const
sk_sp<SkImageFilter>
background = fctx.
resolveInput
(ctx, fIn2, colorspace);
45
const
sk_sp<SkImageFilter>
foreground = fctx.
resolveInput
(ctx, this->getIn(), colorspace);
46
return
SkImageFilters::Blend
(blendMode, background, foreground, cropRect);
47
}
48
49
template
<>
50
bool
SkSVGAttributeParser::parse<SkSVGFeBlend::Mode>(
51
SkSVGFeBlend::Mode
* mode) {
52
static
constexpr
std::tuple<const char*, SkSVGFeBlend::Mode> gMap[] = {
53
{
"normal"
,
SkSVGFeBlend::Mode::kNormal
},
54
{
"multiply"
,
SkSVGFeBlend::Mode::kMultiply
},
55
{
"screen"
,
SkSVGFeBlend::Mode::kScreen
},
56
{
"darken"
,
SkSVGFeBlend::Mode::kDarken
},
57
{
"lighten"
,
SkSVGFeBlend::Mode::kLighten
},
58
};
59
60
return
this->parseEnumMap(gMap, mode) && this->parseEOSToken();
61
}
SkUNREACHABLE
#define SkUNREACHABLE
Definition
SkAssert.h:135
SkBlendMode.h
SkBlendMode
SkBlendMode
Definition
SkBlendMode.h:38
SkBlendMode::kLighten
@ kLighten
rc = s + d - min(s*da, d*sa), ra = kSrcOver
SkBlendMode::kMultiply
@ kMultiply
r = s*(1-da) + d*(1-sa) + s*d
SkBlendMode::kScreen
@ kScreen
r = s + d - s*d
SkBlendMode::kSrcOver
@ kSrcOver
r = s + (1-sa)*d
SkBlendMode::kDarken
@ kDarken
rc = s + d - max(s*da, d*sa), ra = kSrcOver
SkImageFilters.h
SkSVGAttributeParser.h
GetBlendMode
static SkBlendMode GetBlendMode(SkSVGFeBlend::Mode mode)
Definition
SkSVGFeBlend.cpp:22
SkSVGFeBlend.h
SkSVGFilterContext.h
SkSVGRenderContext.h
SkSVGColorspace
SkSVGColorspace
Definition
SkSVGTypes.h:719
SkSVGValue.h
SkImageFilters::Blend
static sk_sp< SkImageFilter > Blend(SkBlendMode mode, sk_sp< SkImageFilter > background, sk_sp< SkImageFilter > foreground=nullptr, const CropRect &cropRect={})
Definition
SkBlendImageFilter.cpp:134
SkSVGFeBlend::Mode
Mode
Definition
SkSVGFeBlend.h:16
SkSVGFeBlend::Mode::kNormal
@ kNormal
SkSVGFeBlend::Mode::kLighten
@ kLighten
SkSVGFeBlend::Mode::kMultiply
@ kMultiply
SkSVGFeBlend::Mode::kScreen
@ kScreen
SkSVGFeBlend::Mode::kDarken
@ kDarken
SkSVGFeBlend::onMakeImageFilter
sk_sp< SkImageFilter > onMakeImageFilter(const SkSVGRenderContext &, const SkSVGFilterContext &) const override
Definition
SkSVGFeBlend.cpp:39
SkSVGFeBlend::parseAndSetAttribute
bool parseAndSetAttribute(const char *, const char *) override
Definition
SkSVGFeBlend.cpp:16
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
SkSVGRenderContext
Definition
SkSVGRenderContext.h:63
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
SkRect
Definition
extension.cpp:13
Generated on Fri Apr 26 2024 06:16:27 for Flutter Engine by
1.9.8