File indexing completed on 2024-05-12 05:32:34

0001 /*
0002     SPDX-FileCopyrightText: 2024 Xaver Hugl <xaver.hugl@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 #pragma once
0007 #include "core/colorspace.h"
0008 
0009 #include "wayland/qwayland-server-xx-color-management-v2.h"
0010 #include <QObject>
0011 #include <QPointer>
0012 
0013 namespace KWin
0014 {
0015 
0016 class Display;
0017 class SurfaceInterface;
0018 class Output;
0019 
0020 class XXColorManagerV2 : public QObject, private QtWaylandServer::xx_color_manager_v2
0021 {
0022     Q_OBJECT
0023 public:
0024     explicit XXColorManagerV2(Display *display, QObject *parent);
0025 
0026 private:
0027     void xx_color_manager_v2_bind_resource(Resource *resource) override;
0028     void xx_color_manager_v2_destroy(Resource *resource) override;
0029     void xx_color_manager_v2_get_output(Resource *resource, uint32_t id, struct ::wl_resource *output) override;
0030     void xx_color_manager_v2_get_surface(Resource *resource, uint32_t id, struct ::wl_resource *surface) override;
0031     void xx_color_manager_v2_new_icc_creator(Resource *resource, uint32_t obj) override;
0032     void xx_color_manager_v2_new_parametric_creator(Resource *resource, uint32_t obj) override;
0033 };
0034 
0035 class XXColorSurfaceV2 : private QtWaylandServer::xx_color_management_surface_v2
0036 {
0037 public:
0038     explicit XXColorSurfaceV2(wl_client *client, uint32_t id, uint32_t version, SurfaceInterface *surface);
0039     ~XXColorSurfaceV2() override;
0040 
0041     void setPreferredColorDescription(const ColorDescription &descr);
0042 
0043 private:
0044     void xx_color_management_surface_v2_destroy_resource(Resource *resource) override;
0045     void xx_color_management_surface_v2_destroy(Resource *resource) override;
0046     void xx_color_management_surface_v2_set_image_description(Resource *resource, struct ::wl_resource *image_description, uint32_t render_intent) override;
0047     void xx_color_management_surface_v2_unset_image_description(Resource *resource) override;
0048     void xx_color_management_surface_v2_get_preferred(Resource *resource, uint32_t image_description) override;
0049 
0050     QPointer<SurfaceInterface> m_surface;
0051     ColorDescription m_preferred;
0052 };
0053 
0054 class XXColorParametricCreatorV2 : private QtWaylandServer::xx_image_description_creator_params_v2
0055 {
0056 public:
0057     explicit XXColorParametricCreatorV2(wl_client *client, uint32_t id, uint32_t version);
0058 
0059 private:
0060     void xx_image_description_creator_params_v2_destroy_resource(Resource *resource) override;
0061     void xx_image_description_creator_params_v2_create(Resource *resource, uint32_t image_description) override;
0062     void xx_image_description_creator_params_v2_set_tf_named(Resource *resource, uint32_t tf) override;
0063     void xx_image_description_creator_params_v2_set_tf_power(Resource *resource, uint32_t eexp) override;
0064     void xx_image_description_creator_params_v2_set_primaries_named(Resource *resource, uint32_t primaries) override;
0065     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;
0066     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;
0067     void xx_image_description_creator_params_v2_set_mastering_luminance(Resource *resource, uint32_t min_lum, uint32_t max_lum) override;
0068     void xx_image_description_creator_params_v2_set_max_cll(Resource *resource, uint32_t max_cll) override;
0069     void xx_image_description_creator_params_v2_set_max_fall(Resource *resource, uint32_t max_fall) override;
0070 
0071     std::optional<Colorimetry> m_colorimetry;
0072     std::optional<NamedTransferFunction> m_transferFunction;
0073     std::optional<double> m_maxFrameAverageBrightness;
0074     std::optional<double> m_maxPeakBrightness;
0075 };
0076 
0077 class XXImageDescriptionV2 : private QtWaylandServer::xx_image_description_v2
0078 {
0079 public:
0080     explicit XXImageDescriptionV2(wl_client *client, uint32_t id, uint32_t version, const ColorDescription &color);
0081 
0082     const ColorDescription &description() const;
0083 
0084     static XXImageDescriptionV2 *get(wl_resource *resource);
0085 
0086 private:
0087     void xx_image_description_v2_destroy_resource(Resource *resource) override;
0088     void xx_image_description_v2_destroy(Resource *resource) override;
0089     void xx_image_description_v2_get_information(Resource *resource, uint32_t information) override;
0090 
0091     const ColorDescription m_description;
0092 };
0093 
0094 class XXColorManagementOutputV2 : public QObject, private QtWaylandServer::xx_color_management_output_v2
0095 {
0096     Q_OBJECT
0097 public:
0098     explicit XXColorManagementOutputV2(wl_client *client, uint32_t id, uint32_t version, Output *output);
0099 
0100 private:
0101     void colorDescriptionChanged();
0102     void xx_color_management_output_v2_destroy_resource(Resource *resource) override;
0103     void xx_color_management_output_v2_destroy(Resource *resource) override;
0104     void xx_color_management_output_v2_get_image_description(Resource *resource, uint32_t image_description) override;
0105 
0106     Output *const m_output;
0107     ColorDescription m_colorDescription;
0108 };
0109 
0110 }