2
0
Эх сурвалжийг харах

new feature, Event::removeListener()
getStage()->addClickListener([](Event* ev) {

ev->removeListener();
});

callback removes "self" from listeners list

dmuratshin 9 жил өмнө
parent
commit
0cebbdcfa4

+ 4 - 1
oxygine/src/Event.h

@@ -32,14 +32,17 @@ namespace oxygine
 
         void* userData;
         spObject userDataObject;
+        int listenerID;
 
         spEventDispatcher target; //The event target
         spEventDispatcher currentTarget;// The object that is actively processing the Event object with an event listener.
 
-        Event(eventType Type, bool Bubbles = false) : userData(0), type(Type), phase(phase_target), bubbles(Bubbles), stopsImmediatePropagation(false), stopsPropagation(false) {}
+        Event(eventType Type, bool Bubbles = false) : listenerID(0), userData(0), type(Type), phase(phase_target), bubbles(Bubbles), stopsImmediatePropagation(false), stopsPropagation(false) {}
         virtual ~Event() {}
 
         void stopPropagation() { stopsPropagation = true; }
         void stopImmediatePropagation() { stopsPropagation = stopsImmediatePropagation = true; }
+        //removes EventCallback from EventDispatcher
+        void removeListener() { currentTarget->removeEventListener(listenerID); }
     };
 }

+ 1 - 0
oxygine/src/EventDispatcher.cpp

@@ -171,6 +171,7 @@ namespace oxygine
         {
             listenerbase& ls = copy[i];
             event->currentTarget = this;
+            event->listenerID = ls.id;
             ls.cb(event);
             if (event->stopsImmediatePropagation)
                 break;

+ 1 - 1
oxygine/src/EventDispatcher.h

@@ -45,12 +45,12 @@ namespace oxygine
         struct listenerbase
         {
             EventCallback cb;
+            int id;
         };
 
         struct listener : public listenerbase
         {
             eventType type;
-            int id;
         };
 
         int _lastID;

+ 1 - 1
oxygine/src/oxygine_include.h

@@ -90,7 +90,7 @@ namespace oxygine { namespace log { void error(const char* format, ...); } }
 
 #define OXYGINE_HAS_RESTORE
 
-#define OXYGINE_RENDERER 3
+#define OXYGINE_RENDERER 4
 
 #ifdef __GNUC__
 #   define OXYGINE_DEPRECATED __attribute__((deprecated))