aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/hdb/draw-manager.cpp63
-rw-r--r--engines/hdb/draw-manager.h1
2 files changed, 64 insertions, 0 deletions
diff --git a/engines/hdb/draw-manager.cpp b/engines/hdb/draw-manager.cpp
index e505759768..e8b4e44c5a 100644
--- a/engines/hdb/draw-manager.cpp
+++ b/engines/hdb/draw-manager.cpp
@@ -442,6 +442,69 @@ bool DrawMan::loadFont(const char *string) {
return true;
}
+void DrawMan::drawText(const char *string) {
+ if (!_systemInit)
+ return;
+
+ if (_cursorX < _eLeft)
+ _cursorX = _eLeft;
+ if (_cursorY < _eTop)
+ _cursorY = _eTop;
+
+ // Word Wrapping
+ int width = _eLeft;
+ unsigned char c;
+ char cr[256]; // Carriage Return Array
+
+ for (int i = 0; i < (int)strlen(string);i++) {
+ c = string[i];
+ width += _charInfoBlocks[c]->width + _fontHeader.kerning + kFontIncrement;
+ if (c == ' ')
+ width += kFontSpace;
+
+ cr[i] = 0;
+ if (c == '\n') {
+ cr[i] = 1;
+ width = _eLeft;
+ } else if (width > _eRight) {
+ i--;
+ while (string[i] != ' ' && i > 0)
+ i--;
+ cr[i] = 1;
+ width = _eLeft;
+ }
+ }
+
+ // Draw the characters
+ for (int j = 0;j < (int)strlen(string);j++) {
+ c = string[j];
+ if (c == '\n' || cr[j]) {
+ _cursorX = _eLeft;
+ _cursorY += _fontHeader.height + _fontHeader.leading;
+ if (_cursorY + _fontHeader.height > _eBottom)
+ _cursorY = _eTop;
+ continue;
+ }
+
+ width = _charInfoBlocks[c]->width;
+ if (c == ' ')
+ width = kFontSpace;
+
+ // Blit the character
+ g_hdb->_drawMan->_globalSurface.transBlitFrom(_fontSurfaces[c], Common::Point(_cursorX, _cursorY));
+ g_system->copyRectToScreen(g_hdb->_drawMan->_globalSurface.getBasePtr(0, 0), g_hdb->_drawMan->_globalSurface.pitch, 0, 0, width, _fontHeader.height);
+
+ // Advance the cursor
+ _cursorX += width + _fontHeader.kerning * kFontIncrement;
+ if (_cursorX > kScreenWidth) {
+ _cursorX = 0;
+ _cursorY += _fontHeader.height + _fontHeader.leading;
+ if (_cursorY + _fontHeader.height > kScreenHeight)
+ _cursorY = 0;
+ }
+ }
+}
+
// Calculates pixel width of a string
void DrawMan::getDimensions(const char *string, int *pixelsWide, int *lines) {
if (!string) {
diff --git a/engines/hdb/draw-manager.h b/engines/hdb/draw-manager.h
index 3bfb3d72d3..f252ed2126 100644
--- a/engines/hdb/draw-manager.h
+++ b/engines/hdb/draw-manager.h
@@ -118,6 +118,7 @@ public:
// Font Functions
bool loadFont(const char *string);
+ void drawText(const char *string);
void getDimensions(const char *string, int *pixelsWide, int *lines);
void setTextEdges(int left, int right, int top, int bottom);
void getTextEdges(int *left, int *right, int *top, int *bottom);