X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/5b502ae807b1e98a91644f179863484c61aedb4c..a9af91d0a74a53c3a4d1f2da740193ac4a374983:/drawing.c diff --git a/drawing.c b/drawing.c index b582b8f..4cbb46d 100644 --- a/drawing.c +++ b/drawing.c @@ -127,6 +127,39 @@ void end_draw(drawing *dr) dr->api->end_draw(dr->handle); } +char *text_fallback(drawing *dr, const char *const *strings, int nstrings) +{ + int i; + + /* + * If the drawing implementation provides one of these, use it. + */ + if (dr && dr->api->text_fallback) + return dr->api->text_fallback(dr->handle, strings, nstrings); + + /* + * Otherwise, do the simple thing and just pick the first string + * that fits in plain ASCII. It will then need no translation + * out of UTF-8. + */ + for (i = 0; i < nstrings; i++) { + const char *p; + + for (p = strings[i]; *p; p++) + if (*p & 0x80) + break; + if (!*p) + return dupstr(strings[i]); + } + + /* + * The caller was responsible for making sure _some_ string in + * the list was in plain ASCII. + */ + assert(!"Should never get here"); + return NULL; /* placate optimiser */ +} + void status_bar(drawing *dr, char *text) { char *rewritten; @@ -283,3 +316,8 @@ void print_line_width(drawing *dr, int width) */ dr->api->line_width(dr->handle, (float)sqrt(dr->scale) * width); } + +void print_line_dotted(drawing *dr, int dotted) +{ + dr->api->line_dotted(dr->handle, dotted); +}