From f2370a0560fdae4e748f7fbc1c7da6cd2b44a255 Mon Sep 17 00:00:00 2001 From: Johannes Schickel Date: Thu, 13 Apr 2006 22:20:50 +0000 Subject: Deletes color cache and custom dialog shading. svn-id: r21850 --- gui/ThemeNew.cpp | 240 ++----------------------------------------------------- 1 file changed, 7 insertions(+), 233 deletions(-) (limited to 'gui/ThemeNew.cpp') 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 -- cgit v1.2.3