From 901b568f1b7c479af250d5b7727cd22aeb2f2f29 Mon Sep 17 00:00:00 2001 From: "Ying Ruei Liang (KK)" Date: Tue, 1 Sep 2015 09:00:01 +0800 Subject: [PATCH] Add port and test for SDL2_ttf --- AUTHORS | 2 +- embuilder.py | 3 +++ src/settings.js | 1 + tests/sdl2_ttf.c | 42 +++++++++++++++++++++++++++++++++++ tests/sdl2_ttf.png | Bin 0 -> 8057 bytes tests/test_browser.py | 6 +++++ tests/test_sanity.py | 1 + tools/ports/__init__.py | 4 ++-- tools/ports/sdl_ttf.py | 48 ++++++++++++++++++++++++++++++++++++++++ 9 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 tests/sdl2_ttf.c create mode 100644 tests/sdl2_ttf.png create mode 100644 tools/ports/sdl_ttf.py diff --git a/AUTHORS b/AUTHORS index 0a359cc6f03e..27be05d28b25 100644 --- a/AUTHORS +++ b/AUTHORS @@ -204,4 +204,4 @@ a license to everyone to use it as detailed in LICENSE.) * Kagami Hiiragi * Jan Bölsche * Sebastian Matthes (copyright owned by Volkswagen AG) - +* Ying-Ruei Liang diff --git a/embuilder.py b/embuilder.py index 8e7280bbc9e4..9a0477620ba7 100755 --- a/embuilder.py +++ b/embuilder.py @@ -41,6 +41,7 @@ ogg sdl2 sdl2-image + sdl2-ttf vorbis zlib @@ -151,6 +152,8 @@ def build_port(port_name, lib_name, params): build_port('sdl2-image', 'libsdl2_image.bc', ['-s', 'USE_SDL=2', '-s', 'USE_SDL_IMAGE=2']) elif what == 'freetype': build_port('freetype', 'libfreetype.a', ['-s', 'USE_FREETYPE=1']) + elif what == 'sdl2-ttf': + build_port('sdl2-ttf', 'libsdl2_ttf.bc', ['-s', 'USE_SDL=2', '-s', 'USE_SDL_TTF=2', '-s', 'USE_FREETYPE=1']) else: shared.logging.error('unfamiliar build target: ' + what) sys.exit(1) diff --git a/src/settings.js b/src/settings.js index 068852f458ae..0a17872dc19d 100644 --- a/src/settings.js +++ b/src/settings.js @@ -568,6 +568,7 @@ var USE_SDL = 1; // Specify the SDL version that is being linked against. // 1, the default, is 1.3, which is implemented in JS // 2 is a port of the SDL C code on emscripten-ports var USE_SDL_IMAGE = 1; // Specify the SDL_image version that is being linked against. Must match USE_SDL +var USE_SDL_TTF = 1; // Specify the SDL_ttf version that is being linked against. Must match USE_SDL var USE_ZLIB = 0; // 1 = use zlib from emscripten-ports var USE_LIBPNG = 0; // 1 = use libpng from emscripten-ports var USE_BULLET = 0; // 1 = use bullet from emscripten-ports diff --git a/tests/sdl2_ttf.c b/tests/sdl2_ttf.c new file mode 100644 index 000000000000..a8e6aecf61fe --- /dev/null +++ b/tests/sdl2_ttf.c @@ -0,0 +1,42 @@ +#include +#include +#include +#include + +SDL_Window *window; +SDL_Renderer *renderer; +TTF_Font *font; + +void frame() +{ + static SDL_Color colorA = { 0xff, 0x99, 0x00, 0xff }; + static SDL_Color colorB = { 0x11, 0xff, 0xff, 0xff }; + static SDL_Rect upperRect = {0, 0, 600, 200}; + static SDL_Rect lowerRect = {0, 200, 600, 200}; + + SDL_Surface *helloSurface = TTF_RenderText_Shaded(font, "hello", colorA, colorB); + SDL_Surface *worldSurface = TTF_RenderText_Shaded(font, "world", colorB, colorA); + SDL_Texture *helloTexture = SDL_CreateTextureFromSurface(renderer, helloSurface); + SDL_Texture *worldTexture = SDL_CreateTextureFromSurface(renderer, worldSurface); + + SDL_SetRenderDrawColor(renderer, 0xcc, 0xcc, 0xcc, 0xff); + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, helloTexture, NULL, &upperRect); + SDL_RenderCopy(renderer, worldTexture, NULL, &lowerRect); + SDL_RenderPresent(renderer); + + SDL_FreeSurface(helloSurface); + SDL_FreeSurface(worldSurface); + SDL_DestroyTexture(helloTexture); + SDL_DestroyTexture(worldTexture); +} + +int main() +{ + SDL_Init(SDL_INIT_VIDEO); + TTF_Init(); + window = SDL_CreateWindow("test", 0, 0, 640, 480, SDL_WINDOW_SHOWN); + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + font = TTF_OpenFont("LiberationSansBold.ttf", 40); + emscripten_set_main_loop(frame, -1, 1); +} diff --git a/tests/sdl2_ttf.png b/tests/sdl2_ttf.png new file mode 100644 index 0000000000000000000000000000000000000000..952d8b3826b4a1150ecb37e938b6ffdd5d3a57c0 GIT binary patch literal 8057 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