From dd53928de81cda8c2fe8f1acdf9f0f0c02ee91f1 Mon Sep 17 00:00:00 2001 From: Henner Zeller Date: Sat, 5 Oct 2024 10:06:31 -0700 Subject: [PATCH] freecad: work around https://github.com/FreeCAD/FreeCAD/issues/10514 * Fixes #284880 * Also discussed on https://discourse.nixos.org/t/freecad-failed-to-compute-left-right-minimum-bearings-for-cursor-pcf/35266 Symptom is that failure to load a fixed font is followed by a flood of 'Failed to compute left/right minimum bearings for "cursor.pcf"' messages that can freeze up the machine. Isssue FreeCAD issue tracker https://github.com/FreeCAD/FreeCAD/issues/10514 Is not yet fixed, but with a working solution, which has not made it into the repo yet: https://github.com/FreeCAD/FreeCAD/issues/10514#issuecomment-1849176386 The hotfix from that comment is added here slightly adated as freecad-font-10514.patch --- .../0003-freecad-font-issue-10514.patch | 61 +++++++++++++++++++ pkgs/by-name/fr/freecad/package.nix | 1 + 2 files changed, 62 insertions(+) create mode 100644 pkgs/by-name/fr/freecad/0003-freecad-font-issue-10514.patch diff --git a/pkgs/by-name/fr/freecad/0003-freecad-font-issue-10514.patch b/pkgs/by-name/fr/freecad/0003-freecad-font-issue-10514.patch new file mode 100644 index 000000000000..3e55b6610265 --- /dev/null +++ b/pkgs/by-name/fr/freecad/0003-freecad-font-issue-10514.patch @@ -0,0 +1,61 @@ +diff --git a/src/Gui/PreferencePages/DlgSettingsEditor.cpp b/src/Gui/PreferencePages/DlgSettingsEditor.cpp +index 5f92058c18..b00104497b 100644 +--- a/src/Gui/PreferencePages/DlgSettingsEditor.cpp ++++ b/src/Gui/PreferencePages/DlgSettingsEditor.cpp +@@ -56,27 +56,34 @@ namespace + * + * Based on + * https://stackoverflow.com/questions/18896933/qt-qfont-selection-of-a-monospace-font-doesnt-work ++ * Local fix to based on comment in ++ * https://github.com/FreeCAD/FreeCAD/issues/10514#issuecomment-1849176386 + */ ++bool hasFixedPitch(const QFont& font) ++{ ++ return QFontInfo(font).fixedPitch(); ++} ++ + QFont getMonospaceFont() + { +- QFont font(QString::fromLatin1("monospace")); +- if (font.fixedPitch()) { +- return font; +- } +- font.setStyleHint(QFont::Monospace); +- if (font.fixedPitch()) { +- return font; ++ if (QFont font = QFontDatabase::systemFont(QFontDatabase::FixedFont); hasFixedPitch(font)) { ++ return font; // should typically work. + } +- font.setStyleHint(QFont::TypeWriter); +- if (font.fixedPitch()) { ++ ++ QFont font; // default QApplication font ++ font.setStyleHint(QFont::Courier); // may not work ++ if (hasFixedPitch(font)) { + return font; + } +- font.setFamily(QString::fromLatin1("courier")); +- if (font.fixedPitch()) { +- return font; ++ for (const char* family : {"Monospace", "Courier"}) { ++ font.setFamily(QString::fromLatin1(family)); ++ if (hasFixedPitch(font)) { ++ return font; ++ } + } +- return font; // We failed, but return whatever we have anyway ++ return font; + } ++ + } // namespace + + /* TRANSLATOR Gui::Dialog::DlgSettingsEditor */ +@@ -302,7 +309,7 @@ void DlgSettingsEditor::loadSettings() + ui->fontSize->setValue(10); + ui->fontSize->setValue(hGrp->GetInt("FontSize", ui->fontSize->value())); + +- QByteArray defaultMonospaceFont = getMonospaceFont().family().toLatin1(); ++ QByteArray defaultMonospaceFont = QFontInfo(getMonospaceFont()).family().toLatin1(); + + #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + QStringList familyNames = QFontDatabase().families(QFontDatabase::Any); diff --git a/pkgs/by-name/fr/freecad/package.nix b/pkgs/by-name/fr/freecad/package.nix index adb558c7e406..83d7598ce3e0 100644 --- a/pkgs/by-name/fr/freecad/package.nix +++ b/pkgs/by-name/fr/freecad/package.nix @@ -131,6 +131,7 @@ stdenv.mkDerivation (finalAttrs: { patches = [ ./0001-NIXOS-don-t-ignore-PYTHONPATH.patch ./0002-FreeCad-OndselSolver-pkgconfig.patch + ./0003-freecad-font-issue-10514.patch ]; cmakeFlags = [