aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilippos Karapetis2011-10-14 21:08:26 +0300
committerFilippos Karapetis2011-10-14 21:08:26 +0300
commit9f568f5f0bac6018337022bda11cc978c242c36c (patch)
tree274739823a915f6a6b360539818a964155505797
parent8609e22e404c06c20c6726ee38425fa4436b6c11 (diff)
downloadscummvm-rg350-9f568f5f0bac6018337022bda11cc978c242c36c.tar.gz
scummvm-rg350-9f568f5f0bac6018337022bda11cc978c242c36c.tar.bz2
scummvm-rg350-9f568f5f0bac6018337022bda11cc978c242c36c.zip
SCI: Fixed display of text surfaces in SCI21
-rw-r--r--engines/sci/graphics/text32.cpp17
1 files changed, 8 insertions, 9 deletions
diff --git a/engines/sci/graphics/text32.cpp b/engines/sci/graphics/text32.cpp
index 606a9359ac..b4e27765ad 100644
--- a/engines/sci/graphics/text32.cpp
+++ b/engines/sci/graphics/text32.cpp
@@ -38,6 +38,8 @@
namespace Sci {
+#define BITMAP_HEADER_SIZE 46
+
GfxText32::GfxText32(SegManager *segMan, GfxCache *fonts, GfxScreen *screen)
: _segMan(segMan), _cache(fonts), _screen(screen) {
}
@@ -69,11 +71,12 @@ reg_t GfxText32::createTextBitmap(reg_t textObject, uint16 maxWidth, uint16 maxH
if (maxHeight > 0)
height = maxHeight;
- int entrySize = width * height;
+ int entrySize = width * height + BITMAP_HEADER_SIZE;
reg_t memoryId = _segMan->allocateHunkEntry("TextBitmap()", entrySize);
writeSelector(_segMan, textObject, SELECTOR(bitmap), memoryId);
byte *memoryPtr = _segMan->getHunkPointer(memoryId);
memset(memoryPtr, 0, entrySize);
+ byte *bitmap = memoryPtr + BITMAP_HEADER_SIZE;
int16 charCount = 0;
uint16 curX = 0, curY = 0;
@@ -86,7 +89,7 @@ reg_t GfxText32::createTextBitmap(reg_t textObject, uint16 maxWidth, uint16 maxH
for (int i = 0; i < charCount; i++) {
unsigned char curChar = txt[i];
- font->drawToBuffer(curChar, curY, curX, foreColor, dimmed, memoryPtr, width, height);
+ font->drawToBuffer(curChar, curY, curX, foreColor, dimmed, bitmap, width, height);
curX += font->getCharWidth(curChar);
}
@@ -104,18 +107,14 @@ void GfxText32::disposeTextBitmap(reg_t hunkId) {
_segMan->freeHunkEntry(hunkId);
}
-#define BITMAP_HEADER_SIZE 46
-
void GfxText32::drawTextBitmap(reg_t textObject) {
reg_t hunkId = readSelector(_segMan, textObject, SELECTOR(bitmap));
- byte *surface = _segMan->getHunkPointer(hunkId);
+ byte *memoryPtr = _segMan->getHunkPointer(hunkId);
- if (!surface)
+ if (!memoryPtr)
error("Attempt to draw an invalid text bitmap");
- // Skip the bitmap header in SCI21 - SCI3
- if (getSciVersion() >= SCI_VERSION_2_1)
- surface += BITMAP_HEADER_SIZE;
+ byte *surface = memoryPtr + BITMAP_HEADER_SIZE;
int curByte = 0;
Common::Rect nsRect = getNSRect(textObject);