You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-overlay/profiles/patches/media-gfx/splashutils-1.5.4.4-text_al...

113 lines
2.8 KiB

diff --git a/splashutils-1.5.4.4/docs/theme_format b/splashutils-1.5.4.4/docs/theme_format
index 2cc629b..8932583 100644
--- a/splashutils-1.5.4.4/docs/theme_format
+++ b/splashutils-1.5.4.4/docs/theme_format
@@ -91,6 +91,9 @@ that they enclose.
* text_y=<n>
The y coordinate of the main system message.
+* text_align [left|middle|right] [top|middle|bottom]
+ Text align of the main system message.
+
* text_size=<n>
The size of the font used to render the main system message.
diff --git a/splashutils-1.5.4.4/src/parse.c b/splashutils-1.5.4.4/src/parse.c
index ad7676d..0728419 100644
--- a/splashutils-1.5.4.4/src/parse.c
+++ b/splashutils-1.5.4.4/src/parse.c
@@ -20,7 +20,7 @@
struct cfg_opt {
char *name;
enum {
- t_int, t_path, t_box, t_icon, t_rect, t_color, t_fontpath,
+ t_int, t_path, t_box, t_icon, t_rect, t_color, t_fontpath, t_align,
t_type_open, t_type_close, t_anim, t_text, t_textbox_open, t_textbox_close,
} type;
void *val;
@@ -28,6 +28,7 @@ struct cfg_opt {
int line = 0;
u16 text_x, text_y;
+u8 text_align = 0;
u16 text_size;
color text_color;
char *text_font;
@@ -147,6 +148,10 @@ struct cfg_opt opts[] =
.type = t_fontpath,
.val = &text_font },
+ { .name = "text_align",
+ .type = t_align,
+ .val = &text_align },
+
{ .name = "text",
.type = t_text,
.val = NULL },
@@ -216,6 +221,44 @@ static bool skip_nonwhitespace(char **buf, bool req)
return true;
}
+static void parse_align(char *t, struct cfg_opt opt)
+{
+ (*(u8*)opt.val) = 0;
+ /* Parse x position */
+
+ if (!strncmp(t, "left", 4)) {
+ (*(u8*)opt.val) |= F_HS_LEFT;
+ t += 4;
+ } else if (!strncmp(t, "right", 5)) {
+ (*(u8*)opt.val) |= F_HS_RIGHT;
+ t += 5;
+ } else if (!strncmp(t, "middle", 6)) {
+ (*(u8*)opt.val) |= F_HS_HMIDDLE;
+ t += 6;
+ } else {
+ parse_error("expected 'left', 'right' or 'middle' instead of '%s'", t);
+ return;
+ }
+
+ if (!skip_whitespace(&t, true))
+ return;
+ /* Parse y position */
+
+ if (!strncmp(t, "top", 3)) {
+ (*(u8*)opt.val) |= F_HS_TOP;
+ t += 3;
+ } else if (!strncmp(t, "bottom", 6)) {
+ (*(u8*)opt.val) |= F_HS_BOTTOM;
+ t += 6;
+ } else if (!strncmp(t, "middle", 6)) {
+ (*(u8*)opt.val) |= F_HS_VMIDDLE;
+ t += 6;
+ } else {
+ parse_error("expected 'top', 'bottom' or 'middle' instead of '%s'", t);
+ (*(u8*)opt.val) |= F_HS_TOP;
+ }
+}
+
static void parse_int(char *t, struct cfg_opt opt)
{
if (*t != '=') {
@@ -1115,7 +1160,7 @@ void add_main_msg()
return;
}
- ct->hotspot = F_HS_LEFT | F_HS_TOP;
+ ct->hotspot = text_align;
ct->style = TTF_STYLE_NORMAL;
ct->x = text_x;
ct->y = text_y;
@@ -1245,6 +1290,11 @@ int parse_cfg(char *cfgfile, stheme_t *theme)
parse_int(t, opts[i]);
break;
+ case t_align:
+ skip_whitespace(&t, false);
+ parse_align(t, opts[i]);
+ break;
+
case t_box:
{
box *tbox = parse_box(t);