diff --git a/engines/titanic/support/font.cpp b/engines/titanic/support/font.cpp index 3b48e5e3018..6636a84f229 100644 --- a/engines/titanic/support/font.cpp +++ b/engines/titanic/support/font.cpp @@ -66,4 +66,26 @@ void STFont::writeString(int maxWidth, const CString &text, int *v1, int *v2) { warning("TODO: STFont::writeString"); } +int STFont::stringWidth(const CString &text) const { + if (text.empty()) + return 0; + + const char *srcP = text.c_str(); + int total = 0; + char c; + while (c = *srcP++) { + if (c == 26) { + // Skip over command parameter bytes + srcP += 3; + } else if (c == 27) { + // Skip over command parameter bytes + srcP += 4; + } else if (c != '\n') { + total += _chars[c]._charWidth; + } + } + + return total; +} + } // End of namespace Titanic diff --git a/engines/titanic/support/font.h b/engines/titanic/support/font.h index 0fff5125df5..c41f4dc1e0d 100644 --- a/engines/titanic/support/font.h +++ b/engines/titanic/support/font.h @@ -39,7 +39,7 @@ public: size_t _dataSize; int _field8; int _maxCharWidth; - Common::Array _chars; + CharEntry _chars[256]; int _field810; int _field814; int _field818; @@ -52,6 +52,11 @@ public: */ void load(int fontNumber); + /** + * Return the width in pixels of the specified text + */ + int stringWidth(const CString &text) const; + /** * Write out a string * TODO: Verify this