Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
util.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
2#ifndef INKSCAPE_UI_WIDGET_CANVAS_UTIL_H
3#define INKSCAPE_UI_WIDGET_CANVAS_UTIL_H
4
5#include <array>
6#include <2geom/int-rect.h>
7#include <2geom/affine.h>
8#include <cairomm/cairomm.h>
9
10#include "colors/color.h"
11#include "colors/utils.h"
12
13namespace Inkscape {
14namespace UI {
15namespace Widget {
16
17// Cairo additions
18
22void region_to_path(Cairo::RefPtr<Cairo::Context> const &cr, Cairo::RefPtr<Cairo::Region> const &reg);
23
27Cairo::RefPtr<Cairo::Region> shrink_region(Cairo::RefPtr<Cairo::Region> const &reg, int d, int t = 0);
28
29inline auto unioned(Cairo::RefPtr<Cairo::Region> a, Cairo::RefPtr<Cairo::Region> const &b)
30{
31 a->do_union(b);
32 return a;
33}
34
35// Colour operations
36
37inline auto rgb_to_array(uint32_t rgb)
38{
39 return std::array{SP_RGBA32_R_U(rgb) / 255.0f, SP_RGBA32_G_U(rgb) / 255.0f, SP_RGBA32_B_U(rgb) / 255.0f};
40}
41
42inline auto rgba_to_array(uint32_t rgba)
43{
44 return std::array{SP_RGBA32_R_U(rgba) / 255.0f, SP_RGBA32_G_U(rgba) / 255.0f, SP_RGBA32_B_U(rgba) / 255.0f, SP_RGBA32_A_U(rgba) / 255.0f};
45}
46
47inline auto premultiplied(std::array<float, 4> arr)
48{
49 arr[0] *= arr[3];
50 arr[1] *= arr[3];
51 arr[2] *= arr[3];
52 return arr;
53}
54
56
57inline std::array<float, 3> checkerboard_darken(uint32_t rgba)
58{
59 auto const color = checkerboard_darken(Colors::Color{rgba});
60 return {(float)color[0], (float)color[1], (float)color[2]};
61}
62
63} // namespace Widget
64} // namespace UI
65} // namespace Inkscape
66
67#endif // INKSCAPE_UI_WIDGET_CANVAS_UTIL_H
68
69/*
70 Local Variables:
71 mode:c++
72 c-file-style:"stroustrup"
73 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
74 indent-tabs-mode:nil
75 fill-column:99
76 End:
77*/
78// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
3x3 affine transformation matrix.
constexpr uint32_t SP_RGBA32_R_U(uint32_t v)
Definition utils.h:27
constexpr uint32_t SP_RGBA32_G_U(uint32_t v)
Definition utils.h:31
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
Axis-aligned rectangle with integer coordinates.
auto rgba_to_array(uint32_t rgba)
Definition util.h:42
auto premultiplied(std::array< float, 4 > arr)
Definition util.h:47
void region_to_path(Cairo::RefPtr< Cairo::Context > const &cr, Cairo::RefPtr< Cairo::Region > const &reg)
Turn a Cairo region into a path on a given Cairo context.
Definition util.cpp:10
Colors::Color checkerboard_darken(Colors::Color color)
Definition util.cpp:45
Cairo::RefPtr< Cairo::Region > shrink_region(Cairo::RefPtr< Cairo::Region > const &reg, int d, int t)
Shrink a region by d/2 in all directions, while also translating it by (d/2 + t, d/2 + t).
Definition util.cpp:18
auto unioned(Cairo::RefPtr< Cairo::Region > a, Cairo::RefPtr< Cairo::Region > const &b)
Definition util.h:29
auto rgb_to_array(uint32_t rgb)
Definition util.h:37
Helper class to stream background task notifications as a series of messages.
RGB rgb
Definition quantize.cpp:36