diff options
-rw-r--r-- | src/library_sdl.js | 33 | ||||
-rwxr-xr-x | tests/runner.py | 2 | ||||
-rw-r--r-- | tests/sdl_canvas.c | 2 |
3 files changed, 27 insertions, 10 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index f2faa028..cb217125 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -282,6 +282,18 @@ mergeInto(LibraryManager.library, { } }, + estimateTextWidth: function(fontData, text) { + var h = fontData.size; + var fontString = h + 'px sans-serif'; + // TODO: use temp context, not screen's, to avoid affecting its performance? + var tempCtx = SDL.surfaces[SDL.screen].ctx; + tempCtx.save(); + tempCtx.font = fontString; + var ret = tempCtx.measureText(text).width; + tempCtx.restore(); + return ret; + }, + // Debugging debugSurface: function(surfData) { @@ -438,7 +450,7 @@ mergeInto(LibraryManager.library, { }, SDL_Delay: function(delay) { - throw 'SDL_Delay called! Potential infinite loop, quitting.'; + throw 'SDL_Delay called! Potential infinite loop, quitting. ' + new Error().stack; }, SDL_WM_SetCaption: function(title, icon) { @@ -505,7 +517,6 @@ mergeInto(LibraryManager.library, { }, SDL_FillRect: function(surf, rect, color) { - console.log('WARNING: SDL_FillRect not optimized yet'); var surfData = SDL.surfaces[surf]; assert(!surfData.locked); // but we could unlock and re-lock if we must.. var r = SDL.loadRect(rect); @@ -718,15 +729,10 @@ mergeInto(LibraryManager.library, { // XXX the font and color are ignored text = Pointer_stringify(text); var fontData = SDL.fonts[font]; + var w = SDL.estimateTextWidth(fontData, text); var h = fontData.size; var color = SDL.loadColorToCSS(color); var fontString = h + 'px sans-serif'; - // TODO: use temp context, not screen's, to avoid affecting its performance? - var tempCtx = SDL.surfaces[SDL.screen].ctx; - tempCtx.save(); - tempCtx.font = fontString; - var w = tempCtx.measureText(text).width; - tempCtx.restore(); var surf = SDL.makeSurface(w, h, 0, false, 'text:' + text); // bogus numbers.. var surfData = SDL.surfaces[surf]; surfData.ctx.fillStyle = color; @@ -737,6 +743,17 @@ mergeInto(LibraryManager.library, { }, TTF_RenderText_Blended: 'TTF_RenderText_Solid', // XXX ignore blending vs. solid + TTF_SizeText: function(font, text, w, h) { + var fontData = SDL.fonts[font]; + if (w) { + {{{ makeSetValue('w', '0', 'SDL.estimateTextWidth(fontData, Pointer_stringify(text))', 'i32') }}}; + } + if (h) { + {{{ makeSetValue('h', '0', 'fontData.size', 'i32') }}}; + } + return 0; + }, + // Misc SDL_InitSubSystem: function(flags) { return 0 }, diff --git a/tests/runner.py b/tests/runner.py index bf4161da..3b4680a2 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -6379,7 +6379,7 @@ f.close() open(os.path.join(self.get_dir(), 'sdl_canvas.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_canvas.c')).read())) Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_canvas.c'), '-o', 'page.html']).communicate() - self.run_browser('page.html', '', '/report_result?3900') + self.run_browser('page.html', '', '/report_result?1') def test_sdl_key(self): open(os.path.join(self.get_dir(), 'pre.js'), 'w').write(''' diff --git a/tests/sdl_canvas.c b/tests/sdl_canvas.c index a73c4351..ae617604 100644 --- a/tests/sdl_canvas.c +++ b/tests/sdl_canvas.c @@ -42,7 +42,7 @@ int main() { SDL_Quit(); - int result = sum; + int result = sum > 3000 && sum < 5000; // varies a little on different browsers, font differences? REPORT_RESULT(); return 0; |