From 478b5e0628a0721a0da0ab482cf3217eb85f0492 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 8 May 2023 10:03:36 +0200 Subject: [PATCH] Gui: fix NaviCube in split views (fixes #9500) * initialize base and hilite color with more sensible default values * handle case if no font name is set * apply user preferences to NaviCube --- src/Gui/NaviCube.cpp | 17 +++++++++++++---- src/Gui/SplitView3DInventor.cpp | 6 ++++++ src/Gui/View3DSettings.cpp | 4 +++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Gui/NaviCube.cpp b/src/Gui/NaviCube.cpp index 1f54c7e123..b687fb5164 100644 --- a/src/Gui/NaviCube.cpp +++ b/src/Gui/NaviCube.cpp @@ -241,11 +241,13 @@ void NaviCube::setSize(int size) { m_NaviCubeImplementation->setSize(size); } + void NaviCube::setChamfer(float chamfer) { m_NaviCubeImplementation->m_Chamfer = min(max(0.05f, chamfer), 0.18f); m_NaviCubeImplementation->m_Prepared = false; } + void NaviCube::setNaviRotateToNearest(bool toNearest) { m_NaviCubeImplementation->m_RotateToNearest = toNearest; @@ -301,7 +303,6 @@ void NaviCube::setBorderWidth(double BorderWidth) m_NaviCubeImplementation->m_BorderWidth = BorderWidth; } - void NaviCube::setShowCS(bool showCS) { m_NaviCubeImplementation->m_ShowCS = showCS; @@ -311,6 +312,7 @@ void NaviCube::setNaviCubeLabels(const std::vector& labels) { m_NaviCubeImplementation->setLabels(labels); } + void NaviCubeImplementation::setLabels(const std::vector& labels) { m_LabelTextures[PickId::Front].label = labels[0]; @@ -322,8 +324,9 @@ void NaviCubeImplementation::setLabels(const std::vector& labels) m_Prepared = false; } - NaviCubeImplementation::NaviCubeImplementation(Gui::View3DInventorViewer* viewer) + : m_BaseColor{226, 232, 239} + , m_HiliteColor{170, 226, 255} { m_View3DInventorViewer = viewer; m_PickingFramebuffer = nullptr; @@ -368,6 +371,10 @@ auto convertWeights = [](int weight) -> QFont::Weight { }; int imageVerticalBalance(QImage p, int sizeHint) { + if (sizeHint < 0) { + return 0; + } + int h = p.height(); int startRow = (h - sizeHint) / 2; bool done = false; @@ -394,8 +401,10 @@ void NaviCubeImplementation::createCubeFaceTextures() { int texSize = 192; // Works well for the max cube size 1024 // find font sizes QFont font; - QString fontString = QString::fromStdString(m_TextFont); - font.fromString(fontString); + if (!m_TextFont.empty()) { + QString fontString = QString::fromStdString(m_TextFont); + font.fromString(fontString); + } if (m_FontWeight > 0) { font.setWeight(convertWeights(m_FontWeight)); } diff --git a/src/Gui/SplitView3DInventor.cpp b/src/Gui/SplitView3DInventor.cpp index d588274803..784b76c7b5 100644 --- a/src/Gui/SplitView3DInventor.cpp +++ b/src/Gui/SplitView3DInventor.cpp @@ -110,6 +110,12 @@ void AbstractSplitView::setupSettings() viewSettings->ignoreRenderCache = true; viewSettings->ignoreDimensions = true; viewSettings->applySettings(); + + for (auto view : _viewer) { + NaviCubeSettings naviSettings(App::GetApplication().GetParameterGroupByPath + ("User parameter:BaseApp/Preferences/NaviCube"), view); + naviSettings.applySettings(); + } } View3DInventorViewer* AbstractSplitView::getViewer(unsigned int n) const diff --git a/src/Gui/View3DSettings.cpp b/src/Gui/View3DSettings.cpp index fb13bde4dc..3ac95d3f66 100644 --- a/src/Gui/View3DSettings.cpp +++ b/src/Gui/View3DSettings.cpp @@ -449,6 +449,7 @@ NaviCubeSettings::~NaviCubeSettings() { connectParameterChanged.disconnect(); } + QString NaviCubeSettings::getDefaultSansserifFont() { // "FreeCAD NaviCube" family susbtitutions are set in MainWindow::MainWindow @@ -458,6 +459,7 @@ QString NaviCubeSettings::getDefaultSansserifFont() return QFontInfo(font).family(); // return QStringLiteral("FreeCAD NaviCube"); } + void NaviCubeSettings::applySettings() { parameterChanged("BaseColor"); @@ -519,7 +521,7 @@ void NaviCubeSettings::parameterChanged(const char* Name) nc->setBaseColor(App::Color::fromPackedRGBA(col)); // update default contrast colors parameterChanged("EmphaseColor"); - } + } else if (strcmp(Name, "EmphaseColor") == 0) { App::Color bc((uint32_t)hGrp->GetUnsigned("BaseColor", 3806916544)); unsigned long d = bc.r + bc.g + bc.b >= 1.5f ? 255 : 4294967295;