diff options
author | Colin Snover | 2016-03-07 20:50:24 -0600 |
---|---|---|
committer | Colin Snover | 2016-03-07 20:51:06 -0600 |
commit | b9fa04c201e4aaf23c77aa9683a60989e589453a (patch) | |
tree | f898c4d6d0967edfe5a6bac9e3d47234aaee5030 | |
parent | 73eea88939defa2ddf0faf6adeaa904f59521ce8 (diff) | |
download | scummvm-rg350-b9fa04c201e4aaf23c77aa9683a60989e589453a.tar.gz scummvm-rg350-b9fa04c201e4aaf23c77aa9683a60989e589453a.tar.bz2 scummvm-rg350-b9fa04c201e4aaf23c77aa9683a60989e589453a.zip |
SCI32: Implement kBitmapDrawText
-rw-r--r-- | engines/sci/engine/kgraphics32.cpp | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/engines/sci/engine/kgraphics32.cpp b/engines/sci/engine/kgraphics32.cpp index 6c6fc383ba..2a9005dab4 100644 --- a/engines/sci/engine/kgraphics32.cpp +++ b/engines/sci/engine/kgraphics32.cpp @@ -574,7 +574,37 @@ reg_t kBitmapDrawText(EngineState *s, int argc, reg_t *argv) { // called e.g. from TextButton::createBitmap() in Torin's Passage, script 64894 // bitmap, text, textLeft, textTop, textRight, textBottom, foreColor, backColor, skipColor, fontNo, alignment, borderColor, dimmed - return kStubNull(s, argc + 1, argv - 1); + BitmapResource bitmap(argv[0]); + Common::String text = s->_segMan->getString(argv[1]); + Common::Rect textRect( + argv[2].toSint16(), + argv[3].toSint16(), + argv[4].toSint16() + 1, + argv[5].toSint16() + 1 + ); + int16 foreColor = argv[6].toSint16(); + int16 backColor = argv[7].toSint16(); + int16 skipColor = argv[8].toSint16(); + GuiResourceId fontId = (GuiResourceId)argv[9].toUint16(); + TextAlign alignment = (TextAlign)argv[10].toSint16(); + int16 borderColor = argv[11].toSint16(); + bool dimmed = argv[12].toUint16(); + + // NOTE: Technically the engine checks these things: + // textRect.bottom > 0 + // textRect.right > 0 + // textRect.left < bitmap.width + // textRect.top < bitmap.height + // Then clips. But this seems stupid. + textRect.clip(Common::Rect(bitmap.getWidth(), bitmap.getHeight())); + + reg_t textBitmapObject = g_sci->_gfxText32->createFontBitmap(textRect.width(), textRect.height(), Common::Rect(textRect.width(), textRect.height()), text, foreColor, backColor, skipColor, fontId, alignment, borderColor, dimmed, false); + Buffer bitmapBuffer(bitmap.getWidth(), bitmap.getHeight(), bitmap.getPixels()); + CelObjMem textCel(textBitmapObject); + textCel.draw(bitmapBuffer, textRect, Common::Point(textRect.left, textRect.top), false); + s->_segMan->freeHunkEntry(textBitmapObject); + + return NULL_REG; } reg_t kBitmapDrawColor(EngineState *s, int argc, reg_t *argv) { |