diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp index 4ba1a093aac..85ea56e7194 100644 --- a/graphics/macgui/macmenu.cpp +++ b/graphics/macgui/macmenu.cpp @@ -1038,6 +1038,15 @@ bool MacMenu::keyEvent(Common::Event &event) { return false; } +bool MacMenu::checkIntersects(Common::Rect &rect) { + if (_bbox.intersects(rect)) + return true; + for (uint i = 0; i < _menustack.size(); i++) + if (_menustack[i]->bbox.intersects(rect)) + return true; + return false; +} + bool MacMenu::mouseClick(int x, int y) { if (_bbox.contains(x, y)) { for (uint i = 0; i < _items.size(); i++) { diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h index 36339f080b8..5efb5011e45 100644 --- a/graphics/macgui/macmenu.h +++ b/graphics/macgui/macmenu.h @@ -95,6 +95,8 @@ public: void closeMenu(); + bool checkIntersects(Common::Rect &rect); + Common::Rect _bbox; private: diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp index 9f55fd1988a..08a2c761971 100644 --- a/graphics/macgui/macwindowmanager.cpp +++ b/graphics/macgui/macwindowmanager.cpp @@ -657,7 +657,19 @@ void MacWindowManager::draw() { // Menu is drawn on top of everything and always if (_menu && !(_mode & kWMModeFullscreen)) { - _menu->draw(_screen, _fullRefresh); + if (_fullRefresh) + _menu->draw(_screen, _fullRefresh); + else { + // add intersection check with menu + bool menuRedraw = false; + for (Common::Array::iterator dirty = dirtyRects.begin(); dirty != dirtyRects.end(); dirty++) { + if (_menu->checkIntersects(*dirty)) { + menuRedraw = true; + break; + } + } + _menu->draw(_screen, menuRedraw); + } } _fullRefresh = false;