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