File Avoid-picking-a-bold-oblique-version-of-Bitstream-Vera-Sans.patch of Package juce6

From c31f3477a81d6fd8b54ef162c007a30db94db649 Mon Sep 17 00:00:00 2001
From: reuk <reuk@users.noreply.github.com>
Date: Wed, 6 Apr 2022 18:10:18 +0100
Subject: [PATCH] Linux:  Avoid picking a bold/oblique version of Bitstream
 Vera Sans by default

---
 .../juce_graphics/native/juce_linux_Fonts.cpp | 85 ++++++++++++-------
 1 file changed, 53 insertions(+), 32 deletions(-)

diff --git a/modules/juce_graphics/native/juce_linux_Fonts.cpp b/modules/juce_graphics/native/juce_linux_Fonts.cpp
index 580a1372deb..77130d556c5 100644
--- a/modules/juce_graphics/native/juce_linux_Fonts.cpp
+++ b/modules/juce_graphics/native/juce_linux_Fonts.cpp
@@ -110,87 +110,108 @@ bool TextLayout::createNativeLayout (const AttributedString&)
 }
 
 //==============================================================================
-struct DefaultFontNames
+struct DefaultFontInfo
 {
-    DefaultFontNames()
-        : defaultSans  (getDefaultSansSerifFontName()),
-          defaultSerif (getDefaultSerifFontName()),
-          defaultFixed (getDefaultMonospacedFontName())
+    struct Characteristics
+    {
+        String name, style;
+    };
+
+    DefaultFontInfo()
+        : defaultSans  (getDefaultSansSerifFontCharacteristics()),
+          defaultSerif (getDefaultSerifFontCharacteristics()),
+          defaultFixed (getDefaultMonospacedFontCharacteristics())
     {
     }
 
-    String getRealFontName (const String& faceName) const
+    Characteristics getRealFontCharacteristics (const String& faceName) const
     {
         if (faceName == Font::getDefaultSansSerifFontName())    return defaultSans;
         if (faceName == Font::getDefaultSerifFontName())        return defaultSerif;
         if (faceName == Font::getDefaultMonospacedFontName())   return defaultFixed;
 
-        return faceName;
+        return { faceName };
     }
 
-    String defaultSans, defaultSerif, defaultFixed;
+    Characteristics defaultSans, defaultSerif, defaultFixed;
 
 private:
-    static String pickBestFont (const StringArray& names, const char* const* choicesArray)
+    template <typename Range>
+    static Characteristics pickBestFont (const StringArray& names, Range&& choicesArray)
     {
-        const StringArray choices (choicesArray);
-
-        for (auto& choice : choices)
-            if (names.contains (choice, true))
+        for (auto& choice : choicesArray)
+            if (names.contains (choice.name, true))
                 return choice;
 
-        for (auto& choice : choices)
+        for (auto& choice : choicesArray)
             for (auto& name : names)
-                if (name.startsWithIgnoreCase (choice))
-                    return name;
+                if (name.startsWithIgnoreCase (choice.name))
+                    return { name, choice.style };
 
-        for (auto& choice : choices)
+        for (auto& choice : choicesArray)
             for (auto& name : names)
-                if (name.containsIgnoreCase (choice))
-                    return name;
+                if (name.containsIgnoreCase (choice.name))
+                    return { name, choice.style };
 
-        return names[0];
+        return { *names.begin() };
     }
 
-    static String getDefaultSansSerifFontName()
+    static Characteristics getDefaultSansSerifFontCharacteristics()
     {
         StringArray allFonts;
         FTTypefaceList::getInstance()->getSansSerifNames (allFonts);
 
-        static const char* targets[] = { "Verdana", "Bitstream Vera Sans", "Luxi Sans",
-                                         "Liberation Sans", "DejaVu Sans", "Sans", nullptr };
+        static const Characteristics targets[] { { "Verdana" },
+                                                 { "Bitstream Vera Sans", "Roman" },
+                                                 { "Luxi Sans" },
+                                                 { "Liberation Sans" },
+                                                 { "DejaVu Sans" },
+                                                 { "Sans" } };
         return pickBestFont (allFonts, targets);
     }
 
-    static String getDefaultSerifFontName()
+    static Characteristics getDefaultSerifFontCharacteristics()
     {
         StringArray allFonts;
         FTTypefaceList::getInstance()->getSerifNames (allFonts);
 
-        static const char* targets[] = { "Bitstream Vera Serif", "Times", "Nimbus Roman",
-                                         "Liberation Serif", "DejaVu Serif", "Serif", nullptr };
+        static const Characteristics targets[] { { "Bitstream Vera Serif", "Roman" },
+                                                 { "Times" },
+                                                 { "Nimbus Roman" },
+                                                 { "Liberation Serif" },
+                                                 { "DejaVu Serif" },
+                                                 { "Serif" } };
         return pickBestFont (allFonts, targets);
     }
 
-    static String getDefaultMonospacedFontName()
+    static Characteristics getDefaultMonospacedFontCharacteristics()
     {
         StringArray allFonts;
         FTTypefaceList::getInstance()->getMonospacedNames (allFonts);
 
-        static const char* targets[] = { "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Sans Mono",
-                                         "Liberation Mono", "Courier", "DejaVu Mono", "Mono", nullptr };
+        static const Characteristics targets[] { { "DejaVu Sans Mono" },
+                                                 { "Bitstream Vera Sans Mono", "Roman" },
+                                                 { "Sans Mono" },
+                                                 { "Liberation Mono" },
+                                                 { "Courier" },
+                                                 { "DejaVu Mono" },
+                                                 { "Mono" } };
         return pickBestFont (allFonts, targets);
     }
 
-    JUCE_DECLARE_NON_COPYABLE (DefaultFontNames)
+    JUCE_DECLARE_NON_COPYABLE (DefaultFontInfo)
 };
 
 Typeface::Ptr Font::getDefaultTypefaceForFont (const Font& font)
 {
-    static DefaultFontNames defaultNames;
+    static const DefaultFontInfo defaultInfo;
 
     Font f (font);
-    f.setTypefaceName (defaultNames.getRealFontName (font.getTypefaceName()));
+
+    const auto characteristics = defaultInfo.getRealFontCharacteristics (font.getTypefaceName());
+    f.setTypefaceName (characteristics.name);
+    f.setTypefaceStyle (characteristics.style);
+
     return Typeface::createSystemTypefaceFor (f);
 }
 
openSUSE Build Service is sponsored by