aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeClassic.cpp
diff options
context:
space:
mode:
authorVicent Marti2008-08-13 17:46:00 +0000
committerVicent Marti2008-08-13 17:46:00 +0000
commit2b52383534ecb5c3770dfb267d7238516f0ca144 (patch)
tree0dc6b6d060b0a489f5f1b88fe7c46d24ee4ad458 /gui/ThemeClassic.cpp
parent1d9f98d121e51943b4967cf6188062aae9195af4 (diff)
downloadscummvm-rg350-2b52383534ecb5c3770dfb267d7238516f0ca144.tar.gz
scummvm-rg350-2b52383534ecb5c3770dfb267d7238516f0ca144.tar.bz2
scummvm-rg350-2b52383534ecb5c3770dfb267d7238516f0ca144.zip
Finished legacy API cleanup. Removed all legacy code.
Possible regressions. svn-id: r33833
Diffstat (limited to 'gui/ThemeClassic.cpp')
-rw-r--r--gui/ThemeClassic.cpp710
1 files changed, 0 insertions, 710 deletions
diff --git a/gui/ThemeClassic.cpp b/gui/ThemeClassic.cpp
deleted file mode 100644
index eaf86d1cbb..0000000000
--- a/gui/ThemeClassic.cpp
+++ /dev/null
@@ -1,710 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- */
-
-#include "gui/ThemeClassic.h"
-#include "gui/eval.h"
-
-namespace GUI {
-ThemeClassic::ThemeClassic(OSystem *system, const Common::String &config, const Common::ConfigFile *cfg) : Theme() {
- _enableBlending = true;
- _stylefile = config;
- _system = system;
- _initOk = false;
- _enabled = false;
- _font = 0;
- _fontName.clear();
- memset(&_screen, 0, sizeof(_screen));
-#ifndef CT_NO_TRANSPARENCY
- memset(&_dialog, 0, sizeof(_dialog));
-#endif
- _font = 0;
-
- // 'classic' is always the built in one, we force it and
- // ignore all 'classic' named config files
- if (config.compareToIgnoreCase("classic (builtin)") != 0) {
- if (cfg)
- _configFile = *cfg;
- else
- loadConfigFile(_stylefile);
- }
-
- if (_configFile.hasKey("name", "theme"))
- _configFile.getKey("name", "theme", _stylename);
- else
- _stylename = _stylefile;
-}
-
-ThemeClassic::~ThemeClassic() {
- deinit();
-}
-
-bool ThemeClassic::init() {
- deinit();
- _screen.create(_system->getOverlayWidth(), _system->getOverlayHeight(), sizeof(OverlayColor));
- if (_screen.pixels) {
- _initOk = true;
- clearAll();
- resetDrawArea();
- }
-
- if (isThemeLoadingRequired()) {
- loadTheme(_defaultConfig);
- loadTheme(_configFile, false, true);
-
- setupConfig();
- }
-
- _bgcolor = _system->RGBToColor(_colors[kBGColor][0], _colors[kBGColor][1], _colors[kBGColor][2]);
- _color = _system->RGBToColor(_colors[kColor][0], _colors[kColor][1], _colors[kColor][2]);
- _shadowcolor = _system->RGBToColor(_colors[kShadowColor][0], _colors[kShadowColor][1], _colors[kShadowColor][2]);
- _textcolor = _system->RGBToColor(_colors[kTextColor][0], _colors[kTextColor][1], _colors[kTextColor][2]);
- _textcolorhi = _system->RGBToColor(_colors[kTextColorHi][0], _colors[kTextColorHi][1], _colors[kTextColorHi][2]);
- if (_fontName.empty()) {
- if (_screen.w >= 400 && _screen.h >= 300) {
- _font = FontMan.getFontByUsage(Graphics::FontManager::kBigGUIFont);
- } else {
- _font = FontMan.getFontByUsage(Graphics::FontManager::kGUIFont);
- }
- }
-
- return true;
-}
-
-void ThemeClassic::deinit() {
- if (_initOk) {
- _system->hideOverlay();
- _screen.free();
- _initOk = false;
- }
-}
-
-void ThemeClassic::refresh() {
- init();
- if (_enabled)
- _system->showOverlay();
-}
-
-void ThemeClassic::enable() {
- init();
- resetDrawArea();
- _system->showOverlay();
- clearAll();
- _enabled = true;
-}
-
-void ThemeClassic::disable() {
- _system->hideOverlay();
- _enabled = false;
-}
-
-void ThemeClassic::openDialog(bool topDialog, ShadingStyle shading) {
-#ifndef CT_NO_TRANSPARENCY
- if (!_dialog) {
- _dialog = new DialogState;
- assert(_dialog);
- // first dialog
- _dialog->screen.create(_screen.w, _screen.h, sizeof(OverlayColor));
- }
- memcpy(_dialog->screen.pixels, _screen.pixels, _screen.pitch*_screen.h);
- if (!_enableBlending)
- _dialog->screen.fillRect(Common::Rect(0, 0, _screen.w, _screen.h), _bgcolor);
- else
- blendScreenToDialog();
-#endif
-}
-
-void ThemeClassic::closeAllDialogs() {
-#ifndef CT_NO_TRANSPARENCY
- if (_dialog) {
- _dialog->screen.free();
- delete _dialog;
- _dialog = 0;
- }
- _forceRedraw = true;
-#endif
-}
-
-void ThemeClassic::clearAll() {
- if (!_initOk)
- return;
- _system->clearOverlay();
- // FIXME: problem with the 'pitch'
- _system->grabOverlay((OverlayColor*)_screen.pixels, _screen.w);
-}
-
-void ThemeClassic::updateScreen() {
- _forceRedraw = false;
-}
-
-void ThemeClassic::resetDrawArea() {
- if (_initOk) {
- _drawArea = Common::Rect(0, 0, _screen.w, _screen.h);
- }
-}
-
-int ThemeClassic::getTabSpacing() const {
- return 2;
-}
-int ThemeClassic::getTabPadding() const {
- return 3;
-}
-
-void ThemeClassic::drawDialogBackground(const Common::Rect &r, uint16 hints, WidgetStateInfo state) {
- if (!_initOk)
- return;
-
- restoreBackground(r);
-
-#ifndef CT_NO_TRANSPARENCY
- if ((hints & THEME_HINT_SAVE_BACKGROUND) && !(hints & THEME_HINT_FIRST_DRAW) && !_forceRedraw) {
- addDirtyRect(r);
- return;
- }
-#endif
-
- box(r.left, r.top, r.width(), r.height(), _color, _shadowcolor);
- addDirtyRect(r, (hints & THEME_HINT_SAVE_BACKGROUND) != 0);
-}
-
-void ThemeClassic::drawText(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, TextAlign align, bool inverted, int deltax, bool useEllipsis, FontStyle font) {
- if (!_initOk)
- return;
-
- if (!inverted) {
- restoreBackground(r);
- _font->drawString(&_screen, str, r.left, r.top, r.width(), getColor(state), convertAligment(align), deltax, useEllipsis);
- } else {
- _screen.fillRect(r, getColor(state));
- _font->drawString(&_screen, str, r.left, r.top, r.width(), _bgcolor, convertAligment(align), deltax, useEllipsis);
- }
-
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawChar(const Common::Rect &r, byte ch, const Graphics::Font *font, WidgetStateInfo state) {
- if (!_initOk)
- return;
- restoreBackground(r);
- font->drawChar(&_screen, ch, r.left, r.top, getColor(state));
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawWidgetBackground(const Common::Rect &r, uint16 hints, WidgetBackground background, WidgetStateInfo state) {
- if (!_initOk || background == kWidgetBackgroundNo)
- return;
-
- restoreBackground(r);
-
-#ifndef CT_NO_TRANSPARENCY
- if ((hints & THEME_HINT_SAVE_BACKGROUND) && !(hints & THEME_HINT_FIRST_DRAW) && !_forceRedraw) {
- addDirtyRect(r);
- return;
- }
-#endif
-
- switch (background) {
- case kWidgetBackgroundBorder:
- box(r.left, r.top, r.width(), r.height(), _color, _shadowcolor);
- break;
-
- //case kWidgetBackgroundPlain:
- //case kWidgetBackgroundBorderSmall:
- default:
- box(r.left, r.top, r.width(), r.height());
- break;
- };
-
- addDirtyRect(r, (hints & THEME_HINT_SAVE_BACKGROUND) != 0);
-}
-
-void ThemeClassic::drawButton(const Common::Rect &r, const Common::String &str, WidgetStateInfo state, uint16 hints) {
- if (!_initOk)
- return;
- restoreBackground(r);
-
- drawWidgetBackground(r, 0, kWidgetBackgroundBorder, state);
-
- const int off = (r.height() - _font->getFontHeight()) / 2;
- _font->drawString(&_screen, str, r.left, r.top+off, r.width(), getColor(state), Graphics::kTextAlignCenter, 0, false);
-
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, WidgetStateInfo state, int alpha, bool themeTrans) {
- if (!_initOk)
- return;
-
- Common::Rect rect(r.left, r.top, r.left + surface.w, r.top + surface.h);
- rect.clip(_screen.w, _screen.h);
-
- if (!rect.isValidRect())
- return;
-
- assert(surface.bytesPerPixel == sizeof(OverlayColor));
-
- OverlayColor *src = (OverlayColor *)surface.pixels;
- OverlayColor *dst = (OverlayColor *)_screen.getBasePtr(rect.left, rect.top);
-
- int w = rect.width();
- int h = rect.height();
-
- while (h--) {
- memcpy(dst, src, surface.pitch);
- src += w;
- // FIXME: this should be pitch
- dst += _screen.w;
- }
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawSlider(const Common::Rect &r, int width, WidgetStateInfo state) {
- if (!_initOk)
- return;
- Common::Rect r2 = r;
-
- restoreBackground(r);
-
- box(r.left, r.top, r.width(), r.height(), _color, _shadowcolor);
- r2.left = r.left + 2;
- r2.top = r.top + 2;
- r2.bottom = r.bottom - 2;
- r2.right = r2.left + width;
- if (r2.right > r.right - 2) {
- r2.right = r.right - 2;
- }
-
- _screen.fillRect(r2, getColor(state));
-
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, WidgetStateInfo state, TextAlign align) {
- if (!_initOk)
- return;
-
- restoreBackground(r);
-
- box(r.left, r.top, r.width(), r.height());
-
- Common::Point p0, p1;
-
- p0 = Common::Point(r.right + 1 - r.height() / 2, r.top + 4);
- p1 = Common::Point(r.right + 1 - r.height() / 2, r.bottom - 4);
-
- OverlayColor color = getColor(state);
-
- // Evil HACK to draw filled triangles
- // FIXME: The "big" version is pretty ugly.
- for (; p1.y - p0.y > 1; p0.y++, p0.x--, p1.y--, p1.x++) {
- _screen.drawLine(p0.x, p0.y, p1.x, p0.y, color);
- _screen.drawLine(p0.x, p1.y, p1.x, p1.y, color);
- }
-
- if (!sel.empty()) {
- Common::Rect text(r.left + 2, r.top + 3, r.right - 4, r.top + 3 + _font->getFontHeight());
- _font->drawString(&_screen, sel, text.left, text.top, text.width(), color, convertAligment(align), deltax, false);
- }
-
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, WidgetStateInfo state) {
- if (!_initOk)
- return;
-
- Common::Rect r2 = r;
- int checkBoxSize = getFontHeight();
- if (checkBoxSize > r.height()) {
- checkBoxSize = r.height();
- }
- r2.bottom = r2.top + checkBoxSize;
-
- restoreBackground(r2);
-
- box(r.left, r.top, checkBoxSize, checkBoxSize, _color, _shadowcolor);
-
- if (checked) {
- r2.top += 3;
- r2.bottom = r.top + checkBoxSize - 4;
- r2.left += 3;
- r2.right = r.left + checkBoxSize - 4;
-
- OverlayColor c = getColor(state);
-
- // Draw a cross
- _screen.drawLine(r2.left, r2.top, r2.right, r2.bottom, c);
- _screen.drawLine(r2.left, r2.bottom, r2.right, r2.top, c);
-
- if (r2.height() > 5) {
- // Thicken the lines
- _screen.drawLine(r2.left, r2.top + 1, r2.right - 1, r2.bottom, c);
- _screen.drawLine(r2.left + 1, r2.top, r2.right, r2.bottom - 1, c);
- _screen.drawLine(r2.left, r2.bottom - 1, r2.right - 1, r2.top, c);
- _screen.drawLine(r2.left + 1, r2.bottom, r2.right, r2.top + 1, c);
- }
-
- r2 = r;
- }
-
- r2.left += checkBoxSize + 10;
- _font->drawString(&_screen, str, r2.left, r2.top, r2.width(), getColor(state), Graphics::kTextAlignLeft, 0, true);
-
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, int titleVPad, WidgetStateInfo state) {
- if (!_initOk)
- return;
- restoreBackground(r);
-
- for (int i = 0; i < (int)tabs.size(); ++i) {
- if (i == active)
- continue;
- box(r.left + i * tabWidth, r.top+2, tabWidth, tabHeight-2, _color, _shadowcolor);
- _font->drawString(&_screen, tabs[i], r.left + i * tabWidth, r.top+4, tabWidth, getColor(state), Graphics::kTextAlignCenter, 0, true);
- }
-
- if (active >= 0) {
- box(r.left + active * tabWidth, r.top, tabWidth, tabHeight, _color, _shadowcolor, true);
- _font->drawString(&_screen, tabs[active], r.left + active * tabWidth, r.top+titleVPad, tabWidth, getColor(kStateHighlight), Graphics::kTextAlignCenter, 0, true);
-
- _screen.hLine(r.left, r.top + tabHeight, r.left + active * tabWidth + 1, _color);
- _screen.hLine(r.left + active * tabWidth + tabWidth - 2, r.top + tabHeight, r.right, _color);
- _screen.hLine(r.left, r.bottom - 1, r.right - 1, _shadowcolor);
- _screen.vLine(r.left, r.top + tabHeight, r.bottom - 1, _color);
- _screen.vLine(r.right - 1, r.top + tabHeight, r.bottom - 1, _shadowcolor);
- }
-
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeight, ScrollbarState scroll, WidgetStateInfo state) {
- if (!_initOk)
- return;
- restoreBackground(r);
- Common::Rect r2 = r;
- box(r.left, r.top, r.width(), r.height(), _color, _shadowcolor);
-
- const int UP_DOWN_BOX_HEIGHT = r.width() + 1;
- const int B = 3;
- const int arrowSize = (r.width() / 2 - B + 1);
-
- OverlayColor color = 0;
- if (scroll == kScrollbarStateSinglePage) {
- color = _color;
- } else if (scroll == kScrollbarStateUp && state == kStateHighlight) {
- color = _textcolorhi;
- } else {
- color = _textcolor;
- }
-
- // draws the 'up' button
- box(r.left, r.top, r.width(), UP_DOWN_BOX_HEIGHT, _color, _shadowcolor);
- Common::Point p0 = Common::Point(r.left + r.width() / 2, r.top + (UP_DOWN_BOX_HEIGHT - arrowSize - 1) / 2);
- Common::Point p1 = Common::Point(p0.x - arrowSize, p0.y + arrowSize);
- Common::Point p2 = Common::Point(p0.x + arrowSize, p0.y + arrowSize);
- for (; p1.x <= p2.x; ++p1.x)
- _screen.drawLine(p0.x, p0.y, p1.x, p1.y, color);
-
- if (scroll != kScrollbarStateSinglePage) {
- r2.top += sliderY;
- r2.left += 2;
- r2.right -= 2;
- r2.bottom = r2.top + sliderHeight;
- _screen.fillRect(r2, (state == kStateHighlight && scroll == kScrollbarStateSlider) ? _textcolorhi : _textcolor);
- box(r2.left, r2.top, r2.width(), r2.height());
- int y = r2.top + sliderHeight / 2;
- color = (state == kStateHighlight && scroll == kScrollbarStateSlider) ? _color : _bgcolor;
- _screen.hLine(r2.left + 1, y - 2, r2.right - 2, color);
- _screen.hLine(r2.left + 1, y, r2.right - 2, color);
- _screen.hLine(r2.left + 1, y + 2, r2.right - 2, color);
- r2 = r;
- }
-
- r2.top = r2.bottom - UP_DOWN_BOX_HEIGHT;
- if (scroll == kScrollbarStateSinglePage) {
- color = _color;
- } else if (scroll == kScrollbarStateDown && state == kStateHighlight) {
- color = _textcolorhi;
- } else {
- color = _textcolor;
- }
-
- // draws the 'down' button
- box(r2.left, r2.top, r2.width(), UP_DOWN_BOX_HEIGHT, _color, _shadowcolor);
- p0 = Common::Point(r2.left + r2.width() / 2, r2.top + (UP_DOWN_BOX_HEIGHT + arrowSize + 1) / 2);
- p1 = Common::Point(p0.x - arrowSize, p0.y - arrowSize);
- p2 = Common::Point(p0.x + arrowSize, p0.y - arrowSize);
- for (; p1.x <= p2.x; ++p1.x)
- _screen.drawLine(p0.x, p0.y, p1.x, p1.y, color);
-
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawCaret(const Common::Rect &r, bool erase, WidgetStateInfo state) {
- if (!_initOk)
- return;
-
- OverlayColor color = 0;
- if (erase) {
- color = _bgcolor;
- } else {
- color = getColor(state);
- }
-
- _screen.vLine(r.left, r.top, r.bottom - 2, color);
- addDirtyRect(r);
-}
-
-void ThemeClassic::drawLineSeparator(const Common::Rect &r, WidgetStateInfo state) {
- if (!_initOk)
- return;
- _screen.hLine(r.left - 1, r.top + r.height() / 2, r.right, _shadowcolor);
- _screen.hLine(r.left, r.top + 1 + r.height() / 2, r.right, _color);
- addDirtyRect(r);
-}
-
-// intern drawing
-
-void ThemeClassic::restoreBackground(Common::Rect r, bool special) {
- r.clip(_screen.w, _screen.h);
- r.clip(_drawArea);
-#ifdef CT_NO_TRANSPARENCY
- _screen.fillRect(r, _bgcolor);
-#else
- if (_dialog) {
- if (!_dialog->screen.pixels) {
- _screen.fillRect(r, _bgcolor);
- return;
- }
- const OverlayColor *src = (const OverlayColor*)_dialog->screen.getBasePtr(r.left, r.top);
- OverlayColor *dst = (OverlayColor*)_screen.getBasePtr(r.left, r.top);
-
- int h = r.height();
- int w = r.width();
- while (h--) {
- memcpy(dst, src, w*sizeof(OverlayColor));
- src += _dialog->screen.w;
- dst += _screen.w;
- }
- } else {
- _screen.fillRect(r, _bgcolor);
- }
-#endif
-}
-
-bool ThemeClassic::addDirtyRect(Common::Rect r, bool save, bool special) {
- // TODO: implement proper dirty rect handling
- // FIXME: problem with the 'pitch'
- r.clip(_screen.w, _screen.h);
- r.clip(_drawArea);
- _system->copyRectToOverlay((OverlayColor*)_screen.getBasePtr(r.left, r.top), _screen.w, r.left, r.top, r.width(), r.height());
-#ifndef CT_NO_TRANSPARENCY
- if (_dialog && save) {
- if (_dialog->screen.pixels) {
- OverlayColor *dst = (OverlayColor*)_dialog->screen.getBasePtr(r.left, r.top);
- const OverlayColor *src = (const OverlayColor*)_screen.getBasePtr(r.left, r.top);
- int h = r.height();
- while (h--) {
- memcpy(dst, src, r.width()*sizeof(OverlayColor));
- dst += _dialog->screen.w;
- src += _screen.w;
- }
- }
- }
-#endif
- return true;
-}
-
-void ThemeClassic::box(int x, int y, int width, int height, OverlayColor colorA, OverlayColor colorB, bool skipLastRow) {
- if (y >= 0) {
- _screen.hLine(x + 1, y, x + width - 2, colorA);
- _screen.hLine(x, y + 1, x + width - 1, colorA);
- }
- int drawY = y;
- if (drawY < 0) {
- height += drawY;
- drawY = 0;
- }
- _screen.vLine(x, drawY + 1, drawY + height - 2, colorA);
- _screen.vLine(x + 1, drawY, drawY + height - 1, colorA);
- _screen.vLine(x + width - 1, drawY + 1, drawY + height - 2, colorB);
- _screen.vLine(x + width - 2, drawY + 1, drawY + height - 1, colorB);
-
- if (y + height >= 0 && !skipLastRow) {
- _screen.hLine(x + 1, drawY + height - 2, x + width - 1, colorB);
- _screen.hLine(x + 1, drawY + height - 1, x + width - 2, colorB);
- }
-}
-
-void ThemeClassic::box(int x, int y, int w, int h) {
- _screen.hLine(x, y, x + w - 1, _color);
- _screen.hLine(x, y + h - 1, x +w - 1, _shadowcolor);
- _screen.vLine(x, y, y + h - 1, _color);
- _screen.vLine(x + w - 1, y, y + h - 1, _shadowcolor);
-}
-
-OverlayColor ThemeClassic::getColor(State state) {
- OverlayColor usedColor = _color;
- switch (state) {
- case kStateEnabled:
- usedColor = _textcolor;
- break;
-
- case kStateHighlight:
- usedColor = _textcolorhi;
- break;
-
- default:
- break;
- }
- return usedColor;
-}
-
-#ifndef CT_NO_TRANSPARENCY
-void ThemeClassic::blendScreenToDialog() {
- Common::Rect rect(0, 0, _screen.w, _screen.h);
-
- if (!rect.isValidRect())
- return;
-
- if (_system->hasFeature(OSystem::kFeatureOverlaySupportsAlpha)) {
- int a, r, g, b;
- uint8 aa, ar, ag, ab;
- _system->colorToARGB(_bgcolor, aa, ar, ag, ab);
- a = aa*3/(3+1);
- if (a < 1)
- return;
- r = ar * a;
- g = ag * a;
- b = ab * a;
-
- OverlayColor *ptr = (OverlayColor*)_dialog->screen.getBasePtr(rect.left, rect.top);
-
- int h = rect.height();
- int w = rect.width();
- while (h--) {
- for (int i = 0; i < w; i++) {
- _system->colorToARGB(ptr[i], aa, ar, ag, ab);
- int a2 = aa + a - (a*aa)/255;
- ptr[i] = _system->ARGBToColor(a2,
- ((255-a)*aa*ar/255+r)/a2,
- ((255-a)*aa*ag/255+g)/a2,
- ((255-a)*aa*ab/255+b)/a2);
- }
- ptr += _screen.w;
- }
- } else {
- int r, g, b;
- uint8 ar, ag, ab;
- _system->colorToRGB(_bgcolor, ar, ag, ab);
- r = ar * 3;
- g = ag * 3;
- b = ab * 3;
-
- OverlayColor *ptr = (OverlayColor*)_dialog->screen.getBasePtr(rect.left, rect.top);
-
- int h = rect.height();
- int w = rect.width();
-
- while (h--) {
- for (int i = 0; i < w; i++) {
- _system->colorToRGB(ptr[i], ar, ag, ab);
- ptr[i] = _system->RGBToColor((ar + r) / (3+1),
- (ag + g) / (3+1),
- (ab + b) / (3+1));
- }
- ptr += _screen.w;
- }
- }
-}
-#endif
-
-void ThemeClassic::setupConfig() {
- if (_configFile.hasSection("theme")) {
- if (loadConfig())
- return;
- }
-
- static const uint8 colors[][3] = {
- { 104, 104, 104 },
- { 64, 64, 64 },
- { 0, 0, 0, },
- { 32, 160, 32 },
- { 0, 255, 0 }
- };
-
- memcpy(_colors, colors, sizeof(colors));
-}
-
-bool ThemeClassic::loadConfig() {
- Common::String temp;
- _configFile.getKey("version", "theme", temp);
- if (atoi(temp.c_str()) != THEME_VERSION) {
- // TODO: improve this detection and handle it nicer
- warning("Theme config uses a different version (you have: '%s', needed is: '%d')", temp.c_str(), THEME_VERSION);
- _configFile.clear();
-
- // force a theme reload here
- loadTheme(_defaultConfig);
- return false;
- }
-
- temp.clear();
- _configFile.getKey("type", "theme", temp);
- if (0 != temp.compareToIgnoreCase("classic")) {
- warning("Theme config is not for the classic style theme");
- _configFile.clear();
-
- // force a theme reload here
- loadTheme(_defaultConfig);
- return false;
- }
-
- getColorFromConfig("color", _colors[kColor][0], _colors[kColor][1], _colors[kColor][2]);
- getColorFromConfig("shadowcolor", _colors[kShadowColor][0], _colors[kShadowColor][1], _colors[kShadowColor][2]);
- getColorFromConfig("bgcolor", _colors[kBGColor][0], _colors[kBGColor][1], _colors[kBGColor][2]);
- getColorFromConfig("textcolor", _colors[kTextColor][0], _colors[kTextColor][1], _colors[kTextColor][2]);
- getColorFromConfig("textcolorhi", _colors[kTextColorHi][0], _colors[kTextColorHi][1], _colors[kTextColorHi][2]);
-
- temp.clear();
- temp = _evaluator->getStringVar("font");
- if (temp.empty() || 0 == temp.compareToIgnoreCase("builtin")) {
- if (!_fontName.empty())
- delete _font;
- _fontName.clear();
- } else if (temp != _fontName) {
- if (!_fontName.empty())
- delete _font;
- _font = loadFont(temp.c_str());
- _fontName = temp;
- }
-
- _enableBlending = (_evaluator->getVar("blending") != 0);
-
- return true;
-}
-
-} // end of namespace GUI
-