Ref T220, font metric utility functions

Allows to obtain sizes based on number of characters
This commit is contained in:
Klaus Basan
2018-01-09 05:37:45 +01:00
parent a4695b4c0a
commit 8885a938b6
2 changed files with 61 additions and 0 deletions

View File

@@ -404,4 +404,47 @@ namespace BlackGui
a->start(QPropertyAnimation::DeleteWhenStopped);
return effect;
}
QFontMetrics CGuiUtility::currentFontMetrics()
{
const QWidget *w = CGuiUtility::mainApplicationWindow();
if (w) { return w->fontMetrics(); }
return QApplication::fontMetrics();
}
QFont CGuiUtility::currentFont()
{
const QWidget *w = CGuiUtility::mainApplicationWindow();
if (w) { return w->font(); }
return QApplication::font();
}
QSize CGuiUtility::fontMetrics80Chars()
{
static const QString s("01234567890123456789012345678901234567890123456789012345678901234567890123456789");
const QFontMetrics fm = CGuiUtility::currentFontMetrics();
const int w = fm.width(s);
const int h = fm.height();
return QSize(w, h);
}
QSize CGuiUtility::fontMetricsLazyDog43Chars()
{
// 43 characters 0123456789012345678901234567890123456789012
static const QString s("The quick brown fox jumps over the lazy dog");
const QFontMetrics fm = CGuiUtility::currentFontMetrics();
const int w = fm.width(s);
const int h = fm.height();
return QSize(w, h);
}
QSize CGuiUtility::fontMetricsEstimateSize(int xCharacters, int yCharacters)
{
const QSize s1 = CGuiUtility::fontMetrics80Chars();
const QSize s2 = CGuiUtility::fontMetricsLazyDog43Chars();
const QSize s = s1 + s2;
const int w = s.width() * xCharacters / 123;
const int h = s.height() * yCharacters / 2;
return QSize(w, h);
}
} // ns

View File

@@ -16,10 +16,13 @@
#include "blackmisc/variant.h"
#include <QByteArray>
#include <QSize>
#include <QPoint>
#include <QString>
#include <QWidget>
#include <QWidgetList>
#include <QFont>
#include <QFontMetrics>
#include <QModelIndexList>
class QCheckBox;
@@ -131,6 +134,21 @@ namespace BlackGui
//! Fade out a widget
static QGraphicsOpacityEffect *fadeOutWidget(int durationMs, QWidget *widget, double startValue = 1.0, double endValue = 0.0);
//! Main window font metrics or default metrics
static QFontMetrics currentFontMetrics();
//! Main window font or default font
static QFont currentFont();
//! 80 characters width/height
static QSize fontMetrics80Chars();
//! 43 characters width/height "the quick brown ..."
static QSize fontMetricsLazyDog43Chars();
//! Estimate size based on current font
static QSize fontMetricsEstimateSize(int xCharacters, int yCharacters);
private:
//! Constructor, use static methods only
CGuiUtility() {}