mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-21 19:51:49 +00:00

Calling realloc() with a size of 0 is implementation dependent and thus should be avoided for portability.
138 lines
3.8 KiB
C++
138 lines
3.8 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
|
|
// Since FreeType2 includes files, which contain forbidden symbols, we need to
|
|
// allow all symbols here.
|
|
#define FORBIDDEN_SYMBOL_ALLOW_ALL
|
|
|
|
#include "common/scummsys.h"
|
|
|
|
#ifdef USE_FREETYPE2
|
|
|
|
#include <ft2build.h>
|
|
#include FT_FREETYPE_H
|
|
#include FT_GLYPH_H
|
|
#include FT_MODULE_H
|
|
|
|
namespace Graphics {
|
|
namespace FreeType {
|
|
|
|
void *Alloc_Callback(FT_Memory memory, long size) {
|
|
return malloc(static_cast<size_t>(size));
|
|
}
|
|
|
|
void Free_Callback(FT_Memory memory, void *block) {
|
|
free(block);
|
|
block = nullptr;
|
|
}
|
|
|
|
void *Realloc_Callback(FT_Memory memory, long cur_size, long new_size, void *block) {
|
|
return realloc(block, static_cast<size_t>(new_size));
|
|
}
|
|
|
|
FT_Error Init_FreeType_With_Mem(FT_Library *alibrary, FT_Memory *amem) {
|
|
// It seems FT_New_Memory isn't part of the public API in 2.10.4
|
|
FT_Memory mem = static_cast<FT_Memory>(malloc(sizeof(FT_MemoryRec_)));
|
|
if (!mem)
|
|
return FT_Err_Out_Of_Memory;
|
|
|
|
mem->alloc = Alloc_Callback;
|
|
mem->free = Free_Callback;
|
|
mem->realloc = Realloc_Callback;
|
|
mem->user = nullptr;
|
|
|
|
FT_Error error = FT_New_Library(mem, alibrary);
|
|
if (!error) {
|
|
FT_Add_Default_Modules(*alibrary);
|
|
*amem = mem;
|
|
}
|
|
|
|
return error;
|
|
}
|
|
|
|
FT_Error Init_FreeType(FT_Library *alibrary) {
|
|
return FT_Init_FreeType(alibrary);
|
|
}
|
|
|
|
FT_Error Done_FreeType(FT_Library library) {
|
|
return FT_Done_FreeType(library);
|
|
}
|
|
|
|
FT_Error Done_FreeType_With_Mem(FT_Library library, FT_Memory mem) {
|
|
FT_Error error = FT_Done_Library(library);
|
|
free(mem);
|
|
return error;
|
|
}
|
|
|
|
FT_Error Load_Glyph(FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags) {
|
|
return FT_Load_Glyph(face, glyph_index, load_flags);
|
|
}
|
|
|
|
FT_Error Get_Glyph(FT_GlyphSlot slot, FT_Glyph *aglyph) {
|
|
return FT_Get_Glyph(slot, aglyph);
|
|
}
|
|
|
|
FT_Error Glyph_Copy(FT_Glyph source, FT_Glyph *target) {
|
|
return FT_Glyph_Copy(source, target);
|
|
}
|
|
|
|
FT_Error Glyph_To_Bitmap(FT_Glyph *the_glyph, FT_Render_Mode render_mode,
|
|
FT_Vector *origin, FT_Bool destroy) {
|
|
return FT_Glyph_To_Bitmap(the_glyph, render_mode, origin, destroy);
|
|
}
|
|
|
|
void Done_Glyph(FT_Glyph glyph) {
|
|
return FT_Done_Glyph(glyph);
|
|
}
|
|
|
|
FT_Error Set_Pixel_Sizes(FT_Face face, FT_UInt pixel_width,
|
|
FT_UInt pixel_height) {
|
|
return FT_Set_Pixel_Sizes(face, pixel_width, pixel_height);
|
|
}
|
|
|
|
FT_Error New_Face(FT_Library library, const char *pathname,
|
|
FT_Long face_index, FT_Face *aface) {
|
|
return FT_New_Face(library, pathname, face_index, aface);
|
|
}
|
|
|
|
FT_Error New_Memory_Face(FT_Library library, const FT_Byte *file_base,
|
|
FT_Long file_size, FT_Long face_index, FT_Face *aface) {
|
|
return FT_New_Memory_Face(library, file_base, file_size, face_index, aface);
|
|
}
|
|
|
|
FT_Error Done_Face(FT_Face face) {
|
|
return FT_Done_Face(face);
|
|
}
|
|
|
|
FT_UInt Get_Char_Index(FT_Face face, FT_ULong charcode) {
|
|
return FT_Get_Char_Index(face, charcode);
|
|
}
|
|
|
|
FT_Error Get_Kerning(FT_Face face, FT_UInt left_glyph,
|
|
FT_UInt right_glyph, FT_UInt kern_mode, FT_Vector *akerning) {
|
|
return FT_Get_Kerning(face, left_glyph, right_glyph, kern_mode, akerning);
|
|
}
|
|
|
|
} // End of namespace FreeType
|
|
} // End of namespace Graphics
|
|
|
|
#endif
|