Ref T220, font metric support

* signal if font changed
* character based size can be set
This commit is contained in:
Klaus Basan
2018-01-09 05:43:08 +01:00
parent 4733d91b4e
commit 407c4f8414
2 changed files with 81 additions and 5 deletions

View File

@@ -90,8 +90,9 @@ namespace BlackGui
CGuiApplication::adjustPalette(); CGuiApplication::adjustPalette();
this->setWindowIcon(icon); this->setWindowIcon(icon);
this->settingsChanged(); this->settingsChanged();
this->setCurrentFontValues(); // most likely the default font and not any stylesheet font at this time
sGui = this; sGui = this;
connect(&m_styleSheetUtility, &CStyleSheetUtility::styleSheetsChanged, this, &CGuiApplication::styleSheetsChanged); connect(&m_styleSheetUtility, &CStyleSheetUtility::styleSheetsChanged, this, &CGuiApplication::onStyleSheetsChanged);
} }
} }
@@ -195,7 +196,6 @@ namespace BlackGui
mainWindow->setWindowIconText(name); mainWindow->setWindowIconText(name);
CStyleSheetUtility::setQSysInfoProperties(mainWindow, true); CStyleSheetUtility::setQSysInfoProperties(mainWindow, true);
CGuiUtility::registerMainApplicationWindow(mainWindow); CGuiUtility::registerMainApplicationWindow(mainWindow);
emit this->uiObjectTreeReady(); emit this->uiObjectTreeReady();
} }
@@ -236,11 +236,35 @@ namespace BlackGui
void CGuiApplication::onStartUpCompleted() void CGuiApplication::onStartUpCompleted()
{ {
CApplication::onStartUpCompleted(); CApplication::onStartUpCompleted();
this->setCurrentFont();
if (m_splashScreen) if (m_splashScreen)
{ {
m_splashScreen->close(); m_splashScreen->close();
m_splashScreen.reset(); m_splashScreen.reset();
} }
if (m_minWidthChars > 0 || m_minHeightChars > 0)
{
const QSize s = CGuiUtility::fontMetricsEstimateSize(m_minWidthChars, m_minHeightChars);
QWidget *mw = CGuiUtility::mainApplicationWindow();
if (mw)
{
QSize cs = mw->size();
if (m_minWidthChars > 0) { cs.setWidth(s.width()); }
if (m_minHeightChars > 0) { cs.setHeight(s.height()); }
mw->resize(cs);
}
}
if (m_saveMainWidgetState && !this->isSet(m_cmdWindowSizeReset))
{
this->restoreWindowGeometryAndState();
}
if (m_splashScreen)
{
m_splashScreen->close(); // GUI
m_splashScreen.reset();
}
} }
QString CGuiApplication::beautifyHelpMessage(const QString &helpText) QString CGuiApplication::beautifyHelpMessage(const QString &helpText)
@@ -642,6 +666,12 @@ namespace BlackGui
return m_styleSheetUtility.resetFont(); return m_styleSheetUtility.resetFont();
} }
void CGuiApplication::setMinimumSizeInCharacters(int widthChars, int heightChars)
{
m_minWidthChars = widthChars;
m_minHeightChars = heightChars;
}
bool CGuiApplication::interactivelySynchronizeSetup(int timeoutMs) bool CGuiApplication::interactivelySynchronizeSetup(int timeoutMs)
{ {
bool ok = false; bool ok = false;
@@ -757,6 +787,16 @@ namespace BlackGui
if (result != QDialog::Accepted) { return; } if (result != QDialog::Accepted) { return; }
} }
QString CGuiApplication::getFontInfo() const
{
static const QString info("Family: '%1', average width: %2");
const QWidget *w = this->mainApplicationWindow();
if (!w) { return QStringLiteral("Font info not available"); }
return info.
arg(w->font().family()).
arg(w->fontMetrics().averageCharWidth());
}
void CGuiApplication::triggerNewVersionCheck(int delayedMs) void CGuiApplication::triggerNewVersionCheck(int delayedMs)
{ {
if (!m_updateSetting.get()) { return; } if (!m_updateSetting.get()) { return; }
@@ -806,4 +846,22 @@ namespace BlackGui
newPalette.setColor(QPalette::LinkVisited, linkColor); newPalette.setColor(QPalette::LinkVisited, linkColor);
qApp->setPalette(newPalette); qApp->setPalette(newPalette);
} }
void CGuiApplication::onStyleSheetsChanged()
{
emit this->styleSheetsChanged();
const QFont f = CGuiUtility::currentFont();
if (f.pointSize() != m_fontPointSize || f.family() != m_fontFamily)
{
emit this->fontChanged();
CLogMessage(this).info(this->getFontInfo());
}
}
void CGuiApplication::setCurrentFontValues()
{
const QFont font = CGuiUtility::currentFont();
m_fontFamily = font.family();
m_fontPointSize = font.pointSize();
}
} // ns } // ns

