tiny-skia-cpp
A C++20 2D rendering library (port of tiny-skia)
Loading...
Searching...
No Matches
Gradient.h
Go to the documentation of this file.
1#pragma once
2
5
6#include <functional>
7#include <vector>
8
9#include "tiny_skia/Color.h"
10#include "tiny_skia/Point.h"
11#include "tiny_skia/pipeline/Pipeline.h"
12
13namespace tiny_skia {
14
16constexpr float kDegenerateThreshold = 1.0f / (1 << 15);
17
28
31class Gradient {
32 public:
33 Gradient(std::vector<GradientStop> stops, SpreadMode tileMode, Transform transform,
34 Transform pointsToUnit);
35
36 [[nodiscard]] bool colorsAreOpaque() const { return colorsAreOpaque_; }
37
38 [[nodiscard]] bool pushStages(
39 pipeline::RasterPipelineBuilder& p, ColorSpace cs,
40 const std::function<void(pipeline::RasterPipelineBuilder&)>& pushStagesPre,
41 const std::function<void(pipeline::RasterPipelineBuilder&)>& pushStagesPost) const;
42
45 [[nodiscard]] bool tryPushFusedLinear2Stop(pipeline::RasterPipelineBuilder& p,
46 ColorSpace cs) const;
47
50 [[nodiscard]] bool tryPushFusedRadial2Stop(pipeline::RasterPipelineBuilder& p,
51 ColorSpace cs) const;
52
53 void applyOpacity(float opacity);
54
55 Transform transform;
56
57 private:
58 std::vector<GradientStop> stops_;
59 SpreadMode tileMode_ = SpreadMode::Pad;
60 Transform pointsToUnit_;
61 bool colorsAreOpaque_ = true;
62 bool hasUniformStops_ = true;
63};
64
65} // namespace tiny_skia
Color types (8-bit and floating-point, straight and premultiplied).
2D point (float x, y) with vector math operations.
Floating-point RGBA color [0,1] (straight alpha).
Definition Color.h:88
A float guaranteed to be in [0, 1].
Definition FloatingPoint.h:12
static NormalizedF32 newClamped(float value)
Clamps to [0,1].
A color stop in a gradient.
Definition Gradient.h:19
Color color
Color at this position.
Definition Gradient.h:21
static GradientStop create(float position, Color color)
Creates a stop, clamping position to [0,1].
Definition Gradient.h:24
NormalizedF32 position
Position along the gradient [0,1].
Definition Gradient.h:20