aboutsummaryrefslogtreecommitdiff
path: root/engines/startrek/graphics.cpp
diff options
context:
space:
mode:
authorMatthew Stewart2018-07-17 04:10:48 -0400
committerEugene Sandulenko2018-08-09 08:37:30 +0200
commit52cfe602712ad39174379d56e1b45b7121fefda6 (patch)
tree32f9a3fca6f557c930afa3dd93bb93c1b306219a /engines/startrek/graphics.cpp
parentb9eca08db639299cfa13385db45b84b0b01cda28 (diff)
downloadscummvm-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.cpp40
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();
}
/**