aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeNew.cpp
diff options
context:
space:
mode:
authorJohannes Schickel2006-04-13 22:20:50 +0000
committerJohannes Schickel2006-04-13 22:20:50 +0000
commitf2370a0560fdae4e748f7fbc1c7da6cd2b44a255 (patch)
tree1b94fc09fc2e0c98ff716b9adb6ca840307a842e /gui/ThemeNew.cpp
parentfb985a26f82ce07e13549091a7655abf50ff357a (diff)
downloadscummvm-rg350-f2370a0560fdae4e748f7fbc1c7da6cd2b44a255.tar.gz
scummvm-rg350-f2370a0560fdae4e748f7fbc1c7da6cd2b44a255.tar.bz2
scummvm-rg350-f2370a0560fdae4e748f7fbc1c7da6cd2b44a255.zip
Deletes color cache and custom dialog shading.
svn-id: r21850
Diffstat (limited to 'gui/ThemeNew.cpp')
-rw-r--r--gui/ThemeNew.cpp240
1 files changed, 7 insertions, 233 deletions
diff --git a/gui/ThemeNew.cpp b/gui/ThemeNew.cpp
index fb6f2099cb..83855b5eea 100644
--- a/gui/ThemeNew.cpp
+++ b/gui/ThemeNew.cpp
@@ -265,22 +265,14 @@ _lastUsedBitMask(0), _forceRedraw(false), _font(0), _imageHandles(0), _images(0)
getExtraValueFromConfig(_configFile, "shadow_bottom_height", _shadowBottomHeight, 4);
// inactive dialog shading stuff
- _numCacheColors = 0;
- _colorCacheTable = 0;
- _usingColorCache = false;
_dialogShadingCallback = 0;
- _shadingEpxressionR = _shadingEpxressionG = _shadingEpxressionB = "";
- _shadingEffect = kShadingEffectNothing;
if (_configFile.hasKey("inactive_dialog_shading", "extra")) {
_configFile.getKey("inactive_dialog_shading", "extra", temp);
- bool createCacheTable = false;
-
if (temp == "no_effect") {
// nothing
} else if (temp == "luminance") {
_dialogShadingCallback = &ThemeNew::calcLuminance;
- _shadingEffect = kShadingEffectLuminance;
// don't cache colors for the luminance effect
//createCacheTable = true;
} else if (temp == "dim") {
@@ -298,38 +290,15 @@ _lastUsedBitMask(0), _forceRedraw(false), _font(0), _imageHandles(0), _images(0)
if (_dimPercentValue != 0) {
_dimPercentValue = 256 * (100 - _dimPercentValue) / 100;
_dialogShadingCallback = &ThemeNew::calcDimColor;
- createCacheTable = true;
- _shadingEffect = kShadingEffectDim;
}
}
- } else if (temp == "custom") {
- if (_configFile.hasKey("shading_custom_r", "extra") && _configFile.hasKey("shading_custom_g", "extra")
- && _configFile.hasKey("shading_custom_b", "extra")) {
- _configFile.getKey("shading_custom_r", "extra", _shadingEpxressionR);
- _configFile.getKey("shading_custom_g", "extra", _shadingEpxressionG);
- _configFile.getKey("shading_custom_b", "extra", _shadingEpxressionB);
-
- _dialogShadingCallback = &ThemeNew::calcCustomColor;
- createCacheTable = true;
- _shadingEffect = kShadingEffectCustom;
- } else {
- warning("not all custom shading expressions are defined, please check for 'shading_custom_r', 'shading_custom_g' and 'shading_custom_b'");
- }
} else {
warning("no valid 'inactive_dialog_shading' specified");
}
-
- if (createCacheTable) {
- _numCacheColors = 65536;
- _usingColorCache = true;
- _colorCacheTable = new OverlayColor[_numCacheColors];
- assert(_colorCacheTable);
- }
}
// load the colors from the config file
setupColors();
- clearColorCache();
_imageHandles = imageHandlesTable;
@@ -400,7 +369,6 @@ void ThemeNew::refresh() {
void ThemeNew::enable() {
init();
- setupColorCache();
resetupGuiRenderer();
resetDrawArea();
_system->showOverlay();
@@ -408,7 +376,6 @@ void ThemeNew::enable() {
}
void ThemeNew::disable() {
- clearColorCache();
_system->hideOverlay();
}
@@ -420,24 +387,11 @@ void ThemeNew::openDialog(bool topDialog) {
_dialog->screen.create(_screen.w, _screen.h, sizeof(OverlayColor));
}
- if (_colorCacheTable && topDialog) {
+ if (_dialogShadingCallback && topDialog) {
OverlayColor *col = (OverlayColor*)_screen.pixels;
- uint8 r, g, b;
for (int y = 0; y < _screen.h; ++y) {
for (int x = 0; x < _screen.w; ++x) {
- _system->colorToRGB(col[x], r, g, b);
- r = (r >> 3) & 0x1F;
- g = (g >> 2) & 0x3F;
- b = (b >> 3) & 0x1F;
- col[x] = _colorCacheTable[(r << 11) | (g << 5) | b];
- }
- col += _screen.w;
- }
- } else if (_dialogShadingCallback && topDialog) {
- OverlayColor *col = (OverlayColor*)_screen.pixels;
- for (int y = 0; y < _screen.h; ++y) {
- for (int x = 0; x < _screen.w; ++x) {
- col[x] = (this->*(_dialogShadingCallback))(col[x], false);
+ col[x] = (this->*(_dialogShadingCallback))(col[x]);
}
col += _screen.w;
}
@@ -445,7 +399,7 @@ void ThemeNew::openDialog(bool topDialog) {
memcpy(_dialog->screen.pixels, _screen.pixels, _screen.pitch*_screen.h);
- if ((_colorCacheTable || _dialogShadingCallback) && topDialog)
+ if ((_dialogShadingCallback) && topDialog)
addDirtyRect(Common::Rect(0, 0, _screen.w, _screen.h), false, false);
}
@@ -1331,181 +1285,22 @@ void ThemeNew::setupColors() {
getColorFromConfig(_configFile, "scrollbar_slider_highlight_end", _colors[kScrollbarSliderHighlightEnd]);
getColorFromConfig(_configFile, "caret_color", _colors[kCaretColor]);
-
- setupColorCache();
}
#pragma mark -
-void ThemeNew::setupColorCache() {
- if (!_usingColorCache)
- return;
- if (!_colorCacheTable) {
- _colorCacheTable = new OverlayColor[_numCacheColors];
- assert(_colorCacheTable);
- }
- // TODO: show process bar?
- if (!loadCacheFile()) {
- // inactive dialog cache
- if (_dialogShadingCallback) {
- memset(_colorCacheTable, 0, sizeof(OverlayColor)*_numCacheColors);
- for (uint i = 0; i < _numCacheColors; ++i) {
- _colorCacheTable[i] = (this->*(_dialogShadingCallback))(i, true);
- }
- }
- createCacheFile();
- }
-}
-
-void ThemeNew::clearColorCache() {
- delete [] _colorCacheTable;
- _colorCacheTable = 0;
-}
-
-static uint32 hashString(const Common::String &string) {
- uint32 hash = 0;
- for (uint i = 0; i < string.size(); ++i) {
- int offset = (hash % 30);
- hash ^= (uint32)(string[i]) << offset;
- }
- return hash;
-}
-
-bool ThemeNew::loadCacheFile() {
- if (sizeof(OverlayColor) != 2) {
- warning("color cache only supported for 15/16 bpp mode");
- return false;
- }
-
- if (!_colorCacheTable || _shadingEffect == kShadingEffectNothing)
- return false;
-
- Common::File cacheFile;
- if (!cacheFile.open(cacheFileName().c_str()))
- return false;
-
- if (cacheFile.readUint32BE() != _numCacheColors)
- return false;
-
- switch (_shadingEffect) {
- case kShadingEffectDim: {
- int cachedDim = cacheFile.readUint32BE();
- if (cachedDim != _dimPercentValue)
- return false;
- } break;
-
- case kShadingEffectCustom: {
- uint32 size = 0;
- uint32 hash = 0;
-
- size = cacheFile.readUint32BE();
- hash = cacheFile.readUint32BE();
- if (size != _shadingEpxressionR.size() || hash != hashString(_shadingEpxressionR))
- return false;
-
- size = cacheFile.readUint32BE();
- hash = cacheFile.readUint32BE();
- if (size != _shadingEpxressionG.size() || hash != hashString(_shadingEpxressionG))
- return false;
-
- size = cacheFile.readUint32BE();
- hash = cacheFile.readUint32BE();
- if (size != _shadingEpxressionB.size() || hash != hashString(_shadingEpxressionB))
- return false;
- } break;
-
- default:
- break;
- }
-
- for (uint i = 0; i < _numCacheColors; ++i) {
- _colorCacheTable[i] = cacheFile.readUint16BE();
- }
-
- return !cacheFile.ioFailed();
-}
-
-bool ThemeNew::createCacheFile() {
- if (sizeof(OverlayColor) != 2) {
- warning("color cache only supported for 15/16 bpp mode");
- return false;
- }
-
- if (!_colorCacheTable || _shadingEffect == kShadingEffectNothing)
- return false;
-
- Common::File cacheFile;
- if (!cacheFile.open(cacheFileName().c_str(), Common::File::kFileWriteMode))
- return false;
-
- cacheFile.writeUint32BE(_numCacheColors);
-
- switch (_shadingEffect) {
- case kShadingEffectDim: {
- cacheFile.writeUint32BE(_dimPercentValue);
- } break;
-
- case kShadingEffectCustom: {
- uint32 size = 0;
- uint32 hash = 0;
-
- size = _shadingEpxressionR.size();
- hash = hashString(_shadingEpxressionR);
- cacheFile.writeUint32BE(size);
- cacheFile.writeUint32BE(hash);
-
- size = _shadingEpxressionG.size();
- hash = hashString(_shadingEpxressionG);
- cacheFile.writeUint32BE(size);
- cacheFile.writeUint32BE(hash);
-
- size = _shadingEpxressionB.size();
- hash = hashString(_shadingEpxressionB);
- cacheFile.writeUint32BE(size);
- cacheFile.writeUint32BE(hash);
- } break;
-
- default:
- break;
- }
-
- for (uint i = 0; i < _numCacheColors; ++i) {
- cacheFile.writeUint16BE(_colorCacheTable[i]);
- }
-
- return !cacheFile.ioFailed();
-}
-
-Common::String ThemeNew::cacheFileName() {
- char filebuf[128];
- snprintf(filebuf, 128, "theme-colorcache-%d-%d.raw", gBitFormat, _shadingEffect);
- return filebuf;
-}
-
-OverlayColor ThemeNew::calcLuminance(OverlayColor col, bool cache) {
+OverlayColor ThemeNew::calcLuminance(OverlayColor col) {
uint8 r, g, b;
- if (cache) {
- r = ((col & 0xF800) >> 11) << 3;
- g = ((col & 0x07E0) >> 5) << 2;
- b = (col & 0x001F) << 3;
- } else {
- _system->colorToRGB(col, r, g, b);
- }
+ _system->colorToRGB(col, r, g, b);
uint lum = (r >> 2) + (g >> 1) + (b >> 3);
return _system->RGBToColor(lum, lum, lum);
}
-OverlayColor ThemeNew::calcDimColor(OverlayColor col, bool cache) {
+OverlayColor ThemeNew::calcDimColor(OverlayColor col) {
uint8 r, g, b;
- if (cache) {
- r = ((col & 0xF800) >> 11) << 3;
- g = ((col & 0x07E0) >> 5) << 2;
- b = (col & 0x001F) << 3;
- } else {
- _system->colorToRGB(col, r, g, b);
- }
+ _system->colorToRGB(col, r, g, b);
r = r * _dimPercentValue >> 8;
g = g * _dimPercentValue >> 8;
@@ -1514,27 +1309,6 @@ OverlayColor ThemeNew::calcDimColor(OverlayColor col, bool cache) {
return _system->RGBToColor(r, g, b);
}
-OverlayColor ThemeNew::calcCustomColor(OverlayColor col, bool cache) {
- uint8 r, g, b;
- if (cache) {
- r = ((col & 0xF800) >> 11) << 3;
- g = ((col & 0x07E0) >> 5) << 2;
- b = (col & 0x001F) << 3;
- } else {
- _system->colorToRGB(col, r, g, b);
- }
-
- _evaluator->setVar("r", r);
- _evaluator->setVar("g", g);
- _evaluator->setVar("b", b);
-
- r = _evaluator->eval(_shadingEpxressionR, "extra", "shading_custom_r", 0);
- g = _evaluator->eval(_shadingEpxressionG, "extra", "shading_custom_g", 0);
- b = _evaluator->eval(_shadingEpxressionB, "extra", "shading_custom_b", 0);
-
- return _system->RGBToColor(r, g, b);
-}
-
#pragma mark -
template<class T>