Ver Fonte

UI API refactoring:
Changing alertListeners() to notifyListeners().
Assert rather than warn if event is not supported on a control.
Layout implementations are now singletons.

Adam Blake há 13 anos atrás
pai
commit
985b27aec2

+ 12 - 2
gameplay/src/AbsoluteLayout.cpp

@@ -5,6 +5,8 @@
 
 namespace gameplay
 {
+    static AbsoluteLayout* __instance;
+
     AbsoluteLayout::AbsoluteLayout()
     {
     }
@@ -19,8 +21,16 @@ namespace gameplay
 
     AbsoluteLayout* AbsoluteLayout::create()
     {
-        AbsoluteLayout* al = new AbsoluteLayout();
-        return al;
+        if (!__instance)
+        {
+            __instance = new AbsoluteLayout();
+        }
+        else
+        {
+            __instance->addRef();
+        }
+
+        return __instance;
     }
 
     Layout::Type AbsoluteLayout::getType()

+ 2 - 2
gameplay/src/CheckBox.cpp

@@ -54,7 +54,7 @@ void CheckBox::addListener(Control::Listener* listener, int eventFlags)
 {
     if ((eventFlags & Listener::TEXT_CHANGED) == Listener::TEXT_CHANGED)
     {
-        WARN("TEXT_CHANGED event is not applicable to CheckBox.");
+        assert("TEXT_CHANGED event is not applicable to CheckBox.");
         eventFlags &= ~Listener::TEXT_CHANGED;
     }
 
@@ -78,7 +78,7 @@ bool CheckBox::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int cont
                     y > 0 && y <= _bounds.height)
                 {
                     _checked = !_checked;
-                    alertListeners(Listener::VALUE_CHANGED);
+                    notifyListeners(Listener::VALUE_CHANGED);
                 }
             }
         }

+ 4 - 4
gameplay/src/Control.cpp

@@ -206,18 +206,18 @@ namespace gameplay
         switch (evt)
         {
         case Touch::TOUCH_PRESS:
-            alertListeners(Listener::PRESS);
+            notifyListeners(Listener::PRESS);
             break;
             
         case Touch::TOUCH_RELEASE:
             // Always trigger Listener::RELEASE
-            alertListeners(Listener::RELEASE);
+            notifyListeners(Listener::RELEASE);
 
             // Only trigger Listener::CLICK if both PRESS and RELEASE took place within the control's bounds.
             if (x > 0 && x <= _bounds.width &&
                 y > 0 && y <= _bounds.height)
             {
-                alertListeners(Listener::CLICK);
+                notifyListeners(Listener::CLICK);
             }
             break;
         }
@@ -229,7 +229,7 @@ namespace gameplay
     {
     }
 
