Files
BluTac10-Xbox_Neo/Minecraft.Client/Common/UI/UITTFFont.cpp
Fireblade 0ed96f1592 fix: resolve merge conflicts and integrate XML locale updates (#1)
Resolve merge conflicts across multiple components
Merge and synchronize XML locale changes
Ensure consistency between string resources and localization files
Minor fixes to restore successful builds after merge
2026-04-11 02:47:59 +03:00

79 lines
2.1 KiB
C++

#include "stdafx.h"
#include "UI.h"
#include "../../../Minecraft.World/StringHelpers.h"
#include "../../../Minecraft.World/File.h"
#include "UITTFFont.h"
UITTFFont::UITTFFont(const string &name, const string &path, S32 fallbackCharacter, bool registerAsDefaultFonts)
: m_strFontName(name),
pbData(nullptr),
m_loaded(false) // check if loaded
{
app.DebugPrintf("UITTFFont opening %s\n",path.c_str());
#ifdef _UNICODE
wstring wPath = convStringToWstring(path);
HANDLE file = CreateFile(wPath.c_str(), GENERIC_READ, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
#else
HANDLE file = CreateFile(path.c_str(), GENERIC_READ, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
#endif
if( file == INVALID_HANDLE_VALUE )
{
DWORD error = GetLastError();
app.DebugPrintf("Failed to open TTF file with error code %d (%x)\n", error, error);
return; // Fireblade - replaced assert to avoid crashing if font fails to load
}
DWORD dwHigh=0;
DWORD dwFileSize = GetFileSize(file,&dwHigh);
if(dwFileSize!=0)
{
DWORD bytesRead;
pbData = (PBYTE) new BYTE[dwFileSize];
BOOL bSuccess = ReadFile(file,pbData,dwFileSize,&bytesRead,nullptr);
if(bSuccess==FALSE)
{
delete[] pbData; // Fireblade - avoid memory leaks (hopefully)
pbData = nullptr;
CloseHandle(file);
app.FatalLoadError();
return; // Fireblade - return early in case of error
}
CloseHandle(file);
IggyFontInstallTruetypeUTF8 ( (void *)pbData, IGGY_TTC_INDEX_none, m_strFontName.c_str(), -1, IGGY_FONTFLAG_none );
IggyFontInstallTruetypeFallbackCodepointUTF8( m_strFontName.c_str(), -1, IGGY_FONTFLAG_none, fallbackCharacter );
if (registerAsDefaultFonts)
{
// 4J Stu - These are so we can use the default flash controls
IggyFontInstallTruetypeUTF8 ( (void *)pbData, IGGY_TTC_INDEX_none, "Times New Roman", -1, IGGY_FONTFLAG_none );
IggyFontInstallTruetypeUTF8 ( (void *)pbData, IGGY_TTC_INDEX_none, "Arial", -1, IGGY_FONTFLAG_none );
}
m_loaded = true;
}
else
{
CloseHandle(file);
}
}
UITTFFont::~UITTFFont()
{
delete[] pbData;
}
string UITTFFont::getFontName()
{
return m_strFontName;
}
bool UITTFFont::isLoaded() const
{
return m_loaded;
}