diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 65faee9a..78cc43ff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -107,7 +107,7 @@ set(KDDW_BACKEND_SRCS ) # Sources shared by Qt frontends (QtWidgets and QtQuick) -set(KDDW_QTCOMMON_SRCS qtcommon/Platform_qt.cpp qtcommon/Window_qt.cpp qtcommon/View_qt.cpp) +set(KDDW_QTCOMMON_SRCS qtcommon/Platform_qt.cpp qtcommon/Window_qt.cpp qtcommon/View_qt.cpp qtcommon/Screen_qt.cpp) set(KDDW_FRONTEND_QTWIDGETS_SRCS qtwidgets/Window_qtwidgets.cpp @@ -225,6 +225,7 @@ set(KDDW_PUBLIC_HEADERS Controller.h View.h Window.h + Screen.h ViewFactory.h Qt5Qt6Compat_p.h Platform.h diff --git a/src/Screen.h b/src/Screen.h new file mode 100644 index 00000000..e0c8d25c --- /dev/null +++ b/src/Screen.h @@ -0,0 +1,61 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Waqar Ahmed + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ + +#pragma once + +#include "KDDockWidgets_p.h" + +QT_BEGIN_NAMESPACE +class QScreen; +template +class QVector; +QT_END_NAMESPACE + +namespace KDDockWidgets { + +/// @brief Represents a Screen +/// In Qt for example, this would be equivalent to QScreen. +class DOCKS_EXPORT Screen +{ +public: + using Ptr = std::shared_ptr; + using List = QVector; + + virtual ~Screen(); + + /// @brief returns the size of screen in pixels + virtual QSize size() const = 0; + + /// @brief returns the geometry of screen in pixels + virtual QRect geometry() const = 0; + + /// @brief returns the ratio between physical pixels and + /// device-independent pixels for the screen. + virtual qreal devicePixelRatio() const = 0; + + /// @brief returns the screen's available size in pixels + /// The available size is the size excluding window manager + /// reserved areas such as task bars and system menus. + virtual QSize availableSize() const = 0; + + /// @brief returns the screen's available geometry in pixels + /// The available geometry is the geometry excluding window manager + /// reserved areas such as task bars and system menus. + virtual QRect availableGeometry() const = 0; + + /// @brief returns the pixel size of the virtual desktop corresponding to this screen. + virtual QSize virtualSize() const = 0; + + /// @brief returns the pixel geometry of the virtual desktop corresponding to this screen + virtual QRect virtualGeometry() const = 0; +}; + +} diff --git a/src/fwd_headers/kddockwidgets/Screen.h b/src/fwd_headers/kddockwidgets/Screen.h new file mode 100644 index 00000000..a4d1ce84 --- /dev/null +++ b/src/fwd_headers/kddockwidgets/Screen.h @@ -0,0 +1,12 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Waqar Ahmed + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ + +#include "../../Screen.h" diff --git a/src/fwd_headers/kddockwidgets/Screen_qt.h b/src/fwd_headers/kddockwidgets/Screen_qt.h new file mode 100644 index 00000000..6cb4fa98 --- /dev/null +++ b/src/fwd_headers/kddockwidgets/Screen_qt.h @@ -0,0 +1,12 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Waqar Ahmed + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ + +#include "../../qtcommon/Screen_qt.h" diff --git a/src/qtcommon/Screen_qt.cpp b/src/qtcommon/Screen_qt.cpp new file mode 100644 index 00000000..be7bfa59 --- /dev/null +++ b/src/qtcommon/Screen_qt.cpp @@ -0,0 +1,60 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Waqar Ahmed + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ +#include "Screen_qt.h" + +#include + +using namespace KDDockWidgets; + +Screen_qt::Screen_qt(QScreen *screen) + : m_screen(screen) +{ +} + +QSize Screen_qt::size() const +{ + return m_screen->size(); +} + +QRect Screen_qt::geometry() const +{ + return m_screen->geometry(); +} + +qreal Screen_qt::devicePixelRatio() const +{ + return m_screen->devicePixelRatio(); +} + +QSize Screen_qt::availableSize() const +{ + return m_screen->availableSize(); +} + +QRect Screen_qt::availableGeometry() const +{ + return m_screen->availableGeometry(); +} + +QSize Screen_qt::virtualSize() const +{ + return m_screen->virtualSize(); +} + +QRect Screen_qt::virtualGeometry() const +{ + return m_screen->virtualGeometry(); +} + +QScreen *Screen_qt::qtScreen() const +{ + return m_screen; +} diff --git a/src/qtcommon/Screen_qt.h b/src/qtcommon/Screen_qt.h new file mode 100644 index 00000000..e9fe8031 --- /dev/null +++ b/src/qtcommon/Screen_qt.h @@ -0,0 +1,46 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-2022 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Waqar Ahmed + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ + +#pragma once + +#include "../Screen.h" + +#include + +QT_BEGIN_NAMESPACE +class QScreen; +QT_END_NAMESPACE + +namespace KDDockWidgets { + +class Screen_qt final : public Screen +{ +public: + Screen_qt(QScreen *); + + QSize size() const override; + QRect geometry() const override; + + qreal devicePixelRatio() const override; + + QSize availableSize() const override; + QRect availableGeometry() const override; + + QSize virtualSize() const override; + QRect virtualGeometry() const override; + + QScreen *qtScreen() const; + +public: + QPointer m_screen; +}; + +}