KWayland

output_interface.h
1 /*
2  SPDX-FileCopyrightText: 2014 Martin Gräßlin <[email protected]>
3 
4  SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5 */
6 #ifndef WAYLAND_SERVER_OUTPUT_INTERFACE_H
7 #define WAYLAND_SERVER_OUTPUT_INTERFACE_H
8 
9 #include <QObject>
10 #include <QPoint>
11 #include <QSize>
12 
13 #include "global.h"
14 #include <KWayland/Server/kwaylandserver_export.h>
15 
16 struct wl_global;
17 struct wl_client;
18 struct wl_resource;
19 
20 namespace KWayland
21 {
22 namespace Server
23 {
24 class ClientConnection;
25 class Display;
26 
27 /**
28  * @brief Global for the wl_output interface.
29  *
30  **/
31 class KWAYLANDSERVER_EXPORT OutputInterface : public Global
32 {
33  Q_OBJECT
34  Q_PROPERTY(QSize physicalSize READ physicalSize WRITE setPhysicalSize NOTIFY physicalSizeChanged)
35  Q_PROPERTY(QPoint globalPosition READ globalPosition WRITE setGlobalPosition NOTIFY globalPositionChanged)
36  Q_PROPERTY(QString manufacturer READ manufacturer WRITE setManufacturer NOTIFY manufacturerChanged)
37  Q_PROPERTY(QString model READ model WRITE setModel NOTIFY modelChanged)
38  Q_PROPERTY(QSize pixelSize READ pixelSize NOTIFY pixelSizeChanged)
39  Q_PROPERTY(int refreshRate READ refreshRate NOTIFY refreshRateChanged)
40  Q_PROPERTY(int scale READ scale WRITE setScale NOTIFY scaleChanged)
41 public:
42  enum class SubPixel {
43  Unknown,
44  None,
45  HorizontalRGB,
46  HorizontalBGR,
47  VerticalRGB,
48  VerticalBGR,
49  };
50  enum class Transform {
51  Normal,
52  Rotated90,
53  Rotated180,
54  Rotated270,
55  Flipped,
56  Flipped90,
57  Flipped180,
58  Flipped270,
59  };
60  enum class ModeFlag {
61  Current = 1,
62  Preferred = 2,
63  };
64  Q_DECLARE_FLAGS(ModeFlags, ModeFlag)
65  struct Mode {
66  QSize size = QSize();
67  int refreshRate = 60000;
68  ModeFlags flags;
69  };
70  enum class DpmsMode {
71  On,
72  Standby,
73  Suspend,
74  Off,
75  };
76  virtual ~OutputInterface();
77 
78  QSize physicalSize() const;
79  QPoint globalPosition() const;
80  QString manufacturer() const;
81  QString model() const;
82  QSize pixelSize() const;
83  int refreshRate() const;
84  int scale() const;
85  SubPixel subPixel() const;
86  Transform transform() const;
87  QList<Mode> modes() const;
88  bool isDpmsSupported() const;
89  DpmsMode dpmsMode() const;
90 
91  void setPhysicalSize(const QSize &size);
92  void setGlobalPosition(const QPoint &pos);
93  void setManufacturer(const QString &manufacturer);
94  void setModel(const QString &model);
95  void setScale(int scale);
96  void setSubPixel(SubPixel subPixel);
97  void setTransform(Transform transform);
98  void addMode(const QSize &size, ModeFlags flags = ModeFlags(), int refreshRate = 60000);
99  void setCurrentMode(const QSize &size, int refreshRate = 60000);
100 
101  /**
102  * Sets whether Dpms is supported for this output.
103  * Default is @c false.
104  * @since 5.5
105  **/
106  void setDpmsSupported(bool supported);
107  /**
108  * Sets the currently used dpms mode.
109  * Default is @c DpmsMode::On.
110  * @since 5.5
111  **/
112  void setDpmsMode(DpmsMode mode);
113 
114  /**
115  * @returns all wl_resources bound for the @p client
116  * @since 5.27
117  **/
118  QVector<wl_resource *> clientResources(ClientConnection *client) const;
119 
120  static OutputInterface *get(wl_resource *native);
121 
122 Q_SIGNALS:
123  void physicalSizeChanged(const QSize &);
124  void globalPositionChanged(const QPoint &);
125  void manufacturerChanged(const QString &);
126  void modelChanged(const QString &);
127  void pixelSizeChanged(const QSize &);
128  void refreshRateChanged(int);
129  void scaleChanged(int);
130  void subPixelChanged(SubPixel);
131  void transformChanged(Transform);
132  void modesChanged();
133  void currentModeChanged();
134  void dpmsModeChanged();
135  void dpmsSupportedChanged();
136 
137  /**
138  * Change of dpms @p mode is requested.
139  * A server is free to ignore this request.
140  * @since 5.5
141  **/
142  void dpmsModeRequested(KWayland::Server::OutputInterface::DpmsMode mode);
143 
144 private:
145  friend class Display;
146  explicit OutputInterface(Display *display, QObject *parent = nullptr);
147  class Private;
148  Private *d_func() const;
149 };
150 
151 Q_DECLARE_OPERATORS_FOR_FLAGS(OutputInterface::ModeFlags)
152 
153 }
154 }
155 
156 Q_DECLARE_METATYPE(KWayland::Server::OutputInterface::SubPixel)
157 Q_DECLARE_METATYPE(KWayland::Server::OutputInterface::Transform)
158 Q_DECLARE_METATYPE(KWayland::Server::OutputInterface::DpmsMode)
159 
160 #endif
Global for the wl_output interface.
Class holding the Wayland server display loop.
Definition: display.h:86
Base class for all Globals.
Definition: global.h:46
Convenient Class which represents a wl_client.
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Thu Sep 23 2021 22:51:08 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.