View File

@@ -172,6 +172,9 @@ namespace BlackGui
//! Reset the font to default //! Reset the font to default
bool resetFont(); bool resetFont();
//! Set minimum width/height in characters
void setMinimumSizeInCharacters(int widthChars, int heightChars);
//! Wait for setup, in case it fails display a dialog how to continue //! Wait for setup, in case it fails display a dialog how to continue
bool interactivelySynchronizeSetup(int timeoutMs = BlackMisc::Network::CNetworkUtils::getLongTimeoutMs()); bool interactivelySynchronizeSetup(int timeoutMs = BlackMisc::Network::CNetworkUtils::getLongTimeoutMs());
@@ -210,9 +213,8 @@ namespace BlackGui
//! Object tree ready (means ui->setupUi() completed) //! Object tree ready (means ui->setupUi() completed)
void uiObjectTreeReady(); void uiObjectTreeReady();
protected slots: //! Font has been changed
//! Startup competed void fontChanged();
virtual void onStartUpCompleted() override;
protected: protected:
//! \name print messages generated during parsing / cmd handling //! \name print messages generated during parsing / cmd handling
@@ -227,14 +229,24 @@ namespace BlackGui
//! \copydoc BlackCore::CApplication::onCoreFacadeStarted //! \copydoc BlackCore::CApplication::onCoreFacadeStarted
virtual void onCoreFacadeStarted() override; virtual void onCoreFacadeStarted() override;
//! \copydoc BlackCore::CApplication::onStartUpCompleted
virtual void onStartUpCompleted() override;
//! Check for a new version (update) //! Check for a new version (update)
void checkNewVersion(bool onlyIfNew); void checkNewVersion(bool onlyIfNew);
//! Info about font
QString getFontInfo() const;
//! Register metadata //! Register metadata
static void registerMetadata(); static void registerMetadata();
private: private:
QPixmap m_windowIcon; QPixmap m_windowIcon;
QString m_fontFamily; //!< current font family
int m_fontPointSize; //!< current font size
int m_minWidthChars = -1; //!< min. width characters (based on current font metrics)
int m_minHeightChars = -1; //!< min. height characters (based on current font metrics)
QCommandLineOption m_cmdWindowStateMinimized { "empty" }; //!< window state (minimized) QCommandLineOption m_cmdWindowStateMinimized { "empty" }; //!< window state (minimized)
QCommandLineOption m_cmdWindowMode { "empty" }; //!< window mode (flags: frameless ...) QCommandLineOption m_cmdWindowMode { "empty" }; //!< window mode (flags: frameless ...)
CStyleSheetUtility m_styleSheetUtility {{}, this}; //!< style sheet utility CStyleSheetUtility m_styleSheetUtility {{}, this}; //!< style sheet utility
@@ -256,6 +268,12 @@ namespace BlackGui
//! Fix the palette for better readibility //! Fix the palette for better readibility
void adjustPalette(); void adjustPalette();
//! Style sheets have been changed
void onStyleSheetsChanged();
//! Set current font values
void setCurrentFontValues();
}; };
} // ns } // ns