/**************************************************************************** ** ** Copyright (C) 2017-2016 Pier Luigi Fiorini ** Copyright (C) 2017 Klarälvdalens Datakonsult AB (KDAB). ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtWaylandCompositor module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 or (at your option) any later version ** approved by the KDE Free Qt Foundation. The licenses are as published by ** the Free Software Foundation and appearing in the file LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QWAYLANDOUTPUT_H #define QWAYLANDOUTPUT_H #include #include #include #include #include #include struct wl_resource; QT_BEGIN_NAMESPACE class QWaylandOutputPrivate; class QWaylandCompositor; class QWindow; class QWaylandSurface; class QWaylandView; class QWaylandClient; class QWaylandOutputSpace; class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandOutput : public QWaylandObject { Q_OBJECT Q_DECLARE_PRIVATE(QWaylandOutput) Q_PROPERTY(QWaylandCompositor *compositor READ compositor WRITE setCompositor NOTIFY compositorChanged) Q_PROPERTY(QWindow *window READ window WRITE setWindow NOTIFY windowChanged) Q_PROPERTY(QString manufacturer READ manufacturer WRITE setManufacturer NOTIFY manufacturerChanged) Q_PROPERTY(QString model READ model WRITE setModel NOTIFY modelChanged) Q_PROPERTY(QPoint position READ position WRITE setPosition NOTIFY positionChanged) Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged) Q_PROPERTY(QRect availableGeometry READ availableGeometry WRITE setAvailableGeometry NOTIFY availableGeometryChanged) Q_PROPERTY(QSize physicalSize READ physicalSize WRITE setPhysicalSize NOTIFY physicalSizeChanged) Q_PROPERTY(QWaylandOutput::Subpixel subpixel READ subpixel WRITE setSubpixel NOTIFY subpixelChanged) Q_PROPERTY(QWaylandOutput::Transform transform READ transform WRITE setTransform NOTIFY transformChanged) Q_PROPERTY(int scaleFactor READ scaleFactor WRITE setScaleFactor NOTIFY scaleFactorChanged) Q_PROPERTY(bool sizeFollowsWindow READ sizeFollowsWindow WRITE setSizeFollowsWindow NOTIFY sizeFollowsWindowChanged) Q_ENUMS(Subpixel Transform) public: enum Subpixel { SubpixelUnknown = 0, SubpixelNone, SubpixelHorizontalRgb, SubpixelHorizontalBgr, SubpixelVerticalRgb, SubpixelVerticalBgr }; Q_ENUM(Subpixel) enum Transform { TransformNormal = 0, Transform90, Transform180, Transform270, TransformFlipped, TransformFlipped90, TransformFlipped180, TransformFlipped270 }; Q_ENUM(Transform) QWaylandOutput(); QWaylandOutput(QWaylandCompositor *compositor, QWindow *window); ~QWaylandOutput() override; static QWaylandOutput *fromResource(wl_resource *resource); struct ::wl_resource *resourceForClient(QWaylandClient *client) const; QWaylandCompositor *compositor() const; void setCompositor(QWaylandCompositor *compositor); QWindow *window() const; void setWindow(QWindow *window); QString manufacturer() const; void setManufacturer(const QString &manufacturer); QString model() const; void setModel(const QString &model); QPoint position() const; void setPosition(const QPoint &pt); QList modes() const; void addMode(const QWaylandOutputMode &mode, bool preferred = false); QWaylandOutputMode currentMode() const; void setCurrentMode(const QWaylandOutputMode &mode); QRect geometry() const; QRect availableGeometry() const; void setAvailableGeometry(const QRect &availableGeometry); QSize physicalSize() const; void setPhysicalSize(const QSize &size); Subpixel subpixel() const; void setSubpixel(const Subpixel &subpixel); Transform transform() const; void setTransform(const Transform &transform); int scaleFactor() const; void setScaleFactor(int scale); bool sizeFollowsWindow() const; void setSizeFollowsWindow(bool follow); bool physicalSizeFollowsSize() const; void setPhysicalSizeFollowsSize(bool follow); void frameStarted(); void sendFrameCallbacks(); void surfaceEnter(QWaylandSurface *surface); void surfaceLeave(QWaylandSurface *surface); virtual void update(); Q_SIGNALS: void compositorChanged(); void windowChanged(); void positionChanged(); void geometryChanged(); void modeAdded(); void currentModeChanged(); void availableGeometryChanged(); void physicalSizeChanged(); void scaleFactorChanged(); void subpixelChanged(); void transformChanged(); void sizeFollowsWindowChanged(); void physicalSizeFollowsSizeChanged(); void manufacturerChanged(); void modelChanged(); void windowDestroyed(); protected: bool event(QEvent *event) override; virtual void initialize(); private: Q_PRIVATE_SLOT(d_func(), void _q_handleMaybeWindowPixelSizeChanged()) Q_PRIVATE_SLOT(d_func(), void _q_handleWindowDestroyed()) }; QT_END_NAMESPACE #endif // QWAYLANDOUTPUT_H