Browse Source

Fully remove bitmap font support (#11863)

Freetype is now a build requirement.
sfan5 2 years ago
parent
commit
76dbd0d2d0
50 changed files with 71 additions and 319 deletions
  1. 0 23
      .github/workflows/build.yml
  2. 8 10
      README.md
  3. 0 1
      android/native/jni/Android.mk
  4. 3 13
      builtin/settingtypes.txt
  5. 0 1
      doc/Doxyfile.in
  6. BIN
      fonts/mono_dejavu_sans_10.xml
  7. BIN
      fonts/mono_dejavu_sans_100.png
  8. BIN
      fonts/mono_dejavu_sans_11.xml
  9. BIN
      fonts/mono_dejavu_sans_110.png
  10. BIN
      fonts/mono_dejavu_sans_12.xml
  11. BIN
      fonts/mono_dejavu_sans_120.png
  12. BIN
      fonts/mono_dejavu_sans_14.xml
  13. BIN
      fonts/mono_dejavu_sans_140.png
  14. BIN
      fonts/mono_dejavu_sans_16.xml
  15. BIN
      fonts/mono_dejavu_sans_160.png
  16. BIN
      fonts/mono_dejavu_sans_18.xml
  17. BIN
      fonts/mono_dejavu_sans_180.png
  18. BIN
      fonts/mono_dejavu_sans_20.xml
  19. BIN
      fonts/mono_dejavu_sans_200.png
  20. BIN
      fonts/mono_dejavu_sans_22.xml
  21. BIN
      fonts/mono_dejavu_sans_220.png
  22. BIN
      fonts/mono_dejavu_sans_24.xml
  23. BIN
      fonts/mono_dejavu_sans_240.png
  24. BIN
      fonts/mono_dejavu_sans_26.xml
  25. BIN
      fonts/mono_dejavu_sans_260.png
  26. BIN
      fonts/mono_dejavu_sans_28.xml
  27. BIN
      fonts/mono_dejavu_sans_280.png
  28. BIN
      fonts/mono_dejavu_sans_4.xml
  29. BIN
      fonts/mono_dejavu_sans_40.png
  30. BIN
      fonts/mono_dejavu_sans_6.xml
  31. BIN
      fonts/mono_dejavu_sans_60.png
  32. BIN
      fonts/mono_dejavu_sans_8.xml
  33. BIN
      fonts/mono_dejavu_sans_80.png
  34. BIN
      fonts/mono_dejavu_sans_9.xml
  35. BIN
      fonts/mono_dejavu_sans_90.png
  36. 16 33
      src/CMakeLists.txt
  37. 20 133
      src/client/fontengine.cpp
  38. 2 7
      src/client/fontengine.h
  39. 0 1
      src/cmake_config.h.in
  40. 0 1
      src/constants.h
  41. 1 10
      src/defaultsettings.cpp
  42. 4 10
      src/gui/guiChatConsole.cpp
  43. 8 15
      src/gui/guiHyperText.cpp
  44. 6 5
      src/gui/guiHyperText.h
  45. 1 6
      src/irrlicht_changes/CMakeLists.txt
  46. 2 11
      src/irrlicht_changes/static_text.cpp
  47. 0 36
      src/irrlicht_changes/static_text.h
  48. 0 1
      src/version.cpp
  49. 0 1
      util/buildbot/buildwin32.sh
  50. 0 1
      util/buildbot/buildwin64.sh

+ 0 - 23
.github/workflows/build.yml

@@ -150,29 +150,6 @@ jobs:
         run: |
           ./bin/minetestserver --run-unittests
 
-  # Build without freetype (client-only)
-  clang_9_no_freetype:
-    name: "clang_9 (FREETYPE=0)"
-    runs-on: ubuntu-18.04
-    steps:
-      - uses: actions/checkout@v2
-      - name: Install deps
-        run: |
-          source ./util/ci/common.sh
-          install_linux_deps clang-9
-
-      - name: Build
-        run: |
-          ./util/ci/build.sh
-        env:
-          CC: clang-9
-          CXX: clang++-9
-          CMAKE_FLAGS: "-DENABLE_FREETYPE=0 -DBUILD_SERVER=0"
-
-      - name: Test
-        run: |
-          ./bin/minetest --run-unittests
-
   docker:
     name: "Docker image"
     runs-on: ubuntu-18.04

+ 8 - 10
README.md

@@ -135,7 +135,8 @@ Compiling
 | GCC        | 4.9+    | Can be replaced with Clang 3.4+ |
 | CMake      | 3.5+    |            |
 | IrrlichtMt | -       | Custom version of Irrlicht, see https://github.com/minetest/irrlicht |
-| SQLite3    | 3.0+    |            |
+| Freetype   | 2.0+    |            |
+| SQLite3    | 3+      |            |
 | Zstd       | 1.0+    |            |
 | LuaJIT     | 2.0+    | Bundled Lua 5.1 is used if not present |
 | GMP        | 5.0.0+  | Bundled mini-GMP is used if not present |
@@ -143,7 +144,7 @@ Compiling
 
 For Debian/Ubuntu users:
 
-    sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev
+    sudo apt install g++ make libc6-dev cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev libluajit-5.1-dev
 
 For Fedora users:
 
@@ -247,7 +248,6 @@ General options and their default values:
         MinSizeRel             - Release build with -Os passed to compiler to make executable as small as possible
     ENABLE_CURL=ON             - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http
     ENABLE_CURSES=ON           - Build with (n)curses; Enables a server side terminal (command line option: --terminal)
-    ENABLE_FREETYPE=ON         - Build with FreeType2; Allows using TTF fonts
     ENABLE_GETTEXT=ON          - Build with Gettext; Allows using translations
     ENABLE_GLES=OFF            - Build for OpenGL ES instead of OpenGL (requires support by IrrlichtMt)
     ENABLE_LEVELDB=ON          - Build with LevelDB; Enables use of LevelDB map backend
@@ -273,10 +273,10 @@ Library specific options:
     EGL_INCLUDE_DIR                 - Only if building with GLES; directory that contains egl.h
     EGL_LIBRARY                     - Only if building with GLES; path to libEGL.a/libEGL.so
     EXTRA_DLL                       - Only on Windows; optional paths to additional DLLs that should be packaged
-    FREETYPE_INCLUDE_DIR_freetype2  - Only if building with FreeType 2; directory that contains an freetype directory with files such as ftimage.h in it
-    FREETYPE_INCLUDE_DIR_ft2build   - Only if building with FreeType 2; directory that contains ft2build.h
-    FREETYPE_LIBRARY                - Only if building with FreeType 2; path to libfreetype.a/libfreetype.so/freetype.lib
-    FREETYPE_DLL                    - Only if building with FreeType 2 on Windows; path to libfreetype.dll
+    FREETYPE_INCLUDE_DIR_freetype2  - Directory that contains files such as ftimage.h
+    FREETYPE_INCLUDE_DIR_ft2build   - Directory that contains ft2build.h
+    FREETYPE_LIBRARY                - Path to libfreetype.a/libfreetype.so/freetype.lib
+    FREETYPE_DLL                    - Only on Windows; path to libfreetype-6.dll
     GETTEXT_DLL                     - Only when building with gettext on Windows; paths to libintl + libiconv DLLs
     GETTEXT_INCLUDE_DIR             - Only when building with gettext; directory that contains iconv.h
     GETTEXT_LIBRARY                 - Only when building with gettext on Windows; path to libintl.dll.a
@@ -337,7 +337,6 @@ vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo
 - **Don't forget about IrrlichtMt.** The easiest way is to clone it to `lib/irrlichtmt` as described in the Linux section.
 - `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store.
 - `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound.
-- `freetype` is optional, it allows true-type font rendering.
 - `luajit` is optional, it replaces the integrated Lua interpreter with a faster just-in-time interpreter.
 - `gmp` and `jsoncpp` are optional, otherwise the bundled versions will be compiled
 
@@ -429,8 +428,7 @@ cmake .. \
     -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \
     -DCMAKE_FIND_FRAMEWORK=LAST \
     -DCMAKE_INSTALL_PREFIX=../build/macos/ \
-    -DRUN_IN_PLACE=FALSE \
-    -DENABLE_FREETYPE=TRUE -DENABLE_GETTEXT=TRUE
+    -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE
 
 make -j$(nproc)
 make install

+ 0 - 1
android/native/jni/Android.mk

@@ -91,7 +91,6 @@ LOCAL_CFLAGS += \
 	-DENABLE_GLES=1                 \
 	-DUSE_CURL=1                    \
 	-DUSE_SOUND=1                   \
-	-DUSE_FREETYPE=1                \
 	-DUSE_LEVELDB=0                 \
 	-DUSE_LUAJIT=1                  \
 	-DUSE_GETTEXT=1                 \

+ 3 - 13
builtin/settingtypes.txt

@@ -886,10 +886,6 @@ tooltip_show_delay (Tooltip delay) int 400
 #    Append item name to tooltip.
 tooltip_append_itemname (Append item name) bool false
 
-#    Whether FreeType fonts are used, requires FreeType support to be compiled in.
-#    If disabled, bitmap and XML vectors fonts are used instead.
-freetype (FreeType fonts) bool true
-
 font_bold (Font bold by default) bool false
 
 font_italic (Font italic by default) bool false
@@ -909,9 +905,7 @@ font_size (Font size) int 16 1
 #    sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
 font_size_divisible_by (Font size divisible by) int 1 1
 
-#    Path to the default font.
-#    If “freetype” setting is enabled: Must be a TrueType font.
-#    If “freetype” setting is disabled: Must be a bitmap or XML vectors font.
+#    Path to the default font. Must be a TrueType font.
 #    The fallback font will be used if the font cannot be loaded.
 font_path (Regular font path) filepath fonts/Arimo-Regular.ttf
 
@@ -928,9 +922,7 @@ mono_font_size (Monospace font size) int 16 1
 #    sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
 mono_font_size_divisible_by (Monospace font size divisible by) int 1 1
 
-#    Path to the monospace font.
-#    If “freetype” setting is enabled: Must be a TrueType font.
-#    If “freetype” setting is disabled: Must be a bitmap or XML vectors font.
+#    Path to the monospace font. Must be a TrueType font.
 #    This font is used for e.g. the console and profiler screen.
 mono_font_path (Monospace font path) filepath fonts/Cousine-Regular.ttf
 
@@ -938,9 +930,7 @@ mono_font_path_bold (Bold monospace font path) filepath fonts/Cousine-Bold.ttf
 mono_font_path_italic (Italic monospace font path) filepath fonts/Cousine-Italic.ttf
 mono_font_path_bold_italic (Bold and italic monospace font path) filepath fonts/Cousine-BoldItalic.ttf
 
-#    Path of the fallback font.
-#    If “freetype” setting is enabled: Must be a TrueType font.
-#    If “freetype” setting is disabled: Must be a bitmap or XML vectors font.
+#    Path of the fallback font. Must be a TrueType font.
 #    This font will be used for certain languages or if the default font is unavailable.
 fallback_font_path (Fallback font path) filepath fonts/DroidSansFallbackFull.ttf
 

+ 0 - 1
doc/Doxyfile.in

@@ -16,7 +16,6 @@ PREDEFINED             = "USE_SPATIAL=1" \
 		"USE_REDIS=1" \
 		"USE_SOUND=1" \
 		"USE_CURL=1" \
-		"USE_FREETYPE=1" \
 		"USE_GETTEXT=1"
 
 # Input

BIN
fonts/mono_dejavu_sans_10.xml


BIN
fonts/mono_dejavu_sans_100.png


BIN
fonts/mono_dejavu_sans_11.xml


BIN
fonts/mono_dejavu_sans_110.png


BIN
fonts/mono_dejavu_sans_12.xml


BIN
fonts/mono_dejavu_sans_120.png


BIN
fonts/mono_dejavu_sans_14.xml


BIN
fonts/mono_dejavu_sans_140.png


BIN
fonts/mono_dejavu_sans_16.xml


BIN
fonts/mono_dejavu_sans_160.png


BIN
fonts/mono_dejavu_sans_18.xml


BIN
fonts/mono_dejavu_sans_180.png


BIN
fonts/mono_dejavu_sans_20.xml


BIN
fonts/mono_dejavu_sans_200.png


BIN
fonts/mono_dejavu_sans_22.xml


BIN
fonts/mono_dejavu_sans_220.png


BIN
fonts/mono_dejavu_sans_24.xml


BIN
fonts/mono_dejavu_sans_240.png


BIN
fonts/mono_dejavu_sans_26.xml


BIN
fonts/mono_dejavu_sans_260.png


BIN
fonts/mono_dejavu_sans_28.xml


BIN
fonts/mono_dejavu_sans_280.png


BIN
fonts/mono_dejavu_sans_4.xml


BIN
fonts/mono_dejavu_sans_40.png


BIN
fonts/mono_dejavu_sans_6.xml


BIN
fonts/mono_dejavu_sans_60.png


BIN
fonts/mono_dejavu_sans_8.xml


BIN
fonts/mono_dejavu_sans_80.png


BIN
fonts/mono_dejavu_sans_9.xml


BIN
fonts/mono_dejavu_sans_90.png


+ 16 - 33
src/CMakeLists.txt

@@ -122,16 +122,8 @@ if(BUILD_CLIENT)
 	endif()
 endif()
 
-
-option(ENABLE_FREETYPE "Enable FreeType2 (TrueType fonts and basic unicode support)" TRUE)
-set(USE_FREETYPE FALSE)
-
-if(BUILD_CLIENT AND ENABLE_FREETYPE)
-	find_package(Freetype)
-	if(FREETYPE_FOUND)
-		message(STATUS "Freetype enabled.")
-		set(USE_FREETYPE TRUE)
-	endif()
+if(BUILD_CLIENT)
+	find_package(Freetype REQUIRED)
 endif()
 
 option(ENABLE_CURSES "Enable ncurses console" TRUE)
@@ -495,13 +487,11 @@ include_directories(
 	${PROJECT_SOURCE_DIR}
 	${ZLIB_INCLUDE_DIR}
 	${ZSTD_INCLUDE_DIR}
-	${SOUND_INCLUDE_DIRS}
 	${SQLITE3_INCLUDE_DIR}
 	${LUA_INCLUDE_DIR}
 	${GMP_INCLUDE_DIR}
 	${JSON_INCLUDE_DIR}
 	${LUA_BIT_INCLUDE_DIR}
-	${X11_INCLUDE_DIR}
 	${PROJECT_SOURCE_DIR}/script
 )
 
@@ -509,8 +499,12 @@ if(USE_GETTEXT)
 	include_directories(${GETTEXT_INCLUDE_DIR})
 endif()
 
-if(USE_FREETYPE)
-	include_directories(${FREETYPE_INCLUDE_DIRS})
+if(BUILD_CLIENT)
+	include_directories(
+		${FREETYPE_INCLUDE_DIRS}
+		${SOUND_INCLUDE_DIRS}
+		${X11_INCLUDE_DIR}
+	)
 endif()
 
 if(USE_CURL)
@@ -539,6 +533,7 @@ if(BUILD_CLIENT)
 		${GMP_LIBRARY}
 		${JSON_LIBRARY}
 		${LUA_BIT_LIBRARY}
+		${FREETYPE_LIBRARY}
 		${PLATFORM_LIBS}
 	)
 	if(NOT USE_LUAJIT)
