[Scummvm-git-logs] scummvm master -> a3fd645179c9027e70588406ab76a9eadc10d465
sev-
noreply at scummvm.org
Tue May 5 11:45:15 UTC 2026
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
a3fd645179 GRAPHICS: MACGUI: Support rendering with any 8/16/32bpp pixel format
Commit: a3fd645179c9027e70588406ab76a9eadc10d465
https://github.com/scummvm/scummvm/commit/a3fd645179c9027e70588406ab76a9eadc10d465
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2026-05-05T13:45:11+02:00
Commit Message:
GRAPHICS: MACGUI: Support rendering with any 8/16/32bpp pixel format
Changed paths:
engines/colony/colony.cpp
engines/director/castmember/text.cpp
engines/director/director.cpp
engines/director/graphics.cpp
graphics/macgui/macmenu.cpp
graphics/macgui/mactext.cpp
graphics/macgui/mactextwindow.cpp
graphics/macgui/macwindow.cpp
graphics/macgui/macwindowborder.cpp
graphics/macgui/macwindowmanager.cpp
graphics/macgui/macwindowmanager.h
gui/gui-manager.cpp
diff --git a/engines/colony/colony.cpp b/engines/colony/colony.cpp
index 72f5c6102b4..17e52a350b9 100644
--- a/engines/colony/colony.cpp
+++ b/engines/colony/colony.cpp
@@ -591,7 +591,7 @@ void ColonyEngine::initMacMenus() {
Graphics::PixelFormat rgba(4, 8, 8, 8, 8, 24, 16, 8, 0);
_menuSurface = new Graphics::ManagedSurface(_width, _height, rgba);
- _wm = new Graphics::MacWindowManager(Graphics::kWMModeNoDesktop | Graphics::kWMNoScummVMWallpaper | Graphics::kWMMode32bpp | Graphics::kWMModeNoSystemRedraw);
+ _wm = new Graphics::MacWindowManager(Graphics::kWMModeNoDesktop | Graphics::kWMNoScummVMWallpaper | Graphics::kWMModeNoSystemRedraw, nullptr, Common::UNK_LANG, rgba);
// Override WM color values for 32bpp RGBA rendering.
// The defaults are palette indices (0-6) which are meaningless in 32bpp mode.
diff --git a/engines/director/castmember/text.cpp b/engines/director/castmember/text.cpp
index c110fc71cdb..368843d0dca 100644
--- a/engines/director/castmember/text.cpp
+++ b/engines/director/castmember/text.cpp
@@ -251,6 +251,12 @@ void TextCastMember::setForeColor(uint32 fgCol) {
void TextCastMember::setForeColor(uint32 fgCol, int start, int end) {
Graphics::MacText *target = getWidget();
if (target) {
+ if (target->_wm->_pixelformat.isCLUT8()) {
+ byte r, g, b;
+ target->_wm->getPaletteEntry(fgCol, r, g, b);
+ fgCol = target->_wm->findBestColor(r, g, b);
+ }
+
return target->setTextColor(fgCol, start, end);
}
_modified = true;
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 5f212bddbd5..e8de3dbd040 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -276,8 +276,12 @@ Common::Error DirectorEngine::run() {
#ifdef USE_RGB_COLOR
if (ConfMan.getBool("true_color") || (getGameFlags() & GF_32BPP) || debugChannelSet(-1, kDebug32bpp))
- _wmMode |= Graphics::kWMMode32bpp;
+ _pixelformat = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
+ else
#endif
+ _pixelformat = Graphics::PixelFormat::createFormatCLUT8();
+
+ debugC(1, kDebugImages, "Director pixelformat is: %s", _pixelformat.toString().c_str());
if (getGameFlags() & GF_DESKTOP)
_wmMode &= ~Graphics::kWMModeNoDesktop;
@@ -287,7 +291,7 @@ Common::Error DirectorEngine::run() {
_wmHeight = 480;
}
- _wm = new Graphics::MacWindowManager(_wmMode, &_director3QuickDrawPatterns, getLanguage());
+ _wm = new Graphics::MacWindowManager(_wmMode, &_director3QuickDrawPatterns, getLanguage(), _pixelformat);
_wm->setEngine(this);
gameQuirks(_gameDescription->desc.gameId, _gameDescription->desc.platform);
@@ -299,10 +303,6 @@ Common::Error DirectorEngine::run() {
_wm->printWMMode();
- _pixelformat = _wm->_pixelformat;
-
- debugC(1, kDebugImages, "Director pixelformat is: %s", _pixelformat.toString().c_str());
-
_stage = new Window(_wm->getNextId(), false, false, false, _wm, this, true);
_stage->incRefCount();
diff --git a/engines/director/graphics.cpp b/engines/director/graphics.cpp
index 77b858c6d8f..0230c54b70a 100644
--- a/engines/director/graphics.cpp
+++ b/engines/director/graphics.cpp
@@ -289,6 +289,14 @@ class InkPrimitives final : public Graphics::Primitives {
public:
constexpr InkPrimitives() {}
void drawPoint(int x, int y, uint32 src, void *data) override;
+private:
+ inline void decomposeColor(Graphics::MacWindowManager *wm, uint32 color, byte &r, byte &g, byte &b) {
+ if (sizeof(T) == sizeof(byte)) {
+ wm->getPaletteEntry(color, r, g, b);
+ } else {
+ wm->_pixelformat.colorToRGB(color, r, g, b);
+ }
+ }
};
template <typename T>
@@ -344,8 +352,8 @@ void InkPrimitives<T>::drawPoint(int x, int y, uint32 src, void *data) {
byte rSrc, gSrc, bSrc;
byte rDst, gDst, bDst;
- wm->decomposeColor<T>(src, rSrc, gSrc, bSrc);
- wm->decomposeColor<T>(*dst, rDst, gDst, bDst);
+ decomposeColor(wm, src, rSrc, gSrc, bSrc);
+ decomposeColor(wm, *dst, rDst, gDst, bDst);
rDst = lerpByte(rSrc, rDst, p->alpha, 255);
gDst = lerpByte(gSrc, gDst, p->alpha, 255);
@@ -396,7 +404,7 @@ void InkPrimitives<T>::drawPoint(int x, int y, uint32 src, void *data) {
} else {
// Find the inverse of the colour and match it back to the palette if required
byte rSrc, gSrc, bSrc;
- wm->decomposeColor<T>(src, rSrc, gSrc, bSrc);
+ decomposeColor(wm, src, rSrc, gSrc, bSrc);
*dst = wm->findBestColor(~rSrc, ~gSrc, ~bSrc);
}
@@ -484,8 +492,8 @@ void InkPrimitives<T>::drawPoint(int x, int y, uint32 src, void *data) {
byte rSrc, gSrc, bSrc;
byte rDst, gDst, bDst;
- wm->decomposeColor<T>(src, rSrc, gSrc, bSrc);
- wm->decomposeColor<T>(*dst, rDst, gDst, bDst);
+ decomposeColor(wm, src, rSrc, gSrc, bSrc);
+ decomposeColor(wm, *dst, rDst, gDst, bDst);
switch (p->ink) {
case kInkTypeAddPin:
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 5d2e5ff5468..7afcef4b646 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -1113,6 +1113,8 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
if (!it->enabled) {
if (_wm->_pixelformat.bytesPerPixel == 1) {
drawMenuPattern<byte>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, it->bbox.width(), _wm->_colorGreen);
+ } else if (_wm->_pixelformat.bytesPerPixel == 2) {
+ drawMenuPattern<uint16>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, it->bbox.width(), _wm->_colorGreen);
} else {
drawMenuPattern<uint32>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, it->bbox.width(), _wm->_colorGreen);
}
@@ -1254,6 +1256,8 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
if (!topMenuEnabled || !menu->items[i]->enabled) {
if (_wm->_pixelformat.bytesPerPixel == 1) {
drawMenuPattern<byte>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, r->width(), _wm->_colorGreen);
+ } else if (_wm->_pixelformat.bytesPerPixel == 2) {
+ drawMenuPattern<uint16>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, r->width(), _wm->_colorGreen);
} else {
drawMenuPattern<uint32>(_tempSurface, _screen, _wm->getBuiltinPatterns()[kPatternCheckers2 - 1], x, y, r->width(), _wm->_colorGreen);
}
@@ -1262,6 +1266,8 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
} else { // Delimiter
if (_wm->_pixelformat.bytesPerPixel == 1) {
drawMenuDelimiter<byte>(_screen, r, y + _menuDropdownItemHeight / 2, _wm->_colorBlack, _wm->_colorWhite);
+ } else if (_wm->_pixelformat.bytesPerPixel == 2) {
+ drawMenuDelimiter<uint16>(_screen, r, y + _menuDropdownItemHeight / 2, _wm->_colorBlack, _wm->_colorWhite);
} else {
drawMenuDelimiter<uint32>(_screen, r, y + _menuDropdownItemHeight / 2, _wm->_colorBlack, _wm->_colorWhite);
}
diff --git a/graphics/macgui/mactext.cpp b/graphics/macgui/mactext.cpp
index 5ab3792ac95..878b9855897 100644
--- a/graphics/macgui/mactext.cpp
+++ b/graphics/macgui/mactext.cpp
@@ -136,10 +136,10 @@ MacText::MacText(MacWidget *parent, int x, int y, int w, int h, MacWindowManager
_defaultFormatting = MacFontRun(_wm);
_defaultFormatting.font = wm->_fontMan->getFont(*macFont);
byte r, g, b;
- if (_wm->_pixelformat.bytesPerPixel == 4) {
- _wm->decomposeColor<uint32>(fgcolor, r, g, b);
+ if (_wm->_pixelformat.isCLUT8()) {
+ _wm->getPaletteEntry(fgcolor, r, g, b);
} else {
- _wm->decomposeColor<byte>(fgcolor, r, g, b);
+ _wm->_pixelformat.colorToRGB(fgcolor, r, g, b);
}
_defaultFormatting.setValues(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), r, g, b);
} else {
@@ -166,7 +166,11 @@ MacText::MacText(const Common::U32String &s, MacWindowManager *wm, const MacFont
_defaultFormatting = MacFontRun(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), 0, 0, 0);
_defaultFormatting.font = wm->_fontMan->getFont(*macFont);
byte r, g, b;
- _wm->_pixelformat.colorToRGB(fgcolor, r, g, b);
+ if (_wm->_pixelformat.isCLUT8()) {
+ _wm->getPaletteEntry(fgcolor, r, g, b);
+ } else {
+ _wm->_pixelformat.colorToRGB(fgcolor, r, g, b);
+ }
_defaultFormatting.setValues(_wm, macFont->getId(), macFont->getSlant(), macFont->getSize(), r, g, b);
} else {
_defaultFormatting.font = NULL;
@@ -341,7 +345,7 @@ void MacText::setScrollBar(bool enable) {
void MacText::resizeScrollBar(int w, int h) {
_borderSurface.free();
_borderSurface.create(w, h, _wm->_pixelformat);
- if (_wm->_pixelformat.bytesPerPixel == 1) {
+ if (_wm->_pixelformat.isCLUT8()) {
_borderSurface.clear(_wm->_colorGreen);
}
_scrollBorder.blitBorderInto(_borderSurface, kWindowBorderScrollbar | kWindowBorderActive);
@@ -472,9 +476,8 @@ void MacText::setTextColor(uint32 color, uint32 line) {
return;
}
- uint32 fgcol = _wm->findBestColor(color);
for (uint j = 0; j < _canvas._text[line].chunks.size(); j++) {
- _canvas._text[line].chunks[j].fgcolor = fgcol;
+ _canvas._text[line].chunks[j].fgcolor = color;
}
// if we are calling this func separately, then here need a refresh
@@ -506,8 +509,7 @@ void setTextColorCallback(MacFontRun &macFontRun, int color) {
}
void MacText::setTextColor(uint32 color, uint32 start, uint32 end) {
- uint32 col = _wm->findBestColor(color);
- setTextChunks(start, end, col, setTextColorCallback);
+ setTextChunks(start, end, color, setTextColorCallback);
}
void setTextSizeCallback(MacFontRun &macFontRun, int textSize) {
@@ -939,7 +941,7 @@ void MacText::draw(ManagedSurface *g, int x, int y, int w, int h, int xoff, int
render();
- drawStep(g, _canvas._surface, &_borderSurface, x, y, w, h, xoff, yoff, _canvas._tbgcolor, (_wm->_pixelformat.bytesPerPixel == 1) ? _wm->_colorGreen : 0);
+ drawStep(g, _canvas._surface, &_borderSurface, x, y, w, h, xoff, yoff, _canvas._tbgcolor, _wm->_pixelformat.isCLUT8() ? _wm->_colorGreen : 0);
drawStep(_glyphMaskSurface, _canvas._glyphMask, &_borderMaskSurface, x, y, w, h, xoff, yoff, 0, 0);
drawStep(_charBoxMaskSurface, _canvas._charBoxMask, &_borderMaskSurface, x, y, w, h, xoff, yoff, 0, 0);
diff --git a/graphics/macgui/mactextwindow.cpp b/graphics/macgui/mactextwindow.cpp
index 70b2ca3a70b..3c8e93289d8 100644
--- a/graphics/macgui/mactextwindow.cpp
+++ b/graphics/macgui/mactextwindow.cpp
@@ -277,7 +277,7 @@ bool MacTextWindow::draw(ManagedSurface *g, bool forceRedraw) {
return false;
g->blitFrom(*_composeSurface, Common::Rect(0, 0, _composeSurface->w, _composeSurface->h), Common::Point(_innerDims.left, _innerDims.top));
- uint32 transcolor = (_wm->_pixelformat.bytesPerPixel == 1) ? _wm->_colorGreen : 0;
+ uint32 transcolor = _wm->_pixelformat.isCLUT8() ? _wm->_colorGreen : 0;
g->transBlitFrom(_borderSurface, Common::Rect(0, 0, _borderSurface.w, _borderSurface.h), Common::Point(_dims.left, _dims.top), transcolor);
return true;
diff --git a/graphics/macgui/macwindow.cpp b/graphics/macgui/macwindow.cpp
index 60d4008fd19..4199132057c 100644
--- a/graphics/macgui/macwindow.cpp
+++ b/graphics/macgui/macwindow.cpp
@@ -230,7 +230,7 @@ bool MacWindow::draw(ManagedSurface *g, bool forceRedraw) {
g->blitFrom(*_composeSurface, Common::Rect(0, 0, _composeSurface->w, _composeSurface->h), Common::Point(_innerDims.left, _innerDims.top));
- uint32 transcolor = (_wm->_pixelformat.bytesPerPixel == 1) ? _wm->_colorGreen : 0;
+ uint32 transcolor = _wm->_pixelformat.isCLUT8() ? _wm->_colorGreen : 0;
g->transBlitFrom(_borderSurface, Common::Rect(0, 0, _borderSurface.w, _borderSurface.h), Common::Point(_dims.left, _dims.top), transcolor);
@@ -239,7 +239,7 @@ bool MacWindow::draw(ManagedSurface *g, bool forceRedraw) {
void MacWindow::blit(ManagedSurface *g, Common::Rect &dest) {
// Only the inner surface is blitted here
- uint32 transcolor = (_wm->_pixelformat.bytesPerPixel == 1) ? _wm->_colorGreen2 : 0;
+ uint32 transcolor = _wm->_pixelformat.isCLUT8() ? _wm->_colorGreen2 : 0;
g->transBlitFrom(*_composeSurface, _composeSurface->getBounds(), dest, transcolor);
}
@@ -337,7 +337,7 @@ void MacWindow::drawBorder() {
}
void MacWindow::drawBorderFromSurface(ManagedSurface *g, uint32 flags) {
- if (_wm->_pixelformat.bytesPerPixel == 1) {
+ if (_wm->_pixelformat.isCLUT8()) {
g->clear(_wm->_colorGreen);
}
@@ -376,19 +376,10 @@ void MacWindow::drawPattern() {
const byte *pat = _wm->getPatterns()[_pattern - 1];
for (int y = 0; y < _composeSurface->h; y++) {
for (int x = 0; x < _composeSurface->w; x++) {
- if (_wm->_pixelformat.bytesPerPixel == 1) {
- byte *dst = (byte *)_composeSurface->getBasePtr(x, y);
- if (pat[y % 8] & (1 << (7 - (x % 8))))
- *dst = _wm->_colorBlack;
- else
- *dst = _wm->_colorWhite;
- } else {
- uint32 *dst = (uint32 *)_composeSurface->getBasePtr(x, y);
- if (pat[y % 8] & (1 << (7 - (x % 8))))
- *dst = _wm->_colorBlack;
- else
- *dst = _wm->_colorWhite;
- }
+ if (pat[y % 8] & (1 << (7 - (x % 8))))
+ _composeSurface->setPixel(x, y, _wm->_colorBlack);
+ else
+ _composeSurface->setPixel(x, y, _wm->_colorWhite);
}
}
}
diff --git a/graphics/macgui/macwindowborder.cpp b/graphics/macgui/macwindowborder.cpp
index 6893c53684b..a5c99783490 100644
--- a/graphics/macgui/macwindowborder.cpp
+++ b/graphics/macgui/macwindowborder.cpp
@@ -258,8 +258,10 @@ void MacWindowBorder::loadBorder(Common::SeekableReadStream &file, uint32 flags,
if (i < palette.size())
surface->setTransparentColor(i);
} else {
- const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 24, 16, 8, 0);
- surface->convertToInPlace(requiredFormat_4byte);
+ if (_window->_wm->_pixelformat.isCLUT8())
+ surface->convertToInPlace(Graphics::PixelFormat::createFormatRGBA32());
+ else
+ surface->convertToInPlace(_window->_wm->_pixelformat);
surface->setTransparentColor(surface->format.RGBToColor(255, 0, 255));
}
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index a6ef4492d13..ff3d804bd81 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -186,7 +186,7 @@ public:
void drawPoint(int x, int y, uint32 color, void *data) override;
};
-MacWindowManager::MacWindowManager(uint32 mode, MacPatterns *patterns, Common::Language language) {
+MacWindowManager::MacWindowManager(uint32 mode, MacPatterns *patterns, Common::Language language, const Graphics::PixelFormat &pixelformat) {
_screen = nullptr;
_screenCopy = nullptr;
_desktopBmp = nullptr;
@@ -228,15 +228,23 @@ MacWindowManager::MacWindowManager(uint32 mode, MacPatterns *patterns, Common::L
_hilitingWidget = false;
- if (mode & kWMMode32bpp) {
- _pixelformat = Graphics::PixelFormat(4, 8, 8, 8, 8, 24, 16, 8, 0);
- _macDrawPrimitives = new MacDrawPrimitives<uint32>();
+ _pixelformat = pixelformat;
+
+ if (_pixelformat.isCLUT8()) {
+ _macDrawPrimitives = new MacDrawPrimitives<byte>();
+ _macDrawInvertPrimitives = new MacDrawInvertPrimitives<byte>();
+ } else if (_pixelformat.bytesPerPixel == 1) {
+ _macDrawPrimitives = new MacDrawPrimitives<byte>();
+ // No implementation yet
+ _macDrawInvertPrimitives = nullptr;
+ } else if (_pixelformat.bytesPerPixel == 2) {
+ _macDrawPrimitives = new MacDrawPrimitives<uint16>();
// No implementation yet
_macDrawInvertPrimitives = nullptr;
} else {
- _pixelformat = PixelFormat::createFormatCLUT8();
- _macDrawPrimitives = new MacDrawPrimitives<byte>();
- _macDrawInvertPrimitives = new MacDrawInvertPrimitives<byte>();
+ _macDrawPrimitives = new MacDrawPrimitives<uint32>();
+ // No implementation yet
+ _macDrawInvertPrimitives = nullptr;
}
if (patterns) {
@@ -891,8 +899,11 @@ void MacWindowManager::loadDesktop() {
Image::BitmapDecoder bmpDecoder;
bmpDecoder.loadStream(*file);
- const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 24, 16, 8, 0);
- _desktopBmp = bmpDecoder.getSurface()->convertTo(requiredFormat_4byte, bmpDecoder.getPalette().data(), bmpDecoder.getPalette().size());
+ if (_pixelformat.isCLUT8()) {
+ _desktopBmp = bmpDecoder.getSurface()->convertTo(Graphics::PixelFormat::createFormatRGBA32(), bmpDecoder.getPalette().data(), bmpDecoder.getPalette().size());
+ } else {
+ _desktopBmp = bmpDecoder.getSurface()->convertTo(_pixelformat, bmpDecoder.getPalette().data(), bmpDecoder.getPalette().size());
+ }
delete file;
}
@@ -900,27 +911,32 @@ void MacWindowManager::loadDesktop() {
void MacWindowManager::setDesktopColor(byte r, byte g, byte b) {
cleanupDesktopBmp();
- const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 24, 16, 8, 0);
- uint32 color = requiredFormat_4byte.RGBToColor(r, g, b);
-
_desktopBmp = new Graphics::Surface();
- _desktopBmp->create(10, 10, requiredFormat_4byte);
- _desktopBmp->fillRect(Common::Rect(10, 10), color);
+ if (_pixelformat.isCLUT8()) {
+ _desktopBmp->create(10, 10, Graphics::PixelFormat::createFormatRGBA32());
+ } else {
+ _desktopBmp->create(10, 10, _pixelformat);
+ }
+ _desktopBmp->fillRect(Common::Rect(10, 10), findBestColor(r, g, b));
}
void MacWindowManager::drawDesktop() {
if (_desktopBmp) {
- for (int i = 0; i < _desktop->w; ++i) {
- for (int j = 0; j < _desktop->h; ++j) {
- uint32 color = *(uint32 *)_desktopBmp->getBasePtr(i % _desktopBmp->w, j % _desktopBmp->h);
- if (_pixelformat.bytesPerPixel == 1) {
+ if (_pixelformat.isCLUT8()) {
+ for (int i = 0; i < _desktop->w; ++i) {
+ for (int j = 0; j < _desktop->h; ++j) {
+ uint32 color = *(uint32 *)_desktopBmp->getBasePtr(i % _desktopBmp->w, j % _desktopBmp->h);
byte r, g, b;
_desktopBmp->format.colorToRGB(color, r, g, b);
if (color > 0) {
*((byte *)_desktop->getBasePtr(i, j)) = findBestColor(r, g, b);
}
- } else {
- *((uint32 *)_desktop->getBasePtr(i, j)) = color;
+ }
+ }
+ } else {
+ for (int i = 0; i < _desktop->w; i += _desktopBmp->w) {
+ for (int j = 0; j < _desktop->h; j += _desktopBmp->h) {
+ _desktop->simpleBlitFrom(*_desktopBmp, Common::Point(i, j));
}
}
}
@@ -1002,7 +1018,7 @@ void MacWindowManager::draw() {
adjustDimensions(clip, outerDims, adjWidth, adjHeight);
- if (_pixelformat.bytesPerPixel == 1) {
+ if (_pixelformat.isCLUT8()) {
Surface *surface = g_system->lockScreen();
ManagedSurface *border = w->getBorderSurface();
@@ -1488,47 +1504,33 @@ void MacWindowManager::passPalette(const byte *pal, uint size) {
}
uint32 MacWindowManager::findBestColor(byte cr, byte cg, byte cb) {
- if (_pixelformat.bytesPerPixel == 4)
+ if (!_pixelformat.isCLUT8())
return _pixelformat.RGBToColor(cr, cg, cb);
return _paletteLookup.findBestColor(cr, cg, cb);
}
-template <>
-void MacWindowManager::decomposeColor<uint32>(uint32 color, byte &r, byte &g, byte &b) {
- _pixelformat.colorToRGB(color, r, g, b);
-}
-
-template <>
-void MacWindowManager::decomposeColor<byte>(uint32 color, byte& r, byte& g, byte& b) {
+void MacWindowManager::getPaletteEntry(uint32 color, byte& r, byte& g, byte& b) {
r = *(_palette + 3 * (byte)color + 0);
g = *(_palette + 3 * (byte)color + 1);
b = *(_palette + 3 * (byte)color + 2);
}
-uint32 MacWindowManager::findBestColor(uint32 color) {
- if (_pixelformat.bytesPerPixel == 4)
- return color;
-
- byte r, g, b;
- decomposeColor<byte>(color, r, g, b);
- return _paletteLookup.findBestColor(r, g, b);
-}
-
byte MacWindowManager::inverter(byte src) {
if (_invertColorHash.contains(src))
return _invertColorHash[src];
- if (_pixelformat.bytesPerPixel == 1) {
+ if (_pixelformat.isCLUT8()) {
byte r, g, b;
- decomposeColor<byte>(src, r, g, b);
+ getPaletteEntry(src, r, g, b);
r = ~r;
g = ~g;
b = ~b;
_invertColorHash[src] = findBestColor(r, g, b);
} else {
- uint32 alpha = _pixelformat.ARGBToColor(255, 0, 0, 0);
- _invertColorHash[src] = ~(src & ~alpha) | alpha;
+ uint32 rgbMask = _pixelformat.ARGBToColor(0, 255, 255, 255);
+ uint32 aMask = _pixelformat.ARGBToColor(255, 0, 0, 0);
+ _invertColorHash[src] = (~src & rgbMask) | aMask;
}
return _invertColorHash[src];
}
@@ -1582,11 +1584,6 @@ void MacWindowManager::printWMMode(int debuglevel) {
if (_mode & kWMModeButtonDialogStyle)
out += " kWMModeButtonDialogStyle";
- if (_mode & kWMMode32bpp)
- out += " kWMMode32bpp";
- else
- out += " !kWMMode32bpp";
-
if (_mode & kWMNoScummVMWallpaper)
out += " kWMNoScummVMWallpaper";
diff --git a/graphics/macgui/macwindowmanager.h b/graphics/macgui/macwindowmanager.h
index 13c1f6cff72..9c456099291 100644
--- a/graphics/macgui/macwindowmanager.h
+++ b/graphics/macgui/macwindowmanager.h
@@ -87,14 +87,13 @@ enum {
kWMModeManualDrawWidgets = (1 << 5),
kWMModeFullscreen = (1 << 6),
kWMModeButtonDialogStyle = (1 << 7),
- kWMMode32bpp = (1 << 8),
- kWMNoScummVMWallpaper = (1 << 9),
- kWMModeWin95 = (1 << 10),
- kWMModeForceMacFontsInWin95 = (1 << 11), // Enforce Mac font for languages which don't have glyphs in ms_sans_serif.ttf
- kWMModeNoCursorOverride = (1 << 12),
- kWMModeForceMacBorder = (1 << 13),
- kWMModeForceMacFonts = (1 << 14), // Enforce Mac fonts even when there are viable TTF substitutions
- kWMModeNoSystemRedraw = (1 << 15), // Skip g_system->copyRectToScreen (for 3D game backends)
+ kWMNoScummVMWallpaper = (1 << 8),
+ kWMModeWin95 = (1 << 9),
+ kWMModeForceMacFontsInWin95 = (1 << 10), // Enforce Mac font for languages which don't have glyphs in ms_sans_serif.ttf
+ kWMModeNoCursorOverride = (1 << 11),
+ kWMModeForceMacBorder = (1 << 12),
+ kWMModeForceMacFonts = (1 << 13), // Enforce Mac fonts even when there are viable TTF substitutions
+ kWMModeNoSystemRedraw = (1 << 14), // Skip g_system->copyRectToScreen (for 3D game backends)
};
}
@@ -147,7 +146,8 @@ struct ZoomBox {
*/
class MacWindowManager {
public:
- MacWindowManager(uint32 mode = 0, MacPatterns *patterns = nullptr, Common::Language language = Common::UNK_LANG);
+ MacWindowManager(uint32 mode = 0, MacPatterns *patterns = nullptr, Common::Language language = Common::UNK_LANG,
+ const Graphics::PixelFormat &pixelFormat = Graphics::PixelFormat::createFormatCLUT8());
~MacWindowManager();
Primitives &getDrawPrimitives() const { return *_macDrawPrimitives; }
@@ -353,9 +353,8 @@ public:
void setEngineActivateMenuCallback(void *engine, void (*redrawCallback)(void *engine));
void passPalette(const byte *palette, uint size);
- template <typename T> void decomposeColor(uint32 color, byte &r, byte &g, byte &b);
+ void getPaletteEntry(uint32 color, byte &r, byte &g, byte &b);
uint32 findBestColor(byte cr, byte cg, byte cb);
- uint32 findBestColor(uint32 color);
void setDesktopColor(byte, byte, byte);
byte inverter(byte src);
diff --git a/gui/gui-manager.cpp b/gui/gui-manager.cpp
index 236612a9a02..d7f4dd03205 100644
--- a/gui/gui-manager.cpp
+++ b/gui/gui-manager.cpp
@@ -1059,9 +1059,9 @@ Graphics::MacWindowManager *GuiManager::getWM() {
SearchMan.addDirectory(dir);
}
- uint32 wmMode = Graphics::kWMModeNoDesktop | Graphics::kWMMode32bpp | Graphics::kWMModeNoCursorOverride;
+ uint32 wmMode = Graphics::kWMModeNoDesktop | Graphics::kWMModeNoCursorOverride;
- _wm = new Graphics::MacWindowManager(wmMode);
+ _wm = new Graphics::MacWindowManager(wmMode, nullptr, Common::UNK_LANG, theme()->getPixelFormat());
return _wm;
}
More information about the Scummvm-git-logs
mailing list