diff options
author | Willem Jan Palenstijn | 2013-09-30 22:05:32 +0200 |
---|---|---|
committer | Willem Jan Palenstijn | 2013-09-30 22:05:32 +0200 |
commit | 8e58be7a1d39d8235ddd7beb876de1ff3988fca5 (patch) | |
tree | 64cebc37a319e17299a6a37a8b13b35742174d58 /engines/wintermute/ui | |
parent | 057b01951a92cc17e6c7a5121d2bd866841c4f75 (diff) | |
parent | 17df6b343a0fdb2168b4d3a22927cd0f584ce735 (diff) | |
download | scummvm-rg350-8e58be7a1d39d8235ddd7beb876de1ff3988fca5.tar.gz scummvm-rg350-8e58be7a1d39d8235ddd7beb876de1ff3988fca5.tar.bz2 scummvm-rg350-8e58be7a1d39d8235ddd7beb876de1ff3988fca5.zip |
Merge branch 'master' into wme_rendering
Diffstat (limited to 'engines/wintermute/ui')
-rw-r--r-- | engines/wintermute/ui/ui_button.cpp | 26 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_button.h | 56 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_edit.cpp | 4 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_edit.h | 25 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_entity.h | 4 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_object.cpp | 75 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_object.h | 56 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_text.h | 4 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_tiled_image.h | 2 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_window.cpp | 28 | ||||
-rw-r--r-- | engines/wintermute/ui/ui_window.h | 47 |
11 files changed, 247 insertions, 80 deletions
diff --git a/engines/wintermute/ui/ui_button.cpp b/engines/wintermute/ui/ui_button.cpp index b2e6c3953b..66cee8a50c 100644 --- a/engines/wintermute/ui/ui_button.cpp +++ b/engines/wintermute/ui/ui_button.cpp @@ -660,7 +660,7 @@ bool UIButton::display(int offsetX, int offsetY) { _hover = (!_disable && _gameRef->_activeObject == this && (_gameRef->_interactive || _gameRef->_state == GAME_SEMI_FROZEN)); if ((_press && _hover && !_gameRef->_mouseLeftDown) || - (_oneTimePress && g_system->getMillis() - _oneTimePressTime >= 100)) { + (_oneTimePress && g_system->getMillis() - _oneTimePressTime >= 100)) { press(); } @@ -1206,4 +1206,28 @@ bool UIButton::persist(BasePersistenceManager *persistMgr) { return STATUS_OK; } +void UIButton::setFontHover(BaseFont *font) { + _fontHover = font; +} + +BaseFont *UIButton::getFontHover() { + return _fontHover; +} + +void UIButton::setFontPress(BaseFont *font) { + _fontPress = font; +} + +void UIButton::setImageHover(BaseSprite *sprite) { + _imageHover = sprite; +} + +void UIButton::setImagePress(BaseSprite *sprite) { + _imagePress = sprite; +} + +void UIButton::setTextAlign(TTextAlign align) { + _align = align; +} + } // End of namespace Wintermute diff --git a/engines/wintermute/ui/ui_button.h b/engines/wintermute/ui/ui_button.h index b5002f3166..542a50d35a 100644 --- a/engines/wintermute/ui/ui_button.h +++ b/engines/wintermute/ui/ui_button.h @@ -37,31 +37,14 @@ namespace Wintermute { class UIButton : public UIObject { public: - bool _pixelPerfect; - bool _stayPressed; - bool _centerImage; - bool _oneTimePress; - uint32 _oneTimePressTime; + DECLARE_PERSISTENT(UIButton, UIObject) void press(); virtual bool display() { return display(0, 0); } virtual bool display(int offsetX, int offsetY); - bool _press; - bool _hover; + void correctSize(); - TTextAlign _align; - BaseSprite *_imageHover; - BaseSprite *_imagePress; - BaseSprite *_imageDisable; - BaseSprite *_imageFocus; - BaseFont *_fontDisable; - BaseFont *_fontPress; - BaseFont *_fontHover; - BaseFont *_fontFocus; - UITiledImage *_backPress; - UITiledImage *_backHover; - UITiledImage *_backDisable; - UITiledImage *_backFocus; + UIButton(BaseGame *inGame = nullptr); virtual ~UIButton(); bool loadFile(const char *filename); @@ -73,6 +56,39 @@ public: virtual bool scSetProperty(const char *name, ScValue *value) override; virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; virtual const char *scToString() override; + + + void setFontHover(BaseFont *font); + BaseFont *getFontHover(); + void setFontPress(BaseFont *font); + + void setTextAlign(TTextAlign align); + + void setImageHover(BaseSprite *sprite); + void setImagePress(BaseSprite *sprite); + +private: + bool _pixelPerfect; + bool _stayPressed; + bool _centerImage; + bool _oneTimePress; + UITiledImage *_backPress; + UITiledImage *_backHover; + UITiledImage *_backDisable; + UITiledImage *_backFocus; + bool _press; + bool _hover; + BaseFont *_fontDisable; + BaseFont *_fontPress; + BaseFont *_fontHover; + BaseFont *_fontFocus; + BaseSprite *_imageHover; + BaseSprite *_imagePress; + BaseSprite *_imageDisable; + BaseSprite *_imageFocus; + uint32 _oneTimePressTime; + TTextAlign _align; + }; } // End of namespace Wintermute diff --git a/engines/wintermute/ui/ui_edit.cpp b/engines/wintermute/ui/ui_edit.cpp index caed157e0b..502685f0f1 100644 --- a/engines/wintermute/ui/ui_edit.cpp +++ b/engines/wintermute/ui/ui_edit.cpp @@ -627,9 +627,9 @@ bool UIEdit::display(int offsetX, int offsetY) { curFirst = true; } else { while (font->getTextWidth((byte *)_text + _scrollOffset, MAX<int32>(0, _selStart - _scrollOffset)) + - sfont->getTextWidth((byte *)(_text + MAX<int32>(_scrollOffset, _selStart)), _selEnd - MAX(_scrollOffset, _selStart)) + sfont->getTextWidth((byte *)(_text + MAX<int32>(_scrollOffset, _selStart)), _selEnd - MAX(_scrollOffset, _selStart)) - > _width - cursorWidth - 2 * _frameWidth) { + > _width - cursorWidth - 2 * _frameWidth) { _scrollOffset++; if (_scrollOffset >= (int)strlen(_text)) { break; diff --git a/engines/wintermute/ui/ui_edit.h b/engines/wintermute/ui/ui_edit.h index a057be9ead..7a379011fd 100644 --- a/engines/wintermute/ui/ui_edit.h +++ b/engines/wintermute/ui/ui_edit.h @@ -38,21 +38,15 @@ class BaseFont; class UIEdit : public UIObject { public: DECLARE_PERSISTENT(UIEdit, UIObject) - int32 _maxLength; + int insertChars(int pos, const byte *chars, int num); int deleteChars(int start, int end); - bool _cursorVisible; - uint32 _lastBlinkTime; + virtual bool display(int offsetX, int offsetY); virtual bool handleKeypress(Common::Event *event, bool printable = false); - int32 _scrollOffset; - int32 _frameWidth; - uint32 _cursorBlinkRate; + void setCursorChar(const char *character); - char *_cursorChar; - int32 _selEnd; - int32 _selStart; - BaseFont *_fontSelected; + UIEdit(BaseGame *inGame); virtual ~UIEdit(); @@ -65,6 +59,17 @@ public: virtual bool scSetProperty(const char *name, ScValue *value) override; virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; virtual const char *scToString() override; +private: + uint32 _cursorBlinkRate; + uint32 _lastBlinkTime; + int32 _selEnd; + int32 _selStart; + int32 _scrollOffset; + int32 _frameWidth; + BaseFont *_fontSelected; + int32 _maxLength; + bool _cursorVisible; + char *_cursorChar; }; } // End of namespace Wintermute diff --git a/engines/wintermute/ui/ui_entity.h b/engines/wintermute/ui/ui_entity.h index 1b6e8a10d6..e155ca2ce2 100644 --- a/engines/wintermute/ui/ui_entity.h +++ b/engines/wintermute/ui/ui_entity.h @@ -44,7 +44,6 @@ public: virtual bool display() override { return display(0, 0); } virtual bool display(int offsetX, int offsetY) override; - AdEntity *_entity; bool setEntity(const char *filename); // scripting interface @@ -52,6 +51,9 @@ public: virtual bool scSetProperty(const char *name, ScValue *value) override; virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name); virtual const char *scToString(); + +private: + AdEntity *_entity; }; } // End of namespace Wintermute diff --git a/engines/wintermute/ui/ui_object.cpp b/engines/wintermute/ui/ui_object.cpp index c32ae75c20..a8da89b011 100644 --- a/engines/wintermute/ui/ui_object.cpp +++ b/engines/wintermute/ui/ui_object.cpp @@ -648,4 +648,79 @@ bool UIObject::saveAsText(BaseDynamicBuffer *buffer, int indent) { return STATUS_FAILED; } +int32 UIObject::getWidth() const { + return _width; +} + +int32 UIObject::getHeight() const { + return _height; +} + +void UIObject::setWidth(int32 width) { + assert(width >= 0); + _width = width; +} + +void UIObject::setHeight(int32 height) { + assert(height >= 0); + _height = height; +} + +bool UIObject::isDisabled() const { + return _disable; +} + +bool UIObject::isVisible() const { + return _visible; +} + +void UIObject::setVisible(bool visible) { + _visible = visible; +} + +void UIObject::setDisabled(bool disable) { + _disable = disable; +} + +bool UIObject::hasSharedFonts() const { + return _sharedFonts; +} + +void UIObject::setSharedFonts(bool shared) { + _sharedFonts = shared; +} + +bool UIObject::hasSharedImages() const { + return _sharedImages; +} + +void UIObject::setSharedImages(bool shared) { + _sharedImages = shared; +} + +BaseSprite *UIObject::getImage() const { + return _image; +} + +void UIObject::setImage(BaseSprite *image) { + _image = image; +} + +bool UIObject::canFocus() const { + return _canFocus; +} + +void UIObject::setFont(BaseFont *font) { + _font = font; +} + +BaseFont *UIObject::getFont() { + return _font; +} + +BaseScriptHolder *UIObject::getListener() const { + return _listenerObject; +} + + } // End of namespace Wintermute diff --git a/engines/wintermute/ui/ui_object.h b/engines/wintermute/ui/ui_object.h index 5d9508c2cf..8d14d8a6a4 100644 --- a/engines/wintermute/ui/ui_object.h +++ b/engines/wintermute/ui/ui_object.h @@ -41,35 +41,23 @@ class UIObject : public BaseObject { public: bool getTotalOffset(int *offsetX, int *offsetY); - bool _canFocus; bool focus(); virtual bool handleMouse(TMouseEvent event, TMouseButton button); bool isFocused(); - bool _parentNotify; + DECLARE_PERSISTENT(UIObject, BaseObject) UIObject *_parent; virtual bool display() override { return display(0, 0); } virtual bool display(int offsetX) { return display(offsetX, 0); } virtual bool display(int offsetX, int offsetY); virtual void correctSize(); - bool _sharedFonts; - bool _sharedImages; void setText(const char *text); - char *_text; - BaseFont *_font; - bool _visible; - UITiledImage *_back; - bool _disable; + UIObject(BaseGame *inGame = nullptr); virtual ~UIObject(); - int32 _width; - int32 _height; - TUIObjectType _type; - BaseSprite *_image; void setListener(BaseScriptHolder *object, BaseScriptHolder *listenerObject, uint32 listenerParam); - BaseScriptHolder *_listenerParamObject; - uint32 _listenerParamDWORD; - BaseScriptHolder *_listenerObject; + BaseScriptHolder *getListener() const; + UIObject *_focusedWidget; virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; @@ -78,6 +66,42 @@ public: virtual bool scSetProperty(const char *name, ScValue *value) override; virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; virtual const char *scToString() override; + TUIObjectType _type; + + int32 getWidth() const; + int32 getHeight() const; + void setHeight(int32 height); + void setWidth(int32 width); + bool isDisabled() const; + void setDisabled(bool disable); + bool isVisible() const; + void setVisible(bool visible); + bool hasSharedFonts() const; + void setSharedFonts(bool shared); + bool hasSharedImages() const; + void setSharedImages(bool shared); + BaseSprite *getImage() const; + void setImage(BaseSprite *image); + void setFont(BaseFont *font); + BaseFont *getFont(); + bool canFocus() const; + +protected: + BaseScriptHolder *_listenerParamObject; + uint32 _listenerParamDWORD; + BaseScriptHolder *_listenerObject; + BaseSprite *_image; + BaseFont *_font; + bool _sharedFonts; + bool _sharedImages; + char *_text; + bool _visible; + bool _disable; + int32 _width; + int32 _height; + bool _canFocus; + bool _parentNotify; + UITiledImage *_back; }; } // End of namespace Wintermute diff --git a/engines/wintermute/ui/ui_text.h b/engines/wintermute/ui/ui_text.h index 29ed62a5ef..4470367fd5 100644 --- a/engines/wintermute/ui/ui_text.h +++ b/engines/wintermute/ui/ui_text.h @@ -37,13 +37,13 @@ namespace Wintermute { class UIText : public UIObject { private: bool sizeToFit(); + TTextAlign _textAlign; + TVerticalAlign _verticalAlign; public: virtual bool display(int offsetX, int offsetY); DECLARE_PERSISTENT(UIText, UIObject) UIText(BaseGame *inGame = nullptr); virtual ~UIText(); - TTextAlign _textAlign; - TVerticalAlign _verticalAlign; bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; diff --git a/engines/wintermute/ui/ui_tiled_image.h b/engines/wintermute/ui/ui_tiled_image.h index 39bc6495a9..5fd3346dc8 100644 --- a/engines/wintermute/ui/ui_tiled_image.h +++ b/engines/wintermute/ui/ui_tiled_image.h @@ -36,6 +36,8 @@ namespace Wintermute { class BaseSubFrame; class UITiledImage : public BaseObject { + using Wintermute::BaseObject::display; + public: DECLARE_PERSISTENT(UITiledImage, BaseObject) void correctSize(int32 *width, int32 *height); diff --git a/engines/wintermute/ui/ui_window.cpp b/engines/wintermute/ui/ui_window.cpp index 9066ee9f5b..da681b9153 100644 --- a/engines/wintermute/ui/ui_window.cpp +++ b/engines/wintermute/ui/ui_window.cpp @@ -141,8 +141,8 @@ bool UIWindow::display(int offsetX, int offsetY) { } if (_shieldButton) { _shieldButton->_posX = _shieldButton->_posY = 0; - _shieldButton->_width = _gameRef->_renderer->getWidth(); - _shieldButton->_height = _gameRef->_renderer->getHeight(); + _shieldButton->setWidth(_gameRef->_renderer->getWidth()); + _shieldButton->setHeight(_gameRef->_renderer->getHeight()); _shieldButton->display(); } @@ -170,7 +170,7 @@ bool UIWindow::display(int offsetX, int offsetY) { _dragFrom.y = _gameRef->_mousePos.y; } - if (!_focusedWidget || (!_focusedWidget->_canFocus || _focusedWidget->_disable || !_focusedWidget->_visible)) { + if (!_focusedWidget || (!_focusedWidget->canFocus() || _focusedWidget->isDisabled() || !_focusedWidget->isVisible())) { moveFocus(); } @@ -400,8 +400,8 @@ bool UIWindow::loadBuffer(byte *buffer, bool complete) { break; case TOKEN_IMAGE_INACTIVE: - delete _imageInactive, - _imageInactive = new BaseSprite(_gameRef); + delete _imageInactive; + _imageInactive = new BaseSprite(_gameRef); if (!_imageInactive || DID_FAIL(_imageInactive->loadFile((char *)params))) { delete _imageInactive; _imageInactive = nullptr; @@ -737,7 +737,7 @@ bool UIWindow::saveAsText(BaseDynamicBuffer *buffer, int indent) { bool UIWindow::enableWidget(const char *name, bool enable) { for (uint32 i = 0; i < _widgets.size(); i++) { if (scumm_stricmp(_widgets[i]->getName(), name) == 0) { - _widgets[i]->_disable = !enable; + _widgets[i]->setDisabled(!enable); } } return STATUS_OK; @@ -748,7 +748,7 @@ bool UIWindow::enableWidget(const char *name, bool enable) { bool UIWindow::showWidget(const char *name, bool visible) { for (uint32 i = 0; i < _widgets.size(); i++) { if (scumm_stricmp(_widgets[i]->getName(), name) == 0) { - _widgets[i]->_visible = visible; + _widgets[i]->setVisible(visible); } } return STATUS_OK; @@ -1309,7 +1309,7 @@ bool UIWindow::moveFocus(bool forward) { bool done = false; while (numTries <= (int32)_widgets.size()) { - if (_widgets[i] != _focusedWidget && _widgets[i]->_canFocus && _widgets[i]->_visible && !_widgets[i]->_disable) { + if (_widgets[i] != _focusedWidget && _widgets[i]->canFocus() && _widgets[i]->isVisible() && !_widgets[i]->isDisabled()) { _focusedWidget = _widgets[i]; done = true; break; @@ -1419,7 +1419,7 @@ void UIWindow::makeFreezable(bool freezable) { bool UIWindow::getWindowObjects(BaseArray<UIObject *> &objects, bool interactiveOnly) { for (uint32 i = 0; i < _widgets.size(); i++) { UIObject *control = _widgets[i]; - if (control->_disable && interactiveOnly) { + if (control->isDisabled() && interactiveOnly) { continue; } @@ -1442,4 +1442,14 @@ bool UIWindow::getWindowObjects(BaseArray<UIObject *> &objects, bool interactive return STATUS_OK; } +bool UIWindow::getInGame() const { + return _inGame; +} + +TWindowMode UIWindow::getMode() const { + return _mode; +} + + + } // End of namespace Wintermute diff --git a/engines/wintermute/ui/ui_window.h b/engines/wintermute/ui/ui_window.h index 8a726fdff8..a603e0f7b9 100644 --- a/engines/wintermute/ui/ui_window.h +++ b/engines/wintermute/ui/ui_window.h @@ -38,47 +38,32 @@ namespace Wintermute { class UIButton; class BaseViewport; class UIWindow : public UIObject { - uint32 _fadeColor; public: bool getWindowObjects(BaseArray<UIObject *> &Objects, bool InteractiveOnly); - bool _pauseMusic; void cleanup(); virtual void makeFreezable(bool freezable); - BaseViewport *_viewport; - bool _clipContents; - bool _inGame; - bool _isMenu; - bool _fadeBackground; virtual bool handleMouseWheel(int delta); - UIWindow *_shieldWindow; - UIButton *_shieldButton; + bool close(); bool goSystemExclusive(); bool goExclusive(); - TWindowMode _mode; bool moveFocus(bool forward = true); virtual bool handleMouse(TMouseEvent Event, TMouseButton Button); - Point32 _dragFrom; - bool _dragging; DECLARE_PERSISTENT(UIWindow, UIObject) - bool _transparent; bool showWidget(const char *name, bool visible = true); bool enableWidget(const char *name, bool enable = true); - Rect32 _titleRect; - Rect32 _dragRect; + virtual bool display(int offsetX = 0, int offsetY = 0) override; UIWindow(BaseGame *inGame); virtual ~UIWindow(); virtual bool handleKeypress(Common::Event *event, bool printable = false) override; BaseArray<UIObject *> _widgets; - TTextAlign _titleAlign; + bool loadFile(const char *filename); bool loadBuffer(byte *buffer, bool complete = true); - UITiledImage *_backInactive; - BaseFont *_fontInactive; - BaseSprite *_imageInactive; + virtual bool listen(BaseScriptHolder *param1, uint32 param2); virtual bool saveAsText(BaseDynamicBuffer *buffer, int indent) override; @@ -87,6 +72,30 @@ public: virtual bool scSetProperty(const char *name, ScValue *value) override; virtual bool scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack, const char *name) override; virtual const char *scToString(); + + bool getInGame() const; + TWindowMode getMode() const; + +private: + bool _pauseMusic; + BaseViewport *_viewport; + bool _clipContents; + bool _inGame; + bool _isMenu; + bool _fadeBackground; + TWindowMode _mode; + Point32 _dragFrom; + bool _dragging; + bool _transparent; + uint32 _fadeColor; + UIWindow *_shieldWindow; + UIButton *_shieldButton; + Rect32 _titleRect; + Rect32 _dragRect; + UITiledImage *_backInactive; + BaseFont *_fontInactive; + BaseSprite *_imageInactive; + TTextAlign _titleAlign; }; } // End of namespace Wintermute |