summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Lutz <michi@icosahedron.de>2021-02-13 17:53:41 +0100
committerMichael Lutz <michi@icosahedron.de>2021-02-13 20:09:14 +0100
commit63ed3f3575ade286782f56c249bcd2478e656adc (patch)
tree01beffaff75adcca5898ea0923abeb1bf27766e7
parentf2294851e6b468ba49b108a26e75b98a63a7c05c (diff)
downloadopenttd-63ed3f3575ade286782f56c249bcd2478e656adc.tar.xz
Codechange: Move Fontconfig-specific code to a seperate file.
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/fontcache.cpp15
-rw-r--r--src/os/unix/CMakeLists.txt5
-rw-r--r--src/os/unix/font_unix.cpp (renamed from src/fontdetection.cpp)67
4 files changed, 39 insertions, 49 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d451ae8da..e0af79999 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -156,7 +156,6 @@ add_files(
fontcache.cpp
fontcache.h
fontcache_internal.h
- fontdetection.cpp
fontdetection.h
framerate_gui.cpp
framerate_type.h
diff --git a/src/fontcache.cpp b/src/fontcache.cpp
index 6cc25154f..6a0b500d8 100644
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -205,7 +205,6 @@ bool SpriteFontCache::GetDrawGlyphShadow()
/* static */ FontCache *FontCache::caches[FS_END] = { new SpriteFontCache(FS_NORMAL), new SpriteFontCache(FS_SMALL), new SpriteFontCache(FS_LARGE), new SpriteFontCache(FS_MONO) };
-#if defined(WITH_FREETYPE) || defined(_WIN32)
/**
* Create a new TrueTypeFontCache.
@@ -678,13 +677,8 @@ const void *FreeTypeFontCache::InternalGetFontTable(uint32 tag, size_t &length)
return result;
}
-#elif defined(_WIN32)
-
-
-
#endif /* WITH_FREETYPE */
-#endif /* defined(WITH_FREETYPE) || defined(_WIN32) */
/**
* (Re)initialize the freetype related things, i.e. load the non-sprite fonts.
@@ -722,3 +716,12 @@ void UninitFreeType()
_library = nullptr;
#endif /* WITH_FREETYPE */
}
+
+#if !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG)
+
+#ifdef WITH_FREETYPE
+FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) { return FT_Err_Cannot_Open_Resource; }
+#endif /* WITH_FREETYPE */
+
+bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, MissingGlyphSearcher *callback) { return false; }
+#endif /* !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) */
diff --git a/src/os/unix/CMakeLists.txt b/src/os/unix/CMakeLists.txt
index b548d3bb2..8e74f9664 100644
--- a/src/os/unix/CMakeLists.txt
+++ b/src/os/unix/CMakeLists.txt
@@ -7,3 +7,8 @@ add_files(
unix.cpp
CONDITION UNIX AND NOT OPTION_OS2
)
+
+add_files(
+ font_unix.cpp
+ CONDITION Fontconfig_FOUND
+)
diff --git a/src/fontdetection.cpp b/src/os/unix/font_unix.cpp
index 50bd274ed..b607db8f8 100644
--- a/src/fontdetection.cpp
+++ b/src/os/unix/font_unix.cpp
@@ -5,34 +5,26 @@
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
-/** @file fontdetection.cpp Detection of the right font. */
+/** @file font_unix.cpp Functions related to font handling on Unix/Fontconfig. */
-#if defined(WITH_FREETYPE) || defined(_WIN32)
+#include "../../stdafx.h"
+#include "../../debug.h"
+#include "../../fontdetection.h"
+#include "../../string_func.h"
+#include "../../strings_func.h"
-#include "stdafx.h"
-#include "debug.h"
-#include "fontdetection.h"
-#include "string_func.h"
-#include "strings_func.h"
+#include <fontconfig/fontconfig.h>
-#ifdef WITH_FREETYPE
-extern FT_Library _library;
-#endif /* WITH_FREETYPE */
+#include "safeguards.h"
-/**
- * Get the font loaded into a Freetype face by using a font-name.
- * If no appropriate font is found, the function returns an error
- */
+#ifdef WITH_FREETYPE
-#if defined(WITH_FONTCONFIG) /* end ifdef __APPLE__ */
+#include <ft2build.h>
+#include FT_FREETYPE_H
-#include <fontconfig/fontconfig.h>
+extern FT_Library _library;
-#include "safeguards.h"
-/* ========================================================================================
- * FontConfig (unix) support
- * ======================================================================================== */
FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
{
FT_Error err = FT_Err_Cannot_Open_Resource;
@@ -57,8 +49,8 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
}
/* Resolve the name and populate the information structure */
- pat = FcNameParse((FcChar8*)font_family);
- if (font_style != nullptr) FcPatternAddString(pat, FC_STYLE, (FcChar8*)font_style);
+ pat = FcNameParse((FcChar8 *)font_family);
+ if (font_style != nullptr) FcPatternAddString(pat, FC_STYLE, (FcChar8 *)font_style);
FcConfigSubstitute(0, pat, FcMatchPattern);
FcDefaultSubstitute(pat);
fs = FcFontSetCreate();
@@ -73,17 +65,17 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
for (i = 0; err != FT_Err_Ok && i < fs->nfont; i++) {
/* Try the new filename */
- if (FcPatternGetString(fs->fonts[i], FC_FILE, 0, &file) == FcResultMatch &&
- FcPatternGetString(fs->fonts[i], FC_FAMILY, 0, &family) == FcResultMatch &&
- FcPatternGetString(fs->fonts[i], FC_STYLE, 0, &style) == FcResultMatch) {
+ if (FcPatternGetString(fs->fonts[i], FC_FILE, 0, &file) == FcResultMatch &&
+ FcPatternGetString(fs->fonts[i], FC_FAMILY, 0, &family) == FcResultMatch &&
+ FcPatternGetString(fs->fonts[i], FC_STYLE, 0, &style) == FcResultMatch) {
/* The correct style? */
- if (font_style != nullptr && strcasecmp(font_style, (char*)style) != 0) continue;
+ if (font_style != nullptr && strcasecmp(font_style, (char *)style) != 0) continue;
/* Font config takes the best shot, which, if the family name is spelled
* wrongly a 'random' font, so check whether the family name is the
* same as the supplied name */
- if (strcasecmp(font_family, (char*)family) == 0) {
+ if (strcasecmp(font_family, (char *)family) == 0) {
err = FT_New_Face(_library, (char *)file, 0, face);
}
}
@@ -99,6 +91,9 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
return err;
}
+#endif /* WITH_FREETYPE */
+
+
bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, MissingGlyphSearcher *callback)
{
if (!FcInit()) return false;
@@ -114,7 +109,7 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
if (split != nullptr) *split = '\0';
/* First create a pattern to match the wanted language. */
- FcPattern *pat = FcNameParse((FcChar8*)lang);
+ FcPattern *pat = FcNameParse((FcChar8 *)lang);
/* We only want to know the filename. */
FcObjectSet *os = FcObjectSetBuild(FC_FILE, FC_SPACING, FC_SLANT, FC_WEIGHT, nullptr);
/* Get the list of filenames matching the wanted language. */
@@ -150,14 +145,14 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
FcPatternGetInteger(font, FC_WEIGHT, 0, &value);
if (value <= best_weight) continue;
- callback->SetFontNames(settings, (const char*)file);
+ callback->SetFontNames(settings, (const char *)file);
bool missing = callback->FindMissingGlyphs();
DEBUG(freetype, 1, "Font \"%s\" misses%s glyphs", file, missing ? "" : " no");
if (!missing) {
best_weight = value;
- best_font = (const char *)file;
+ best_font = (const char *)file;
}
}
@@ -174,15 +169,3 @@ bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, i
FcFini();
return ret;
}
-#endif /* end ifdef WITH_FONTCONFIG */
-
-#if !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG)
-
-#ifdef WITH_FREETYPE
-FT_Error GetFontByFaceName(const char *font_name, FT_Face *face) {return FT_Err_Cannot_Open_Resource;}
-#endif /* WITH_FREETYPE */
-
-bool SetFallbackFont(FreeTypeSettings *settings, const char *language_isocode, int winlangid, MissingGlyphSearcher *callback) { return false; }
-#endif /* !defined(_WIN32) && !defined(__APPLE__) && !defined(WITH_FONTCONFIG) */
-
-#endif /* WITH_FREETYPE */