Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
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
9
15
16#include <utility>
17struct SkStageRec;
18
19SkComposeColorFilter::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
25 // Can only claim alphaunchanged support if both our proxys do.
26 return fOuter->isAlphaUnchanged() && fInner->isAlphaUnchanged();
27}
28
29bool 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
38 buffer.writeFlattenable(fOuter.get());
39 buffer.writeFlattenable(fInner.get());
40}
41
42sk_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
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
#define SkASSERT(cond)
Definition SkAssert.h:116
static sk_sp< SkColorFilterBase > as_CFB_sp(sk_sp< SkColorFilter > filter)
void SkRegisterComposeColorFilterFlattenable()
#define SK_REGISTER_FLATTENABLE(type)
sk_sp< T > sk_ref_sp(T *obj)
Definition SkRefCnt.h:381
virtual bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const =0
bool isAlphaUnchanged() const
sk_sp< SkColorFilter > makeComposed(sk_sp< SkColorFilter > inner) const
sk_sp< SkColorFilterBase > inner() const
bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const override
void flatten(SkWriteBuffer &buffer) const override
bool onIsAlphaUnchanged() const override
sk_sp< SkColorFilterBase > outer() const
T * get() const
Definition SkRefCnt.h:303
static const uint8_t buffer[]
Definition ref_ptr.h:256