diff options
-rw-r--r-- | dists/msvc8/scummvm.vcproj | 8 | ||||
-rw-r--r-- | engines/scumm/dialogs.cpp | 116 | ||||
-rw-r--r-- | engines/scumm/dialogs.h | 1 | ||||
-rw-r--r-- | gui/EditTextWidget.cpp | 6 | ||||
-rw-r--r-- | gui/ListWidget.cpp | 29 | ||||
-rw-r--r-- | gui/ListWidget.h | 1 | ||||
-rw-r--r-- | gui/PopUpWidget.cpp | 10 | ||||
-rw-r--r-- | gui/PopUpWidget.h | 1 | ||||
-rw-r--r-- | gui/ScrollBarWidget.cpp | 2 | ||||
-rw-r--r-- | gui/ThemeClassic.cpp | 4 | ||||
-rw-r--r-- | gui/ThemeNew.cpp | 93 | ||||
-rw-r--r-- | gui/browser.cpp | 2 | ||||
-rw-r--r-- | gui/console.cpp | 72 | ||||
-rw-r--r-- | gui/console.h | 8 | ||||
-rw-r--r-- | gui/editable.cpp | 10 | ||||
-rw-r--r-- | gui/editable.h | 5 | ||||
-rw-r--r-- | gui/newgui.cpp | 4 | ||||
-rw-r--r-- | gui/newgui.h | 3 | ||||
-rw-r--r-- | gui/theme.h | 21 | ||||
-rw-r--r-- | gui/themes/modern.ini | 44 | ||||
-rw-r--r-- | gui/widget.cpp | 16 | ||||
-rw-r--r-- | gui/widget.h | 13 |
22 files changed, 282 insertions, 187 deletions
diff --git a/dists/msvc8/scummvm.vcproj b/dists/msvc8/scummvm.vcproj index ecccc2c2dc..2b13b6bf04 100644 --- a/dists/msvc8/scummvm.vcproj +++ b/dists/msvc8/scummvm.vcproj @@ -959,6 +959,14 @@ > </File> <File + RelativePath="..\..\graphics\cursorman.cpp" + > + </File> + <File + RelativePath="..\..\graphics\cursorman.h" + > + </File> + <File RelativePath="..\..\graphics\font.cpp" > </File> diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp index 12c034d835..e552785fff 100644 --- a/engines/scumm/dialogs.cpp +++ b/engines/scumm/dialogs.cpp @@ -244,57 +244,21 @@ SaveLoadChooser::SaveLoadChooser(const String &title, const String &buttonLabel, _list->setEditable(saveMode); _list->setNumberingMode(saveMode ? GUI::kListNumberingOne : GUI::kListNumberingZero); - if (g_gui.evaluator()->getVar("scummsaveload_extinfo.visible") == 1) { - int thumbX = g_gui.evaluator()->getVar("scummsaveload_thumbnail.x"); - int thumbY = g_gui.evaluator()->getVar("scummsaveload_thumbnail.y"); + _container = new GUI::ContainerWidget(this, 0, 0, 10, 10); + _container->setHints(GUI::THEME_HINT_USE_SHADOW); - // Add the thumbnail display - _gfxWidget = new GUI::GraphicsWidget(this, - thumbX, thumbY, - kThumbnailWidth + 8, - ((_vm->_system->getHeight() % 200 && _vm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8); - _gfxWidget->setFlags(GUI::WIDGET_BORDER); + _gfxWidget = new GUI::GraphicsWidget(this, 0, 0, 10, 10); - int height = thumbY + ((_vm->_system->getHeight() % 200 && _vm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8; - - _date = new StaticTextWidget(this, - thumbX, - height, - kThumbnailWidth + 8, - kLineHeight, - "No date saved", - kTextAlignCenter); - - height += kLineHeight; - - _time = new StaticTextWidget(this, - thumbX, - height, - kThumbnailWidth + 8, - kLineHeight, - "No time saved", - kTextAlignCenter); - - height += kLineHeight; - - _playtime = new StaticTextWidget(this, - thumbX, - height, - kThumbnailWidth + 8, - kLineHeight, - "No playtime saved", - kTextAlignCenter); - } else { - _gfxWidget = 0; - _date = 0; - _time = 0; - _playtime = 0; - } + _date = new StaticTextWidget(this, 0, 0, 10, 10, "No date saved", kTextAlignCenter); + _time = new StaticTextWidget(this, 0, 0, 10, 10, "No time saved", kTextAlignCenter); + _playtime = new StaticTextWidget(this, 0, 0, 10, 10, "No playtime saved", kTextAlignCenter); // Buttons new GUI::ButtonWidget(this, "scummsaveload_cancel", "Cancel", kCloseCmd, 0); _chooseButton = new GUI::ButtonWidget(this, "scummsaveload_choose", buttonLabel, kChooseCmd, 0); _chooseButton->setEnabled(false); + + handleScreenChanged(); } SaveLoadChooser::~SaveLoadChooser() { @@ -358,62 +322,40 @@ void SaveLoadChooser::handleScreenChanged() { if (g_gui.evaluator()->getVar("scummsaveload_extinfo.visible") == 1) { int thumbX = g_gui.evaluator()->getVar("scummsaveload_thumbnail.x"); int thumbY = g_gui.evaluator()->getVar("scummsaveload_thumbnail.y"); + int hPad = g_gui.evaluator()->getVar("scummsaveload_thumbnail.hPad"); + int vPad = g_gui.evaluator()->getVar("scummsaveload_thumbnail.vPad"); + int thumbH = ((_vm->_system->getHeight() % 200 && _vm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1); + + _container->resize(thumbX - hPad, thumbY - vPad, kThumbnailWidth + hPad * 2, thumbH + vPad * 2 + kLineHeight * 4); // Add the thumbnail display - if (!_gfxWidget) { - _gfxWidget = new GUI::GraphicsWidget(this, 0, 0, 0, 0); - _gfxWidget->setFlags(GUI::WIDGET_BORDER); - } - _gfxWidget->resize(thumbX, thumbY, kThumbnailWidth + 8, - ((_vm->_system->getHeight() % 200 && _vm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8); + _gfxWidget->resize(thumbX, thumbY, kThumbnailWidth, thumbH); - int height = thumbY + ((_vm->_system->getHeight() % 200 && _vm->_system->getHeight() != 350) ? kThumbnailHeight2 : kThumbnailHeight1) + 8; + int height = thumbY + thumbH + kLineHeight; - if (!_date) - _date = new StaticTextWidget(this, 0, 0, 0, 0, "", kTextAlignCenter); - _date->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight); + _date->resize(thumbX, height, kThumbnailWidth, kLineHeight); height += kLineHeight; - if (!_time) - _time = new StaticTextWidget(this, 0, 0, 0, 0, "", kTextAlignCenter); - _time->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight); + _time->resize(thumbX, height, kThumbnailWidth, kLineHeight); height += kLineHeight; - if (!_playtime) - _playtime = new StaticTextWidget(this, 0, 0, 0, 0, "", kTextAlignCenter); - _playtime->resize(thumbX, height, kThumbnailWidth + 8, kLineHeight); + _playtime->resize(thumbX, height, kThumbnailWidth, kLineHeight); + _container->clearFlags(GUI::WIDGET_INVISIBLE); + _gfxWidget->clearFlags(GUI::WIDGET_INVISIBLE); + _date->clearFlags(GUI::WIDGET_INVISIBLE); + _time->clearFlags(GUI::WIDGET_INVISIBLE); + _playtime->clearFlags(GUI::WIDGET_INVISIBLE); + updateInfos(); } else { - if (_gfxWidget) { - deleteWidget(_gfxWidget); - _gfxWidget->setNext(0); - delete _gfxWidget; - _gfxWidget = 0; - } - - if (_date) { - deleteWidget(_date); - _date->setNext(0); - delete _date; - _date = 0; - } - - if (_time) { - deleteWidget(_time); - _time->setNext(0); - delete _time; - _time = 0; - } - - if (_playtime) { - deleteWidget(_playtime); - _playtime->setNext(0); - delete _playtime; - _playtime = 0; - } + _container->setFlags(GUI::WIDGET_INVISIBLE); + _gfxWidget->setFlags(GUI::WIDGET_INVISIBLE); + _date->setFlags(GUI::WIDGET_INVISIBLE); + _time->setFlags(GUI::WIDGET_INVISIBLE); + _playtime->setFlags(GUI::WIDGET_INVISIBLE); } Dialog::handleScreenChanged(); diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h index dff5c64ecc..339b890558 100644 --- a/engines/scumm/dialogs.h +++ b/engines/scumm/dialogs.h @@ -61,6 +61,7 @@ protected: GUI::StaticTextWidget *_date; GUI::StaticTextWidget *_time; GUI::StaticTextWidget *_playtime; + GUI::ContainerWidget *_container; ScummEngine *_vm; void updateInfos(); diff --git a/gui/EditTextWidget.cpp b/gui/EditTextWidget.cpp index 616bf51b13..27a26e7ee1 100644 --- a/gui/EditTextWidget.cpp +++ b/gui/EditTextWidget.cpp @@ -55,6 +55,8 @@ void EditTextWidget::handleScreenChanged() { EditableWidget::handleScreenChanged(); _leftPadding = g_gui.evaluator()->getVar("EditTextWidget.leftPadding", 0); _rightPadding = g_gui.evaluator()->getVar("EditTextWidget.rightPadding", 0); + + _font = (Theme::kFontStyle)g_gui.evaluator()->getVar("EditTextWidget.font", Theme::kFontStyleNormal); } @@ -83,11 +85,11 @@ void EditTextWidget::drawWidget(bool hilite) { // Draw the text adjustOffset(); - g_gui.theme()->drawText(Common::Rect(_x+2 + _leftPadding,_y+2, _x+getEditRect().width()-2, _y+_h-2), _editString, Theme::kStateEnabled, Theme::kTextAlignLeft, false, -_editScrollOffset, false, Theme::kFontStyleNormal); + g_gui.theme()->drawText(Common::Rect(_x+2+ _leftPadding,_y+2, _x+_leftPadding+getEditRect().width()+2, _y+_h-2), _editString, Theme::kStateEnabled, Theme::kTextAlignLeft, false, -_editScrollOffset, false, _font); } Common::Rect EditTextWidget::getEditRect() const { - Common::Rect r(2 + _leftPadding, 1, _w - 2 - _leftPadding, _h); + Common::Rect r(2 + _leftPadding, 1, _w - 2 - _leftPadding - _rightPadding, _h); return r; } diff --git a/gui/ListWidget.cpp b/gui/ListWidget.cpp index aa13fccecc..523f23fb9c 100644 --- a/gui/ListWidget.cpp +++ b/gui/ListWidget.cpp @@ -41,18 +41,17 @@ ListWidget::ListWidget(GuiObject *boss, String name) _hlLeftPadding = g_gui.evaluator()->getVar("ListWidget.hlLeftPadding", 0); _hlRightPadding = g_gui.evaluator()->getVar("ListWidget.hlRightPadding", 0); - int scrollBarWidth; if (ws == kBigWidgetSize) { - scrollBarWidth = kBigScrollBarWidth; + _scrollBarWidth = kBigScrollBarWidth; } else { - scrollBarWidth = kNormalScrollBarWidth; + _scrollBarWidth = kNormalScrollBarWidth; } - _scrollBar = new ScrollBarWidget(this, _w - scrollBarWidth, 0, scrollBarWidth, _h); + _scrollBar = new ScrollBarWidget(this, _w - _scrollBarWidth, 0, _scrollBarWidth, _h); _scrollBar->setTarget(this); _flags = WIDGET_ENABLED | WIDGET_CLEARBG | WIDGET_RETAIN_FOCUS | WIDGET_WANT_TICKLE; - setHints(THEME_HINT_SAVE_BACKGROUND); + setHints(THEME_HINT_SAVE_BACKGROUND | THEME_HINT_USE_SHADOW); _type = kListWidget; _editMode = false; _numberingMode = kListNumberingOne; @@ -139,6 +138,11 @@ void ListWidget::handleMouseDown(int x, int y, int button, int clickCount) { if (!isEnabled()) return; + if (x >= _w - _scrollBarWidth) { + _scrollBar->handleMouseDown(x, y, button, clickCount); + return; + } + // First check whether the selection changed int newSelectedItem; newSelectedItem = findItem(x, y); @@ -345,7 +349,7 @@ void ListWidget::drawWidget(bool hilite) { char temp[10]; sprintf(temp, "%2d. ", (pos + _numberingMode)); buffer = temp; - g_gui.theme()->drawText(Common::Rect(_x, y, _x + r.left + _leftPadding, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, _leftPadding); + g_gui.theme()->drawText(Common::Rect(_x, y, _x + r.left + _leftPadding, y + fontHeight - 2), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, _leftPadding); pad = 0; } @@ -354,8 +358,8 @@ void ListWidget::drawWidget(bool hilite) { if (_selectedItem == pos && _editMode) { buffer = _editString; adjustOffset(); - width = _w - r.left - _hlRightPadding - _leftPadding - _rightPadding; - g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + width, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, pad); + width = _w - r.left - _hlRightPadding - _leftPadding; + g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + width, y + fontHeight-2), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, pad); } else { int maxWidth = _textWidth[i]; buffer = _list[pos]; @@ -367,7 +371,7 @@ void ListWidget::drawWidget(bool hilite) { width = _w - r.left - _hlRightPadding; if (width > maxWidth) maxWidth = width; - g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + maxWidth, y + fontHeight - 1), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, pad); + g_gui.theme()->drawText(Common::Rect(_x + r.left, y, _x + r.left + maxWidth, y + fontHeight-2), buffer, Theme::kStateEnabled, Theme::kTextAlignLeft, inverted, pad); } _textWidth[i] = width; @@ -449,11 +453,10 @@ void ListWidget::handleScreenChanged() { _hlLeftPadding = g_gui.evaluator()->getVar("ListWidget.hlLeftPadding", 0); _hlRightPadding = g_gui.evaluator()->getVar("ListWidget.hlRightPadding", 0); - int scrollBarWidth; if (ws == kBigWidgetSize) { - scrollBarWidth = kBigScrollBarWidth; + _scrollBarWidth = kBigScrollBarWidth; } else { - scrollBarWidth = kNormalScrollBarWidth; + _scrollBarWidth = kNormalScrollBarWidth; } _entriesPerPage = (_h - _topPadding - _bottomPadding) / kLineHeight; @@ -464,7 +467,7 @@ void ListWidget::handleScreenChanged() { for (int i = 0; i < _entriesPerPage; i++) _textWidth[i] = 0; - _scrollBar->resize(_w - scrollBarWidth, 0, scrollBarWidth, _h); + _scrollBar->resize(_w - _scrollBarWidth, 0, _scrollBarWidth, _h); scrollBarRecalc(); } diff --git a/gui/ListWidget.h b/gui/ListWidget.h index 5e47cf7bb7..d5b2ad669d 100644 --- a/gui/ListWidget.h +++ b/gui/ListWidget.h @@ -67,6 +67,7 @@ protected: int _rightPadding; int _topPadding; int _bottomPadding; + int _scrollBarWidth; public: ListWidget(GuiObject *boss, String name); diff --git a/gui/PopUpWidget.cpp b/gui/PopUpWidget.cpp index 89e42f4993..f2ef75d7b6 100644 --- a/gui/PopUpWidget.cpp +++ b/gui/PopUpWidget.cpp @@ -75,10 +75,10 @@ PopUpDialog::PopUpDialog(PopUpWidget *boss, int clickX, int clickY, WidgetSize w _selection = _popUpBoss->_selectedItem; // Calculate real popup dimensions - _x = _popUpBoss->getAbsX() + _popUpBoss->_labelWidth; + _x = _popUpBoss->getAbsX() + _popUpBoss->_labelWidth + _popUpBoss->_labelSpacing; _y = _popUpBoss->getAbsY() - _popUpBoss->_selectedItem * kLineHeight; _h = _popUpBoss->_entries.size() * kLineHeight + 2; - _w = _popUpBoss->_w - kLineHeight + 2 - _popUpBoss->_labelWidth; + _w = _popUpBoss->_w - kLineHeight + 2 - _popUpBoss->_labelWidth - _popUpBoss->_labelSpacing; _leftPadding = _popUpBoss->_leftPadding; _rightPadding = _popUpBoss->_rightPadding; @@ -365,6 +365,7 @@ void PopUpWidget::handleMouseDown(int x, int y, int button, int clickCount) { _selectedItem = newSel; sendCommand(kPopUpItemSelectedCmd, _entries[_selectedItem].tag); } + g_gui.clearDragWidget(); } } @@ -373,6 +374,7 @@ void PopUpWidget::handleScreenChanged() { _leftPadding = g_gui.evaluator()->getVar("PopUpWidget.leftPadding", 0); _rightPadding = g_gui.evaluator()->getVar("PopUpWidget.rightPadding", 0); + _labelSpacing = g_gui.evaluator()->getVar("PopUpWidget.labelSpacing", 0); Widget::handleScreenChanged(); } @@ -411,8 +413,8 @@ void PopUpWidget::setSelectedTag(uint32 tag) { } void PopUpWidget::drawWidget(bool hilite) { - int x = _x + _labelWidth; - int w = _w - _labelWidth; + int x = _x + _labelWidth + _labelSpacing; + int w = _w - _labelWidth - _labelSpacing; // Draw the label, if any if (_labelWidth > 0) diff --git a/gui/PopUpWidget.h b/gui/PopUpWidget.h index d4df3654e2..936e1dc5a2 100644 --- a/gui/PopUpWidget.h +++ b/gui/PopUpWidget.h @@ -58,6 +58,7 @@ protected: int _leftPadding; int _rightPadding; + int _labelSpacing; public: PopUpWidget(GuiObject *boss, String name, const String &label, uint labelWidth = 0); diff --git a/gui/ScrollBarWidget.cpp b/gui/ScrollBarWidget.cpp index 0e2540ffac..34d47640dc 100644 --- a/gui/ScrollBarWidget.cpp +++ b/gui/ScrollBarWidget.cpp @@ -173,9 +173,11 @@ void ScrollBarWidget::recalc() { UP_DOWN_BOX_HEIGHT + (_h - 2 * UP_DOWN_BOX_HEIGHT - _sliderHeight) * _currentPos / (_numEntries - _entriesPerPage); if (_sliderPos < 0) _sliderPos = 0; + clearFlags(WIDGET_INVISIBLE); } else { _sliderHeight = _h - 2 * UP_DOWN_BOX_HEIGHT; _sliderPos = UP_DOWN_BOX_HEIGHT; + setFlags(WIDGET_INVISIBLE); } } diff --git a/gui/ThemeClassic.cpp b/gui/ThemeClassic.cpp index 69a5690b03..93fed88e9f 100644 --- a/gui/ThemeClassic.cpp +++ b/gui/ThemeClassic.cpp @@ -451,7 +451,7 @@ void ThemeClassic::drawLineSeparator(const Common::Rect &r, kState state) { // intern drawing -void ThemeClassic::restoreBackground(Common::Rect r) { +void ThemeClassic::restoreBackground(Common::Rect r, bool special) { r.clip(_screen.w, _screen.h); r.clip(_drawArea); #ifndef OLDGUI_TRANSPARENCY @@ -478,7 +478,7 @@ void ThemeClassic::restoreBackground(Common::Rect r) { #endif } -bool ThemeClassic::addDirtyRect(Common::Rect r, bool save) { +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); diff --git a/gui/ThemeNew.cpp b/gui/ThemeNew.cpp index 01d1557ae1..bec6cddf57 100644 --- a/gui/ThemeNew.cpp +++ b/gui/ThemeNew.cpp @@ -35,13 +35,15 @@ #include "common/unzip.h" +#define kShadowTr0 8 #define kShadowTr1 16 #define kShadowTr2 32 #define kShadowTr3 64 +#define kShadowTr35 96 #define kShadowTr4 128 #define kShadowTr5 192 -#define THEME_VERSION 12 +#define THEME_VERSION 13 using Graphics::Surface; @@ -471,6 +473,11 @@ void ThemeNew::drawDialogBackground(const Common::Rect &r, uint16 hints, kState drawRectMasked(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), 256, _colors[kMainDialogStart], _colors[kMainDialogEnd], _gradientFactors[kDialogSpecialFactor]); + } else if (hints & THEME_HINT_PLAIN_COLOR) { + drawShadow(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), kShadowFull); + + drawRectMasked(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), + 256, _colors[kDialogEnd], _colors[kDialogEnd], _gradientFactors[kDialogFactor]); } else { drawShadow(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), kShadowFull); @@ -547,7 +554,10 @@ void ThemeNew::drawWidgetBackground(const Common::Rect &r, uint16 hints, kWidget left = kWidgetBkgdLeft; bkgd = kWidgetBkgd; shadow = kShadowFull; - start = kWidgetBackgroundStart; + if (hints & THEME_HINT_PLAIN_COLOR) + start = kWidgetBackgroundEnd; + else + start = kWidgetBackgroundStart; end = kWidgetBackgroundEnd; factor = kWidgetFactor; break; @@ -661,12 +671,13 @@ void ThemeNew::drawSlider(const Common::Rect &rr, int width, kState state) { Common::Rect r2 = r; r2.left = r.left; r2.top = r.top; - r2.bottom = r.bottom; - r2.right = r2.left + width; + r2.bottom = r.bottom-1; + r2.right = r2.left + width-1; if (r2.right > r.right) { r2.right = r.right; } + drawShadow(r2, surface(kButtonBkgdCorner), surface(kButtonBkgdTop), surface(kButtonBkgdLeft), surface(kButtonBkgd), kShadowButton); if (state == kStateHighlight) { drawRectMasked(r2, surface(kSliderCorner), surface(kSliderTop), surface(kSliderLeft), surface(kSliderBkgd), 256, _colors[kSliderHighStart], _colors[kSliderHighEnd], _gradientFactors[kSliderFactor]); @@ -691,7 +702,7 @@ void ThemeNew::drawPopUpWidget(const Common::Rect &r, const Common::String &sel, end = _colors[kPopUpWidgetHighlightEnd]; } - drawShadow(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), kShadowSmall); + drawShadow(r, surface(kDialogBkgdCorner), surface(kDialogBkgdTop), surface(kDialogBkgdLeft), surface(kDialogBkgd), kShadowPopUp); drawRectMasked(r, surface(kPopUpWidgetBkgdCorner), surface(kPopUpWidgetBkgdTop), surface(kPopUpWidgetBkgdLeft), surface(kPopUpWidgetBkgd), (state == kStateDisabled) ? -30 : 256, start, end, _gradientFactors[kPopUpWidgetFactor]); @@ -1034,13 +1045,21 @@ void ThemeNew::drawRectMasked(const Common::Rect &r, const Graphics::Surface *co Common::Rect ThemeNew::shadowRect(const Common::Rect &r, uint32 shadowStyle) { switch (shadowStyle) { case kShadowButton: - return Common::Rect(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2 - 1, r.bottom + _shadowBottomHeight/2 - 1); + return Common::Rect(r.left - 1, r.top - 1, r.right + 1, r.bottom + 1); break; case kShadowEmboss: return Common::Rect(r.left - 1, r.top - 1, r.right + 1, r.bottom + 1); break; + case kShadowPopUp: + return Common::Rect(r.left - 1, r.top - 1, r.right + 3, r.bottom + 3); + break; + + case kShadowFull: + return Common::Rect(r.left - 2, r.top - 2, r.right + 4, r.bottom + 4); + break; + default: return Common::Rect(r.left - _shadowLeftWidth/2, r.top - _shadowTopHeight/2, r.right + _shadowRightWidth/2 + 1, r.bottom + _shadowBottomHeight/2 + 1); break; @@ -1053,13 +1072,16 @@ void ThemeNew::drawShadow(const Common::Rect &r, const Graphics::Surface *corner const Graphics::Surface *left, const Graphics::Surface *fill, uint32 shadowStyle, bool skipLastRow) { switch (shadowStyle) { case kShadowFull: { - 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); + Common::Rect r2(r.left-1, r.top-1, r.right + 4, r.bottom + 4); + Common::Rect r3(r.left, r.top+1, r.right + 3, r.bottom + 3); + Common::Rect r4(r.left, r.top+1, r.right + 2, r.bottom + 2); + Common::Rect r5(r.left, r.top, r.right + 1, r.bottom + 1); - drawShadowRect(r2, r, corner, top, left, fill, kShadowTr1, skipLastRow); - drawShadowRect(r3, r, corner, top, left, fill, kShadowTr2, skipLastRow); - drawShadowRect(r4, r, corner, top, left, fill, kShadowTr3, skipLastRow); + drawShadowRect(r2, r, corner, top, left, fill, kShadowTr0, skipLastRow); + drawShadowRect(r3, r, corner, top, left, fill, kShadowTr1, skipLastRow); + drawShadowRect(r4, r, corner, top, left, fill, kShadowTr2, skipLastRow); + drawShadowRect(r5, r, corner, top, left, fill, kShadowTr3, skipLastRow); + //drawShadowRect(r5, r, corner, top, left, fill, kShadowTr35, skipLastRow); } break; case kShadowSmall: { @@ -1071,11 +1093,11 @@ void ThemeNew::drawShadow(const Common::Rect &r, const Graphics::Surface *corner } break; case kShadowButton: { - 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); + Common::Rect r2(r.left-1, r.top - 1, r.right, r.bottom); + Common::Rect r4(r.left, r.top, r.right + 1, r.bottom + 1); - drawShadowRect(r2, r, corner, top, left, fill, kShadowTr2, skipLastRow); - drawShadowRect(r3, r, corner, top, left, fill, kShadowTr4, skipLastRow); + drawShadowRect(r2, r, corner, top, left, fill, -kShadowTr35-256, skipLastRow); + drawShadowRect(r4, r, corner, top, left, fill, kShadowTr4, skipLastRow); } break; case kShadowEmboss: { @@ -1084,7 +1106,19 @@ void ThemeNew::drawShadow(const Common::Rect &r, const Graphics::Surface *corner drawShadowRect(r2, r, corner, top, left, fill, kShadowTr5, skipLastRow); drawShadowRect(r4, r, corner, top, left, fill, kShadowTr1, skipLastRow); - }; + } break; + + case kShadowPopUp: { + Common::Rect r2(r.left, r.top, r.right + 3, r.bottom + 3); + Common::Rect r25(r.left-1, r.top-1, r.right + 2, r.bottom + 2); + Common::Rect r3(r.left - 1, r.top-1, r.right, r.bottom); + Common::Rect r4(r.left, r.top, r.right + 1, r.bottom + 1); + + drawShadowRect(r2, r, corner, top, left, fill, kShadowTr1, skipLastRow); + drawShadowRect(r25, r, corner, top, left, fill, kShadowTr2, skipLastRow); + drawShadowRect(r4, r, corner, top, left, fill, kShadowTr3, skipLastRow); + drawShadowRect(r3, r, corner, top, left, fill, -kShadowTr35-256, skipLastRow); + } break; default: break; @@ -1228,7 +1262,7 @@ void ThemeNew::drawSurfaceMasked(const Common::Rect &r, const Graphics::Surface } else { blitSurface(NORMAL_OFFSET, NO_EFFECT); } - } else if (alpha < 0) { + } else if (alpha < 0 && alpha >= -256) { int backUp = _dimPercentValue; _dimPercentValue = 256 * (100 - (-alpha)) / 100; @@ -1595,11 +1629,28 @@ inline OverlayColor getColorAlphaImpl(OverlayColor col1, OverlayColor col2, int return output; } +template<class T> +inline OverlayColor getColorAlphaImp2(OverlayColor col1, OverlayColor col2, int alpha) { + OverlayColor output = 0; + output |= ((alpha * ((~col1 & T::kRedMask) - (col2 & T::kRedMask)) >> 8) + (col2 & T::kRedMask)) & T::kRedMask; + output |= ((alpha * ((~col1 & T::kGreenMask) - (col2 & T::kGreenMask)) >> 8) + (col2 & T::kGreenMask)) & T::kGreenMask; + output |= ((alpha * ((~col1 & T::kBlueMask) - (col2 & T::kBlueMask)) >> 8) + (col2 & T::kBlueMask)) & T::kBlueMask; + return output; +} + OverlayColor getColorAlpha(OverlayColor col1, OverlayColor col2, int alpha) { - if (gBitFormat == 565) { - return getColorAlphaImpl<ColorMasks<565> >(col1, col2, alpha); + if (alpha > 0) { + if (gBitFormat == 565) { + return getColorAlphaImpl<ColorMasks<565> >(col1, col2, alpha); + } else { + return getColorAlphaImpl<ColorMasks<555> >(col1, col2, alpha); + } } else { - return getColorAlphaImpl<ColorMasks<555> >(col1, col2, alpha); + if (gBitFormat == 565) { + return getColorAlphaImp2<ColorMasks<565> >(col1, col2, -alpha - 256); + } else { + return getColorAlphaImp2<ColorMasks<555> >(col1, col2, -alpha - 256); + } } } diff --git a/gui/browser.cpp b/gui/browser.cpp index c3c590f187..8bce35f0a8 100644 --- a/gui/browser.cpp +++ b/gui/browser.cpp @@ -150,6 +150,8 @@ BrowserDialog::BrowserDialog(const char *title, bool dirBrowser) _fileList->setNumberingMode(kListNumberingOff); _fileList->setEditable(false); + _fileList->setHints(THEME_HINT_PLAIN_COLOR); + // Buttons new ButtonWidget(this, "browser_up", "Go up", kGoUpCmd, 0); new ButtonWidget(this, "browser_cancel", "Cancel", kCloseCmd, 0); diff --git a/gui/console.cpp b/gui/console.cpp index de6f914644..49d843133e 100644 --- a/gui/console.cpp +++ b/gui/console.cpp @@ -101,6 +101,11 @@ void ConsoleDialog::init() { else _font = g_gui.theme()->getFont((Theme::kFontStyle)f); + _leftPadding = g_gui.evaluator()->getVar("Console.leftPadding", 0); + _rightPadding = g_gui.evaluator()->getVar("Console.rightPadding", 0); + _topPadding = g_gui.evaluator()->getVar("Console.topPadding", 0); + _bottomPadding = g_gui.evaluator()->getVar("Console.bottomPadding", 0); + // Calculate the real width/height (rounded to char/line multiples) _w = (uint16)(_widthPercent * screenW); _h = (uint16)((_heightPercent * screenH - 2) / kConsoleLineHeight); @@ -116,8 +121,8 @@ void ConsoleDialog::init() { _drawingHints = THEME_HINT_FIRST_DRAW | THEME_HINT_SAVE_BACKGROUND; - _pageWidth = (_w - scrollBarWidth - 2) / kConsoleCharWidth; - _linesPerPage = (_h - 2) / kConsoleLineHeight; + _pageWidth = (_w - scrollBarWidth - 2 - _leftPadding - _topPadding - scrollBarWidth) / kConsoleCharWidth; + _linesPerPage = (_h - 2 - _topPadding - _bottomPadding) / kConsoleLineHeight; _linesInBuffer = kBufferSize / kLineWidth; } @@ -164,33 +169,42 @@ void ConsoleDialog::close() { } void ConsoleDialog::drawDialog() { - // Draw text - int start = _scrollLine - _linesPerPage + 1; - int y = _y + 2; - int limit = MIN(_pageWidth, (int)kLineWidth); - g_gui.theme()->drawDialogBackground(Common::Rect(_x, _y, _x+_w, _y+_h), _drawingHints); // FIXME: for the old theme the frame around the console vanishes // when any action is processed if we enable this // _drawingHints &= ~THEME_HINT_FIRST_DRAW; - for (int line = 0; line < _linesPerPage; line++) { - int x = _x + 1; - for (int column = 0; column < limit; column++) { + for (int line = 0; line < _linesPerPage; line++) + drawLine(line, false); + + // Draw the scrollbar + _scrollBar->draw(); +} + +void ConsoleDialog::drawLine(int line, bool restoreBg) { + int x = _x + 1 + _leftPadding; + int start = _scrollLine - _linesPerPage + 1; + int y = _y + 2 + _topPadding; + int limit = MIN(_pageWidth, (int)kLineWidth); + + y += line * kConsoleLineHeight; + + if (restoreBg) { + Common::Rect r(_x, y - 2, _x + _pageWidth * kConsoleCharWidth, y+kConsoleLineHeight); + g_gui.theme()->restoreBackground(r); + g_gui.theme()->addDirtyRect(r); + } + + for (int column = 0; column < limit; column++) { #if 0 - int l = (start + line) % _linesInBuffer; - byte c = buffer(l * kLineWidth + column); + int l = (start + line) % _linesInBuffer; + byte c = buffer(l * kLineWidth + column); #else - byte c = buffer((start + line) * kLineWidth + column); + byte c = buffer((start + line) * kLineWidth + column); #endif - g_gui.theme()->drawChar(Common::Rect(x, y, x+kConsoleCharWidth, y+kConsoleLineHeight), c, _font); - x += kConsoleCharWidth; - } - y += kConsoleLineHeight; + g_gui.theme()->drawChar(Common::Rect(x, y, x+kConsoleCharWidth, y+kConsoleLineHeight), c, _font); + x += kConsoleCharWidth; } - - // Draw the scrollbar - _scrollBar->draw(); } void ConsoleDialog::handleScreenChanged() { @@ -301,7 +315,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) { killChar(); } scrollToCurrent(); - draw(); // FIXME - not nice to redraw the full console just for one char! + drawLine(pos2line(_currentPos)); break; case 9: // tab { @@ -321,7 +335,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) { drawCaret(true); insertIntoPrompt(completion); scrollToCurrent(); - draw(); + drawLine(pos2line(_currentPos)); delete[] completion; } delete[] str; @@ -330,7 +344,7 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) { } case 127: killChar(); - draw(); + drawLine(pos2line(_currentPos)); break; case 256 + 24: // pageup if (modifiers == OSystem::KBD_SHIFT) { @@ -382,12 +396,12 @@ void ConsoleDialog::handleKeyDown(uint16 ascii, int keycode, int modifiers) { case 275: // cursor right if (_currentPos < _promptEndPos) _currentPos++; - draw(); + drawLine(pos2line(_currentPos)); break; case 276: // cursor left if (_currentPos > _promptStartPos) _currentPos--; - draw(); + drawLine(pos2line(_currentPos)); break; default: if (ascii == '~' || ascii == '#') { @@ -599,7 +613,7 @@ void ConsoleDialog::putchar(int c) { drawCaret(true); putcharIntern(c); - draw(); // FIXME - not nice to redraw the full console just for one char! + drawLine(pos2line(_currentPos)); } void ConsoleDialog::putcharIntern(int c) { @@ -636,11 +650,11 @@ void ConsoleDialog::drawCaret(bool erase) { return; } - int x = _x + 1 + (_currentPos % kLineWidth) * kConsoleCharWidth; - int y = _y + displayLine * kConsoleLineHeight; + int x = _x + 1 + _leftPadding + (_currentPos % kLineWidth) * kConsoleCharWidth; + int y = _y + _topPadding + displayLine * kConsoleLineHeight; _caretVisible = !erase; - g_gui.theme()->drawCaret(Common::Rect(x, y, x+kConsoleCharWidth, y+kConsoleLineHeight), erase); + g_gui.theme()->drawCaret(Common::Rect(x, y, x+1, y+kConsoleLineHeight), erase); } void ConsoleDialog::scrollToCurrent() { diff --git a/gui/console.h b/gui/console.h index 083b3a9420..ebe93b0e56 100644 --- a/gui/console.h +++ b/gui/console.h @@ -90,6 +90,11 @@ protected: float _widthPercent, _heightPercent; + int _leftPadding; + int _rightPadding; + int _topPadding; + int _bottomPadding; + void slideUpAndClose(); public: @@ -126,6 +131,9 @@ protected: void init(); + int pos2line(int pos) { return (pos - (_scrollLine - _linesPerPage + 1) * kLineWidth) / kLineWidth; } + + void drawLine(int line, bool restoreBg = true); void drawCaret(bool erase); void putcharIntern(int c); void insertIntoPrompt(const char *str); diff --git a/gui/editable.cpp b/gui/editable.cpp index 0f30005cf1..f62f95459c 100644 --- a/gui/editable.cpp +++ b/gui/editable.cpp @@ -43,6 +43,8 @@ void EditableWidget::init() { _caretInverse = false; _editScrollOffset = 0; + + _font = Theme::kFontStyleBold; } EditableWidget::~EditableWidget() { @@ -54,7 +56,7 @@ void EditableWidget::setEditString(const String &str) { _editString = str; _caretPos = _editString.size(); - _editScrollOffset = (g_gui.getStringWidth(_editString) - (getEditRect().width())); + _editScrollOffset = (g_gui.getStringWidth(_editString) - (getEditRect().width()), _font); if (_editScrollOffset < 0) _editScrollOffset = 0; } @@ -109,11 +111,13 @@ bool EditableWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) { if (_caretPos > 0) { dirty = setCaretPos(_caretPos - 1); } + dirty = true; break; case 256 + 19: // right arrow if (_caretPos < (int)_editString.size()) { dirty = setCaretPos(_caretPos + 1); } + dirty = true; break; case 256 + 22: // home dirty = setCaretPos(0); @@ -139,7 +143,7 @@ bool EditableWidget::handleKeyDown(uint16 ascii, int keycode, int modifiers) { int EditableWidget::getCaretOffset() const { int caretpos = 0; for (int i = 0; i < _caretPos; i++) - caretpos += g_gui.getCharWidth(_editString[i]); + caretpos += g_gui.getCharWidth(_editString[i], _font); caretpos -= _editScrollOffset; @@ -191,7 +195,7 @@ bool EditableWidget::adjustOffset() { _editScrollOffset -= (editWidth - caretpos); return true; } else if (_editScrollOffset > 0) { - const int strWidth = g_gui.getStringWidth(_editString); + const int strWidth = g_gui.getStringWidth(_editString, _font); if (strWidth - _editScrollOffset < editWidth) { // scroll right _editScrollOffset = (strWidth - editWidth); diff --git a/gui/editable.h b/gui/editable.h index 0c6869b9f4..4cc087b1fa 100644 --- a/gui/editable.h +++ b/gui/editable.h @@ -25,6 +25,7 @@ #include "common/str.h" #include "common/rect.h" #include "gui/widget.h" +#include "gui/newgui.h" namespace GUI { @@ -46,6 +47,8 @@ protected: int _editScrollOffset; + Theme::kFontStyle _font; + public: EditableWidget(GuiObject *boss, int x, int y, int w, int h, WidgetSize ws = kNormalWidgetSize); EditableWidget(GuiObject *boss, String name); @@ -70,6 +73,8 @@ protected: bool setCaretPos(int newPos); bool adjustOffset(); + void setFontStyle(Theme::kFontStyle font) { _font = font; } + virtual bool tryInsertChar(char c, int pos); }; diff --git a/gui/newgui.cpp b/gui/newgui.cpp index c02c472594..c7ebf170ed 100644 --- a/gui/newgui.cpp +++ b/gui/newgui.cpp @@ -349,4 +349,8 @@ void NewGui::handleScreenChange() { _theme->refresh(); } +void NewGui::clearDragWidget() { + _dialogStack.top()->_dragWidget = 0; +} + } // End of namespace GUI diff --git a/gui/newgui.h b/gui/newgui.h index 055f616131..c41fc21c70 100644 --- a/gui/newgui.h +++ b/gui/newgui.h @@ -81,6 +81,9 @@ public: WidgetSize getWidgetSize(); void handleScreenChange(); + + void clearDragWidget(); + protected: OSystem *_system; diff --git a/gui/theme.h b/gui/theme.h index fa3373589c..a88229f1ca 100644 --- a/gui/theme.h +++ b/gui/theme.h @@ -55,8 +55,11 @@ enum { // Indicates special colorfade THEME_HINT_SPECIAL_COLOR = 1 << 3, + // Indicates no colorfade + THEME_HINT_PLAIN_COLOR = 1 << 4, + // Indictaes that a shadows should be drawn around the background - THEME_HINT_USE_SHADOW = 1 << 4 + THEME_HINT_USE_SHADOW = 1 << 5 }; @@ -148,6 +151,9 @@ public: virtual void drawCaret(const Common::Rect &r, bool erase, kState state = kStateEnabled) = 0; virtual void drawLineSeparator(const Common::Rect &r, kState state = kStateEnabled) = 0; + virtual void restoreBackground(Common::Rect r, bool special = false) = 0; + virtual bool addDirtyRect(Common::Rect r, bool save = false, bool special = false) = 0; + Graphics::TextAlignment convertAligment(kTextAlign align) const { switch (align) { case kTextAlignLeft: @@ -245,10 +251,10 @@ public: void drawPopUpWidget(const Common::Rect &r, const Common::String &sel, int deltax, kState state, kTextAlign align); void drawCaret(const Common::Rect &r, bool erase, kState state); void drawLineSeparator(const Common::Rect &r, kState state); -private: - void restoreBackground(Common::Rect r); - bool addDirtyRect(Common::Rect r, bool save = false); + void restoreBackground(Common::Rect r, bool special = false); + bool addDirtyRect(Common::Rect r, bool save = false, bool special = false); +private: void box(int x, int y, int width, int height, OverlayColor colorA, OverlayColor colorB, bool skipLastRow = false); void box(int x, int y, int width, int height); @@ -324,9 +330,10 @@ public: void drawLineSeparator(const Common::Rect &r, kState state); const Graphics::Surface *getImageSurface(int n) { return _images[n]; } -private: + void restoreBackground(Common::Rect r, bool special = false); bool addDirtyRect(Common::Rect r, bool backup = false, bool special = false); +private: void colorFade(const Common::Rect &r, OverlayColor start, OverlayColor end, uint factor = 1); void drawRect(const Common::Rect &r, const Graphics::Surface *corner, const Graphics::Surface *top, const Graphics::Surface *left, const Graphics::Surface *fill, int alpha, bool skipLastRow = false); @@ -341,7 +348,8 @@ private: kShadowFull = 0, kShadowSmall = 1, kShadowButton = 2, - kShadowEmboss = 3 + kShadowEmboss = 3, + kShadowPopUp = 4 }; Common::Rect shadowRect(const Common::Rect &r, uint32 shadowStyle); @@ -368,7 +376,6 @@ private: void resetupGuiRenderer(); void setupColors(); - void restoreBackground(Common::Rect r, bool special = false); OverlayColor getColor(kState state); struct DialogState { diff --git a/gui/themes/modern.ini b/gui/themes/modern.ini index dae955cf11..cdc0b2edc1 100644 --- a/gui/themes/modern.ini +++ b/gui/themes/modern.ini @@ -1,7 +1,7 @@ # $URL$ # $Id$ [theme] -version=12 +version=13 [pixmaps] dialog_corner=dialog_bkgd_corner.bmp @@ -75,7 +75,7 @@ main_dialog_end=239 196 24 dialog_start=246 224 139 dialog_end=251 241 206 -color_state_disabled=128 128 128 +color_state_disabled=192 192 192 color_state_highlight=100 162 8 color_state_enabled=0 0 0 @@ -89,18 +89,18 @@ widget_bkgd_end=251 241 206 widget_bkgd_small_start=246 224 139 widget_bkgd_small_end=251 241 206 -button_bkgd_start=210 130 110 -button_bkgd_end=177 61 34 +button_bkgd_start=203 126 107 +button_bkgd_end=169 42 12 button_bkgd_highlight_start=255 210 200 button_bkgd_highlight_end=200 70 50 button_text_enabled=255 255 255 -button_text_disabled=128 128 128 +button_text_disabled=192 192 192 button_text_highlight=255 214 84 slider_background_start=247 228 166 slider_background_end=247 228 166 -slider_start=210 130 110 -slider_end=177 61 34 +slider_start=203 126 107 +slider_end=169 42 12 slider_highlight_start=255 210 200 slider_highlight_end=200 70 50 @@ -111,8 +111,8 @@ scrollbar_background_start=247 228 166 scrollbar_background_end=247 228 166 scrollbar_button_start=247 228 166 scrollbar_button_end=247 228 166 -scrollbar_slider_start=210 130 110 -scrollbar_slider_end=177 61 34 +scrollbar_slider_start=203 126 107 +scrollbar_slider_end=169 42 12 scrollbar_button_highlight_start=255 210 200 scrollbar_button_highlight_end=200 70 50 scrollbar_slider_highlight_start=255 210 200 @@ -137,9 +137,9 @@ dialog_special=2 widget_small=3 widget=3 -button=2 +button=1 -slider=2 +slider=1 slider_bkgd=1 tab=2 @@ -157,7 +157,7 @@ shadow_right_width=4 shadow_top_height=2 shadow_bottom_height=4 inactive_dialog_shading=dim -shading_dim_percent=20 +shading_dim_percent=15 fontfile_normal=helvr12-l1.bdf fontfile_fixed_normal=courr12-l1.bdf cursor_hotspot_x=0 @@ -192,16 +192,22 @@ def_midiControlsSpacing=4 ##### Widgets config ListWidget.leftPadding=7 -ListWidget.rightPadding=7 +ListWidget.rightPadding=5 ListWidget.topPadding=5 ListWidget.bottomPadding=5 ListWidget.hlLeftPadding=0 ListWidget.hlRightPadding=0 PopUpWidget.leftPadding=7 -PopUpWidget.rightPadding=7 +PopUpWidget.rightPadding=5 +PopUpWidget.labelSpacing=3 +EditTextWidget.font=kFontStyleNormal EditTextWidget.leftPadding=7 -EditTextWidget.rightPadding=7 +EditTextWidget.rightPadding=5 Console.font=kFontStyleFixedNormal +Console.leftPadding=7 +Console.rightPadding=5 +Console.topPadding=5 +Console.bottomPadding=5 ###### chooser opHeight=insetH @@ -393,10 +399,12 @@ scummhelp_close=(scummhelpW - 8 - shButtonWidth) prev.y prev.w prev.h # Saveload dialog scummsaveload=8 8 (w - 2 * 8) (h - 16) set_parent=scummsaveload -scummsaveload_title=10 2 (parent.w - 2 * 10 - 180) kLineHeight +scummsaveload_title=10 2 (parent.w - 2 * 10 - 180-20) kLineHeight scummsaveload_title.align=kTextAlignCenter scummsaveload_list=10 18 prev.w (parent.h - 17 - buttonHeight - 8 - self.y) scummsaveload_thumbnail=(parent.w - (kThumbnailWidth + 22)) 18 +scummsaveload_thumbnail.hPad=10 +scummsaveload_thumbnail.vPad=10 scummsaveload_cancel=(parent.w - 2 * (buttonWidth + 10)) (parent.h - buttonHeight - 8) buttonWidth buttonHeight scummsaveload_choose=(prev.x2 + 10) prev.y prev.w prev.h scummsaveload_extinfo.visible=true @@ -414,9 +422,9 @@ chooser_ok=(prev.x2 + 10) prev.y prev.w prev.h gcx=(opXoffset + 10) gcw=(parent.w - gcx - 25) grModePopup=(gcx - 5) (opYoffset - 1) (gcw + 5) kPopUpHeight -opYoffset=(opYoffset + kLineHeight + 8) -grRenderPopup=prev.x (opYoffset - 1) prev.w prev.h opYoffset=(opYoffset + kLineHeight + 12) +grRenderPopup=prev.x (opYoffset - 1) prev.w prev.h +opYoffset=(opYoffset + kLineHeight + 16) grFullscreenCheckbox=gcx opYoffset (kFontHeight + 10 + 96) buttonHeight opYoffset=(opYoffset + buttonHeight + 4) grAspectCheckbox=prev.x opYoffset (kFontHeight + 10 + 136) prev.h diff --git a/gui/widget.cpp b/gui/widget.cpp index a9aae5342a..e744c0f220 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -356,4 +356,20 @@ void GraphicsWidget::drawWidget(bool hilite) { } } +#pragma mark - + +ContainerWidget::ContainerWidget(GuiObject *boss, int x, int y, int w, int h) : Widget(boss, x, y, w, h) { + _flags = WIDGET_ENABLED | WIDGET_CLEARBG; + _type = kContainerWidget; +} + +ContainerWidget::ContainerWidget(GuiObject *boss, String name) : Widget(boss, name) { + _flags = WIDGET_ENABLED | WIDGET_CLEARBG; + _type = kContainerWidget; +} + +void ContainerWidget::drawWidget(bool hilite) { + g_gui.theme()->drawWidgetBackground(Common::Rect(_x, _y, _x + _w, _y + _h), _hints, Theme::kWidgetBackgroundBorder); +} + } // End of namespace GUI diff --git a/gui/widget.h b/gui/widget.h index 4fcd277f9d..6c712ef264 100644 --- a/gui/widget.h +++ b/gui/widget.h @@ -58,7 +58,8 @@ enum { kScrollBarWidget = 'SCRB', kPopUpWidget = 'POPU', kTabWidget = 'TABW', - kGraphicsWidget = 'GFXW' + kGraphicsWidget = 'GFXW', + kContainerWidget = 'CTNR' }; enum { @@ -279,6 +280,16 @@ protected: bool _transparency; }; +/* ContainerWidget */ +class ContainerWidget : public Widget { +public: + ContainerWidget(GuiObject *boss, int x, int y, int w, int h); + ContainerWidget(GuiObject *boss, Common::String name); + +protected: + void drawWidget(bool hilite); +}; + } // End of namespace GUI #endif |