add font centering, minor fixes
This commit is contained in:
+25
-3
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user