diff options
| author | Eugene Sandulenko | 2019-10-02 19:25:31 +0200 | 
|---|---|---|
| committer | Eugene Sandulenko | 2019-10-03 00:05:12 +0200 | 
| commit | 1ced332fdee22366023d6c8f9d8a6825fddc46a8 (patch) | |
| tree | 91b121d8100d26186c51cb1fe9493b9fbff3e9f4 /graphics/macgui/macmenu.cpp | |
| parent | 62f186b4996b24451995e7c85ee39bea181cec9d (diff) | |
| download | scummvm-rg350-1ced332fdee22366023d6c8f9d8a6825fddc46a8.tar.gz scummvm-rg350-1ced332fdee22366023d6c8f9d8a6825fddc46a8.tar.bz2 scummvm-rg350-1ced332fdee22366023d6c8f9d8a6825fddc46a8.zip | |
GRAPHICS: MACGUI: Render nested submenus
Diffstat (limited to 'graphics/macgui/macmenu.cpp')
| -rw-r--r-- | graphics/macgui/macmenu.cpp | 27 | 
1 files changed, 15 insertions, 12 deletions
| diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp index 0079cedcb1..b4c1a60abc 100644 --- a/graphics/macgui/macmenu.cpp +++ b/graphics/macgui/macmenu.cpp @@ -792,43 +792,46 @@ bool MacMenu::mouseClick(int x, int y) {  	if (_bbox.contains(x, y)) {  		for (uint i = 0; i < _items.size(); i++)  			if (_items[i]->bbox.contains(x, y)) { -			  if ((uint)_activeItem == i) +				if ((uint)_activeItem == i)  					return false;  				if (_activeItem != -1) { // Restore background  					if (_items[_activeItem]->submenu != nullptr) { -						Common::Rect r(_items[_activeItem]->submenu->bbox); -						r.right += 3; -						r.bottom += 3; -  						_wm->setFullRefresh(true); + +						_menustack.pop_back(); // Drop previous submenu  					}  				}  				_activeItem = i;  				_activeSubItem = -1; +				if (_items[_activeItem]->submenu != nullptr) { +					_menustack.push_back(_items[_activeItem]->submenu); +				} +  				_menuActivated = true;  				_contentIsDirty = true;  				return true;  			} -	} else if (_menuActivated && _items[_activeItem]->submenu != nullptr && -			_items[_activeItem]->submenu->bbox.contains(x, y)) { -		MacMenuSubMenu *it = _items[_activeItem]->submenu; +	} else if (_menuActivated && _menustack.size() > 0 && _menustack.back()->bbox.contains(x, y)) { +		MacMenuSubMenu *it = _menustack.back();  		int numSubItem = (y - it->bbox.top) / kMenuDropdownItemHeight;  		if (numSubItem != _activeSubItem) {  			_activeSubItem = numSubItem; -			renderSubmenu(_items[_activeItem]->submenu); +			renderSubmenu(it);  			_contentIsDirty = true;  		} -	} else if (_menuActivated && _activeItem != -1) { +	} else if (_menuActivated && _activeItem != -1 && _activeSubItem != -1) {  		_activeSubItem = -1; -		renderSubmenu(_items[_activeItem]->submenu); -		_contentIsDirty = true; +		if (_menustack.size()) { +			renderSubmenu(_menustack.back()); +			_contentIsDirty = true; +		}  	}  	return false; | 
