[Scummvm-git-logs] scummvm master -> ee139e86f31dd67d7a59cf7dc0da9efba212d23b
sev-
sev at scummvm.org
Thu Oct 3 00:05:24 CEST 2019
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
1ced332fde GRAPHICS: MACGUI: Render nested submenus
b157a27e2b GRAPHICS: MACGUI: Unify submenu dimension calculations
d3df14fce1 GRAPHICS: MACGUI: Finish implementation for nested submenus drawing
a843a90207 GRAPHICS: MACGUI: Implement nested submenu navigation
571a455c6a GRAPHICS: MACGUI: Close nested submenus on hover
ee139e86f3 GRAPHICS: MACGUI: Correctly render highlights for the open submenus
Commit: 1ced332fdee22366023d6c8f9d8a6825fddc46a8
https://github.com/scummvm/scummvm/commit/1ced332fdee22366023d6c8f9d8a6825fddc46a8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-03T00:05:12+02:00
Commit Message:
GRAPHICS: MACGUI: Render nested submenus
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 0079ced..b4c1a60 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;
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 1239ceb..208e93d 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -117,7 +117,7 @@ private:
bool _isVisible;
int _activeItem;
- Common::Array<int> _menustack;
+ Common::Array<MacMenuSubMenu *> _menustack;
int _activeSubItem;
void (*_ccallback)(int action, Common::String &text, void *data);
Commit: b157a27e2bcfe04bcdfae539304509f859ec17d0
https://github.com/scummvm/scummvm/commit/b157a27e2bcfe04bcdfae539304509f859ec17d0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-03T00:05:12+02:00
Commit Message:
GRAPHICS: MACGUI: Unify submenu dimension calculations
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index b4c1a60..5be18ac 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -136,6 +136,8 @@ MacMenu::MacMenu(int id, const Common::Rect &bounds, MacWindowManager *wm)
_menuActivated = false;
+ _dimensionsDirty = true;
+
if (_wm->_mode & kWMModeAutohideMenu)
_isVisible = false;
else
@@ -308,16 +310,12 @@ void MacMenu::addStaticMenus(const MacMenuData *data) {
const MacMenuData *m = &data[i];
if (m->menunum == kMenuHighLevel) {
- MacMenuItem *item = new MacMenuItem(m->title);
- _items.push_back(item);
+ addMenuItem(m->title);
continue;
}
- if (_items[m->menunum]->submenu == nullptr)
- _items[m->menunum]->submenu = new MacMenuSubMenu();
-
- _items[m->menunum]->submenu->subitems.push_back(new MacMenuSubItem(m->title, m->action, 0, m->shortcut, m->enabled));
+ addMenuSubItem(m->menunum, m->title, m->action, 0, m->shortcut, m->enabled);
}
calcDimensions();
@@ -327,6 +325,8 @@ int MacMenu::addMenuItem(const Common::String &name) {
MacMenuItem *i = new MacMenuItem(name);
_items.push_back(i);
+ _dimensionsDirty = true;
+
return _items.size() - 1;
}
@@ -334,10 +334,14 @@ int MacMenu::addMenuItem(const Common::U32String &name) {
MacMenuItem *i = new MacMenuItem(name);
_items.push_back(i);
+ _dimensionsDirty = true;
+
return _items.size() - 1;
}
MacMenuSubMenu *MacMenu::addSubMenu(MacMenuSubMenu *submenu) {
+ _dimensionsDirty = true;
+
if (submenu == nullptr) {
return (_items.back()->submenu = new MacMenuSubMenu());
} else {
@@ -346,37 +350,37 @@ MacMenuSubMenu *MacMenu::addSubMenu(MacMenuSubMenu *submenu) {
}
void MacMenu::addMenuSubItem(int id, const Common::String &text, int action, int style, char shortcut, bool enabled) {
+ _dimensionsDirty = true;
+
if (_items[id]->submenu == nullptr)
_items[id]->submenu = new MacMenuSubMenu();
_items[id]->submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
-
- calcSubMenuBounds(_items[id]->submenu, _items[id]->bbox.left - 1, _items[id]->bbox.bottom + 1);
}
void MacMenu::addMenuSubItem(int id, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
+ _dimensionsDirty = true;
+
if (_items[id]->submenu == nullptr)
_items[id]->submenu = new MacMenuSubMenu();
_items[id]->submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
-
- calcSubMenuBounds(_items[id]->submenu, _items[id]->bbox.left - 1, _items[id]->bbox.bottom + 1);
}
void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::String &text, int action, int style, char shortcut, bool enabled) {
assert(submenu != nullptr);
- submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
+ _dimensionsDirty = true;
- calcSubMenuBounds(submenu, 0, 0); // FIXME
+ submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
}
void MacMenu::addSubMenuItem(MacMenuSubMenu *submenu, const Common::U32String &text, int action, int style, char shortcut, bool enabled) {
assert(submenu != nullptr);
- submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
+ _dimensionsDirty = true;
- calcSubMenuBounds(submenu, 0, 0); // FIXME
+ submenu->subitems.push_back(new MacMenuSubItem(text, action, style, shortcut, enabled));
}
void MacMenu::calcDimensions() {
@@ -398,6 +402,8 @@ void MacMenu::calcDimensions() {
x += w + kMenuSpacing;
}
+
+ _dimensionsDirty = false;
}
void MacMenu::loadMenuResource(Common::MacResManager *resFork, uint16 id) {
@@ -461,19 +467,15 @@ void MacMenu::clearSubMenu(int id) {
void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
clearSubMenu(id);
- MacMenuItem *menu = _items[id];
Common::String string(str);
-
Common::String item;
- menu->submenu = new MacMenuSubMenu();
-
for (uint i = 0; i < string.size(); i++) {
while(i < string.size() && string[i] != ';') // Read token
item += string[i++];
if (item == "(-") {
- menu->submenu->subitems.push_back(new MacMenuSubItem(NULL, 0));
+ addMenuSubItem(id, NULL, 0);
} else {
bool enabled = true;
int style = 0;
@@ -522,13 +524,11 @@ void MacMenu::createSubMenuFromString(int id, const char *str, int commandId) {
}
}
- menu->submenu->subitems.push_back(new MacMenuSubItem(item, commandId, style, shortcut, enabled));
+ addMenuSubItem(id, item, commandId, style, shortcut, enabled);
}
item.clear();
}
-
- calcSubMenuBounds(menu->submenu, menu->bbox.left - 1, menu->bbox.bottom + 1);
}
const Font *MacMenu::getMenuFont() {
@@ -589,6 +589,13 @@ void MacMenu::calcSubMenuBounds(MacMenuSubMenu *submenu, int x, int y) {
submenu->bbox.top = y1;
submenu->bbox.right = x2;
submenu->bbox.bottom = y2;
+
+ for (uint i = 0; i < submenu->subitems.size(); i++) {
+ MacMenuSubMenu *submenu = submenu->subitems[i]->submenu;
+
+ if (submenu != nullptr)
+ calcSubMenuBounds(submenu, x2 - 4, y1 + i * kMenuDropdownItemHeight + 1);
+ }
}
static void drawPixelPlain(int x, int y, int color, void *data) {
@@ -608,6 +615,9 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
if (!_isVisible)
return false;
+ if (_dimensionsDirty)
+ calcDimensions();
+
if (!_contentIsDirty && !forceRedraw)
return false;
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 208e93d..224ec66 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -116,6 +116,8 @@ private:
bool _menuActivated;
bool _isVisible;
+ bool _dimensionsDirty;
+
int _activeItem;
Common::Array<MacMenuSubMenu *> _menustack;
int _activeSubItem;
Commit: d3df14fce121460ae7ee810fc751e66c17a04b16
https://github.com/scummvm/scummvm/commit/d3df14fce121460ae7ee810fc751e66c17a04b16
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-03T00:05:12+02:00
Commit Message:
GRAPHICS: MACGUI: Finish implementation for nested submenus drawing
Changed paths:
graphics/macgui/macmenu.cpp
graphics/macgui/macmenu.h
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 5be18ac..48db042 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -591,10 +591,10 @@ void MacMenu::calcSubMenuBounds(MacMenuSubMenu *submenu, int x, int y) {
submenu->bbox.bottom = y2;
for (uint i = 0; i < submenu->subitems.size(); i++) {
- MacMenuSubMenu *submenu = submenu->subitems[i]->submenu;
+ MacMenuSubMenu *menu = submenu->subitems[i]->submenu;
- if (submenu != nullptr)
- calcSubMenuBounds(submenu, x2 - 4, y1 + i * kMenuDropdownItemHeight + 1);
+ if (menu != nullptr)
+ calcSubMenuBounds(menu, x2 - 4, y1 + i * kMenuDropdownItemHeight + 1);
}
}
@@ -647,9 +647,6 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
_screen.fillRect(hbox, _wm->_colorBlack);
color = _wm->_colorWhite;
-
- if (it->submenu != nullptr)
- renderSubmenu(it->submenu);
}
if (it->unicode) {
@@ -661,6 +658,10 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
}
}
+ for (uint i = 0; i < _menustack.size(); i++) {
+ renderSubmenu(_menustack[i], (i == _menustack.size() - 1));
+ }
+
g->transBlitFrom(_screen, kColorGreen);
g_system->copyRectToScreen(g->getPixels(), g->pitch, 0, 0, g->w, g->h);
@@ -668,7 +669,7 @@ bool MacMenu::draw(ManagedSurface *g, bool forceRedraw) {
return true;
}
-void MacMenu::renderSubmenu(MacMenuSubMenu *menu) {
+void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
Common::Rect *r = &menu->bbox;
if (r->width() == 0 || r->height() == 0)
@@ -752,8 +753,8 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu) {
y += kMenuDropdownItemHeight;
}
- if (_activeSubItem != -1 && menu->subitems[_activeSubItem]->submenu != nullptr)
- renderSubmenu(menu->subitems[_activeSubItem]->submenu);
+ if (recursive && _activeSubItem != -1 && menu->subitems[_activeSubItem]->submenu != nullptr)
+ renderSubmenu(menu->subitems[_activeSubItem]->submenu, false);
_contentIsDirty = true;
//g_system->copyRectToScreen(_screen.getBasePtr(r->left, r->top), _screen.pitch, r->left, r->top, r->width() + 2, r->height() + 2);
diff --git a/graphics/macgui/macmenu.h b/graphics/macgui/macmenu.h
index 224ec66..3b21647 100644
--- a/graphics/macgui/macmenu.h
+++ b/graphics/macgui/macmenu.h
@@ -96,7 +96,7 @@ private:
const Common::String getAcceleratorString(MacMenuSubItem *item, const char *prefix);
int calcSubMenuWidth(MacMenuSubMenu *menu);
void calcSubMenuBounds(MacMenuSubMenu *menu, int x, int y);
- void renderSubmenu(MacMenuSubMenu *menu);
+ void renderSubmenu(MacMenuSubMenu *menu, bool recursive = true);
bool keyEvent(Common::Event &event);
bool mouseClick(int x, int y);
Commit: a843a902075ae118cd7e0ef0a4110e431c350acd
https://github.com/scummvm/scummvm/commit/a843a902075ae118cd7e0ef0a4110e431c350acd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-03T00:05:12+02:00
Commit Message:
GRAPHICS: MACGUI: Implement nested submenu navigation
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 48db042..aaa86ae 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -836,13 +836,25 @@ bool MacMenu::mouseClick(int x, int y) {
renderSubmenu(it);
_contentIsDirty = true;
}
- } else if (_menuActivated && _activeItem != -1 && _activeSubItem != -1) {
+ } else if (_menuActivated && _activeSubItem != -1) {
+ if (_menustack.back()->subitems[_activeSubItem]->submenu != nullptr) {
+ if (_menustack.back()->subitems[_activeSubItem]->submenu->bbox.contains(x, y)) {
+ _menustack.push_back(_menustack.back()->subitems[_activeSubItem]->submenu);
+
+ _activeSubItem = 0;
+
+ return true;
+ }
+ }
+ } else if (_menuActivated && _activeItem != -1) {
_activeSubItem = -1;
if (_menustack.size()) {
renderSubmenu(_menustack.back());
_contentIsDirty = true;
}
+
+ return true;
}
return false;
Commit: 571a455c6a8f3e5b7d2ff1a149c52fa379ec0f7d
https://github.com/scummvm/scummvm/commit/571a455c6a8f3e5b7d2ff1a149c52fa379ec0f7d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-03T00:05:12+02:00
Commit Message:
GRAPHICS: MACGUI: Close nested submenus on hover
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index aaa86ae..895f097 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -826,7 +826,12 @@ bool MacMenu::mouseClick(int x, int y) {
return true;
}
- } else if (_menuActivated && _menustack.size() > 0 && _menustack.back()->bbox.contains(x, y)) {
+ }
+
+ if (!_menuActivated)
+ return false;
+
+ if (_menustack.size() > 0 && _menustack.back()->bbox.contains(x, y)) {
MacMenuSubMenu *it = _menustack.back();
int numSubItem = (y - it->bbox.top) / kMenuDropdownItemHeight;
@@ -836,17 +841,36 @@ bool MacMenu::mouseClick(int x, int y) {
renderSubmenu(it);
_contentIsDirty = true;
}
- } else if (_menuActivated && _activeSubItem != -1) {
+
+ return true;
+ }
+
+ if (_activeSubItem != -1) {
if (_menustack.back()->subitems[_activeSubItem]->submenu != nullptr) {
if (_menustack.back()->subitems[_activeSubItem]->submenu->bbox.contains(x, y)) {
_menustack.push_back(_menustack.back()->subitems[_activeSubItem]->submenu);
_activeSubItem = 0;
+ _contentIsDirty = true;
return true;
}
}
- } else if (_menuActivated && _activeItem != -1) {
+
+ if (_menustack.size() > 1) {
+ if (_menustack[_menustack.size() - 2]->bbox.contains(x, y)) {
+ _menustack.pop_back();
+
+ _activeSubItem = (y - _menustack.back()->bbox.top) / kMenuDropdownItemHeight;
+
+ _contentIsDirty = true;
+
+ return true;
+ }
+ }
+ }
+
+ if (_activeItem != -1) {
_activeSubItem = -1;
if (_menustack.size()) {
Commit: ee139e86f31dd67d7a59cf7dc0da9efba212d23b
https://github.com/scummvm/scummvm/commit/ee139e86f31dd67d7a59cf7dc0da9efba212d23b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2019-10-03T00:05:12+02:00
Commit Message:
GRAPHICS: MACGUI: Correctly render highlights for the open submenus
Changed paths:
graphics/macgui/macmenu.cpp
diff --git a/graphics/macgui/macmenu.cpp b/graphics/macgui/macmenu.cpp
index 895f097..ed430cb 100644
--- a/graphics/macgui/macmenu.cpp
+++ b/graphics/macgui/macmenu.cpp
@@ -94,6 +94,9 @@ struct MacMenuSubItem {
struct MacMenuSubMenu {
SubItemArray subitems;
Common::Rect bbox;
+ int highlight;
+
+ MacMenuSubMenu() : highlight(-1) {}
~MacMenuSubMenu() {
for (uint i = 0; i < subitems.size(); i++)
@@ -695,7 +698,7 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
int arrowX = r->right - 14;
int color = _wm->_colorBlack;
- if (i == (uint)_activeSubItem && (!text.empty() || !unicodeText.empty()) && menu->subitems[i]->enabled) {
+ if (i == (uint)menu->highlight && (!text.empty() || !unicodeText.empty()) && menu->subitems[i]->enabled) {
color = _wm->_colorWhite;
Common::Rect trect(r->left, y - (_wm->_fontMan->hasBuiltInFonts() ? 1 : 0), r->right, y + _font->getFontHeight());
@@ -753,8 +756,8 @@ void MacMenu::renderSubmenu(MacMenuSubMenu *menu, bool recursive) {
y += kMenuDropdownItemHeight;
}
- if (recursive && _activeSubItem != -1 && menu->subitems[_activeSubItem]->submenu != nullptr)
- renderSubmenu(menu->subitems[_activeSubItem]->submenu, false);
+ if (recursive && menu->highlight != -1 && menu->subitems[menu->highlight]->submenu != nullptr)
+ renderSubmenu(menu->subitems[menu->highlight]->submenu, false);
_contentIsDirty = true;
//g_system->copyRectToScreen(_screen.getBasePtr(r->left, r->top), _screen.pitch, r->left, r->top, r->width() + 2, r->height() + 2);
@@ -838,6 +841,8 @@ bool MacMenu::mouseClick(int x, int y) {
if (numSubItem != _activeSubItem) {
_activeSubItem = numSubItem;
+ it->highlight = _activeSubItem;
+
renderSubmenu(it);
_contentIsDirty = true;
}
@@ -853,15 +858,19 @@ bool MacMenu::mouseClick(int x, int y) {
_activeSubItem = 0;
_contentIsDirty = true;
+ _menustack.back()->highlight = 0;
+
return true;
}
}
if (_menustack.size() > 1) {
if (_menustack[_menustack.size() - 2]->bbox.contains(x, y)) {
+ _menustack.back()->highlight = -1; // Erase it for the closed popup
+
_menustack.pop_back();
- _activeSubItem = (y - _menustack.back()->bbox.top) / kMenuDropdownItemHeight;
+ _activeSubItem = _menustack.back()->highlight;
_contentIsDirty = true;
More information about the Scummvm-git-logs
mailing list