Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
third_party
skia
src
effects
colorfilters
SkComposeColorFilter.cpp
Go to the documentation of this file.
1
/*
2
* Copyright 2023 Google LLC
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 "
src/effects/colorfilters/SkComposeColorFilter.h
"
9
10
#include "
include/core/SkRefCnt.h
"
11
#include "
include/private/base/SkAssert.h
"
12
#include "
src/core/SkReadBuffer.h
"
13
#include "
src/core/SkWriteBuffer.h
"
14
#include "
src/effects/colorfilters/SkColorFilterBase.h
"
15
16
#include <utility>
17
struct
SkStageRec
;
18
19
SkComposeColorFilter::SkComposeColorFilter(
sk_sp<SkColorFilter>
outer,
sk_sp<SkColorFilter>
inner)
20
: fOuter(
as_CFB_sp
(
std
::move(outer))), fInner(
as_CFB_sp
(
std
::move(inner))) {
21
SkASSERT
(fOuter && fInner);
22
}
23
24
bool
SkComposeColorFilter::onIsAlphaUnchanged
()
const
{
25
// Can only claim alphaunchanged support if both our proxys do.
26
return
fOuter->
isAlphaUnchanged
() && fInner->
isAlphaUnchanged
();
27
}
28
29
bool
SkComposeColorFilter::appendStages
(
const
SkStageRec
& rec,
bool
shaderIsOpaque)
const
{
30
bool
innerIsOpaque = shaderIsOpaque;
31
if
(!fInner->
isAlphaUnchanged
()) {
32
innerIsOpaque =
false
;
33
}
34
return
fInner->
appendStages
(rec, shaderIsOpaque) && fOuter->
appendStages
(rec, innerIsOpaque);
35
}
36
37
void
SkComposeColorFilter::flatten
(
SkWriteBuffer
&
buffer
)
const
{
38
buffer
.writeFlattenable(fOuter.
get
());
39
buffer
.writeFlattenable(fInner.
get
());
40
}
41
42
sk_sp<SkFlattenable>
SkComposeColorFilter::CreateProc(
SkReadBuffer
&
buffer
) {
43
sk_sp<SkColorFilter>
outer
(
buffer
.readColorFilter());
44
sk_sp<SkColorFilter>
inner
(
buffer
.readColorFilter());
45
return
outer
?
outer
->
makeComposed
(std::move(
inner
)) :
inner
;
46
}
47
48
sk_sp<SkColorFilter>
SkColorFilter::makeComposed
(
sk_sp<SkColorFilter>
inner)
const
{
49
if
(!inner) {
50
return
sk_ref_sp
(
this
);
51
}
52
53
return
sk_sp<SkColorFilter>
(
new
SkComposeColorFilter
(
sk_ref_sp
(
this
), std::move(inner)));
54
}
55
56
void
SkRegisterComposeColorFilterFlattenable
() {
SK_REGISTER_FLATTENABLE
(
SkComposeColorFilter
); }
SkAssert.h
SkASSERT
#define SkASSERT(cond)
Definition
SkAssert.h:116
SkColorFilterBase.h
as_CFB_sp
static sk_sp< SkColorFilterBase > as_CFB_sp(sk_sp< SkColorFilter > filter)
Definition
SkColorFilterBase.h:102
SkRegisterComposeColorFilterFlattenable
void SkRegisterComposeColorFilterFlattenable()
Definition
SkComposeColorFilter.cpp:56
SkComposeColorFilter.h
SK_REGISTER_FLATTENABLE
#define SK_REGISTER_FLATTENABLE(type)
Definition
SkFlattenable.h:105
SkReadBuffer.h
SkRefCnt.h
sk_ref_sp
sk_sp< T > sk_ref_sp(T *obj)
Definition
SkRefCnt.h:381
SkWriteBuffer.h
SkColorFilterBase::appendStages
virtual bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const =0
SkColorFilter::isAlphaUnchanged
bool isAlphaUnchanged() const
Definition
SkColorFilter.cpp:34
SkColorFilter::makeComposed
sk_sp< SkColorFilter > makeComposed(sk_sp< SkColorFilter > inner) const
Definition
SkComposeColorFilter.cpp:48
SkComposeColorFilter
Definition
SkComposeColorFilter.h:19
SkComposeColorFilter::inner
sk_sp< SkColorFilterBase > inner() const
Definition
SkComposeColorFilter.h:28
SkComposeColorFilter::appendStages
bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const override
Definition
SkComposeColorFilter.cpp:29
SkComposeColorFilter::flatten
void flatten(SkWriteBuffer &buffer) const override
Definition
SkComposeColorFilter.cpp:37
SkComposeColorFilter::onIsAlphaUnchanged
bool onIsAlphaUnchanged() const override
Definition
SkComposeColorFilter.cpp:24
SkComposeColorFilter::outer
sk_sp< SkColorFilterBase > outer() const
Definition
SkComposeColorFilter.h:27
SkReadBuffer
Definition
SkReadBuffer.h:52
SkWriteBuffer
Definition
SkWriteBuffer.h:41
sk_sp
Definition
SkRefCnt.h:220
sk_sp::get
T * get() const
Definition
SkRefCnt.h:303
buffer
static const uint8_t buffer[]
Definition
fl_pixel_buffer_texture_test.cc:44
std
Definition
ref_ptr.h:256
SkStageRec
Definition
SkEffectPriv.h:20
Generated on Fri Apr 26 2024 06:16:53 for Flutter Engine by
1.9.8