Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
modules
skottie
src
layers
shapelayer
MergePaths.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/SkRefCnt.h
"
9
#include "
modules/skottie/src/SkottieJson.h
"
10
#include "
modules/skottie/src/layers/shapelayer/ShapeLayer.h
"
11
#include "
modules/sksg/include/SkSGGeometryNode.h
"
12
#include "
modules/sksg/include/SkSGMerge.h
"
13
#include "
src/utils/SkJSON.h
"
14
15
#include <algorithm>
16
#include <cstddef>
17
#include <utility>
18
#include <vector>
19
20
namespace
skottie
{
21
namespace
internal {
22
class
AnimationBuilder;
23
24
sk_sp<sksg::Merge>
ShapeBuilder::MergeGeometry
(std::vector<
sk_sp<sksg::GeometryNode>
>&& geos,
25
sksg::Merge::Mode
mode) {
26
std::vector<sksg::Merge::Rec> merge_recs;
27
merge_recs.reserve(geos.size());
28
29
for
(
auto
& geo : geos) {
30
merge_recs.push_back(
31
{std::move(geo), merge_recs.empty() ?
sksg::Merge::Mode::kMerge
: mode});
32
}
33
34
return
sksg::Merge::Make
(std::move(merge_recs));
35
}
36
37
std::vector<sk_sp<sksg::GeometryNode>>
ShapeBuilder::AttachMergeGeometryEffect
(
38
const
skjson::ObjectValue
& jmerge,
const
AnimationBuilder
*,
39
std::vector<
sk_sp<sksg::GeometryNode>
>&& geos) {
40
static
constexpr
sksg::Merge::Mode
gModes
[] = {
41
sksg::Merge::Mode::kMerge
,
// "mm": 1
42
sksg::Merge::Mode::kUnion
,
// "mm": 2
43
sksg::Merge::Mode::kDifference
,
// "mm": 3
44
sksg::Merge::Mode::kIntersect
,
// "mm": 4
45
sksg::Merge::Mode::kXOR
,
// "mm": 5
46
};
47
48
const
auto
mode =
gModes
[std::min<size_t>(ParseDefault<size_t>(jmerge[
"mm"
], 1) - 1,
49
std::size(
gModes
) - 1)];
50
51
std::vector<sk_sp<sksg::GeometryNode>> merged;
52
merged.push_back(
ShapeBuilder::MergeGeometry
(std::move(geos), mode));
53
54
return
merged;
55
}
56
57
}
// namespace internal
58
}
// namespace skottie
ShapeLayer.h
SkJSON.h
SkRefCnt.h
SkSGGeometryNode.h
SkSGMerge.h
SkottieJson.h
gModes
constexpr SkBlendMode gModes[]
Definition
aarectmodes.cpp:73
sk_sp
Definition
SkRefCnt.h:220
skjson::ObjectValue
Definition
SkJSON.h:337
skottie::internal::AnimationBuilder
Definition
SkottiePriv.h:66
skottie::internal::ShapeBuilder::AttachMergeGeometryEffect
static std::vector< sk_sp< sksg::GeometryNode > > AttachMergeGeometryEffect(const skjson::ObjectValue &, const AnimationBuilder *, std::vector< sk_sp< sksg::GeometryNode > > &&)
Definition
MergePaths.cpp:37
skottie::internal::ShapeBuilder::MergeGeometry
static sk_sp< sksg::Merge > MergeGeometry(std::vector< sk_sp< sksg::GeometryNode > > &&, sksg::Merge::Mode)
Definition
MergePaths.cpp:24
sksg::Merge::Mode
Mode
Definition
SkSGMerge.h:32
sksg::Merge::Mode::kMerge
@ kMerge
sksg::Merge::Mode::kUnion
@ kUnion
sksg::Merge::Mode::kXOR
@ kXOR
sksg::Merge::Mode::kIntersect
@ kIntersect
sksg::Merge::Mode::kDifference
@ kDifference
sksg::Merge::Make
static sk_sp< Merge > Make(std::vector< Rec > &&recs)
Definition
SkSGMerge.h:49
skottie
Definition
ExternalLayer.h:16
Generated on Fri Apr 26 2024 06:16:18 for Flutter Engine by
1.9.8