Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
SkColorShader.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2016 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
9
12#include "include/core/SkData.h"
24
25#include <utility>
26
28
30 return SkColorGetA(fColor) == 255;
31}
32
33sk_sp<SkFlattenable> SkColorShader::CreateProc(SkReadBuffer& buffer) {
34 return sk_make_sp<SkColorShader>(buffer.readColor());
35}
36
38 buffer.writeColor(fColor);
39}
40
42 : fColorSpace(std::move(space))
43 , fColor({color.fR, color.fG, color.fB, SkTPin(color.fA, 0.0f, 1.0f)})
44{}
45
46sk_sp<SkFlattenable> SkColor4Shader::CreateProc(SkReadBuffer& buffer) {
49 buffer.readColor4f(&color);
50 if (buffer.readBool()) {
51 sk_sp<SkData> data = buffer.readByteArrayAsData();
52 colorSpace = data ? SkColorSpace::Deserialize(data->data(), data->size()) : nullptr;
53 }
54 return SkShaders::Color(color, std::move(colorSpace));
55}
56
58 buffer.writeColor4f(fColor);
59 sk_sp<SkData> colorSpaceData = fColorSpace ? fColorSpace->serialize() : nullptr;
60 if (colorSpaceData) {
61 buffer.writeBool(true);
62 buffer.writeDataAsByteArray(colorSpaceData.get());
63 } else {
64 buffer.writeBool(false);
65 }
66}
67
75
77 SkColor4f color = fColor;
80 rec.fPipeline->appendConstantColor(rec.fAlloc, color.premul().vec());
81 return true;
82}
83
91
92/////////////////////////////////////////////////////////////////////////////////////////////////
93
97
101
102namespace SkShaders {
103sk_sp<SkShader> Color(SkColor color) { return sk_make_sp<SkColorShader>(color); }
104
106 if (!SkIsFinite(color.vec(), 4)) {
107 return nullptr;
108 }
109 return sk_make_sp<SkColor4Shader>(color, std::move(space));
110}
111} // namespace SkShaders
SkColor4f color
kUnpremul_SkAlphaType
void SkRegisterColor4ShaderFlattenable()
void SkRegisterColorShaderFlattenable()
SkColorSpace * sk_srgb_singleton()
uint32_t SkColor
Definition SkColor.h:37
#define SkColorGetA(color)
Definition SkColor.h:61
#define SK_REGISTER_FLATTENABLE(type)
static bool SkIsFinite(T x, Pack... values)
static constexpr const T & SkTPin(const T &x, const T &lo, const T &hi)
Definition SkTPin.h:19
bool onAsLuminanceColor(SkColor4f *lum) const override
SkColor4Shader(const SkColor4f &, sk_sp< SkColorSpace >)
SkColor4f color() const
sk_sp< SkColorSpace > colorSpace() const
void flatten(SkWriteBuffer &) const override
bool appendStages(const SkStageRec &, const SkShaders::MatrixRec &) const override
void flatten(SkWriteBuffer &) const override
bool appendStages(const SkStageRec &, const SkShaders::MatrixRec &) const override
SkColor color() const
SkColorShader(SkColor c)
bool isOpaque() const override
static sk_sp< SkColorSpace > Deserialize(const void *data, size_t length)
sk_sp< SkData > serialize() const
void appendConstantColor(SkArenaAlloc *, const float rgba[4])
T * get() const
Definition SkRefCnt.h:303
static const uint8_t buffer[]
static float lum(float r, float g, float b)
Definition hsl.cpp:52
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switches.h:41
Definition ref_ptr.h:256
void apply(float rgba[4]) const
static SkRGBA4f FromColor(SkColor color)
SkRasterPipeline * fPipeline
SkColorSpace * fDstCS
SkArenaAlloc * fAlloc