KWin
Loading...
Searching...
No Matches
xx_colormanagement_v2.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2024 Xaver Hugl <xaver.hugl@gmail.com>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6#pragma once
7#include "core/colorspace.h"
8
9#include "wayland/qwayland-server-xx-color-management-v2.h"
10#include <QObject>
11#include <QPointer>
12
13namespace KWin
14{
15
16class Display;
17class SurfaceInterface;
18class Output;
19
20class XXColorManagerV2 : public QObject, private QtWaylandServer::xx_color_manager_v2
21{
22 Q_OBJECT
23public:
24 explicit XXColorManagerV2(Display *display, QObject *parent);
25
26private:
27 void xx_color_manager_v2_bind_resource(Resource *resource) override;
28 void xx_color_manager_v2_destroy(Resource *resource) override;
29 void xx_color_manager_v2_get_output(Resource *resource, uint32_t id, struct ::wl_resource *output) override;
30 void xx_color_manager_v2_get_surface(Resource *resource, uint32_t id, struct ::wl_resource *surface) override;
31 void xx_color_manager_v2_new_icc_creator(Resource *resource, uint32_t obj) override;
32 void xx_color_manager_v2_new_parametric_creator(Resource *resource, uint32_t obj) override;
33};
34
35class XXColorSurfaceV2 : private QtWaylandServer::xx_color_management_surface_v2
36{
37public:
38 explicit XXColorSurfaceV2(wl_client *client, uint32_t id, uint32_t version, SurfaceInterface *surface);
39 ~XXColorSurfaceV2() override;
40
42
43private:
44 void xx_color_management_surface_v2_destroy_resource(Resource *resource) override;
45 void xx_color_management_surface_v2_destroy(Resource *resource) override;
46 void xx_color_management_surface_v2_set_image_description(Resource *resource, struct ::wl_resource *image_description, uint32_t render_intent) override;
47 void xx_color_management_surface_v2_unset_image_description(Resource *resource) override;
48 void xx_color_management_surface_v2_get_preferred(Resource *resource, uint32_t image_description) override;
49
50 QPointer<SurfaceInterface> m_surface;
51 ColorDescription m_preferred;
52};
53
54class XXColorParametricCreatorV2 : private QtWaylandServer::xx_image_description_creator_params_v2
55{
56public:
57 explicit XXColorParametricCreatorV2(wl_client *client, uint32_t id, uint32_t version);
58
59private:
60 void xx_image_description_creator_params_v2_destroy_resource(Resource *resource) override;
61 void xx_image_description_creator_params_v2_create(Resource *resource, uint32_t image_description) override;
62 void xx_image_description_creator_params_v2_set_tf_named(Resource *resource, uint32_t tf) override;
63 void xx_image_description_creator_params_v2_set_tf_power(Resource *resource, uint32_t eexp) override;
64 void xx_image_description_creator_params_v2_set_primaries_named(Resource *resource, uint32_t primaries) override;
65 void xx_image_description_creator_params_v2_set_primaries(Resource *resource, uint32_t r_x, uint32_t r_y, uint32_t g_x, uint32_t g_y, uint32_t b_x, uint32_t b_y, uint32_t w_x, uint32_t w_y) override;
66 void xx_image_description_creator_params_v2_set_mastering_display_primaries(Resource *resource, uint32_t r_x, uint32_t r_y, uint32_t g_x, uint32_t g_y, uint32_t b_x, uint32_t b_y, uint32_t w_x, uint32_t w_y) override;
67 void xx_image_description_creator_params_v2_set_mastering_luminance(Resource *resource, uint32_t min_lum, uint32_t max_lum) override;
68 void xx_image_description_creator_params_v2_set_max_cll(Resource *resource, uint32_t max_cll) override;
69 void xx_image_description_creator_params_v2_set_max_fall(Resource *resource, uint32_t max_fall) override;
70
71 std::optional<Colorimetry> m_colorimetry;
72 std::optional<NamedTransferFunction> m_transferFunction;
73 std::optional<double> m_maxFrameAverageBrightness;
74 std::optional<double> m_maxPeakBrightness;
75};
76
77class XXImageDescriptionV2 : private QtWaylandServer::xx_image_description_v2
78{
79public:
80 explicit XXImageDescriptionV2(wl_client *client, uint32_t id, uint32_t version, const ColorDescription &color);
81
82 const ColorDescription &description() const;
83
84 static XXImageDescriptionV2 *get(wl_resource *resource);
85
86private:
87 void xx_image_description_v2_destroy_resource(Resource *resource) override;
88 void xx_image_description_v2_destroy(Resource *resource) override;
89 void xx_image_description_v2_get_information(Resource *resource, uint32_t information) override;
90
91 const ColorDescription m_description;
92};
93
94class XXColorManagementOutputV2 : public QObject, private QtWaylandServer::xx_color_management_output_v2
95{
96 Q_OBJECT
97public:
98 explicit XXColorManagementOutputV2(wl_client *client, uint32_t id, uint32_t version, Output *output);
99
100private:
101 void colorDescriptionChanged();
102 void xx_color_management_output_v2_destroy_resource(Resource *resource) override;
103 void xx_color_management_output_v2_destroy(Resource *resource) override;
104 void xx_color_management_output_v2_get_image_description(Resource *resource, uint32_t image_description) override;
105
106 Output *const m_output;
107 ColorDescription m_colorDescription;
108};
109
110}
Class holding the Wayland server display loop.
Definition display.h:34
Resource representing a wl_surface.
Definition surface.h:80
XXColorManagementOutputV2(wl_client *client, uint32_t id, uint32_t version, Output *output)
XXColorManagerV2(Display *display, QObject *parent)
XXColorParametricCreatorV2(wl_client *client, uint32_t id, uint32_t version)
XXColorSurfaceV2(wl_client *client, uint32_t id, uint32_t version, SurfaceInterface *surface)
void setPreferredColorDescription(const ColorDescription &descr)
const ColorDescription & description() const
XXImageDescriptionV2(wl_client *client, uint32_t id, uint32_t version, const ColorDescription &color)
static XXImageDescriptionV2 * get(wl_resource *resource)
constexpr int version
struct _XDisplay Display