Added functions for "high DPI" support.

This commit is contained in:
LoRd_MuldeR 2017-03-03 22:51:01 +01:00
parent 62315b390f
commit db4513a63f
2 changed files with 74 additions and 26 deletions

View File

@ -62,6 +62,11 @@ namespace MUtils
//Theme support
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
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);

View File

@ -31,6 +31,7 @@
#include <QApplication>
#include <QWidget>
#include <QMutex>
#include <QDesktopWidget>
//Win32 API
#ifndef _INC_WINDOWS
@ -176,6 +177,48 @@ void MUtils::GUI::blink_window(QWidget *const poWindow, const unsigned int &coun
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
///////////////////////////////////////////////////////////////////////////////