5 #include <QApplication>
7 # define WIN32_LEAN_AND_MEAN
8 # include <qt_windows.h>
10 #if !TTK_QT_VERSION_CHECK(5,0,0)
11 # include <QDesktopWidget>
13 #if defined Q_OS_LINUX
15 # include <X11/Xlib.h>
24 if(sr.left() != dr.left())
26 info.
m_size = std::abs(sr.left() - dr.left());
29 else if(sr.right() != dr.right())
31 info.
m_size = std::abs(sr.right() - dr.right());
34 else if(sr.top() != dr.top())
36 info.
m_size = std::abs(sr.top() - dr.top());
39 else if(sr.bottom() != dr.bottom())
41 info.
m_size = std::abs(sr.bottom() - dr.bottom());
54 #if TTK_QT_VERSION_CHECK(5,0,0)
56 QScreen *screen = QApplication::primaryScreen();
57 return screen ? screen->availableGeometry() : QRect();
59 QDesktopWidget *widget = QApplication::desktop();
60 return widget ? widget->availableGeometry(index) : QRect();
66 #if TTK_QT_VERSION_CHECK(5,0,0)
67 const QList<QScreen*> &screens = QApplication::screens();
68 return (index < 0 || index >= screens.count()) ? QRect() : screens[index]->geometry();
70 QDesktopWidget *widget = QApplication::desktop();
71 return widget ? widget->screenGeometry(index) : QRect();
77 #if TTK_QT_VERSION_CHECK(5,0,0)
78 const QList<QScreen*> &screens = QApplication::screens();
79 QRegion virtualGeometry;
80 for(QScreen *screen : screens)
82 virtualGeometry += screen->geometry();
84 return virtualGeometry.boundingRect();
86 QDesktopWidget *widget = QApplication::desktop();
87 return widget ? widget->geometry() : QRect();
94 #if TTK_QT_VERSION_CHECK(5,0,0)
95 const int count = QApplication::screens().count();
97 const int count = QApplication::desktop()->screenCount();
101 const QPoint &pos = QCursor::pos();
102 for(
int i = 0; i < count; ++i)
104 #if TTK_QT_VERSION_CHECK(5,0,0)
105 if(QApplication::screens().at(i)->
geometry().contains(pos))
120 #if TTK_QT_VERSION_CHECK(5,0,0)
121 return widget->grab(rect);
123 return QPixmap::grabWidget(widget, rect);
129 QWidget widget(
nullptr, Qt::Desktop);
130 widget.setVisible(
false);
132 #if TTK_QT_VERSION_CHECK(5,0,0)
133 QScreen *screen = QApplication::primaryScreen();
134 return screen ? screen->grabWindow(widget.winId(), x, y, w, h) : QPixmap();
136 return QPixmap::grabWindow(widget.winId(), x, y, w, h);
147 miex.cbSize =
sizeof(miex);
149 HMONITOR monitor = MonitorFromWindow(GetDesktopWindow(), MONITOR_DEFAULTTONEAREST);
150 if(!GetMonitorInfo(monitor, &miex))
156 dm.dmSize =
sizeof(dm);
157 dm.dmDriverExtra = 0;
158 if(!EnumDisplaySettings(miex.szDevice, ENUM_CURRENT_SETTINGS, &dm))
163 dpiSize.setWidth(dm.dmPelsWidth *
DEFAULT_DPI * 1.0 / (miex.rcMonitor.right - miex.rcMonitor.left));
164 dpiSize.setHeight(dm.dmPelsHeight *
DEFAULT_DPI * 1.0 / (miex.rcMonitor.bottom - miex.rcMonitor.top));
165 #elif defined Q_OS_LINUX
166 Display *dp = XOpenDisplay(
nullptr);
173 const char *resource = XResourceManagerString(dp);
176 const QString data(resource);
177 const QRegExp regx(
"Xft.dpi:\t(\\d+)");
178 if(regx.indexIn(data) != -1)
180 dpi = regx.cap(1).toDouble();
184 const int screen = 0;
185 const double x = (DisplayWidth(dp, screen) * 25.4) / DisplayWidthMM(dp, screen);
186 const double y = (DisplayHeight(dp, screen) * 25.4) / DisplayHeightMM(dp, screen);
191 dpiSize.setWidth(x + 0.5);
192 dpiSize.setHeight(y + 0.5);
196 dpiSize.setWidth(dpi + 0.5);
197 dpiSize.setHeight(dpi + 0.5);
201 #elif defined Q_OS_MAC
205 QApplication(count,
nullptr);
208 #if TTK_QT_VERSION_CHECK(5,0,0)
209 QScreen *screen = QApplication::primaryScreen();
212 dpiSize.setWidth(screen->logicalDotsPerInchX());
213 dpiSize.setHeight(screen->logicalDotsPerInchY());
217 QDesktopWidget* desktop = QApplication::desktop();
220 dpiSize.setWidth(desktop->logicalDpiX());
221 dpiSize.setHeight(desktop->logicalDpiY());
231 return dpiSize.width();
237 return dpiSize.height();
243 return (dpiSize.width() + dpiSize.height()) / 2;
250 HDC screen = GetDC(GetDesktopWindow());
251 dpiSize.setWidth(GetDeviceCaps(screen, LOGPIXELSX));
252 dpiSize.setHeight(GetDeviceCaps(screen, LOGPIXELSY));
253 ReleaseDC(GetDesktopWindow(), screen);
257 return (dpiSize.width() + dpiSize.height()) / 2;
#define TTKStaticCast(x, y)
TTK::Direction m_direction
static int dotsPerInchY()
static constexpr int DEFAULT_DPI
static QPixmap grabWindow(int x=0, int y=0, int w=-1, int h=-1)
static TaskbarInfo screenTaskbar(int index=0)
static int dotsPerInchX()
static int logicDotsPerInch()
static QSize generateDPIValue()
static QPixmap grabWidget(QWidget *widget, const QRect &rect)
static QRect screenGeometry(int index=0)
static QRect availableGeometry(int index=0)