Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
utils.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (C) 2023 AUTHORS
4 *
5 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
6 */
7#ifndef SEEN_COLORS_UTILS_H
8#define SEEN_COLORS_UTILS_H
9
10#include <algorithm>
11#include <cstdint>
12#include <optional>
13#include <string>
14#include <vector>
15#include <algorithm>
16
17/* Useful composition macros */
18
19constexpr double SP_COLOR_U_TO_F(uint32_t v)
20{
21 return v / 255.0;
22}
23constexpr uint32_t SP_COLOR_F_TO_U(double v)
24{
25 return (unsigned int)(std::clamp(v, 0.0, 1.0) * 255. + .5);
26}
27constexpr uint32_t SP_RGBA32_R_U(uint32_t v)
28{
29 return (v >> 24) & 0xff;
30}
31constexpr uint32_t SP_RGBA32_G_U(uint32_t v)
32{
33 return (v >> 16) & 0xff;
34}
35constexpr uint32_t SP_RGBA32_B_U(uint32_t v)
36{
37 return (v >> 8) & 0xff;
38}
39constexpr uint32_t SP_RGBA32_A_U(uint32_t v)
40{
41 return v & 0xff;
42}
43constexpr double SP_RGBA32_R_F(uint32_t v)
44{
46}
47constexpr double SP_RGBA32_G_F(uint32_t v)
48{
50}
51constexpr double SP_RGBA32_B_F(uint32_t v)
52{
54}
55constexpr double SP_RGBA32_A_F(uint32_t v)
56{
58}
59
60constexpr uint32_t SP_RGBA32_U_COMPOSE(uint32_t r, uint32_t g, uint32_t b, uint32_t a)
61{
62 return ((r & 0xff) << 24) | ((g & 0xff) << 16) | ((b & 0xff) << 8) | (a & 0xff);
63}
64constexpr uint32_t SP_RGBA32_F_COMPOSE(double r, double g, double b, double a)
65{
67}
68constexpr uint32_t SP_RGBA32_C_COMPOSE(uint32_t c, double o)
69{
71}
72
73constexpr uint32_t compose_argb32(double a, double r, double g, double b) {
75}
76
81namespace Inkscape::Colors {
82
83class Color;
84
85uint32_t hex_to_rgba(std::string const &value);
86std::vector<double> rgba_to_values(uint32_t rgba, bool opacity);
87std::string rgba_to_hex(uint32_t value, bool alpha = false);
88std::string color_to_id(std::optional<Color> const &color);
89std::string desc_to_id(std::string const &desc);
90
91Color make_contrasted_color(Color const &orig, double amount);
92Color make_theme_color(Color const &orig, bool dark);
93
94double lightness(Color color);
95double perceptual_lightness(double l);
96double get_perceptual_lightness(Color const &color);
97std::pair<double, double> get_contrasting_color(double l);
98
99} // namespace Inkscape::Colors
100
101#endif // SEEN_COLORS_UTILS_H
uint32_t Color
constexpr double SP_RGBA32_G_F(uint32_t v)
Definition utils.h:47
constexpr uint32_t SP_COLOR_F_TO_U(double v)
Definition utils.h:23
constexpr uint32_t SP_RGBA32_R_U(uint32_t v)
Definition utils.h:27
constexpr double SP_RGBA32_R_F(uint32_t v)
Definition utils.h:43
constexpr uint32_t SP_RGBA32_G_U(uint32_t v)
Definition utils.h:31
constexpr double SP_COLOR_U_TO_F(uint32_t v)
Definition utils.h:19
constexpr uint32_t SP_RGBA32_U_COMPOSE(uint32_t r, uint32_t g, uint32_t b, uint32_t a)
Definition utils.h:60
constexpr uint32_t SP_RGBA32_A_U(uint32_t v)
Definition utils.h:39
constexpr uint32_t SP_RGBA32_B_U(uint32_t v)
Definition utils.h:35
constexpr double SP_RGBA32_A_F(uint32_t v)
Definition utils.h:55
constexpr uint32_t SP_RGBA32_F_COMPOSE(double r, double g, double b, double a)
Definition utils.h:64
constexpr double SP_RGBA32_B_F(uint32_t v)
Definition utils.h:51
constexpr uint32_t SP_RGBA32_C_COMPOSE(uint32_t c, double o)
Definition utils.h:68
constexpr uint32_t compose_argb32(double a, double r, double g, double b)
Definition utils.h:73
double c[8][4]
Geom::Point orig
A set of useful color modifying functions which do not fit as generic methods on the color class itse...
Definition profile.cpp:24
std::vector< double > rgba_to_values(uint32_t rgba, bool opacity)
Convert a 32bit unsigned int into a set of 3 or 4 double values for rgba.
Definition utils.cpp:54
std::pair< double, double > get_contrasting_color(double l)
Definition utils.cpp:179
uint32_t hex_to_rgba(std::string const &value)
Parse a color directly without any CSS or CMS support.
Definition utils.cpp:32
double perceptual_lightness(double l)
Definition utils.cpp:166
double get_perceptual_lightness(Color const &color)
Return a value for how the light the color appears to be using HSLUV.
Definition utils.cpp:174
Color make_contrasted_color(Color const &orig, double amount)
Make a darker or lighter version of the color, useful for making checkerboards.
Definition utils.cpp:134
double lightness(Color color)
std::string color_to_id(std::optional< Color > const &color)
Create a somewhat unique id for the given color used for palette identification.
Definition utils.cpp:81
Color make_theme_color(Color const &orig, bool dark)
Make a themed dark or light color based on a previous shade, returns RGB color.
Definition utils.cpp:148
std::string desc_to_id(std::string const &desc)
Transform a color name or description into an id used for palette identification.
Definition utils.cpp:115
std::string rgba_to_hex(uint32_t value, bool alpha)
Output the RGBA value as a #RRGGBB hex color, if alpha is true then the output will be #RRGGBBAA inst...
Definition utils.cpp:70