@@ -573,17 +568,11 @@ if(BUILD_CLIENT)
 			${CURL_LIBRARY}
 		)
 	endif()
-	if(USE_FREETYPE)
-		if(FREETYPE_PKGCONFIG_FOUND)
-			set_target_properties(${PROJECT_NAME}
-				PROPERTIES
-				COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}"
-			)
-		endif()
-		target_link_libraries(
-			${PROJECT_NAME}
-			${FREETYPE_LIBRARY}
-		)
+	if(FREETYPE_PKGCONFIG_FOUND)
+		set_target_properties(${PROJECT_NAME}
+			PROPERTIES
+			COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}"
+	)
 	endif()
 	if (USE_CURSES)
 		target_link_libraries(${PROJECT_NAME} ${CURSES_LIBRARIES})
@@ -896,14 +885,8 @@ if(BUILD_CLIENT)
 		endforeach()
 	endif()
 
-	# Install necessary fonts depending on configuration
-	if(USE_FREETYPE)
-		install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
-				FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt")
-	else()
-		install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
-				FILES_MATCHING PATTERN "*.png" PATTERN "*.xml")
-	endif()
+	install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
+			FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt")
 endif(BUILD_CLIENT)
 
 if(BUILD_SERVER)

+ 20 - 133
src/client/fontengine.cpp

