From d4344c7960feb54cc081ea547b0738832297e212 Mon Sep 17 00:00:00 2001 From: Maarten ter Huurne Date: Wed, 23 Jul 2014 02:22:27 +0200 Subject: [PATCH] Revert "Removed support for multi-line text drawing" This reverts commit 0908aa7bb751a11cc035ceec3af282fed622f72c. It turns out there are multi-line text messages in use: Nebuleon found one in the confirmation message when deleting a section. --- src/font.cpp | 25 ++++++++++++++++++++++++- src/font.h | 3 +++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/font.cpp b/src/font.cpp index 7dfe485..82c08f8 100644 --- a/src/font.cpp +++ b/src/font.cpp @@ -59,7 +59,30 @@ int Font::getTextWidth(const char *text) else return 1; } -void Font::write(Surface *surface, std::string const& text, +void Font::write(Surface *surface, const string &text, + int x, int y, HAlign halign, VAlign valign) +{ + if (!font) { + return; + } + + size_t pos = text.find('\n', 0); + if (pos == string::npos) { + writeLine(surface, text, x, y, halign, valign); + } else { + size_t prev = 0; + do { + writeLine(surface, text.substr(prev, pos - prev), + x, y, halign, valign); + y += lineSpacing; + prev = pos + 1; + pos = text.find('\n', prev); + } while (pos != string::npos); + writeLine(surface, text.substr(prev), x, y, halign, valign); + } +} + +void Font::writeLine(Surface *surface, std::string const& text, int x, int y, HAlign halign, VAlign valign) { if (!font) { diff --git a/src/font.h b/src/font.h index e66945d..68dde24 100644 --- a/src/font.h +++ b/src/font.h @@ -41,6 +41,9 @@ public: private: Font(TTF_Font *font); + void writeLine(Surface *surface, std::string const& text, + int x, int y, HAlign halign, VAlign valign); + TTF_Font *font; int lineSpacing; };