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 }