Warning, file /plasma/kwin/autotests/integration/fractional_scaling_test.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 KWin - the KDE window manager 0003 This file is part of the KDE project. 0004 0005 SPDX-FileCopyrightText: 2022 David Edmundson <davidedmundson@kde.org> 0006 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 #include "kwin_wayland_test.h" 0010 0011 #include "core/output.h" 0012 #include "core/outputbackend.h" 0013 #include "wayland/clientconnection.h" 0014 #include "wayland/display.h" 0015 #include "wayland_server.h" 0016 #include "window.h" 0017 #include "workspace.h" 0018 0019 #include <KWayland/Client/compositor.h> 0020 #include <KWayland/Client/connection_thread.h> 0021 #include <KWayland/Client/output.h> 0022 #include <KWayland/Client/server_decoration.h> 0023 #include <KWayland/Client/surface.h> 0024 0025 #include <QDBusConnection> 0026 0027 // system 0028 #include <sys/socket.h> 0029 #include <sys/types.h> 0030 #include <unistd.h> 0031 0032 #include <csignal> 0033 0034 using namespace KWin; 0035 0036 static const QString s_socketName = QStringLiteral("wayland_test_kwin_fractionalScale-0"); 0037 0038 class TestFractionalScale : public QObject 0039 { 0040 Q_OBJECT 0041 private Q_SLOTS: 0042 void initTestCase(); 0043 void init(); 0044 void cleanup(); 0045 0046 void testShow(); 0047 }; 0048 0049 void TestFractionalScale::initTestCase() 0050 { 0051 qRegisterMetaType<KWin::Window *>(); 0052 qRegisterMetaType<KWayland::Client::Output *>(); 0053 0054 QSignalSpy applicationStartedSpy(kwinApp(), &Application::started); 0055 QVERIFY(waylandServer()->init(s_socketName)); 0056 QMetaObject::invokeMethod(kwinApp()->outputBackend(), 0057 "setVirtualOutputs", 0058 Qt::DirectConnection, 0059 Q_ARG(QVector<QRect>, QVector<QRect>() << QRect(0, 0, 1280, 1024) << QRect(1280, 0, 1280, 1024)), 0060 Q_ARG(QVector<qreal>, QVector<qreal>() << 1.25 << 2.0)); 0061 0062 kwinApp()->start(); 0063 QVERIFY(applicationStartedSpy.wait()); 0064 const auto outputs = workspace()->outputs(); 0065 QCOMPARE(outputs.count(), 2); 0066 QCOMPARE(outputs[0]->geometry(), QRect(0, 0, 1024, 819)); 0067 QCOMPARE(outputs[1]->geometry(), QRect(1280, 0, 640, 512)); 0068 QCOMPARE(outputs[0]->scale(), 1.25); 0069 QCOMPARE(outputs[1]->scale(), 2.0); 0070 } 0071 0072 void TestFractionalScale::init() 0073 { 0074 QVERIFY(Test::setupWaylandConnection(Test::AdditionalWaylandInterface::FractionalScaleManagerV1)); 0075 0076 workspace()->setActiveOutput(QPoint(640, 512)); 0077 // put mouse in the middle of screen one 0078 KWin::Cursors::self()->mouse()->setPos(QPoint(640, 512)); 0079 } 0080 0081 void TestFractionalScale::cleanup() 0082 { 0083 Test::destroyWaylandConnection(); 0084 } 0085 0086 void TestFractionalScale::testShow() 0087 { 0088 std::unique_ptr<KWayland::Client::Surface> surface(Test::createSurface()); 0089 std::unique_ptr<Test::FractionalScaleV1> fractionalScale(Test::createFractionalScaleV1(surface.get())); 0090 std::unique_ptr<Test::XdgToplevel> shellSurface(Test::createXdgToplevelSurface(surface.get())); 0091 0092 // above call commits the surface and blocks for the configure event. We should have received the scale already 0093 // We are sent the value in 120ths 0094 QCOMPARE(fractionalScale->preferredScale(), 1.25 * 120); 0095 0096 auto window = Test::renderAndWaitForShown(surface.get(), QSize(100, 50), Qt::blue); 0097 QVERIFY(window); 0098 0099 QCOMPARE(fractionalScale->preferredScale(), 1.25 * 120); 0100 } 0101 0102 WAYLANDTEST_MAIN(TestFractionalScale) 0103 #include "fractional_scaling_test.moc"