diff options
author | Matthew Stewart | 2018-07-17 04:10:48 -0400 |
---|---|---|
committer | Eugene Sandulenko | 2018-08-09 08:37:30 +0200 |
commit | 52cfe602712ad39174379d56e1b45b7121fefda6 (patch) | |
tree | 32f9a3fca6f557c930afa3dd93bb93c1b306219a /engines/startrek/graphics.cpp | |
parent | b9eca08db639299cfa13385db45b84b0b01cda28 (diff) | |
download | scummvm-rg350-52cfe602712ad39174379d56e1b45b7121fefda6.tar.gz scummvm-rg350-52cfe602712ad39174379d56e1b45b7121fefda6.tar.bz2 scummvm-rg350-52cfe602712ad39174379d56e1b45b7121fefda6.zip |
STARTREK: Get starfields working for the intro
Diffstat (limited to 'engines/startrek/graphics.cpp')
-rw-r--r-- | engines/startrek/graphics.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/engines/startrek/graphics.cpp b/engines/startrek/graphics.cpp index 753605a494..9b1801b47f 100644 --- a/engines/startrek/graphics.cpp +++ b/engines/startrek/graphics.cpp @@ -73,7 +73,45 @@ Graphics::~Graphics() { void Graphics::setBackgroundImage(SharedPtr<Bitmap> bitmap) { - _backgroundImage = bitmap; + _backgroundImage = SharedPtr<Bitmap>(new Bitmap(*bitmap)); +} + +void Graphics::drawBitmapToBackground(const Common::Rect &origRect, const Common::Rect &drawRect, SharedPtr<Bitmap> bitmap) { + byte *dest = _backgroundImage->pixels + drawRect.top * SCREEN_WIDTH + drawRect.left; + byte *src = bitmap->pixels + (drawRect.left - origRect.left) + + (drawRect.top - origRect.top) * bitmap->width; + + for (int y = drawRect.top; y < drawRect.bottom; y++) { + for (int x = drawRect.left; x < drawRect.right; x++) { + byte b = *src; + + if (b != 0) + *dest = b; + + src++; + dest++; + } + + src += bitmap->width - drawRect.width(); + dest += SCREEN_WIDTH - drawRect.width(); + } +} + +void Graphics::fillBackgroundRect(const Common::Rect &rect, byte color) { + byte *dest = _backgroundImage->pixels + rect.top * SCREEN_WIDTH + rect.left; + for (int y = rect.top; y < rect.bottom; y++) { + memset(dest, color, rect.width()); + dest += SCREEN_WIDTH; + } +} + +void Graphics::clearScreenAndPriBuffer() { + Common::fill(_priData, _priData + sizeof(_priData), 0); + + ::Graphics::Surface *surface = _vm->_system->lockScreen(); + surface->fillRect(_screenRect, 0); + _vm->_system->unlockScreen(); + _vm->_system->updateScreen(); } /** |