aboutsummaryrefslogtreecommitdiff
path: root/graphics/macgui/macwindowmanager.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2018-07-12 00:34:04 +0200
committerEugene Sandulenko2018-07-12 00:41:11 +0200
commit5684134ef6acaaeaaf9e9f9936f327874daa7f30 (patch)
treecca5cd7cd813a5cc0217a68dfe0c3cd466a664e3 /graphics/macgui/macwindowmanager.cpp
parent000d5fcba8f38b579c8de40511f4f13d79acd0df (diff)
downloadscummvm-rg350-5684134ef6acaaeaaf9e9f9936f327874daa7f30.tar.gz
scummvm-rg350-5684134ef6acaaeaaf9e9f9936f327874daa7f30.tar.bz2
scummvm-rg350-5684134ef6acaaeaaf9e9f9936f327874daa7f30.zip
GRAPHICS: MACGUI: Do not use hardcoded colors
Diffstat (limited to 'graphics/macgui/macwindowmanager.cpp')
-rw-r--r--graphics/macgui/macwindowmanager.cpp55
1 files changed, 53 insertions, 2 deletions
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index cbc2159536..bde17b6e49 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -158,6 +158,9 @@ MacWindowManager::MacWindowManager() {
_menuDelay = 0;
_menuTimerActive = false;
+ _colorBlack = 0;
+ _colorWhite = 2;
+
_fullRefresh = true;
for (int i = 0; i < ARRAYSIZE(fillPatterns); i++)
@@ -290,9 +293,9 @@ void macDrawPixel(int x, int y, int color, void *data) {
void MacWindowManager::drawDesktop() {
Common::Rect r(_screen->getBounds());
- MacPlotData pd(_screen, &_patterns, kPatternCheckers, 1);
+ MacPlotData pd(_screen, &_patterns, kPatternCheckers, 1, _colorWhite);
- Graphics::drawRoundRect(r, kDesktopArc, kColorBlack, true, macDrawPixel, &pd);
+ Graphics::drawRoundRect(r, kDesktopArc, _colorBlack, true, macDrawPixel, &pd);
g_system->copyRectToScreen(_screen->getPixels(), _screen->pitch, 0, 0, _screen->w, _screen->h);
}
@@ -450,5 +453,53 @@ void MacWindowManager::popCursor() {
CursorMan.popCursor();
}
+///////////////////
+// Palette stuff
+///////////////////
+void MacWindowManager::passPalette(const byte *pal, uint size) {
+ const byte *p = pal;
+
+ _colorWhite = -1;
+ _colorBlack = -1;
+
+ // Search pure white and black colors
+ for (uint i = 0; i < size; i++) {
+ if (_colorWhite == -1 && p[0] == 0xff && p[1] == 0xff && p[2] == 0xff)
+ _colorWhite = i;
+
+
+ if (_colorBlack == -1 && p[0] == 0x00 && p[1] == 0x00 && p[2] == 0x00)
+ _colorBlack = i;
+
+ p += 3;
+ }
+
+ if (_colorWhite != -1 && _colorBlack != -1)
+ return;
+
+ // We did not find some color. Let's find closest approximations
+ float darkest = 1000.0f, brightest = -1.0f;
+ int di = -1, bi = -1;
+ p = pal;
+
+ for (uint i = 0; i < size; i++) {
+ float gray = p[0] * 0.3f + p[1] * 0.59f + p[2] * 0.11f;
+
+ if (darkest > gray) {
+ darkest = gray;
+ di = i;
+ }
+
+ if (brightest < gray) {
+ brightest = gray;
+ bi = i;
+ }
+
+ p += 3;
+ }
+
+ _colorWhite = brightest;
+ _colorBlack = darkest;
+}
} // End of namespace Graphics