summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-03-31 08:53:28 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-03-31 14:46:52 +0300
commit7bc7a015dfd0d2cc0243114c6bd1379de6461b01 (patch)
tree8651e8427202c23af7272f6f5207e4c761349678 /src
parent1653421a5fa57a430bc35e1d029c8252e2b19d5f (diff)
Text: Workaround for glyph rasterization problem with older SDL versions
Diffstat (limited to 'src')
-rw-r--r--src/ui/text.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/ui/text.c b/src/ui/text.c
index b581aee3..325a201f 100644
--- a/src/ui/text.c
+++ b/src/ui/text.c
@@ -41,8 +41,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
41 41
42#include <SDL_surface.h> 42#include <SDL_surface.h>
43#include <SDL_hints.h> 43#include <SDL_hints.h>
44#include <SDL_version.h>
44#include <stdarg.h> 45#include <stdarg.h>
45 46
47#if SDL_VERSION_ATLEAST(2, 0, 10)
48# define LAGRANGE_RASTER_DEPTH 8
49# define LAGRANGE_RASTER_FORMAT SDL_PIXELFORMAT_INDEX8
50#else
51# define LAGRANGE_RASTER_DEPTH 32
52# define LAGRANGE_RASTER_FORMAT SDL_PIXELFORMAT_RGBA8888
53#endif
54
46iDeclareType(Font) 55iDeclareType(Font)
47iDeclareType(Glyph) 56iDeclareType(Glyph)
48iDeclareTypeConstructionArgs(Glyph, iChar ch) 57iDeclareTypeConstructionArgs(Glyph, iChar ch)
@@ -473,7 +482,15 @@ static SDL_Surface *rasterizeGlyph_Font_(const iFont *d, uint32_t glyphIndex, fl
473 SDL_Surface *surface8 = 482 SDL_Surface *surface8 =
474 SDL_CreateRGBSurfaceWithFormatFrom(bmp, w, h, 8, w, SDL_PIXELFORMAT_INDEX8); 483 SDL_CreateRGBSurfaceWithFormatFrom(bmp, w, h, 8, w, SDL_PIXELFORMAT_INDEX8);
475 SDL_SetSurfacePalette(surface8, text_.grayscale); 484 SDL_SetSurfacePalette(surface8, text_.grayscale);
485#if LAGRANGE_RASTER_DEPTH != 8
486 /* Convert to the cache format. */
487 SDL_Surface *surf = SDL_ConvertSurfaceFormat(surface8, LAGRANGE_RASTER_FORMAT, 0);
488 free(bmp);
489 SDL_FreeSurface(surface8);
490 return surf;
491#else
476 return surface8; 492 return surface8;
493#endif
477} 494}
478 495
479#if 0 496#if 0
@@ -708,7 +725,9 @@ void cacheTextGlyphs_Font_(iFont *d, const iRangecc text) {
708 if (buf == NULL) { 725 if (buf == NULL) {
709 rasters = new_Array(sizeof(iRasterGlyph)); 726 rasters = new_Array(sizeof(iRasterGlyph));
710 buf = SDL_CreateRGBSurfaceWithFormat( 727 buf = SDL_CreateRGBSurfaceWithFormat(
711 0, bufSize.x, bufSize.y, 8, SDL_PIXELFORMAT_INDEX8); 728 0, bufSize.x, bufSize.y,
729 LAGRANGE_RASTER_DEPTH,
730 LAGRANGE_RASTER_FORMAT);
712 SDL_SetSurfacePalette(buf, text_.grayscale); 731 SDL_SetSurfacePalette(buf, text_.grayscale);
713 } 732 }
714 SDL_Surface *surfaces[2] = { 733 SDL_Surface *surfaces[2] = {
@@ -739,7 +758,9 @@ void cacheTextGlyphs_Font_(iFont *d, const iRangecc text) {
739 } 758 }
740 iForIndices(i, surfaces) { 759 iForIndices(i, surfaces) {
741 if (surfaces[i]) { 760 if (surfaces[i]) {
742 free(surfaces[i]->pixels); 761 if (surfaces[i]->flags & SDL_PREALLOC) {
762 free(surfaces[i]->pixels);
763 }
743 SDL_FreeSurface(surfaces[i]); 764 SDL_FreeSurface(surfaces[i]);
744 } 765 }
745 } 766 }