From 8885a938b6dca53ca292389a02e0e823b800ed19 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 9 Jan 2018 05:37:45 +0100 Subject: [PATCH] Ref T220, font metric utility functions Allows to obtain sizes based on number of characters --- src/blackgui/guiutility.cpp | 43 +++++++++++++++++++++++++++++++++++++ src/blackgui/guiutility.h | 18 ++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/src/blackgui/guiutility.cpp b/src/blackgui/guiutility.cpp index 3268f92b4..3a629583f 100644 --- a/src/blackgui/guiutility.cpp +++ b/src/blackgui/guiutility.cpp @@ -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 diff --git a/src/blackgui/guiutility.h b/src/blackgui/guiutility.h index ea42c0849..bf9c11208 100644 --- a/src/blackgui/guiutility.h +++ b/src/blackgui/guiutility.h @@ -16,10 +16,13 @@ #include "blackmisc/variant.h" #include +#include #include #include #include #include +#include +#include #include 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() {}