add font centering, minor fixes

This commit is contained in:
2020-01-12 13:10:11 +01:00
parent 09d2c5760a
commit 4e2992f244
4 changed files with 45 additions and 18 deletions
+25 -3
View File
@@ -231,17 +231,39 @@ static const int char_heights[] = {
// library. AND HEAVILY MODIFIED
void LCD_setStrEx(const char *dString, int x, int y, enum Color color, struct TextStyle style)
{
const int x0 = x;
struct Utf8Char uchar;
struct Utf8Iterator iter;
Utf8Iterator_Init(&iter, dString);
int charw = char_widths[style.size];
int charh = char_heights[style.size];
int spacingx = char_spacings[style.size] + style.spacing_x;
int spacingy = style.spacing_y;
struct Utf8Char uchar;
if (style.align != ALIGN_LEFT) {
int line_len = 0;
int skip = style.skip;
while ((uchar = Utf8Iterator_Next(&iter)).uint) {
if (skip > 0) {
skip -= 1;
continue;
}
if (uchar.bytes[0] == '\n') {
break;
}
line_len++;
}
if (style.align == ALIGN_CENTER) {
x -= ((charw + spacingx) * line_len) / 2 - spacingx/2;
} else {
// right
x -= ((charw + spacingx) * line_len) - spacingx;
}
}
const int x0 = x;
Utf8Iterator_Init(&iter, dString);
int limit = style.limit;
int skip = style.skip;
bool wrap;
+15 -8
View File
@@ -50,15 +50,22 @@ enum TextSize {
FONT_BOLD = 2,
};
enum TextAlign {
ALIGN_LEFT = 0,
ALIGN_CENTER = 1,
ALIGN_RIGHT = 2,
};
struct TextStyle {
bool bg; //!< Fill the characters background with the opposite color
enum TextSize size; //!< Character size
int limit; //!< Number of characters to print from the string, if > 0
int skip; //!< Characters to skip before printing
int spacing_x; //!< Additional X spacing
int spacing_y; //!< Additional Y spacing
bool nowrap; //!< Stop painting when the right edge of the screen is reached
bool wrap_to_0; //!< wrap to 0 instead of the initial X coordinate
bool bg; //!< Fill the characters background with the opposite color
enum TextSize size; //!< Character size
enum TextAlign align; //!< Alignment (works only for single line)
int limit; //!< Number of characters to print from the string, if > 0
int skip; //!< Characters to skip before printing
int spacing_x; //!< Additional X spacing
int spacing_y; //!< Additional Y spacing
bool nowrap; //!< Stop painting when the right edge of the screen is reached
bool wrap_to_0; //!< wrap to 0 instead of the initial X coordinate
};
// setStr draws a string of characters, calling setChar with