aboutsummaryrefslogtreecommitdiff
path: root/graphics/macgui/macwindowmanager.cpp
diff options
context:
space:
mode:
authorBorja Lorente2016-07-29 10:27:30 +0200
committerBorja Lorente2016-08-02 08:33:43 +0200
commitbc798d9ff4d46ba758fa2d225cdd741f4c94ff18 (patch)
tree0b500c6fe1b753a224bbcc4ea279f1ede0934e17 /graphics/macgui/macwindowmanager.cpp
parent2b586e7c5959c839323d24d1f788c9a836ece765 (diff)
downloadscummvm-rg350-bc798d9ff4d46ba758fa2d225cdd741f4c94ff18.tar.gz
scummvm-rg350-bc798d9ff4d46ba758fa2d225cdd741f4c94ff18.tar.bz2
scummvm-rg350-bc798d9ff4d46ba758fa2d225cdd741f4c94ff18.zip
GRAPHICS: Add custom border measures
Diffstat (limited to 'graphics/macgui/macwindowmanager.cpp')
-rw-r--r--graphics/macgui/macwindowmanager.cpp49
1 files changed, 46 insertions, 3 deletions
diff --git a/graphics/macgui/macwindowmanager.cpp b/graphics/macgui/macwindowmanager.cpp
index da573e6025..de94acf33a 100644
--- a/graphics/macgui/macwindowmanager.cpp
+++ b/graphics/macgui/macwindowmanager.cpp
@@ -184,6 +184,11 @@ void MacWindowManager::setActive(int id) {
_fullRefresh = true;
}
+void MacWindowManager::removeWindow(MacWindow *target) {
+ _windowsToRemove.push_back(target);
+ _needsRemoval = true;
+}
+
struct PlotData {
Graphics::ManagedSurface *surface;
MacPatterns *patterns;
@@ -242,6 +247,8 @@ void MacWindowManager::drawDesktop() {
void MacWindowManager::draw() {
assert(_screen);
+ removeMarked();
+
if (_fullRefresh)
drawDesktop();
@@ -269,9 +276,9 @@ bool MacWindowManager::processEvent(Common::Event &event) {
if (_menu && _menu->processEvent(event))
return true;
- if (event.type != Common::EVENT_MOUSEMOVE && event.type != Common::EVENT_LBUTTONDOWN &&
- event.type != Common::EVENT_LBUTTONUP)
- return false;
+ if (event.type != Common::EVENT_MOUSEMOVE && event.type != Common::EVENT_LBUTTONDOWN &&
+ event.type != Common::EVENT_LBUTTONUP)
+ return false;
if (_windows[_activeWindow]->isEditable() && _windows[_activeWindow]->getType() == kWindowWindow &&
((MacWindow *)_windows[_activeWindow])->getInnerDimensions().contains(event.mouse.x, event.mouse.y)) {
@@ -302,6 +309,42 @@ bool MacWindowManager::processEvent(Common::Event &event) {
return false;
}
+void MacWindowManager::removeMarked() {
+ if (!_needsRemoval) return;
+
+ Common::List<BaseMacWindow *>::const_iterator it;
+ for (it = _windowsToRemove.begin(); it != _windowsToRemove.end(); it++) {
+ removeFromStack(*it);
+ removeFromWindowList(*it);
+ delete *it;
+ _activeWindow = 0;
+ _fullRefresh = true;
+ }
+ _windowsToRemove.clear();
+ _needsRemoval = false;
+}
+
+void MacWindowManager::removeFromStack(BaseMacWindow *target) {
+ Common::List<BaseMacWindow *>::iterator stackIt;
+ for (stackIt = _windowStack.begin(); stackIt != _windowStack.end(); stackIt++) {
+ if (*stackIt == target) {
+ stackIt = _windowStack.erase(stackIt);
+ stackIt--;
+ }
+ }
+}
+
+void MacWindowManager::removeFromWindowList(BaseMacWindow *target) {
+ int size = _windows.size();
+ int ndx = 0;
+ for (int i = 0; i < size; i++) {
+ if (_windows[i] == target) {
+ ndx = i;
+ }
+ }
+ _windows.remove_at(ndx);
+}
+
//////////////////////
// Font stuff
//////////////////////