KWin
Loading...
Searching...
No Matches
fractionalscale_v1.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2022 David Edmundson <davidedmundson@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6
8
9#include "display.h"
11#include "surface_p.h"
12
13#include <cmath>
14
15static const int s_version = 1;
16
17namespace KWin
18{
19class FractionalScaleManagerV1InterfacePrivate : public QtWaylandServer::wp_fractional_scale_manager_v1
20{
21protected:
22 void wp_fractional_scale_manager_v1_destroy(Resource *resource) override;
23 void wp_fractional_scale_manager_v1_get_fractional_scale(Resource *resource, uint32_t id, wl_resource *surface) override;
24};
25
27{
28 wl_resource_destroy(resource->handle);
29}
30
31void FractionalScaleManagerV1InterfacePrivate::wp_fractional_scale_manager_v1_get_fractional_scale(Resource *resource, uint32_t id, struct ::wl_resource *surface_resource)
32{
33 SurfaceInterface *surface = SurfaceInterface::get(surface_resource);
34
36 if (scaleIface) {
37 wl_resource_post_error(resource->handle, error_fractional_scale_exists, "the specified surface already has a fractional scale");
38 return;
39 }
40
41 wl_resource *surfaceScalerResource = wl_resource_create(resource->client(), &wp_fractional_scale_v1_interface, resource->version(), id);
42
43 new FractionalScaleV1Interface(surface, surfaceScalerResource);
44}
45
47 : QtWaylandServer::wp_fractional_scale_v1(resource)
48 , surface(surface)
49{
51 surfacePrivate->fractionalScaleExtension = this;
52 if (surfacePrivate->preferredBufferScale.has_value()) {
53 setPreferredScale(surfacePrivate->preferredBufferScale.value());
54 }
55}
56
64
69
71{
72 send_preferred_scale(std::round(scale * 120));
73}
74
76{
77 wl_resource_destroy(resource->handle);
78}
79
84
86 : QObject(parent)
88{
89 d->init(*display, s_version);
90}
91
95
96} // namespace KWin
97
98#include "moc_fractionalscale_v1.cpp"
Class holding the Wayland server display loop.
Definition display.h:34
FractionalScaleManagerV1Interface(Display *display, QObject *parent=nullptr)
void wp_fractional_scale_manager_v1_destroy(Resource *resource) override
void wp_fractional_scale_manager_v1_get_fractional_scale(Resource *resource, uint32_t id, wl_resource *surface) override
FractionalScaleV1Interface(SurfaceInterface *surface, wl_resource *resource)
QPointer< SurfaceInterface > surface
void wp_fractional_scale_v1_destroy(Resource *resource) override
static FractionalScaleV1Interface * get(SurfaceInterface *surface)
void wp_fractional_scale_v1_destroy_resource(Resource *resource) override
Resource representing a wl_surface.
Definition surface.h:80
static SurfaceInterface * get(wl_resource *native)
Definition surface.cpp:819
FractionalScaleV1Interface * fractionalScaleExtension
Definition surface_p.h:168
std::optional< qreal > preferredBufferScale
Definition surface_p.h:155
static SurfaceInterfacePrivate * get(SurfaceInterface *surface)
Definition surface_p.h:99