Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
gradient_interpolation.hpp
Go to the documentation of this file.
1#pragma once
2
3// The colour space a gradient blends its stops in — CSS Color 4's
4// `<color-interpolation-method>` (`linear-gradient(in oklab, ...)`).
5//
6// Kept apart from canvas.hpp so the enum can travel through the view and
7// importer layers without pulling the whole Canvas surface along, and so the
8// reference interpolation below has one home that backends and tests share.
9
10#include <cstdint>
11#include <vector>
12
13namespace pulp::canvas {
14
15struct Color;
16
38
41enum class GradientHueMethod : std::uint8_t { shorter, longer, increasing, decreasing };
42
49
51constexpr bool is_polar(GradientColorSpace space) {
52 return space == GradientColorSpace::hsl || space == GradientColorSpace::hwb ||
54}
55
63Color interpolate_gradient_color(const Color& a, const Color& b, float t,
65
70void resample_gradient_stops(const Color* colors, const float* positions, int count,
71 GradientInterpolation method, int samples_per_segment,
72 std::vector<Color>& out_colors, std::vector<float>& out_positions);
73
74} // namespace pulp::canvas
Definition affine_transform.hpp:24
GradientColorSpace
Interpolation colour spaces a gradient can be painted in.
Definition gradient_interpolation.hpp:24
@ oklch
Definition gradient_interpolation.hpp:36
@ lch
CIE LCh, D50.
Definition gradient_interpolation.hpp:35
@ oklab
the CSS default when a stop is a non-legacy colour
Definition gradient_interpolation.hpp:32
@ hwb
Definition gradient_interpolation.hpp:34
@ srgb_linear
linear-light sRGB (and every space listed above)
Definition gradient_interpolation.hpp:26
@ srgb
gamma-encoded sRGB; the CSS default for legacy colours
Definition gradient_interpolation.hpp:25
@ display_p3
Definition gradient_interpolation.hpp:27
@ rec2020
Definition gradient_interpolation.hpp:30
@ hsl
Definition gradient_interpolation.hpp:33
@ a98_rgb
Definition gradient_interpolation.hpp:28
@ prophoto_rgb
Definition gradient_interpolation.hpp:29
@ lab
CIE Lab, D50.
Definition gradient_interpolation.hpp:31
Color interpolate_gradient_color(const Color &a, const Color &b, float t, GradientInterpolation method)
The sRGB colour t of the way from a to b when the two are blended in method's space,...
@ count
sentinel: number of real capabilities (keep LAST)
Definition canvas_capability.hpp:38
void resample_gradient_stops(const Color *colors, const float *positions, int count, GradientInterpolation method, int samples_per_segment, std::vector< Color > &out_colors, std::vector< float > &out_positions)
Expand a stop list into one whose plain sRGB blend follows method's curve: every segment between two ...
GradientHueMethod
Which way round the colour wheel a polar space travels between two hues.
Definition gradient_interpolation.hpp:41
@ longer
Definition gradient_interpolation.hpp:41
@ increasing
Definition gradient_interpolation.hpp:41
@ decreasing
Definition gradient_interpolation.hpp:41
@ shorter
Definition gradient_interpolation.hpp:41
constexpr bool is_polar(GradientColorSpace space)
True for the cylindrical spaces, which interpolate a hue angle.
Definition gradient_interpolation.hpp:51
Definition canvas.hpp:52
Definition gradient_interpolation.hpp:43
GradientHueMethod hue
Definition gradient_interpolation.hpp:45
bool operator==(const GradientInterpolation &) const =default
GradientColorSpace space
Definition gradient_interpolation.hpp:44