diff options
author | Eugene Sandulenko | 2006-02-01 16:42:42 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2006-02-01 16:42:42 +0000 |
commit | 12133dfb4f29b381a6841060404633157b0d6975 (patch) | |
tree | 239bdfaecdd18fbda32684eed828dc921ddf21a8 | |
parent | 004b8b964a0651bbb75a4b6cf7b3ac6db92e6ab7 (diff) | |
download | scummvm-rg350-12133dfb4f29b381a6841060404633157b0d6975.tar.gz scummvm-rg350-12133dfb4f29b381a6841060404633157b0d6975.tar.bz2 scummvm-rg350-12133dfb4f29b381a6841060404633157b0d6975.zip |
Much improved how shadows look. However it is done with a really dirty
hack as tehre is lots of overdraw, abuse of shadow width and code
duplication. Anyway shadow drawing code will go to separate functioMuch improved how shadows look. However it is done with a really dirty
hack as tehre is lots of overdraw, abuse of shadow width and code
duplication. Anyway shadow drawing code will go to separate function.
svn-id: r20343
-rw-r--r-- | gui/PopUpWidget.cpp | 4 | ||||
-rw-r--r-- | gui/ThemeNew.cpp | 56 |
2 files changed, 47 insertions, 13 deletions
diff --git a/gui/PopUpWidget.cpp b/gui/PopUpWidget.cpp index ab650b1798..a9c4cff617 100644 --- a/gui/PopUpWidget.cpp +++ b/gui/PopUpWidget.cpp @@ -140,7 +140,7 @@ PopUpDialog::PopUpDialog(PopUpWidget *boss, int clickX, int clickY, WidgetSize w void PopUpDialog::drawDialog() { // Draw the menu border - g_gui.theme()->drawWidgetBackground(Common::Rect(_x, _y, _x+_w, _y+_h), THEME_HINT_FIRST_DRAW | THEME_HINT_SAVE_BACKGROUND | THEME_HINT_USE_SHADOW, Theme::kWidgetBackgroundBorderSmall); + g_gui.theme()->drawWidgetBackground(Common::Rect(_x, _y, _x+_w, _y+_h), THEME_HINT_FIRST_DRAW | THEME_HINT_SAVE_BACKGROUND | THEME_HINT_USE_SHADOW); /*if (_twoColumns) g_gui.vLine(_x + _w / 2, _y, _y + _h - 2, g_gui._color);*/ @@ -395,7 +395,7 @@ void PopUpWidget::drawWidget(bool hilite) { int w = _w - _labelWidth; // Draw a thin frame around us. - g_gui.theme()->drawWidgetBackground(Common::Rect(x, _y, x+w, _y+_h), _hints, Theme::kWidgetBackgroundBorderSmall); + g_gui.theme()->drawWidgetBackground(Common::Rect(x, _y, x+w, _y+_h), _hints | THEME_HINT_USE_SHADOW, Theme::kWidgetBackgroundBorderSmall); // Draw the label, if any if (_labelWidth > 0) diff --git a/gui/ThemeNew.cpp b/gui/ThemeNew.cpp index f4d5e63562..9ccfa616fa 100644 --- a/gui/ThemeNew.cpp +++ b/gui/ThemeNew.cpp @@ -28,6 +28,11 @@ #include "common/unzip.h" +#define kShadowTr1 16 +#define kShadowTr2 32 +#define kShadowTr3 64 +#define kShadowTr4 128 + using Graphics::Surface; /** Specifies the currently active 16bit pixel format, 555 or 565. */ @@ -350,7 +355,9 @@ void ThemeNew::drawDialogBackground(const Common::Rect &r, uint16 hints, kState if (!_initOk) return; - Common::Rect r2(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2, r.bottom + _shadowBottomHeight/2); + Common::Rect r2(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2 + 1, r.bottom + _shadowBottomHeight/2 + 1); + Common::Rect r3(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2, r.bottom + _shadowBottomHeight/2); + Common::Rect r4(r.left - _shadowLeftWidth/2 + 1, r.top - _shadowTopHeight/2 + 1, r.right + _shadowRightWidth/2-1, r.bottom + _shadowBottomHeight/2-1); if ((hints & THEME_HINT_SAVE_BACKGROUND) && !(hints & THEME_HINT_FIRST_DRAW) && !_forceRedraw) { restoreBackground(r2, true); @@ -365,14 +372,22 @@ void ThemeNew::drawDialogBackground(const Common::Rect &r, uint16 hints, kState // currently we just use the background renderer for // drawing the shadows drawRectMasked(r2, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), - 64, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + kShadowTr1, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r3, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), + kShadowTr2, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r4, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), + kShadowTr3, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); drawRectMasked(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), 256, _colors[kMainDialogStart], _colors[kMainDialogEnd], _gradientFactors[kDialogSpecialFactor]); } else { // shadow drawRectMasked(r2, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), - 64, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + kShadowTr1, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r3, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), + kShadowTr2, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r4, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), + kShadowTr3, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); drawRectMasked(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), 256, _colors[kDialogStart], _colors[kDialogEnd], _gradientFactors[kDialogFactor]); @@ -413,7 +428,9 @@ void ThemeNew::drawWidgetBackground(const Common::Rect &r, uint16 hints, kWidget if (!_initOk) return; - Common::Rect r2(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2, r.bottom + _shadowBottomHeight/2); + Common::Rect r2(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2 + 1, r.bottom + _shadowBottomHeight/2 + 1); + Common::Rect r3(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2, r.bottom + _shadowBottomHeight/2); + Common::Rect r4(r.left - _shadowLeftWidth/2 + 1, r.top - _shadowTopHeight/2 + 1, r.right + _shadowRightWidth/2 - 1, r.bottom + _shadowBottomHeight/2 - 1); if ((hints & THEME_HINT_SAVE_BACKGROUND) && !(hints & THEME_HINT_FIRST_DRAW) && !_forceRedraw) { restoreBackground((hints & THEME_HINT_USE_SHADOW) ? r2 : r); @@ -424,8 +441,12 @@ void ThemeNew::drawWidgetBackground(const Common::Rect &r, uint16 hints, kWidget if ((hints & THEME_HINT_USE_SHADOW)) { restoreBackground(r2); // shadow - drawRectMasked(r2, surface(kWidgetSmallBkgdCorner), surface(kWidgetSmallBkgdTop), surface(kWidgetSmallBkgdLeft), surface(kWidgetSmallBkgd), - 64, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + //drawRectMasked(r2, surface(kWidgetSmallBkgdCorner), surface(kWidgetSmallBkgdTop), surface(kWidgetSmallBkgdLeft), surface(kWidgetSmallBkgd), + // kShadowTr1, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r3, surface(kWidgetSmallBkgdCorner), surface(kWidgetSmallBkgdTop), surface(kWidgetSmallBkgdLeft), surface(kWidgetSmallBkgd), + kShadowTr1, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r4, surface(kWidgetSmallBkgdCorner), surface(kWidgetSmallBkgdTop), surface(kWidgetSmallBkgdLeft), surface(kWidgetSmallBkgd), + kShadowTr2, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); } drawRectMasked(r, surface(kWidgetSmallBkgdCorner), surface(kWidgetSmallBkgdTop), surface(kWidgetSmallBkgdLeft), surface(kWidgetSmallBkgd), @@ -436,7 +457,11 @@ void ThemeNew::drawWidgetBackground(const Common::Rect &r, uint16 hints, kWidget restoreBackground(r2); // shadow drawRectMasked(r2, surface(kWidgetBkgdCorner), surface(kWidgetBkgdTop), surface(kWidgetBkgdLeft), surface(kWidgetBkgd), - 64, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + kShadowTr1, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r3, surface(kWidgetBkgdCorner), surface(kWidgetBkgdTop), surface(kWidgetBkgdLeft), surface(kWidgetBkgd), + kShadowTr2, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r4, surface(kWidgetBkgdCorner), surface(kWidgetBkgdTop), surface(kWidgetBkgdLeft), surface(kWidgetBkgd), + kShadowTr3, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); } drawRectMasked(r, surface(kWidgetBkgdCorner), surface(kWidgetBkgdTop), surface(kWidgetBkgdLeft), surface(kWidgetBkgd), @@ -451,11 +476,14 @@ void ThemeNew::drawButton(const Common::Rect &r, const Common::String &str, kSta if (!_initOk) return; - Common::Rect r2(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2, r.bottom + _shadowBottomHeight/2); + Common::Rect r2(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2 - 1, r.bottom + _shadowBottomHeight/2 - 1); + Common::Rect r3(r.left - _shadowLeftWidth/2 + 1, r.top - _shadowTopHeight/2 + 1, r.right + _shadowRightWidth/2 - 1, r.bottom + _shadowBottomHeight/2 - 1); restoreBackground(r2); // shadow drawRectMasked(r2, surface(kButtonBkgdCorner), surface(kButtonBkgdTop), surface(kButtonBkgdLeft), surface(kButtonBkgd), - 64, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + kShadowTr2, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r3, surface(kButtonBkgdCorner), surface(kButtonBkgdTop), surface(kButtonBkgdLeft), surface(kButtonBkgd), + kShadowTr4, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); if (state == kStateHighlight) { drawRectMasked(r, surface(kButtonBkgdCorner), surface(kButtonBkgdTop), surface(kButtonBkgdLeft), surface(kButtonBkgd), @@ -532,9 +560,12 @@ void ThemeNew::drawSlider(const Common::Rect &r, int width, kState state) { } Common::Rect r3(r2.left - _shadowLeftWidth/2, r2.top - _shadowTopHeight/2, r2.right + _shadowRightWidth/2, r2.bottom + _shadowBottomHeight/2); + Common::Rect r4(r2.left - _shadowLeftWidth/2, r2.top - _shadowTopHeight/2, r2.right + _shadowRightWidth/2 - 1, r2.bottom + _shadowBottomHeight/2 - 1); // shadow drawRectMasked(r3, surface(kSliderCorner), surface(kSliderTop), surface(kSliderLeft), surface(kSliderBkgd), - 64, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + kShadowTr2, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r4, surface(kSliderCorner), surface(kSliderTop), surface(kSliderLeft), surface(kSliderBkgd), + kShadowTr3, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); if (state == kStateHighlight) { drawRectMasked(r2, surface(kSliderCorner), surface(kSliderTop), surface(kSliderLeft), surface(kSliderBkgd), @@ -634,9 +665,12 @@ void ThemeNew::drawScrollbar(const Common::Rect &r, int sliderY, int sliderHeigh r2.bottom = r2.top + sliderHeight; Common::Rect r3(r2.left - _shadowLeftWidth/2, r2.top - _shadowTopHeight/2, r2.right + _shadowRightWidth/2, r2.bottom + _shadowBottomHeight/2); + Common::Rect r4(r2.left - _shadowLeftWidth/2, r2.top - _shadowTopHeight/2, r2.right + _shadowRightWidth/2 - 1, r2.bottom + _shadowBottomHeight/2 - 1); // shadow drawRectMasked(r3, surface(kSliderCorner), surface(kSliderTop), surface(kSliderLeft), surface(kSliderBkgd), - 64, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + kShadowTr2, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); + drawRectMasked(r4, surface(kSliderCorner), surface(kSliderTop), surface(kSliderLeft), surface(kSliderBkgd), + kShadowTr3, _system->RGBToColor(0, 0, 0), _system->RGBToColor(0, 0, 0)); r2.bottom = r2.top + sliderHeight / 2 + surface(kScrollbarCorner)->h + 4; drawRectMasked(r2, surface(kScrollbarCorner), surface(kScrollbarTop), surface(kScrollbarLeft), surface(kScrollbarBkgd), 256, |