fix broken texts due to usage of utf8, add proper api

This commit is contained in:
MX
2023-12-21 03:14:23 +03:00
parent bc1fdabce4
commit 49b2a4da8a
4 changed files with 101 additions and 3 deletions

View File

@@ -154,6 +154,14 @@ void canvas_set_custom_u8g2_font(Canvas* canvas, const uint8_t* font) {
}
void canvas_draw_str(Canvas* canvas, uint8_t x, uint8_t y, const char* str) {
furi_assert(canvas);
if(!str) return;
x += canvas->offset_x;
y += canvas->offset_y;
u8g2_DrawStr(&canvas->fb, x, y, str);
}
void canvas_draw_utf8_str(Canvas* canvas, uint8_t x, uint8_t y, const char* str) {
furi_assert(canvas);
if(!str) return;
x += canvas->offset_x;
@@ -173,6 +181,49 @@ void canvas_draw_str_aligned(
x += canvas->offset_x;
y += canvas->offset_y;
switch(horizontal) {
case AlignLeft:
break;
case AlignRight:
x -= u8g2_GetStrWidth(&canvas->fb, str);
break;
case AlignCenter:
x -= (u8g2_GetStrWidth(&canvas->fb, str) / 2);
break;
default:
furi_crash();
break;
}
switch(vertical) {
case AlignTop:
y += u8g2_GetAscent(&canvas->fb);
break;
case AlignBottom:
break;
case AlignCenter:
y += (u8g2_GetAscent(&canvas->fb) / 2);
break;
default:
furi_crash();
break;
}
u8g2_DrawStr(&canvas->fb, x, y, str);
}
void canvas_draw_utf8_str_aligned(
Canvas* canvas,
uint8_t x,
uint8_t y,
Align horizontal,
Align vertical,
const char* str) {
furi_assert(canvas);
if(!str) return;
x += canvas->offset_x;
y += canvas->offset_y;
switch(horizontal) {
case AlignLeft:
break;
@@ -205,6 +256,12 @@ void canvas_draw_str_aligned(
}
uint16_t canvas_string_width(Canvas* canvas, const char* str) {
furi_assert(canvas);
if(!str) return 0;
return u8g2_GetStrWidth(&canvas->fb, str);
}
uint16_t canvas_utf8_string_width(Canvas* canvas, const char* str) {
furi_assert(canvas);
if(!str) return 0;
return u8g2_GetUTF8Width(&canvas->fb, str);