Maxim Integrated / Mbed OS MAXREFDES155#

Dependencies:   MaximInterface

Revision:
10:71359af61af8
Parent:
8:a0d75dff3c9b
Child:
13:6a6225690c2e
diff -r 40dd19da90c3 -r 71359af61af8 WindowManager.cpp
--- a/WindowManager.cpp	Thu Apr 06 15:19:57 2017 -0500
+++ b/WindowManager.cpp	Mon Apr 10 11:55:33 2017 -0500
@@ -33,7 +33,6 @@
 #include <algorithm>
 #include <functional>
 #include "Bitmap.hpp"
-#include "Display.hpp"
 #include "WindowManager.hpp"
 
 static void deleteWindow(Window * window)
@@ -44,23 +43,23 @@
 WindowManager::~WindowManager()
 {
     // Free all windows.
-    std::for_each(m_windowStack.begin(), m_windowStack.end(), deleteWindow);
-    std::for_each(m_actionQueue.begin(), m_actionQueue.end(), deleteWindow);
+    std::for_each(windowStack.begin(), windowStack.end(), deleteWindow);
+    std::for_each(actionQueue.begin(), actionQueue.end(), deleteWindow);
 }
 
 void WindowManager::processAction(Window * window)
 {
     if (window == NULL)
     {
-        if (!m_windowStack.empty())
+        if (!windowStack.empty())
         {
-            delete m_windowStack.back();
-            m_windowStack.pop_back();
+            delete windowStack.back();
+            windowStack.pop_back();
         }
     }
     else
     {
-        m_windowStack.push_back(window);
+        windowStack.push_back(window);
     }
 }
 
@@ -68,56 +67,62 @@
 {
     if (window.get() != NULL)
     {
-        window->resize(Display::width, Display::height);
+        window->resize(canvas.width(), canvas.height());
         window->move(0, 0);
         window->setWindowManager(NULL);
-        m_actionQueue.push_back(window.release());
+        actionQueue.push_back(window.release());
     }
 }
 
 void WindowManager::pop()
 {
-    m_actionQueue.push_back(NULL);
+    actionQueue.push_back(NULL);
 }
 
-void WindowManager::update(Display & display)
-{
+bool WindowManager::update()
+{   
+    bool redraw = false;
+ 
     // Perform all queued push / pop actions.
-    if (!m_actionQueue.empty())
+    if (!actionQueue.empty())
     {
-        if (!m_windowStack.empty())
+        if (!windowStack.empty())
         {
-            m_windowStack.back()->setWindowManager(NULL);
+            windowStack.back()->setWindowManager(NULL);
         }
-        std::for_each(m_actionQueue.begin(), m_actionQueue.end(),
+        std::for_each(actionQueue.begin(), actionQueue.end(),
             std::bind1st(std::mem_fun(&WindowManager::processAction), this));
-        m_actionQueue.clear();
-        if (m_windowStack.empty())
+        actionQueue.clear();
+        if (windowStack.empty())
         {
-            // Clear the display.
-            display.update(Bitmap(Display::width, Display::height));
+            canvas.clear();
+            redraw = true;
         }
         else
         {
-            m_windowStack.back()->setWindowManager(this);
-            // Window has been invalidated and will be redrawn in the next section.
+            windowStack.back()->setWindowManager(this);
         }
     }
     
-    if (!m_windowStack.empty())
+    if (!windowStack.empty())
     {
         // Update all windows. Only allow redraw of the top window.
-        for (std::vector<Window *>::reverse_iterator it = m_windowStack.rbegin(); it != m_windowStack.rend(); it++)
+        for (std::vector<Window *>::reverse_iterator it = windowStack.rbegin(); it != windowStack.rend(); it++)
         {
-            (*it)->update(it == m_windowStack.rbegin() ? &display : NULL);
+            if ((*it)->update(it == windowStack.rbegin() ? &canvas : NULL))
+            {
+                redraw = true;
+            }
         }
     }
+    
+    return redraw;
 }
 
 void WindowManager::processKey(Key key)
 {
-    if (!m_windowStack.empty())
+    if (!windowStack.empty())
     {
-        m_windowStack.back()->processKey(key);
+        windowStack.back()->processKey(key);
     }
 }