@@ -24,10 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "porting.h"
 #include "filesys.h"
 #include "gettext.h"
-
-#if USE_FREETYPE
 #include "irrlicht_changes/CGUITTFont.h"
-#endif
 
 /** maximum size distance for getting a "similar" font size */
 #define MAX_FONT_SIZE_OFFSET 10
@@ -45,9 +42,8 @@ static void font_setting_changed(const std::string &name, void *userdata)
 FontEngine::FontEngine(gui::IGUIEnvironment* env) :
 	m_env(env)
 {
-
 	for (u32 &i : m_default_size) {
-		i = (FontMode) FONT_SIZE_UNSPECIFIED;
+		i = FONT_SIZE_UNSPECIFIED;
 	}
 
 	assert(g_settings != NULL); // pre-condition
@@ -56,25 +52,19 @@ FontEngine::FontEngine(gui::IGUIEnvironment* env) :
 
 	readSettings();
 
-	if (m_currentMode != FM_Simple) {
-		g_settings->registerChangedCallback("font_size", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_bold", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_italic", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_path", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_path_bold", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_path_italic", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_path_bolditalic", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_shadow", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_shadow_alpha", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("font_size_divisible_by", font_setting_changed, NULL);
-		g_settings->registerChangedCallback("fallback_font_path", font_setting_changed, NULL);
-	}
+	const char *settings[] = {
+		"font_size", "font_bold", "font_italic", "font_size_divisible_by",
+		"mono_font_size", "mono_font_size_divisible_by",
+		"font_shadow", "font_shadow_alpha",
+		"font_path", "font_path_bold", "font_path_italic", "font_path_bold_italic",
+		"mono_font_path", "mono_font_path_bold", "mono_font_path_italic",
+		"mono_font_path_bold_italic",
+		"fallback_font_path",
+		"screen_dpi", "gui_scaling",
+	};
 
-	g_settings->registerChangedCallback("mono_font_path", font_setting_changed, NULL);
-	g_settings->registerChangedCallback("mono_font_size", font_setting_changed, NULL);
-	g_settings->registerChangedCallback("mono_font_size_divisible_by", font_setting_changed, NULL);
-	g_settings->registerChangedCallback("screen_dpi", font_setting_changed, NULL);
-	g_settings->registerChangedCallback("gui_scaling", font_setting_changed, NULL);
+	for (auto name : settings)
+		g_settings->registerChangedCallback(name, font_setting_changed, NULL);
 }
 
 /******************************************************************************/
@@ -108,16 +98,8 @@ irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec, bool may_fail)
 {
 	if (spec.mode == FM_Unspecified) {
 		spec.mode = m_currentMode;
-	} else if (m_currentMode == FM_Simple) {
-		// Freetype disabled -> Force simple mode
-		spec.mode = (spec.mode == FM_Mono ||
-				spec.mode == FM_SimpleMono) ?
-				FM_SimpleMono : FM_Simple;
-		// Support for those could be added, but who cares?
-		spec.bold = false;
-		spec.italic = false;
 	} else if (spec.mode == _FM_Fallback) {
-		// Fallback font doesn't support these either
+		// Fallback font doesn't support these
 		spec.bold = false;
 		spec.italic = false;
 	}
@@ -134,11 +116,7 @@ irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec, bool may_fail)
 		return it->second;
 
 	// Font does not yet exist
