Lagrange [release]
Text: Workaround for glyph rasterization problem with older SDL versions
[1mdiff --git a/src/ui/text.c b/src/ui/text.c[m [1mindex 7143a4dc..dd5c5e4c 100644[m [1m--- a/src/ui/text.c[m [1m+++ b/src/ui/text.c[m [36m@@ -41,8 +41,17 @@[m [mSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */[m [m #include[m #include [m [32m+[m[32m#include [m #include [m [m [32m+[m[32m#if SDL_VERSION_ATLEAST(2, 0, 10)[m [32m+[m[32m# define LAGRANGE_RASTER_DEPTH 8[m [32m+[m[32m# define LAGRANGE_RASTER_FORMAT SDL_PIXELFORMAT_INDEX8[m [32m+[m[32m#else[m [32m+[m[32m# define LAGRANGE_RASTER_DEPTH 32[m [32m+[m[32m# define LAGRANGE_RASTER_FORMAT SDL_PIXELFORMAT_RGBA8888[m [32m+[m[32m#endif[m [32m+[m iDeclareType(Font)[m iDeclareType(Glyph)[m iDeclareTypeConstructionArgs(Glyph, iChar ch)[m [36m@@ -475,7 +484,15 @@[m [mstatic SDL_Surface *rasterizeGlyph_Font_(const iFont *d, uint32_t glyphIndex, fl[m SDL_Surface *surface8 =[m SDL_CreateRGBSurfaceWithFormatFrom(bmp, w, h, 8, w, SDL_PIXELFORMAT_INDEX8);[m SDL_SetSurfacePalette(surface8, text_.grayscale);[m [32m+[m[32m#if LAGRANGE_RASTER_DEPTH != 8[m [32m+[m[32m /* Convert to the cache format. */[m [32m+[m[32m SDL_Surface *surf = SDL_ConvertSurfaceFormat(surface8, LAGRANGE_RASTER_FORMAT, 0);[m [32m+[m[32m free(bmp);[m [32m+[m[32m SDL_FreeSurface(surface8);[m [32m+[m[32m return surf;[m [32m+[m[32m#else[m return surface8;[m [32m+[m[32m#endif[m }[m [m #if 0[m [36m@@ -710,7 +727,9 @@[m [mvoid cacheTextGlyphs_Font_(iFont *d, const iRangecc text) {[m if (buf == NULL) {[m rasters = new_Array(sizeof(iRasterGlyph));[m buf = SDL_CreateRGBSurfaceWithFormat([m [31m- 0, bufSize.x, bufSize.y, 8, SDL_PIXELFORMAT_INDEX8);[m [32m+[m[32m 0, bufSize.x, bufSize.y,[m [32m+[m[32m LAGRANGE_RASTER_DEPTH,[m [32m+[m[32m LAGRANGE_RASTER_FORMAT);[m SDL_SetSurfacePalette(buf, text_.grayscale);[m }[m SDL_Surface *surfaces[2] = {[m [36m@@ -741,7 +760,9 @@[m [mvoid cacheTextGlyphs_Font_(iFont *d, const iRangecc text) {[m }[m iForIndices(i, surfaces) {[m if (surfaces[i]) {[m [31m- free(surfaces[i]->pixels);[m [32m+[m[32m if (surfaces[i]->flags & SDL_PREALLOC) {[m [32m+[m[32m free(surfaces[i]->pixels);[m [32m+[m[32m }[m SDL_FreeSurface(surfaces[i]);[m }[m }[m