7 #include "contrast_interface.h"
10 #include "region_interface.h"
11 #include "resource_p.h"
12 #include "surface_interface_p.h"
14 #include <wayland-contrast-server-protocol.h>
15 #include <wayland-server.h>
21 class ContrastManagerInterface::Private :
public Global::Private
24 Private(ContrastManagerInterface *q, Display *d);
27 void bind(wl_client *client, uint32_t version, uint32_t
id)
override;
28 void createContrast(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *surface);
30 static void createCallback(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *surface);
31 static void unsetCallback(wl_client *client, wl_resource *resource, wl_resource *surface);
32 static void unbind(wl_resource *resource);
33 static Private *cast(wl_resource *r)
36 if (contrastManager) {
37 return static_cast<Private *
>(contrastManager->d.data());
42 ContrastManagerInterface *q;
43 static const struct org_kde_kwin_contrast_manager_interface s_interface;
44 static const quint32 s_version;
47 const quint32 ContrastManagerInterface::Private::s_version = 1;
50 const struct org_kde_kwin_contrast_manager_interface ContrastManagerInterface::Private::s_interface = {createCallback, unsetCallback};
53 ContrastManagerInterface::Private::Private(ContrastManagerInterface *q, Display *d)
54 : Global::Private(d, &org_kde_kwin_contrast_manager_interface, s_version)
59 void ContrastManagerInterface::Private::bind(wl_client *client, uint32_t version, uint32_t
id)
61 auto c = display->getConnection(client);
62 wl_resource *resource = c->createResource(&org_kde_kwin_contrast_manager_interface, qMin(version, s_version),
id);
64 wl_client_post_no_memory(client);
68 wl_resource_set_implementation(resource, &s_interface, ref, unbind);
71 void ContrastManagerInterface::Private::unbind(wl_resource *resource)
76 void ContrastManagerInterface::Private::createCallback(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *surface)
78 auto m = cast(resource);
82 m->createContrast(client, resource,
id, surface);
85 void ContrastManagerInterface::Private::createContrast(wl_client *client, wl_resource *resource, uint32_t
id, wl_resource *surface)
92 ContrastInterface *contrast =
new ContrastInterface(q, resource);
93 contrast->create(display->getConnection(client), wl_resource_get_version(resource),
id);
94 if (!contrast->resource()) {
95 wl_resource_post_no_memory(resource);
102 void ContrastManagerInterface::Private::unsetCallback(wl_client *client, wl_resource *resource, wl_resource *surface)
113 ContrastManagerInterface::ContrastManagerInterface(Display *display,
QObject *parent)
114 : Global(new Private(this, display), parent)
118 ContrastManagerInterface::~ContrastManagerInterface() =
default;
120 class ContrastInterface::Private :
public Resource::Private
123 Private(ContrastInterface *q, ContrastManagerInterface *c, wl_resource *parentResource);
128 qreal pendingContrast;
129 qreal currentContrast;
130 qreal pendingIntensity;
131 qreal currentIntensity;
132 qreal pendingSaturation;
133 qreal currentSaturation;
138 ContrastInterface *q_func()
140 return reinterpret_cast<ContrastInterface *
>(q);
143 static void commitCallback(wl_client *client, wl_resource *resource);
144 static void setRegionCallback(wl_client *client, wl_resource *resource, wl_resource *region);
145 static void setContrastCallback(wl_client *client, wl_resource *resource, wl_fixed_t contrast);
146 static void setIntensityCallback(wl_client *client, wl_resource *resource, wl_fixed_t intensity);
147 static void setSaturationCallback(wl_client *client, wl_resource *resource, wl_fixed_t saturation);
149 static const struct org_kde_kwin_contrast_interface s_interface;
153 const struct org_kde_kwin_contrast_interface ContrastInterface::Private::s_interface =
154 {commitCallback, setRegionCallback, setContrastCallback, setIntensityCallback, setSaturationCallback, resourceDestroyedCallback};
157 void ContrastInterface::Private::commitCallback(wl_client *client, wl_resource *resource)
160 cast<Private>(resource)->commit();
163 void ContrastInterface::Private::commit()
165 currentRegion = pendingRegion;
166 currentContrast = pendingContrast;
167 currentIntensity = pendingIntensity;
168 currentSaturation = pendingSaturation;
171 void ContrastInterface::Private::setRegionCallback(wl_client *client, wl_resource *resource, wl_resource *region)
174 Private *p = cast<Private>(resource);
177 p->pendingRegion = r->region();
183 void ContrastInterface::Private::setContrastCallback(wl_client *client, wl_resource *resource, wl_fixed_t contrast)
186 Private *p = cast<Private>(resource);
187 p->pendingContrast = wl_fixed_to_double(contrast);
190 void ContrastInterface::Private::setIntensityCallback(wl_client *client, wl_resource *resource, wl_fixed_t intensity)
193 Private *p = cast<Private>(resource);
194 p->pendingIntensity = wl_fixed_to_double(intensity);
197 void ContrastInterface::Private::setSaturationCallback(wl_client *client, wl_resource *resource, wl_fixed_t saturation)
200 Private *p = cast<Private>(resource);
201 p->pendingSaturation = wl_fixed_to_double(saturation);
204 ContrastInterface::Private::Private(ContrastInterface *q, ContrastManagerInterface *c, wl_resource *parentResource)
205 :
Resource::Private(q, c, parentResource, &org_kde_kwin_contrast_interface, &s_interface)
209 ContrastInterface::Private::~Private() =
default;
211 ContrastInterface::ContrastInterface(ContrastManagerInterface *parent, wl_resource *parentResource)
212 :
Resource(new Private(this, parent, parentResource))
216 ContrastInterface::~ContrastInterface() =
default;
218 QRegion ContrastInterface::region()
const
221 return d->currentRegion;
224 qreal ContrastInterface::contrast()
const
227 return d->currentContrast;
230 qreal ContrastInterface::intensity()
const
233 return d->currentIntensity;
236 qreal ContrastInterface::saturation()
const
239 return d->currentSaturation;
242 ContrastInterface::Private *ContrastInterface::d_func()
const
244 return reinterpret_cast<Private *
>(d.data());