-	gui::IGUIFont *font = nullptr;
-	if (spec.mode == FM_Simple || spec.mode == FM_SimpleMono)
-		font = initSimpleFont(spec);
-	else
-		font = initFont(spec);
+	gui::IGUIFont *font = initFont(spec);
 
 	if (!font && !may_fail) {
 		errorstream << "Minetest cannot continue without a valid font. "
@@ -185,13 +163,6 @@ unsigned int FontEngine::getDefaultFontSize()
 
 unsigned int FontEngine::getFontSize(FontMode mode)
 {
-	if (m_currentMode == FM_Simple) {
-		if (mode == FM_Mono || mode == FM_SimpleMono)
-			return m_default_size[FM_SimpleMono];
-		else
-			return m_default_size[FM_Simple];
-	}
-
 	if (mode == FM_Unspecified)
 		return m_default_size[FM_Standard];
 
@@ -201,20 +172,12 @@ unsigned int FontEngine::getFontSize(FontMode mode)
 /******************************************************************************/
 void FontEngine::readSettings()
 {
-	if (USE_FREETYPE && g_settings->getBool("freetype")) {
-		m_default_size[FM_Standard]  = g_settings->getU16("font_size");
-		m_default_size[_FM_Fallback] = g_settings->getU16("font_size");
-		m_default_size[FM_Mono]      = g_settings->getU16("mono_font_size");
+	m_default_size[FM_Standard]  = g_settings->getU16("font_size");
+	m_default_size[_FM_Fallback] = g_settings->getU16("font_size");
+	m_default_size[FM_Mono]      = g_settings->getU16("mono_font_size");
 
-		m_default_bold = g_settings->getBool("font_bold");
-		m_default_italic = g_settings->getBool("font_italic");
-
-	} else {
-		m_currentMode = FM_Simple;
-	}
-
-	m_default_size[FM_Simple]       = g_settings->getU16("font_size");
-	m_default_size[FM_SimpleMono]   = g_settings->getU16("mono_font_size");
+	m_default_bold = g_settings->getBool("font_bold");
+	m_default_italic = g_settings->getBool("font_italic");
 
 	cleanCache();
 	updateFontCache();
@@ -283,7 +246,6 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
 		Settings::getLayer(SL_DEFAULTS)->get(path_setting)
 	};
 
-#if USE_FREETYPE
 	for (const std::string &font_path : fallback_settings) {
 		gui::CGUITTFont *font = gui::CGUITTFont::createTTFont(m_env,
 				font_path.c_str(), size, true, true, font_shadow,
@@ -302,80 +264,5 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
 		}
 		return font;
 	}
-#else
-	errorstream << "FontEngine: Tried to load TTF font but Minetest was"
-			" compiled without Freetype." << std::endl;
-#endif
 	return nullptr;
 }
-
-/** initialize a font without freetype */
-gui::IGUIFont *FontEngine::initSimpleFont(const FontSpec &spec)
-{
-	assert(spec.mode == FM_Simple || spec.mode == FM_SimpleMono);
-	assert(spec.size != FONT_SIZE_UNSPECIFIED);
-
-	const std::string &font_path = g_settings->get(
-			(spec.mode == FM_SimpleMono) ? "mono_font_path" : "font_path");
-
-	size_t pos_dot = font_path.find_last_of('.');
-	std::string basename = font_path, ending;
-	if (pos_dot != std::string::npos)
-		ending = lowercase(font_path.substr(pos_dot));
-
-	if (ending == ".ttf") {
-		errorstream << "FontEngine: Found font \"" << font_path
-				<< "\" but freetype is not available." << std::endl;
-		return nullptr;
-	}
-
-	if (ending == ".xml" || ending == ".png")
-		basename = font_path.substr(0, pos_dot);
-
-	u32 size = std::floor(
-			RenderingEngine::getDisplayDensity() *
-			g_settings->getFloat("gui_scaling") *
-			spec.size);
-
-	irr::gui::IGUIFont *font = nullptr;
-	std::string font_extensions[] = { ".png", ".xml" };
-
-	// Find nearest matching font scale
-	// Does a "zig-zag motion" (positibe/negative), from 0 to MAX_FONT_SIZE_OFFSET
-	for (s32 zoffset = 0; zoffset < MAX_FONT_SIZE_OFFSET * 2; zoffset++) {
-		std::stringstream path;
-
-		// LSB to sign
-		s32 sign = (zoffset & 1) ? -1 : 1;
-		s32 offset = zoffset >> 1;
-
-		for (const std::string &ext : font_extensions) {
-			path.str(""); // Clear
-			path << basename << "_" << (size + offset * sign) << ext;
-
-			if (!fs::PathExists(path.str()))
-				continue;
-
-			font = m_env->getFont(path.str().c_str());
-
-			if (font) {
-				verbosestream << "FontEngine: found font: " << path.str() << std::endl;
-				break;
-			}
-		}
-
-		if (font)
-			break;
-	}
-
-	// try name direct
-	if (font == NULL) {
-		if (fs::PathExists(font_path)) {
-			font = m_env->getFont(font_path.c_str());
-			if (font)
-				verbosestream << "FontEngine: found font: " << font_path << std::endl;
-		}
-	}
-
-	return font;
-}

+ 2 - 7
src/client/fontengine.h

@@ -34,8 +34,6 @@ enum FontMode : u8 {
 	FM_Standard = 0,
 	FM_Mono,
 	_FM_Fallback, // do not use directly
-	FM_Simple,
-	FM_SimpleMono,
 	FM_MaxMode,
 	FM_Unspecified
 };
@@ -140,9 +138,6 @@ private:
 	/** initialize a new TTF font */
 	gui::IGUIFont *initFont(const FontSpec &spec);
 
-	/** initialize a font without freetype */
-	gui::IGUIFont *initSimpleFont(const FontSpec &spec);
-
 	/** update current minetest skin with font changes */
 	void updateSkin();
 
@@ -165,8 +160,8 @@ private:
 	bool m_default_bold = false;
 	bool m_default_italic = false;
 
-	/** current font engine mode */
-	FontMode m_currentMode = FM_Standard;
+	/** default font engine mode (fixed) */
+	static const FontMode m_currentMode = FM_Standard;
 
 	DISABLE_CLASS_COPY(FontEngine);
 };

