[Scummvm-git-logs] scummvm master -> 7d7e482ce87aa7c530d00d33b4f8f7ab85d72c00
sev-
sev at scummvm.org
Sat Aug 15 22:59:51 UTC 2020
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
695e8349fe GRAPHICS: MACGUI: BE-safe color creation
caea5ef118 DIRECTOR: Made matte bitmaps 32bpp-compatible
f05d2f17c2 GRAPHICS: MACGUI: Made MacDrawPixPtr a global typedef
7370a946e3 DIRECTOR: Make ink drawing 32bpp-compatible
bce9cfd19c DIRECTOR: More work on 32bpp
7d7e482ce8 DIRECTOR: More 32bpp work, images start to appear
Commit: 695e8349fef4c9409e723ca8a9077cbc134955dd
https://github.com/scummvm/scummvm/commit/695e8349fef4c9409e723ca8a9077cbc134955dd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00
Commit Message:
GRAPHICS: MACGUI: BE-safe color creation
Changed paths:
graphics/macgui/macwindowmanager.cpp
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 6a65c23cac..11920d8ef5 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -960,7 +960,7 @@ void MacWindowManager::passPalette(const byte *pal, uint size) {
uint MacWindowManager::findBestColor(byte cr, byte cg, byte cb) {
if (_pixelformat.bytesPerPixel == 4)
- return cr << 24 | cg << 16 | cb << 8 | 0xff;
+ return _pixelformat.RGBToColor(cr, cg, cb);
uint bestColor = 0;
double min = 0xFFFFFFFF;
Commit: caea5ef11884854a6f8c4e762896e98008ddfba9
https://github.com/scummvm/scummvm/commit/caea5ef11884854a6f8c4e762896e98008ddfba9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00
Commit Message:
DIRECTOR: Made matte bitmaps 32bpp-compatible
Changed paths:
engines/director/castmember.cpp
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 5ac43685f1..21e3b65313 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -187,23 +187,27 @@ void BitmapCastMember::createMatte() {
// Like background trans, but all white pixels NOT ENCLOSED by coloured pixels
// are transparent
Graphics::Surface tmp;
- tmp.create(_initialRect.width(), _initialRect.height(), Graphics::PixelFormat::createFormatCLUT8());
+ tmp.create(_initialRect.width(), _initialRect.height(), g_director->_pixelformat);
tmp.copyFrom(*_img->getSurface());
// Searching white color in the corners
int whiteColor = -1;
- for (int y = 0; y < tmp.h; y++) {
- for (int x = 0; x < tmp.w; x++) {
- byte color = *(byte *)tmp.getBasePtr(x, y);
-
- if (g_director->getPalette()[color * 3 + 0] == 0xff &&
- g_director->getPalette()[color * 3 + 1] == 0xff &&
- g_director->getPalette()[color * 3 + 2] == 0xff) {
- whiteColor = color;
- break;
+ if (g_director->_pixelformat.bytesPerPixel == 1) {
+ for (int y = 0; y < tmp.h; y++) {
+ for (int x = 0; x < tmp.w; x++) {
+ byte color = *(byte *)tmp.getBasePtr(x, y);
+
+ if (g_director->getPalette()[color * 3 + 0] == 0xff &&
+ g_director->getPalette()[color * 3 + 1] == 0xff &&
+ g_director->getPalette()[color * 3 + 2] == 0xff) {
+ whiteColor = color;
+ break;
+ }
}
}
+ } else {
+ whiteColor = g_director->_wm->findBestColor(0xff, 0xff, 0xff);
}
if (whiteColor == -1) {
Commit: f05d2f17c20247b681b3e60fdf777cf0b6daa595
https://github.com/scummvm/scummvm/commit/f05d2f17c20247b681b3e60fdf777cf0b6daa595
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00
Commit Message:
GRAPHICS: MACGUI: Made MacDrawPixPtr a global typedef
Changed paths:
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index 11920d8ef5..79b8c4baf1 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -441,7 +441,7 @@ void macDrawPixel(int x, int y, int color, void *data) {
}
}
-MacWindowManager::DrawPixPtr MacWindowManager::getDrawPixel() {
+MacDrawPixPtr MacWindowManager::getDrawPixel() {
if (_pixelformat.bytesPerPixel == 1)
return &macDrawPixel<byte *>;
else
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 29eb0fc20c..3ff4d3568a 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -131,6 +131,8 @@ struct ZoomBox {
uint32 nextTime;
};
+typedef void (* MacDrawPixPtr)(int, int, int, void *);
+
/**
* A manager class to handle window creation, destruction,
* drawing, moving and event handling.
@@ -140,8 +142,7 @@ public:
MacWindowManager(uint32 mode = 0, MacPatterns *patterns = nullptr);
~MacWindowManager();
- typedef void (* DrawPixPtr)(int, int, int, void *);
- DrawPixPtr getDrawPixel();
+ MacDrawPixPtr getDrawPixel();
/**
* Mutator to indicate the surface onto which the desktop will be drawn.
Commit: 7370a946e3f4c03d143653e6c376c69e045e35c5
https://github.com/scummvm/scummvm/commit/7370a946e3f4c03d143653e6c376c69e045e35c5
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00
Commit Message:
DIRECTOR: Make ink drawing 32bpp-compatible
Changed paths:
engines/director/director.h
engines/director/graphics.cpp
engines/director/window.cpp
diff --git a/engines/director/director.h b/engines/director/director.h
index 8a6c7036a6..c2c162d8d2 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -32,6 +32,7 @@
#include "engines/engine.h"
#include "graphics/pixelformat.h"
+#include "graphics/macgui/macwindowmanager.h"
#include "director/types.h"
#include "director/util.h"
@@ -162,8 +163,6 @@ struct DirectorPlotData {
}
};
-void inkDrawPixel(int x, int y, int color, void *data);
-
class DirectorEngine : public ::Engine {
public:
DirectorEngine(OSystem *syst, const DirectorGameDescription *gameDesc);
@@ -214,6 +213,8 @@ public:
void setCursor(int type);
void draw();
+ Graphics::MacDrawPixPtr getInkDrawPixel();
+
void loadKeyCodes();
Archive *createArchive();
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 7d88fa5a45..78d4a34515 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -832,16 +832,17 @@ void DirectorEngine::draw() {
g_system->updateScreen();
}
+template <typename T>
void inkDrawPixel(int x, int y, int src, void *data) {
DirectorPlotData *p = (DirectorPlotData *)data;
if (!p->destRect.contains(x, y))
return;
- byte *dst;
- byte tmpDst;
+ T dst;
+ uint32 tmpDst;
- dst = (byte *)p->dst->getBasePtr(x, y);
+ dst = (T)p->dst->getBasePtr(x, y);
if (p->ms) {
// Get the pixel that macDrawPixel will give us, but store it to apply the
@@ -974,6 +975,13 @@ void inkDrawPixel(int x, int y, int src, void *data) {
}
}
+Graphics::MacDrawPixPtr DirectorEngine::getInkDrawPixel() {
+ if (_pixelformat.bytesPerPixel == 1)
+ return &inkDrawPixel<byte *>;
+ else
+ return &inkDrawPixel<uint32 *>;
+}
+
void DirectorPlotData::setApplyColor() {
applyColor = false;
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 3759920451..4771596803 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -183,35 +183,35 @@ void Window::inkBlitShape(DirectorPlotData *pd, Common::Rect &srcRect) {
switch (pd->ms->spriteType) {
case kRectangleSprite:
pd->ms->pd = &plotFill;
- Graphics::drawFilledRect(fillRect, pd->ms->foreColor, inkDrawPixel, pd);
+ Graphics::drawFilledRect(fillRect, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
// fall through
case kOutlinedRectangleSprite:
pd->ms->pd = &plotStroke;
- Graphics::drawRect(strokeRect, pd->ms->foreColor, inkDrawPixel, pd);
+ Graphics::drawRect(strokeRect, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
break;
case kRoundedRectangleSprite:
pd->ms->pd = &plotFill;
- Graphics::drawRoundRect(fillRect, 12, pd->ms->foreColor, true, inkDrawPixel, pd);
+ Graphics::drawRoundRect(fillRect, 12, pd->ms->foreColor, true, g_director->getInkDrawPixel(), pd);
// fall through
case kOutlinedRoundedRectangleSprite:
pd->ms->pd = &plotStroke;
- Graphics::drawRoundRect(strokeRect, 12, pd->ms->foreColor, false, inkDrawPixel, pd);
+ Graphics::drawRoundRect(strokeRect, 12, pd->ms->foreColor, false, g_director->getInkDrawPixel(), pd);
break;
case kOvalSprite:
pd->ms->pd = &plotFill;
- Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, pd->ms->foreColor, true, inkDrawPixel, pd);
+ Graphics::drawEllipse(fillRect.left, fillRect.top, fillRect.right, fillRect.bottom, pd->ms->foreColor, true, g_director->getInkDrawPixel(), pd);
// fall through
case kOutlinedOvalSprite:
pd->ms->pd = &plotStroke;
- Graphics::drawEllipse(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, false, inkDrawPixel, pd);
+ Graphics::drawEllipse(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, false, g_director->getInkDrawPixel(), pd);
break;
case kLineTopBottomSprite:
pd->ms->pd = &plotStroke;
- Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, inkDrawPixel, pd);
+ Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
break;
case kLineBottomTopSprite:
pd->ms->pd = &plotStroke;
- Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, inkDrawPixel, pd);
+ Graphics::drawLine(strokeRect.left, strokeRect.top, strokeRect.right, strokeRect.bottom, pd->ms->foreColor, g_director->getInkDrawPixel(), pd);
break;
default:
warning("Window::inkBlitFrom: Expected shape type but got type %d", pd->ms->spriteType);
@@ -233,7 +233,7 @@ void Window::inkBlitSurface(DirectorPlotData *pd, Common::Rect &srcRect, const G
for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
- inkDrawPixel(pd->destRect.left + j, pd->destRect.top + i,
+ (g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
preprocessColor(pd, *((byte *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
}
}
@@ -259,7 +259,7 @@ void Window::inkBlitStretchSurface(DirectorPlotData *pd, Common::Rect &srcRect,
for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
- inkDrawPixel(pd->destRect.left + xCtr, pd->destRect.top + i,
+ (g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
preprocessColor(pd, *((byte *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
}
}
Commit: bce9cfd19c2ba3a4a4e4a3f316eb3182cc2da2c4
https://github.com/scummvm/scummvm/commit/bce9cfd19c2ba3a4a4e4a3f316eb3182cc2da2c4
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00
Commit Message:
DIRECTOR: More work on 32bpp
Changed paths:
engines/director/castmember.cpp
engines/director/castmember.h
engines/director/director.h
engines/director/lingo/lingo-object.cpp
diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 21e3b65313..6d32f3d423 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -545,7 +545,7 @@ TextCastMember::TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadSt
_modified = true;
}
-void TextCastMember::setColors(int *fgcolor, int *bgcolor) {
+void TextCastMember::setColors(uint32 *fgcolor, uint32 *bgcolor) {
if (fgcolor)
_fgcolor = *fgcolor;
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index ecece55150..75c1281b42 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -74,9 +74,9 @@ public:
virtual void updateFromWidget(Graphics::MacWidget *widget) {}
virtual Common::Rect getWidgetRect() { return _initialRect; }
- virtual void setColors(int *fgcolor, int *bgcolor) { return; }
- virtual uint getForeColor() { return 0; }
- virtual uint getBackColor() { return 0; }
+ virtual void setColors(uint32 *fgcolor, uint32 *bgcolor) { return; }
+ virtual uint32 getForeColor() { return 0; }
+ virtual uint32 getBackColor() { return 0; }
bool hasProp(const Common::String &propName) override;
Datum getProp(const Common::String &propName) override;
@@ -180,8 +180,8 @@ public:
class ShapeCastMember : public CastMember {
public:
ShapeCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version);
- virtual uint getForeColor() override { return _fgCol; }
- virtual uint getBackColor() override { return _bgCol; }
+ virtual uint32 getForeColor() override { return _fgCol; }
+ virtual uint32 getBackColor() override { return _bgCol; }
ShapeType _shapeType;
uint16 _pattern;
@@ -191,14 +191,14 @@ public:
InkType _ink;
private:
- byte _fgCol;
- byte _bgCol;
+ uint32 _fgCol;
+ uint32 _bgCol;
};
class TextCastMember : public CastMember {
public:
TextCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint16 version, uint8 flags1 = 0, bool asButton = false);
- virtual void setColors(int *fgcolor, int *bgcolor) override;
+ virtual void setColors(uint32 *fgcolor, uint32 *bgcolor) override;
void setText(const char *text);
virtual Graphics::MacWidget *createWidget(Common::Rect &bbox, Channel *channel) override;
@@ -243,8 +243,8 @@ public:
Common::String getText();
private:
- uint _bgcolor;
- uint _fgcolor;
+ uint32 _bgcolor;
+ uint32 _fgcolor;
};
class ScriptCastMember : public CastMember {
diff --git a/engines/director/director.h b/engines/director/director.h
index c2c162d8d2..79a7d6a1ea 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -117,8 +117,8 @@ struct PaletteV4 {
struct MacShape {
InkType ink;
byte spriteType;
- byte foreColor;
- byte backColor;
+ uint32 foreColor;
+ uint32 backColor;
int lineSize;
uint pattern;
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 710146c739..ba6a1d57de 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -881,13 +881,13 @@ bool TextCastMember::setField(int field, const Datum &d) {
switch (field) {
case kTheBackColor:
{
- int color = g_director->transformColor(d.asInt());
+ uint32 color = g_director->transformColor(d.asInt());
setColors(nullptr, &color);
}
return true;
case kTheForeColor:
{
- int color = g_director->transformColor(d.asInt());
+ uint32 color = g_director->transformColor(d.asInt());
setColors(&color, nullptr);
}
return true;
Commit: 7d7e482ce87aa7c530d00d33b4f8f7ab85d72c00
https://github.com/scummvm/scummvm/commit/7d7e482ce87aa7c530d00d33b4f8f7ab85d72c00
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-08-16T00:59:05+02:00
Commit Message:
DIRECTOR: More 32bpp work, images start to appear
Changed paths:
engines/director/movie.h
engines/director/window.cpp
engines/director/window.h
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 8164b547c8..3995a9c1ed 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -140,7 +140,7 @@ public:
Common::Point _lastClickPos;
uint32 _lastKeyTime;
uint32 _lastTimerReset;
- uint16 _stageColor;
+ uint32 _stageColor;
Cast *_sharedCast;
bool _allowOutdatedLingo;
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 4771596803..35c0f71ae8 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -75,12 +75,21 @@ void Window::invertChannel(Channel *channel) {
Common::Rect destRect = channel->getBbox();
for (int i = 0; i < destRect.height(); i++) {
- byte *src = (byte *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
- const byte *msk = mask ? (const byte *)mask->getBasePtr(0, i) : nullptr;
+ if (_wm->_pixelformat.bytesPerPixel == 1) {
+ byte *src = (byte *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
+ const byte *msk = mask ? (const byte *)mask->getBasePtr(0, i) : nullptr;
- for (int j = 0; j < destRect.width(); j++, src++)
- if (!mask || (msk && !(*msk++)))
- *src = ~(*src);
+ for (int j = 0; j < destRect.width(); j++, src++)
+ if (!mask || (msk && !(*msk++)))
+ *src = ~(*src);
+ } else {
+ uint32 *src = (uint32 *)_composeSurface->getBasePtr(destRect.left, destRect.top + i);
+ const uint32 *msk = mask ? (const uint32 *)mask->getBasePtr(0, i) : nullptr;
+
+ for (int j = 0; j < destRect.width(); j++, src++)
+ if (!mask || (msk && !(*msk++)))
+ *src = ~(*src);
+ }
}
}
@@ -118,7 +127,7 @@ bool Window::render(bool forceRedraw, Graphics::ManagedSurface *blitTo) {
return true;
}
-void Window::setStageColor(uint stageColor, bool forceReset) {
+void Window::setStageColor(uint32 stageColor, bool forceReset) {
if (stageColor != _stageColor || forceReset) {
_stageColor = stageColor;
reset();
@@ -228,13 +237,25 @@ void Window::inkBlitSurface(DirectorPlotData *pd, Common::Rect &srcRect, const G
pd->srcPoint.y = abs(srcRect.top - pd->destRect.top);
for (int i = 0; i < pd->destRect.height(); i++, pd->srcPoint.y++) {
- pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
- const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+ if (_wm->_pixelformat.bytesPerPixel == 1) {
+ pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+ const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+
+ for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
+ if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+ (g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
+ preprocessColor(pd, *((byte *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
+ }
+ }
+ } else {
+ pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+ const uint32 *msk = mask ? (const uint32 *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
- for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
- if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
- (g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
- preprocessColor(pd, *((byte *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
+ for (int j = 0; j < pd->destRect.width(); j++, pd->srcPoint.x++) {
+ if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+ (g_director->getInkDrawPixel())(pd->destRect.left + j, pd->destRect.top + i,
+ preprocessColor(pd, *((uint32 *)pd->srf->getBasePtr(pd->srcPoint.x, pd->srcPoint.y))), pd);
+ }
}
}
}
@@ -254,19 +275,31 @@ void Window::inkBlitStretchSurface(DirectorPlotData *pd, Common::Rect &srcRect,
pd->srcPoint.y = abs(srcRect.top - pd->destRect.top);
for (int i = 0, scaleYCtr = 0; i < pd->destRect.height(); i++, scaleYCtr += scaleY, pd->srcPoint.y++) {
- pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
- const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+ if (_wm->_pixelformat.bytesPerPixel == 1) {
+ pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+ const byte *msk = mask ? (const byte *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
+
+ for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
+ if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+ (g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
+ preprocessColor(pd, *((byte *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
+ }
+ }
+ } else {
+ pd->srcPoint.x = abs(srcRect.left - pd->destRect.left);
+ const uint32 *msk = mask ? (const uint32 *)mask->getBasePtr(pd->srcPoint.x, pd->srcPoint.y) : nullptr;
- for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
- if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
- (g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
- preprocessColor(pd, *((byte *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
+ for (int xCtr = 0, scaleXCtr = 0; xCtr < pd->destRect.width(); xCtr++, scaleXCtr += scaleX, pd->srcPoint.x++) {
+ if (!mask || (msk && (pd->ink == kInkTypeMask ? *msk++ : !(*msk++)))) {
+ (g_director->getInkDrawPixel())(pd->destRect.left + xCtr, pd->destRect.top + i,
+ preprocessColor(pd, *((uint32 *)pd->srf->getBasePtr(scaleXCtr / SCALE_THRESHOLD, scaleYCtr / SCALE_THRESHOLD))), pd);
+ }
}
}
}
}
-int Window::preprocessColor(DirectorPlotData *p, int src) {
+int Window::preprocessColor(DirectorPlotData *p, uint32 src) {
// HACK: Right now this method is just used for adjusting the colourization on text
// sprites, as it would be costly to colourize the chunks on the fly each
// time a section needs drawing. It's ugly but mostly works.
diff --git a/engines/director/window.h b/engines/director/window.h
index 25969b20b1..79dc8b04c8 100644
--- a/engines/director/window.h
+++ b/engines/director/window.h
@@ -95,8 +95,8 @@ class Window : public Graphics::MacWindow, public Object<Window> {
void invertChannel(Channel *channel);
bool needsAppliedColor(DirectorPlotData *pd);
- void setStageColor(uint stageColor, bool forceReset = false);
- int getStageColor() { return _stageColor; }
+ void setStageColor(uint32 stageColor, bool forceReset = false);
+ uint32 getStageColor() { return _stageColor; }
void reset();
@@ -170,7 +170,7 @@ public:
bool _newMovieStarted;
private:
- uint _stageColor;
+ uint32 _stageColor;
DirectorEngine *_vm;
bool _isStage;
@@ -185,7 +185,7 @@ private:
bool _titleVisible;
private:
- int preprocessColor(DirectorPlotData *p, int src);
+ int preprocessColor(DirectorPlotData *p, uint32 src);
void inkBlitFrom(Channel *channel, Common::Rect destRect, Graphics::ManagedSurface *blitTo = nullptr);
void inkBlitShape(DirectorPlotData *pd, Common::Rect &srcRect);
More information about the Scummvm-git-logs
mailing list