summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/lib/grey_draw.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/apps/plugins/lib/grey_draw.c b/apps/plugins/lib/grey_draw.c
index 51d340dd7f..5879b8e35a 100644
--- a/apps/plugins/lib/grey_draw.c
+++ b/apps/plugins/lib/grey_draw.c
@@ -534,20 +534,18 @@ void grey_gray_bitmap(const unsigned char *src, int x, int y, int width,
void grey_putsxyofs(int x, int y, int ofs, const unsigned char *str)
{
int ch;
+ unsigned short *ucs;
struct font* pf = _grey_info.rb->font_get(_grey_info.curfont);
+
+ ucs = _grey_info.rb->bidi_l2v(str, 1);
- while ((ch = *str++) != '\0' && x < _grey_info.width)
+ while ((ch = *ucs++) != 0 && x < _grey_info.width)
{
int width;
const unsigned char *bits;
- /* check input range */
- if (ch < pf->firstchar || ch >= pf->firstchar+pf->size)
- ch = pf->defaultchar;
- ch -= pf->firstchar;
-
/* get proportional width and glyph bits */
- width = pf->width ? pf->width[ch] : pf->maxwidth;
+ width = _grey_info.rb->font_get_width(pf, ch);
if (ofs > width)
{
@@ -555,8 +553,7 @@ void grey_putsxyofs(int x, int y, int ofs, const unsigned char *str)
continue;
}
- bits = pf->bits + (pf->offset ?
- pf->offset[ch] : (((pf->height + 7) >> 3) * pf->maxwidth * ch));
+ bits = _grey_info.rb->font_get_bits(pf, ch);
grey_mono_bitmap_part(bits, ofs, 0, width, x, y, width - ofs, pf->height);