+ 0 - 1
src/cmake_config.h.in

@@ -18,7 +18,6 @@
 #cmakedefine01 USE_GETTEXT
 #cmakedefine01 USE_CURL
 #cmakedefine01 USE_SOUND
-#cmakedefine01 USE_FREETYPE
 #cmakedefine01 USE_CURSES
 #cmakedefine01 USE_LEVELDB
 #cmakedefine01 USE_LUAJIT

+ 0 - 1
src/constants.h

@@ -111,4 +111,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 */
 
 #define TTF_DEFAULT_FONT_SIZE (16)
-#define DEFAULT_FONT_SIZE (10)

+ 1 - 10
src/defaultsettings.cpp

@@ -303,8 +303,7 @@ void set_default_settings()
 	settings->setDefault("main_menu_path", "");
 	settings->setDefault("serverlist_file", "favoriteservers.json");
 
-#if USE_FREETYPE
-	settings->setDefault("freetype", "true");
+	// General font settings
 	settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "Arimo-Regular.ttf"));
 	settings->setDefault("font_path_italic", porting::getDataPath("fonts" DIR_DELIM "Arimo-Italic.ttf"));
 	settings->setDefault("font_path_bold", porting::getDataPath("fonts" DIR_DELIM "Arimo-Bold.ttf"));
