tiny-skia-cpp
A C++20 2D rendering library (port of tiny-skia)
Loading...
Searching...
No Matches
RadialGradient.h
Go to the documentation of this file.
1#pragma once
2
5
6#include <optional>
7#include <variant>
8#include <vector>
9
11
12namespace tiny_skia {
13
16struct FocalData {
17 float r1 = 0.0f;
18 float focalX = 0.0f;
19 bool isSwapped = false;
20
21 [[nodiscard]] bool isFocalOnCircle() const;
22 [[nodiscard]] bool isWellBehaved() const;
23 [[nodiscard]] bool isNativelyFocal() const;
24
25 bool set(float r0, float r1, Transform& matrix);
26};
27
29struct RadialType {
30 float radius1 = 0.0f;
31 float radius2 = 0.0f;
32};
33
35struct StripType {
36 float scaledR0 = 0.0f;
37};
38
40using GradientType = std::variant<RadialType, StripType, FocalData>;
41
47 public:
48 explicit RadialGradient(Gradient base) : base_(std::move(base)) {}
49
52 static std::optional<std::variant<Color, RadialGradient>> create(
53 Point startPoint, float startRadius, Point endPoint, float endRadius,
54 std::vector<GradientStop> stops, SpreadMode mode, Transform transform);
55
57 [[nodiscard]] bool isOpaque() const { return base_.colorsAreOpaque(); }
58
60 [[nodiscard]] bool pushStages(ColorSpace cs, pipeline::RasterPipelineBuilder& p) const;
61
63 Gradient base_;
64
65 private:
66 static std::optional<std::variant<Color, RadialGradient>> createRadialUnchecked(
67 Point center, float radius, std::vector<GradientStop> stops, SpreadMode mode,
68 Transform transform);
69
70 static std::optional<std::variant<Color, RadialGradient>> createTwoPoint(
71 Point c0, float r0, Point c1, float r1, std::vector<GradientStop> stops, SpreadMode mode,
72 Transform transform);
73
74 GradientType gradientType_;
75};
76
77} // namespace tiny_skia
ColorSpace
Colorspace for gamma-correct blending.
Definition Color.h:167
Base gradient data and gradient stop type.
Two-point conical (radial) gradient shader.
Definition RadialGradient.h:46
static std::optional< std::variant< Color, RadialGradient > > create(Point startPoint, float startRadius, Point endPoint, float endRadius, std::vector< GradientStop > stops, SpreadMode mode, Transform transform)
Creates a radial gradient between two circles. Returns a Color if the gradient degenerates to a singl...
2D affine transformation: [sx kx tx; ky sy ty; 0 0 1].
Definition Transform.h:17
2D point / vector with float components.
Definition Point.h:14