From b41b280509d879904aaebf68d68817d71829d335 Mon Sep 17 00:00:00 2001 From: Samuel Dudik Date: Thu, 13 Aug 2020 20:45:08 +0200 Subject: [PATCH] New lines are now printed properly --- TODO.md | 5 +++-- herbe.c | 34 +++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/TODO.md b/TODO.md index dae735f..78e9c08 100644 --- a/TODO.md +++ b/TODO.md @@ -1,4 +1,5 @@ * Handle multiple notifications at the same time -* Properly handle duration = 0 +* ~~Properly handle duration = 0~~ * Keyboard shortcut to dismiss and accept notifications (also mouse) -* Properly print new lines +* ~~Properly print new lines~~ +* Refactor code \ No newline at end of file diff --git a/herbe.c b/herbe.c index 93a2b91..c8dc279 100644 --- a/herbe.c +++ b/herbe.c @@ -24,23 +24,31 @@ static void die(const char *format, ...) int get_max_len(char *body, XftFont *font, int max_text_width) { - int body_len = strlen(body); + int eol = strlen(body); XGlyphInfo info; - XftTextExtentsUtf8(display, font, (FcChar8 *)body, body_len, &info); + XftTextExtentsUtf8(display, font, (FcChar8 *)body, eol, &info); - if (info.width < max_text_width) - return body_len; - - int eol = max_text_width / font->max_advance_width; - info.width = 0; - - while (info.width < max_text_width) + if (info.width > max_text_width) { - eol++; - XftTextExtentsUtf8(display, font, (FcChar8 *)body, eol, &info); + + eol = max_text_width / font->max_advance_width; + info.width = 0; + + while (info.width < max_text_width) + { + eol++; + XftTextExtentsUtf8(display, font, (FcChar8 *)body, eol, &info); + } + + eol--; } - eol--; + for (int i = 0; i < eol; i++) + if (body[i] == '\n') + return ++i; + + if (info.width < max_text_width) + return eol; int temp = eol; @@ -167,4 +175,4 @@ int main(int argc, char *argv[]) XCloseDisplay(display); exit(EXIT_SUCCESS); -} +} \ No newline at end of file