1/*
2 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6#ifndef WAYLAND_REGION_H
7#define WAYLAND_REGION_H
8
9#include <QObject>
10
11#include "KWayland/Client/kwaylandclient_export.h"
12
13struct wl_region;
14
15namespace KWayland
16{
17namespace Client
18{
19/**
20 * @short Wrapper for the wl_region interface.
21 *
22 * This class is a convenient wrapper for the wl_region interface.
23 * To create a Region call Compositor::createRegion.
24 *
25 * The main purpose of this class is to provide regions which can be
26 * used to e.g. set the input region on a Surface.
27 *
28 * @see Compositor
29 * @see Surface
30 **/
31class KWAYLANDCLIENT_EXPORT Region : public QObject
32{
33 Q_OBJECT
34public:
35 explicit Region(const QRegion &region, QObject *parent = nullptr);
36 ~Region() override;
37
38 /**
39 * Setup this Surface to manage the @p region.
40 * When using Compositor::createRegion there is no need to call this
41 * method.
42 **/
43 void setup(wl_region *region);
44 /**
45 * Releases the wl_region interface.
46 * After the interface has been released the Region instance is no
47 * longer valid and can be setup with another wl_region interface.
48 **/
49 void release();
50 /**
51 * Destroys the data held by this Region.
52 * This method is supposed to be used when the connection to the Wayland
53 * server goes away. If the connection is not valid anymore, it's not
54 * possible to call release anymore as that calls into the Wayland
55 * connection and the call would fail. This method cleans up the data, so
56 * that the instance can be deleted or set up to a new wl_region interface
57 * once there is a new connection available.
58 *
59 * It is suggested to connect this method to ConnectionThread::connectionDied:
60 * @code
61 * connect(connection, &ConnectionThread::connectionDied, region, &Region::destroy);
62 * @endcode
63 *
64 * @see release
65 **/
66 void destroy();
67 /**
68 * @returns @c true if managing a wl_region.
69 **/
70 bool isValid() const;
71
72 /**
73 * Adds the @p rect to this Region.
74 **/
75 void add(const QRect &rect);
76 /**
77 * Adds the @p region to this Rregion.
78 **/
79 void add(const QRegion &region);
80 /**
81 * Subtracts @p rect from this Region.
82 **/
83 void subtract(const QRect &rect);
84 /**
85 * Subtracts @p region from this Region.
86 **/
87 void subtract(const QRegion &region);
88
89 /**
90 * The geometry of this Region.
91 **/
92 QRegion region() const;
93
94 operator wl_region *();
95 operator wl_region *() const;
96
97private:
98 class Private;
99 QScopedPointer<Private> d;
100};
101
102}
103}
104
105#endif
106

source code of kwayland/src/client/region.h