add font centering, minor fixes

master
Ondřej Hruška 4 years ago
parent 09d2c5760a
commit 4e2992f244
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 28
      main/graphics/drawing.c
  2. 23
      main/graphics/drawing.h
  3. 3
      main/liquid/gui.c
  4. 9
      main/scenes/scene_manual_menu.c

@ -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;

@ -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

@ -1,8 +1,6 @@
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/timers.h>
#include "gui.h"
#include "nokia.h"
#include "liquid.h"
#include "drawing.h"
@ -27,7 +25,6 @@ void gui_init() {
* 0b10 - knowb CCW
* 0b100 - button released
* 0b1000 - button pressed
* 0b10000 - ticker event
*
* @param arg
*/

@ -2,9 +2,10 @@
#include <string.h>
#include <math.h>
#include <stdio.h>
#include <analog.h>
#include <firehazard.h>
#include "analog.h"
#include "firehazard.h"
#include "graphics/bitmaps.h"
#include "liquid.h"
#include "graphics/drawing.h"
#include "graphics/display_spec.h"
@ -74,8 +75,8 @@ static void paint(struct MenuScene *self)
char buf[10];
sprintf(buf, "%.0f", analog_read());
// TODO centering
LCD_setStrEx(buf, 0, 0, BLACK, (struct TextStyle) {.size = FONT_DOUBLE});
LCD_setStrEx("°C", 0, 17, BLACK, (struct TextStyle) {.size = FONT_BOLD});
LCD_setStrEx(buf, XLINE/2, 0, BLACK, (struct TextStyle) {.size = FONT_DOUBLE, .align = ALIGN_CENTER});
LCD_setStrEx("°C", XLINE/2, 17, BLACK, (struct TextStyle) {.align = ALIGN_CENTER}); //.size = FONT_BOLD,
if (fire_enabled()) {
strcpy(buf, "RUN");

Loading…
Cancel
Save