File indexing completed on 2024-04-28 16:49:42
0001 /* 0002 * SPDX-FileCopyrightText: 2012 Alejandro Fiestas Olivares <afiestas@kde.org> 0003 * SPDX-FileCopyrightText: 2012, 2013 Daniel Vrátil <dvratil@redhat.com> 0004 * 0005 * SPDX-License-Identifier: LGPL-2.1-or-later 0006 */ 0007 #include "xrandrscreen.h" 0008 0009 #include "xrandr.h" 0010 #include "xrandrconfig.h" 0011 0012 #include "../xcbwrapper.h" 0013 0014 #include "screen.h" 0015 0016 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) 0017 #include <private/qtx11extras_p.h> 0018 #else 0019 #include <QX11Info> 0020 #endif 0021 0022 XRandRScreen::XRandRScreen(XRandRConfig *config) 0023 : QObject(config) 0024 { 0025 XCB::ScreenSize size(XRandR::rootWindow()); 0026 m_maxSize = QSize(size->max_width, size->max_height); 0027 m_minSize = QSize(size->min_width, size->min_height); 0028 update(); 0029 } 0030 0031 XRandRScreen::~XRandRScreen() 0032 { 0033 } 0034 0035 void XRandRScreen::update() 0036 { 0037 const int appScreen = QX11Info::appScreen(); 0038 m_id = appScreen; 0039 xcb_screen_t *screen = XCB::screenOfDisplay(XCB::connection(), appScreen); 0040 m_currentSize = QSize(screen->width_in_pixels, screen->height_in_pixels); 0041 } 0042 0043 void XRandRScreen::update(const QSize &size) 0044 { 0045 m_currentSize = size; 0046 } 0047 0048 QSize XRandRScreen::currentSize() 0049 { 0050 return m_currentSize; 0051 } 0052 0053 KScreen::ScreenPtr XRandRScreen::toKScreenScreen() const 0054 { 0055 KScreen::ScreenPtr kscreenScreen(new KScreen::Screen); 0056 kscreenScreen->setId(m_id); 0057 kscreenScreen->setMaxSize(m_maxSize); 0058 kscreenScreen->setMinSize(m_minSize); 0059 kscreenScreen->setCurrentSize(m_currentSize); 0060 0061 XCB::ScopedPointer<xcb_randr_get_screen_resources_reply_t> screenResources(XRandR::screenResources()); 0062 kscreenScreen->setMaxActiveOutputsCount(screenResources->num_crtcs); 0063 0064 return kscreenScreen; 0065 } 0066 0067 void XRandRScreen::updateKScreenScreen(KScreen::ScreenPtr &screen) const 0068 { 0069 screen->setCurrentSize(m_currentSize); 0070 }