From caac68472ba688f83f32fa950a403fd82e861c32 Mon Sep 17 00:00:00 2001
From: Jolbas <39026960+Jolbas@users.noreply.github.com>
Date: Sun, 4 Jun 2023 10:34:55 +0200
Subject: [PATCH] Improved font handling Navigation cube
Also adding anisotropy texture mapping for better readability on steep angles.
---
src/Gui/DlgSettingsNavigation.cpp | 20 ++++++++++----------
src/Gui/DlgSettingsNavigation.ui | 5 +++++
src/Gui/MainWindow.cpp | 10 ----------
src/Gui/NaviCube.cpp | 11 +++++------
src/Gui/View3DSettings.cpp | 15 +--------------
src/Gui/View3DSettings.h | 1 -
6 files changed, 21 insertions(+), 41 deletions(-)
diff --git a/src/Gui/DlgSettingsNavigation.cpp b/src/Gui/DlgSettingsNavigation.cpp
index 895d17de7c..2b148cc1ce 100644
--- a/src/Gui/DlgSettingsNavigation.cpp
+++ b/src/Gui/DlgSettingsNavigation.cpp
@@ -108,10 +108,13 @@ void DlgSettingsNavigation::saveSettings()
hCustom->SetFloat("Q2", q2);
hCustom->SetFloat("Q3", q3);
}
-
hGrp = App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/NaviCube");
- hGrp->SetASCII("FontString", ui->naviCubeFontName->currentText().toLatin1());
+ if (ui->naviCubeFontName->currentIndex()) {
+ hGrp->SetASCII("FontString", ui->naviCubeFontName->currentText().toLatin1());
+ } else {
+ hGrp->RemoveASCII("FontString");
+ }
}
void DlgSettingsNavigation::loadSettings()
@@ -171,9 +174,6 @@ void DlgSettingsNavigation::loadSettings()
this, &DlgSettingsNavigation::onMouseButtonClicked);
// fill up font styles
- hGrp = App::GetApplication().GetParameterGroupByPath(
- "User parameter:BaseApp/Preferences/NaviCube");
- std::string defaultSansserifFont = NaviCubeSettings::getDefaultSansserifFont().toStdString();
// we purposely allow all available fonts on the system
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
@@ -182,12 +182,12 @@ void DlgSettingsNavigation::loadSettings()
QStringList familyNames = QFontDatabase::families(QFontDatabase::Any);
#endif
ui->naviCubeFontName->addItems(familyNames);
-
+
+ hGrp = App::GetApplication().GetParameterGroupByPath(
+ "User parameter:BaseApp/Preferences/NaviCube");
int indexFamilyNames = familyNames.indexOf(
- QString::fromStdString(hGrp->GetASCII("FontString", defaultSansserifFont.c_str())));
- if (indexFamilyNames < 0)
- indexFamilyNames = 0;
- ui->naviCubeFontName->setCurrentIndex(indexFamilyNames);
+ QString::fromStdString(hGrp->GetASCII("FontString")));
+ ui->naviCubeFontName->setCurrentIndex(indexFamilyNames + 1);
}
diff --git a/src/Gui/DlgSettingsNavigation.ui b/src/Gui/DlgSettingsNavigation.ui
index 90b7607bb6..f884bc8239 100644
--- a/src/Gui/DlgSettingsNavigation.ui
+++ b/src/Gui/DlgSettingsNavigation.ui
@@ -157,6 +157,11 @@
NaviCube
+ -
+
+ Default
+
+
-
diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp
index 4ba658eac6..2ad42ab93a 100644
--- a/src/Gui/MainWindow.cpp
+++ b/src/Gui/MainWindow.cpp
@@ -446,16 +446,6 @@ MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags f)
// accept drops on the window, get handled in dropEvent, dragEnterEvent
setAcceptDrops(true);
- // setup font substitutions for NaviCube
- // Helvetica usually gives good enough results on mac & linux
- // in rare cases Helvetica matches a bad font on linux
- // Nimbus Sans Narrow and Open Sans Condensed added as fallback
- // Bahnschrift is a condensed font available on windows versions since 2017
- // Arial added as fallback for older version
- auto substitutions = QStringLiteral("Bahnschrift,Helvetica,Nimbus Sans Narrow,Open Sans Condensed,Arial,Sans");
- auto family = QStringLiteral("FreeCAD NaviCube");
- QFont::insertSubstitutions(family, substitutions.split(QLatin1Char(',')));
-
statusBar()->showMessage(tr("Ready"), 2001);
}
diff --git a/src/Gui/NaviCube.cpp b/src/Gui/NaviCube.cpp
index 41f6a2efc2..d39b102b9e 100644
--- a/src/Gui/NaviCube.cpp
+++ b/src/Gui/NaviCube.cpp
@@ -401,12 +401,10 @@ int imageVerticalBalance(QImage p, int sizeHint) {
void NaviCubeImplementation::createCubeFaceTextures() {
int texSize = 192; // Works well for the max cube size 1024
- // find font sizes
QFont font;
- if (!m_TextFont.empty()) {
- QString fontString = QString::fromStdString(m_TextFont);
- font.fromString(fontString);
- }
+ if (m_TextFont.empty()) font.fromString(QStringLiteral("Arial"));
+ else font.fromString(QString::fromStdString(m_TextFont));
+ font.setStyleHint(QFont::SansSerif);
if (m_FontWeight > 0) {
font.setWeight(convertWeights(m_FontWeight));
}
@@ -454,9 +452,10 @@ void NaviCubeImplementation::createCubeFaceTextures() {
delete m_LabelTextures[pickId].texture;
}
m_LabelTextures[pickId].texture = new QOpenGLTexture(image.mirrored());
- m_LabelTextures[pickId].texture->generateMipMaps();
+ m_LabelTextures[pickId].texture->setMaximumAnisotropy(4.0);
m_LabelTextures[pickId].texture->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
m_LabelTextures[pickId].texture->setMagnificationFilter(QOpenGLTexture::Linear);
+ m_LabelTextures[pickId].texture->generateMipMaps();
}
}
diff --git a/src/Gui/View3DSettings.cpp b/src/Gui/View3DSettings.cpp
index 3ac95d3f66..05ffeb31f9 100644
--- a/src/Gui/View3DSettings.cpp
+++ b/src/Gui/View3DSettings.cpp
@@ -442,7 +442,6 @@ NaviCubeSettings::NaviCubeSettings(ParameterGrp::handle hGrp,
[this](ParameterGrp*, ParameterGrp::ParamType, const char *Name, const char *) {
parameterChanged(Name);
});
-
}
NaviCubeSettings::~NaviCubeSettings()
@@ -450,16 +449,6 @@ NaviCubeSettings::~NaviCubeSettings()
connectParameterChanged.disconnect();
}
-QString NaviCubeSettings::getDefaultSansserifFont()
-{
- // "FreeCAD NaviCube" family susbtitutions are set in MainWindow::MainWindow
- QFont font(QStringLiteral("FreeCAD NaviCube"));
- font.setStyleHint(QFont::SansSerif);
- // QFontInfo is required to get the actually matched font family
- return QFontInfo(font).family();
- // return QStringLiteral("FreeCAD NaviCube");
-}
-
void NaviCubeSettings::applySettings()
{
parameterChanged("BaseColor");
@@ -506,9 +495,7 @@ void NaviCubeSettings::parameterChanged(const char* Name)
nc->setFontZoom(hGrp->GetFloat("FontZoom", 0.3));
}
else if (strcmp(Name, "FontString") == 0) {
- std::string font =
- hGrp->GetASCII("FontString", getDefaultSansserifFont().toStdString().c_str());
- nc->setFont(font);
+ nc->setFont(hGrp->GetASCII("FontString"));
}
else if (strcmp(Name, "FontWeight") == 0) {
nc->setFontWeight(hGrp->GetInt("FontWeight", 0));
diff --git a/src/Gui/View3DSettings.h b/src/Gui/View3DSettings.h
index 7c52247405..eddea34ea3 100644
--- a/src/Gui/View3DSettings.h
+++ b/src/Gui/View3DSettings.h
@@ -60,7 +60,6 @@ public:
~NaviCubeSettings();
void applySettings();
- static QString getDefaultSansserifFont();
private:
void parameterChanged(ParameterGrp::MessageType pName);
ParameterGrp::handle hGrp;