-    void Control::alertListeners(Listener::EventType eventType)
+    void Control::notifyListeners(Listener::EventType eventType)
     {
         if (_listeners)
         {

+ 3 - 5
gameplay/src/Control.h

@@ -44,9 +44,7 @@ public:
             RELEASE         = 0x02,
             CLICK           = 0x04,
             VALUE_CHANGED   = 0x08,
-            TEXT_CHANGED    = 0x10,
-            //MOUSE           = PRESS | RELEASE | CLICK,
-            //ALL             = MOUSE | VALUE_CHANGED | TEXT_CHANGED 
+            TEXT_CHANGED    = 0x10
         };
 
         virtual void controlEvent(Control* control, EventType evt) = 0;
@@ -276,9 +274,9 @@ protected:
     static State getStateFromString(const char* state);
 
     /**
-     * Alert all listeners of a specific event.
+     * Notify all listeners of a specific event.
      */
-    void alertListeners(Listener::EventType eventType);
+    void notifyListeners(Listener::EventType eventType);
 
     void addSpecificListener(Control::Listener* listener, Listener::EventType eventType);
 

+ 2 - 2
gameplay/src/Label.cpp

@@ -38,13 +38,13 @@ namespace gameplay
     {
         if ((eventFlags & Listener::TEXT_CHANGED) == Listener::TEXT_CHANGED)
         {
-            WARN("TEXT_CHANGED event is not applicable to this control.");
+            assert("TEXT_CHANGED event is not applicable to this control.");
             eventFlags &= ~Listener::TEXT_CHANGED;
         }
 
         if ((eventFlags & Listener::VALUE_CHANGED) == Listener::VALUE_CHANGED)
         {
-            WARN("VALUE_CHANGED event is not applicable to this control.");
+            assert("VALUE_CHANGED event is not applicable to this control.");
             eventFlags &= ~Listener::VALUE_CHANGED;
         }
 

+ 2 - 2
gameplay/src/RadioButton.cpp

@@ -69,7 +69,7 @@ void RadioButton::addListener(Control::Listener* listener, int eventFlags)
 {
     if ((eventFlags & Listener::TEXT_CHANGED) == Listener::TEXT_CHANGED)
     {
-        WARN("TEXT_CHANGED event is not applicable to RadioButton.");
+        assert("TEXT_CHANGED event is not applicable to RadioButton.");
         eventFlags &= ~Listener::TEXT_CHANGED;
     }
 
@@ -96,7 +96,7 @@ bool RadioButton::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int c
                     {
                         RadioButton::clearSelected(_groupId);
                         _selected = true;
-                        alertListeners(Listener::VALUE_CHANGED);
+                        notifyListeners(Listener::VALUE_CHANGED);
                     }
                 }
             }

+ 2 - 2
gameplay/src/Slider.cpp

@@ -68,7 +68,7 @@ void Slider::addListener(Control::Listener* listener, int eventFlags)
 {
     if ((eventFlags & Listener::TEXT_CHANGED) == Listener::TEXT_CHANGED)
     {
-        WARN("TEXT_CHANGED event is not applicable to Slider.");
+        assert("TEXT_CHANGED event is not applicable to Slider.");
         eventFlags &= ~Listener::TEXT_CHANGED;
     }
 
@@ -133,7 +133,7 @@ bool Slider::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contac
             // Call the callback if our value changed.
             if (_value != oldValue)
             {
-                alertListeners(Listener::VALUE_CHANGED);
+                notifyListeners(Listener::VALUE_CHANGED);
             }
 
             _dirty = true;

+ 3 - 3
gameplay/src/TextBox.cpp

@@ -48,7 +48,7 @@ void TextBox::addListener(Control::Listener* listener, int eventFlags)
 {
     if ((eventFlags & Listener::VALUE_CHANGED) == Listener::VALUE_CHANGED)
     {
-        WARN("VALUE_CHANGED event is not applicable to TextBox.");
+        assert("VALUE_CHANGED event is not applicable to TextBox.");
         eventFlags &= ~Listener::VALUE_CHANGED;
     }
 
@@ -142,7 +142,7 @@ void TextBox::keyEvent(Keyboard::KeyEvent evt, int key)
                         font->getLocationAtIndex(_text.c_str(), _clip, fontSize, &_cursorLocation, textIndex,
                             overlay->getTextAlignment(), true, overlay->getTextRightToLeft());
                         _dirty = true;
-                        alertListeners(Listener::TEXT_CHANGED);
+                        notifyListeners(Listener::TEXT_CHANGED);
                         break;
                     }
                     case Keyboard::KEY_LEFT_ARROW:
@@ -241,7 +241,7 @@ void TextBox::keyEvent(Keyboard::KeyEvent evt, int key)
                     break;
                 }
 
-                alertListeners(Listener::TEXT_CHANGED);
+                notifyListeners(Listener::TEXT_CHANGED);
             }
         }
     }

+ 12 - 2
gameplay/src/VerticalLayout.cpp

@@ -3,6 +3,8 @@
 
 namespace gameplay
 {
+    static VerticalLayout* __instance;
+
     VerticalLayout::VerticalLayout() : _bottomToTop(false)
     {
     }
@@ -17,8 +19,16 @@ namespace gameplay
 
     VerticalLayout* VerticalLayout::create()
     {
-        VerticalLayout* al = new VerticalLayout();
-        return al;
+        if (!__instance)
+        {
+            __instance = new VerticalLayout();
+        }
+        else
+        {
+            __instance->addRef();
+        }
+
+        return __instance;
     }
 
     void VerticalLayout::setBottomToTop(bool bottomToTop)