@@ -322,14 +321,6 @@ void set_default_settings()
 	settings->setDefault("fallback_font_path", porting::getDataPath("fonts" DIR_DELIM "DroidSansFallbackFull.ttf"));
 
 	std::string font_size_str = std::to_string(TTF_DEFAULT_FONT_SIZE);
-#else
-	settings->setDefault("freetype", "false");
-	settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "mono_dejavu_sans"));
-	settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "mono_dejavu_sans"));
-
-	std::string font_size_str = std::to_string(DEFAULT_FONT_SIZE);
-#endif
-	// General font settings
 	settings->setDefault("font_size", font_size_str);
 	settings->setDefault("mono_font_size", font_size_str);
 	settings->setDefault("chat_font_size", "0"); // Default "font_size"

+ 4 - 10
src/gui/guiChatConsole.cpp

@@ -30,12 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "client/fontengine.h"
 #include "log.h"
 #include "gettext.h"
+#include "irrlicht_changes/CGUITTFont.h"
 #include <string>
 
-#if USE_FREETYPE
-	#include "irrlicht_changes/CGUITTFont.h"
-#endif
-
 inline u32 clamp_u8(s32 value)
 {
 	return (u32) MYMIN(MYMAX(value, 0), 255);
@@ -328,19 +325,16 @@ void GUIChatConsole::drawText()
 			core::rect<s32> destrect(
 				x, y, x + m_fontsize.X * fragment.text.size(), y + m_fontsize.Y);
 
-#if USE_FREETYPE
 			if (m_font->getType() == irr::gui::EGFT_CUSTOM) {
-				// Draw colored text if FreeType is enabled
-				irr::gui::CGUITTFont *tmp = dynamic_cast<irr::gui::CGUITTFont *>(m_font);
+				// Draw colored text if possible
+				gui::CGUITTFont *tmp = static_cast<gui::CGUITTFont*>(m_font);
 				tmp->draw(
 					fragment.text,
 					destrect,
 					false,
 					false,
 					&AbsoluteClippingRect);
-			} else
-#endif
-			{
+			} else {
 				// Otherwise use standard text
 				m_font->draw(
 					fragment.text.c_str(),

+ 8 - 15
src/gui/guiHyperText.cpp

@@ -17,31 +17,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#include "IGUIEnvironment.h"
-#include "IGUIElement.h"
+#include "guiHyperText.h"
 #include "guiScrollBar.h"
-#include "IGUIFont.h"
-#include <vector>
-#include <list>
-#include <unordered_map>
-using namespace irr::gui;
 #include "client/fontengine.h"
-#include <SColor.h>
 #include "client/tile.h"
 #include "IVideoDriver.h"
 #include "client/client.h"
 #include "client/renderingengine.h"
 #include "hud.h"
-#include "guiHyperText.h"
 #include "util/string.h"
+#include "irrlicht_changes/CGUITTFont.h"
 
-bool check_color(const std::string &str)
+using namespace irr::gui;
+
+static bool check_color(const std::string &str)
 {
 	irr::video::SColor color;
 	return parseColorString(str, color, false);
 }
 
-bool check_integer(const std::string &str)
+static bool check_integer(const std::string &str)
 {
 	if (str.empty())
 		return false;
@@ -616,12 +611,10 @@ TextDrawer::TextDrawer(const wchar_t *text, Client *client,
 				if (e.font) {
 					e.dim.Width = e.font->getDimension(e.text.c_str()).Width;
 					e.dim.Height = e.font->getDimension(L"Yy").Height;
-#if USE_FREETYPE
 					if (e.font->getType() == irr::gui::EGFT_CUSTOM) {
-						e.baseline = e.dim.Height - 1 -
-							((irr::gui::CGUITTFont *)e.font)->getAscender() / 64;
+						CGUITTFont *tmp = static_cast<CGUITTFont*>(e.font);
+						e.baseline = e.dim.Height - 1 - tmp->getAscender() / 64;
 					}
-#endif
 				} else {
 					e.dim = {0, 0};
 				}

+ 6 - 5
src/gui/guiHyperText.h

@@ -19,16 +19,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 
 #pragma once
 
-#include "config.h" // for USE_FREETYPE
+#include <vector>
+#include <list>
+#include <unordered_map>
+#include <string>
+#include "irrlichttypes_extrabloated.h"
 
 using namespace irr;
 
 class ISimpleTextureSource;
 class Client;
-
-#if USE_FREETYPE
-#include "irrlicht_changes/CGUITTFont.h"
-#endif
+class GUIScrollBar;
 
 class ParsedText
 {

+ 1 - 6
src/irrlicht_changes/CMakeLists.txt

@@ -1,14 +1,9 @@
 if (BUILD_CLIENT)
 	set(client_irrlicht_changes_SRCS
 		${CMAKE_CURRENT_SOURCE_DIR}/static_text.cpp
+		${CMAKE_CURRENT_SOURCE_DIR}/CGUITTFont.cpp
 	)
 
-	if (USE_FREETYPE)
-		set(client_irrlicht_changes_SRCS ${client_irrlicht_changes_SRCS}
-			${CMAKE_CURRENT_SOURCE_DIR}/CGUITTFont.cpp
-		)
-	endif()
-
 	# CMake require us to set a local scope and then parent scope
 	# Else the last set win in parent scope
 	set(client_irrlicht_changes_SRCS ${client_irrlicht_changes_SRCS} PARENT_SCOPE)

+ 2 - 11
src/irrlicht_changes/static_text.cpp

@@ -12,17 +12,12 @@
 #include <rect.h>
 #include <SColor.h>
 
-#if USE_FREETYPE
-	#include "CGUITTFont.h"
-#endif
-
+#include "CGUITTFont.h"
 #include "util/string.h"
 
 namespace irr
 {
 
-#if USE_FREETYPE
-
 namespace gui
 {
 //! constructor
@@ -108,14 +103,12 @@ void StaticText::draw()
 					font->getDimension(str.c_str()).Width;
 			}
 
-#if USE_FREETYPE
 			if (font->getType() == irr::gui::EGFT_CUSTOM) {
-				irr::gui::CGUITTFont *tmp = static_cast<irr::gui::CGUITTFont*>(font);
+				CGUITTFont *tmp = static_cast<CGUITTFont*>(font);
 				tmp->draw(str,
 					r, HAlign == EGUIA_CENTER, VAlign == EGUIA_CENTER,
 					(RestrainTextInside ? &AbsoluteClippingRect : NULL));
 			} else
-#endif
 			{
 				// Draw non-colored text
 				font->draw(str.c_str(),
@@ -590,8 +583,6 @@ s32 StaticText::getTextWidth() const
 
 } // end namespace gui
 
-#endif // USE_FREETYPE
-
 } // end namespace irr
 
 

+ 0 - 36
src/irrlicht_changes/static_text.h

@@ -20,7 +20,6 @@
 #include "config.h"
 #include <IGUIEnvironment.h>
 
-#if USE_FREETYPE
 
 namespace irr
 {
@@ -230,41 +229,6 @@ inline void setStaticText(irr::gui::IGUIStaticText *static_text, const EnrichedS
 	}
 }
 
-#else // USE_FREETYPE
-
-namespace irr
-{
-namespace gui
-{
-
-class StaticText
-{
-public:
-	static irr::gui::IGUIStaticText *add(
-		irr::gui::IGUIEnvironment *guienv,
-		const EnrichedString &text,
-		const core::rect< s32 > &rectangle,
-		bool border = false,
-		bool wordWrap = true,
-		irr::gui::IGUIElement *parent = NULL,
-		s32 id = -1,
-		bool fillBackground = false)
-	{
-		return guienv->addStaticText(text.c_str(), rectangle, border, wordWrap, parent, id, fillBackground);
-	}
-};
-
-} // end namespace gui
-
-} // end namespace irr
-
-inline void setStaticText(irr::gui::IGUIStaticText *static_text, const EnrichedString &text)
-{
-	static_text->setText(text.c_str());
-}
-
-#endif
-
 inline void setStaticText(irr::gui::IGUIStaticText *static_text, const wchar_t *text)
 {
 	setStaticText(static_text, EnrichedString(text, static_text->getOverrideColor()));

+ 0 - 1
src/version.cpp

@@ -37,7 +37,6 @@ const char *g_build_info =
 #ifndef SERVER
 	"USE_GETTEXT=" STR(USE_GETTEXT) "\n"
 	"USE_SOUND=" STR(USE_SOUND) "\n"
-	"USE_FREETYPE=" STR(USE_FREETYPE) "\n"
 #endif
 	"STATIC_SHAREDIR=" STR(STATIC_SHAREDIR)
 #if USE_GETTEXT && defined(STATIC_LOCALEDIR)

+ 0 - 1
util/buildbot/buildwin32.sh

@@ -129,7 +129,6 @@ cmake -S $sourcedir -B . \
 	-DENABLE_SOUND=1 \
 	-DENABLE_CURL=1 \
 	-DENABLE_GETTEXT=1 \
-	-DENABLE_FREETYPE=1 \
 	-DENABLE_LEVELDB=1 \
 	\
 	-DCMAKE_PREFIX_PATH=$libdir/irrlicht \

+ 0 - 1
util/buildbot/buildwin64.sh

@@ -129,7 +129,6 @@ cmake -S $sourcedir -B . \
 	-DENABLE_SOUND=1 \
 	-DENABLE_CURL=1 \
 	-DENABLE_GETTEXT=1 \
-	-DENABLE_FREETYPE=1 \
 	-DENABLE_LEVELDB=1 \
 	\
 	-DCMAKE_PREFIX_PATH=$libdir/irrlicht \