diff options
author | Franklin Wei <franklin@rockbox.org> | 2020-06-27 20:23:13 -0400 |
---|---|---|
committer | Franklin Wei <franklin@rockbox.org> | 2020-06-27 20:23:13 -0400 |
commit | c02a9c5ab3b0d2c4a6d9fb0e558fa5e8e9271770 (patch) | |
tree | 6938a695225c83d50fb8c3e8ef78572c5df82ba7 | |
parent | 4b108896cc7440986d9e2384021db7ea9c42abb7 (diff) | |
download | rockbox-c02a9c5ab3b0d2c4a6d9fb0e558fa5e8e9271770.tar.gz rockbox-c02a9c5ab3b0d2c4a6d9fb0e558fa5e8e9271770.zip |
puzzles: refuse to draw non-ASCII characters
We had some issues in Keen with the arithmetic operators not being rendered
properly. This is still a kludge (we should intelligently search the font)
but is still less ugly than the garbage it was drawing before.
Change-Id: I5b957c7371b659ea6d64847145f9913b2a892e48
-rw-r--r-- | apps/plugins/puzzles/rockbox.c | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/apps/plugins/puzzles/rockbox.c b/apps/plugins/puzzles/rockbox.c index de89c42eed..a10bf7dd5c 100644 --- a/apps/plugins/puzzles/rockbox.c +++ b/apps/plugins/puzzles/rockbox.c | |||
@@ -1421,11 +1421,41 @@ static void draw_mouse(void) | |||
1421 | } | 1421 | } |
1422 | } | 1422 | } |
1423 | 1423 | ||
1424 | /* doesn't work, disabled (can't find a good mechanism to check if a | ||
1425 | * glyph exists in a font) */ | ||
1426 | #if 0 | ||
1427 | /* See: https://www.chiark.greenend.org.uk/~sgtatham/puzzles/devel/drawing.html#drawing-text-fallback */ | ||
1424 | static char *rb_text_fallback(void *handle, const char *const *strings, | 1428 | static char *rb_text_fallback(void *handle, const char *const *strings, |
1425 | int nstrings) | 1429 | int nstrings) |
1426 | { | 1430 | { |
1427 | return dupstr(strings[0]); | 1431 | struct font *pf = rb->font_get(cur_font); |
1432 | |||
1433 | for(int i = 0; i < nstrings; i++) | ||
1434 | { | ||
1435 | LOGF("checking alternative \"%s\"", strings[i]); | ||
1436 | const unsigned char *ptr = strings[i]; | ||
1437 | unsigned short code; | ||
1438 | bool valid = true; | ||
1439 | |||
1440 | while(*ptr) | ||
1441 | { | ||
1442 | ptr = rb->utf8decode(ptr, &code); | ||
1443 | |||
1444 | if(!rb->font_get_bits(pf, code)) | ||
1445 | { | ||
1446 | valid = false; | ||
1447 | break; | ||
1448 | } | ||
1449 | } | ||
1450 | |||
1451 | if(valid) | ||
1452 | return dupstr(strings[i]); | ||
1453 | } | ||
1454 | |||
1455 | /* shouldn't get here */ | ||
1456 | return dupstr(strings[nstrings - 1]); | ||
1428 | } | 1457 | } |
1458 | #endif | ||
1429 | 1459 | ||
1430 | const drawing_api rb_drawing = { | 1460 | const drawing_api rb_drawing = { |
1431 | rb_draw_text, | 1461 | rb_draw_text, |
@@ -1443,9 +1473,10 @@ const drawing_api rb_drawing = { | |||
1443 | rb_blitter_free, | 1473 | rb_blitter_free, |
1444 | rb_blitter_save, | 1474 | rb_blitter_save, |
1445 | rb_blitter_load, | 1475 | rb_blitter_load, |
1476 | /* printing functions */ | ||
1446 | NULL, NULL, NULL, NULL, NULL, NULL, /* {begin,end}_{doc,page,puzzle} */ | 1477 | NULL, NULL, NULL, NULL, NULL, NULL, /* {begin,end}_{doc,page,puzzle} */ |
1447 | NULL, NULL, /* line_width, line_dotted */ | 1478 | NULL, NULL, /* line_width, line_dotted */ |
1448 | rb_text_fallback, | 1479 | NULL, /* fall back to ASCII */ |
1449 | NULL, | 1480 | NULL, |
1450 | }; | 1481 | }; |
1451 | 1482 | ||