2020-08-02 22:22:19 +00:00
|
|
|
/*
|
|
|
|
KWin - the KDE window manager
|
|
|
|
This file is part of the KDE project.
|
2015-08-14 14:52:40 +00:00
|
|
|
|
2020-08-02 22:22:19 +00:00
|
|
|
SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
|
2015-08-14 14:52:40 +00:00
|
|
|
|
2020-08-02 22:22:19 +00:00
|
|
|
SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
*/
|
2015-08-14 14:52:40 +00:00
|
|
|
#include "screen.h"
|
2020-12-03 19:47:42 +00:00
|
|
|
#include "abstract_output.h"
|
|
|
|
#include "logging.h"
|
2016-02-17 11:42:12 +00:00
|
|
|
#include "platformcursor.h"
|
2020-12-03 19:47:42 +00:00
|
|
|
|
|
|
|
#include <qpa/qwindowsysteminterface.h>
|
2015-08-14 14:52:40 +00:00
|
|
|
|
|
|
|
namespace KWin
|
|
|
|
{
|
|
|
|
namespace QPA
|
|
|
|
{
|
|
|
|
|
2020-12-03 19:47:42 +00:00
|
|
|
static int forcedDpi()
|
|
|
|
{
|
|
|
|
return qEnvironmentVariableIsSet("QT_WAYLAND_FORCE_DPI") ? qEnvironmentVariableIntValue("QT_WAYLAND_FORCE_DPI") : -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
Screen::Screen(AbstractOutput *output)
|
|
|
|
: m_output(output)
|
2016-02-17 11:42:12 +00:00
|
|
|
, m_cursor(new PlatformCursor)
|
2015-08-14 14:52:40 +00:00
|
|
|
{
|
2020-12-03 19:47:42 +00:00
|
|
|
connect(output, &AbstractOutput::geometryChanged, this, &Screen::handleGeometryChanged);
|
2015-08-14 14:52:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Screen::~Screen() = default;
|
|
|
|
|
|
|
|
int Screen::depth() const
|
|
|
|
{
|
|
|
|
return 32;
|
|
|
|
}
|
|
|
|
|
|
|
|
QImage::Format Screen::format() const
|
|
|
|
{
|
|
|
|
return QImage::Format_ARGB32_Premultiplied;
|
|
|
|
}
|
|
|
|
|
|
|
|
QRect Screen::geometry() const
|
|
|
|
{
|
2020-12-03 19:47:42 +00:00
|
|
|
if (Q_UNLIKELY(!m_output)) {
|
|
|
|
qCCritical(KWIN_QPA) << "Attempting to get the geometry of a destroyed output";
|
|
|
|
return QRect();
|
|
|
|
}
|
|
|
|
return m_output->geometry();
|
2015-08-14 14:52:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
QSizeF Screen::physicalSize() const
|
|
|
|
{
|
2020-12-03 19:47:42 +00:00
|
|
|
if (Q_UNLIKELY(!m_output)) {
|
|
|
|
qCCritical(KWIN_QPA) << "Attempting to get the physical size of a destroyed output";
|
|
|
|
return QSizeF();
|
|
|
|
}
|
|
|
|
return m_output->physicalSize();
|
2015-08-14 14:52:40 +00:00
|
|
|
}
|
|
|
|
|
2016-02-17 11:42:12 +00:00
|
|
|
QPlatformCursor *Screen::cursor() const
|
|
|
|
{
|
|
|
|
return m_cursor.data();
|
|
|
|
}
|
|
|
|
|
2016-05-13 08:21:19 +00:00
|
|
|
QDpi Screen::logicalDpi() const
|
|
|
|
{
|
2020-12-03 19:47:42 +00:00
|
|
|
const int dpi = forcedDpi();
|
|
|
|
return dpi > 0 ? QDpi(dpi, dpi) : QDpi(96, 96);
|
2016-05-13 08:21:19 +00:00
|
|
|
}
|
|
|
|
|
2017-03-25 12:16:46 +00:00
|
|
|
qreal Screen::devicePixelRatio() const
|
|
|
|
{
|
2020-12-03 19:47:42 +00:00
|
|
|
if (Q_UNLIKELY(!m_output)) {
|
|
|
|
qCCritical(KWIN_QPA) << "Attempting to get the scale factor of a destroyed output";
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return m_output->scale();
|
2017-03-25 12:16:46 +00:00
|
|
|
}
|
|
|
|
|
2020-09-22 16:27:10 +00:00
|
|
|
QString Screen::name() const
|
|
|
|
{
|
2020-12-03 19:47:42 +00:00
|
|
|
if (Q_UNLIKELY(!m_output)) {
|
|
|
|
qCCritical(KWIN_QPA) << "Attempting to get the name of a destroyed output";
|
|
|
|
return QString();
|
|
|
|
}
|
|
|
|
return m_output->name();
|
|
|
|
}
|
|
|
|
|
|
|
|
void Screen::handleGeometryChanged()
|
|
|
|
{
|
|
|
|
QWindowSystemInterface::handleScreenGeometryChange(screen(), geometry(), geometry());
|
|
|
|
}
|
|
|
|
|
|
|
|
QDpi PlaceholderScreen::logicalDpi() const
|
|
|
|
{
|
|
|
|
const int dpi = forcedDpi();
|
|
|
|
return dpi > 0 ? QDpi(dpi, dpi) : QDpi(96, 96);
|
2020-09-22 16:27:10 +00:00
|
|
|
}
|
|
|
|
|
2015-08-14 14:52:40 +00:00
|
|
|
}
|
|
|
|
}
|