Added functions for "high DPI" support.
This commit is contained in:
parent
62315b390f
commit
db4513a63f
@ -62,6 +62,11 @@ namespace MUtils
|
|||||||
//Theme support
|
//Theme support
|
||||||
MUTILS_API bool themes_enabled(void);
|
MUTILS_API bool themes_enabled(void);
|
||||||
|
|
||||||
|
//DPI information
|
||||||
|
MUTILS_API double dpi_scale(void);
|
||||||
|
MUTILS_API bool scale_widget(QWidget *const widget, const bool recenter = true);
|
||||||
|
MUTILS_API bool center_widget(QWidget *const widget);
|
||||||
|
|
||||||
//System menu
|
//System menu
|
||||||
MUTILS_API bool sysmenu_append(const QWidget *const win, const unsigned int identifier, const QString &text);
|
MUTILS_API bool sysmenu_append(const QWidget *const win, const unsigned int identifier, const QString &text);
|
||||||
MUTILS_API bool sysmenu_update(const QWidget *const win, const unsigned int identifier, const QString &text);
|
MUTILS_API bool sysmenu_update(const QWidget *const win, const unsigned int identifier, const QString &text);
|
||||||
|
43
src/GUI.cpp
43
src/GUI.cpp
@ -31,6 +31,7 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
|
#include <QDesktopWidget>
|
||||||
|
|
||||||
//Win32 API
|
//Win32 API
|
||||||
#ifndef _INC_WINDOWS
|
#ifndef _INC_WINDOWS
|
||||||
@ -176,6 +177,48 @@ void MUtils::GUI::blink_window(QWidget *const poWindow, const unsigned int &coun
|
|||||||
g_blinkMutex.unlock();
|
g_blinkMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// DPI SCALING
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
double MUtils::GUI::dpi_scale(void)
|
||||||
|
{
|
||||||
|
if (const QApplication *const app = dynamic_cast<QApplication*>(QCoreApplication::instance()))
|
||||||
|
{
|
||||||
|
const double dpiX = static_cast<double>(app->desktop()->logicalDpiX());
|
||||||
|
const double dpiY = static_cast<double>(app->desktop()->logicalDpiY());
|
||||||
|
return qBound(1.0, ((dpiX + dpiY) / 192.0), 2.0);
|
||||||
|
}
|
||||||
|
return -1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MUtils::GUI::scale_widget(QWidget *const widget, const bool recenter)
|
||||||
|
{
|
||||||
|
if (widget && (!widget->parentWidget()))
|
||||||
|
{
|
||||||
|
const double dpiScale = dpi_scale();
|
||||||
|
if ((dpiScale > 0.0) && (!qFuzzyCompare(dpiScale, 1.0)))
|
||||||
|
{
|
||||||
|
const QSize originalSize = widget->size();
|
||||||
|
widget->resize(qRound(originalSize.width() * dpiScale), qRound(originalSize.height() * dpiScale));
|
||||||
|
return recenter ? center_widget(widget) : true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MUtils::GUI::center_widget(QWidget *const widget)
|
||||||
|
{
|
||||||
|
if (widget && (!widget->parentWidget()))
|
||||||
|
{
|
||||||
|
const QRect desktopRect = QApplication::desktop()->screenGeometry();
|
||||||
|
const QRect thisRect = widget->geometry();
|
||||||
|
widget->move((desktopRect.width() - thisRect.width()) / 2, (desktopRect.height() - thisRect.height()) / 2);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// FORCE QUIT
|
// FORCE QUIT
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user