Просмотр исходного кода

Support for touch and accelerometer implemented in Crown, TODO How to manage OSET_TOUCH_MOVE

mikymod 13 лет назад
Родитель
Сommit
bd7bfd1878

+ 4 - 1
src/input/Accelerometer.h

@@ -14,7 +14,8 @@ struct AccelerometerEvent
 
 class AccelerometerListener
 {
-	virtual public accelerometer_changed(const AccelerometerEvent& event) { (void)event; };
+public:
+	virtual void accelerometer_changed(const AccelerometerEvent& event) { (void)event; }
 };
 
 class Accelerometer
@@ -31,3 +32,5 @@ private:
 
 	AccelerometerListener* m_listener;
 };
+
+} // namespace crown

+ 11 - 1
src/input/EventDispatcher.cpp

@@ -33,7 +33,8 @@ namespace crown
 EventDispatcher::EventDispatcher() :
 	mMouseListenerList(get_default_allocator()),
 	mKeyboardListenerList(get_default_allocator()),
-	mTouchListenerList(get_default_allocator())
+	mTouchListenerList(get_default_allocator()),
+	m_acc_listener_list(get_default_allocator())
 {
 }
 
@@ -156,5 +157,14 @@ void EventDispatcher::TouchCancel(const TouchEvent& event)
 	}
 }
 
+//-----------------------------------------------------------------------------
+void EventDispatcher::accelerometer_changed(const AccelerometerEvent& event)
+{
+	for (uint32_t i = 0; i < m_acc_listener_list.size(); i++)
+	{
+		m_acc_listener_list[i]->accelerometer_changed(event);
+	}
+}
+
 } // namespace crown
 

+ 9 - 3
src/input/EventDispatcher.h

@@ -29,15 +29,17 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "Mouse.h"
 #include "Keyboard.h"
 #include "Touch.h"
+#include "Accelerometer.h"
 
 namespace crown
 {
 
 class EventDispatcher
 {
-	typedef List<MouseListener*>		MouseListenerList;
-	typedef List<KeyboardListener*>		KeyboardListenerList;
-	typedef List<TouchListener*>		TouchListenerList;
+	typedef List<MouseListener*>			MouseListenerList;
+	typedef List<KeyboardListener*>			KeyboardListenerList;
+	typedef List<TouchListener*>			TouchListenerList;
+	typedef List<AccelerometerListener*>	AccListenerList;
 
 public:
 
@@ -47,6 +49,7 @@ public:
 	void AddMouseListener(MouseListener* listener);
 	void AddKeyboardListener(KeyboardListener* listener);
 	void AddTouchListener(TouchListener* listener);
+	void add_accelerometer_listener(AccelerometerListener* listener);
 
 	void ButtonPressed(const MouseEvent&);
 	void ButtonReleased(const MouseEvent&);
@@ -61,11 +64,14 @@ public:
 	void TouchMove(const TouchEvent& event);
 	void TouchCancel(const TouchEvent& event);
 
+	void accelerometer_changed(const AccelerometerEvent& event);
+
 private:
 
 	MouseListenerList		mMouseListenerList;
 	KeyboardListenerList	mKeyboardListenerList;
 	TouchListenerList		mTouchListenerList;
+	AccListenerList			m_acc_listener_list;
 };
 
 } // namespace crown

+ 26 - 1
src/input/InputManager.cpp

@@ -93,11 +93,36 @@ void InputManager::EventLoop()
 
 				break;
 			}
+			case os::OSET_TOUCH_DOWN:
+			case os::OSET_TOUCH_UP:
+			{
+				TouchEvent touch_event;
+				touch_event.pointer_id = event.data_a;
+				touch_event.x = event.data_b;
+				touch_event.y = event.data_c;
+				if (event.type == os::OSET_TOUCH_DOWN)
+				{
+					mEventDispatcher.TouchDown(touch_event);
+				}
+				else
+				{
+					mEventDispatcher.TouchUp(touch_event);
+				}
+				break;
+			}
 			case os::OSET_TOUCH_MOVE:
 			{
-				Log::I("Touch coord = %d:%d\n", event.data_a, event.data_b);
 				break;
 			}
+			case os::OSET_ACCELEROMETER:
+			{
+				AccelerometerEvent sensor_event;
+				sensor_event.x = event.data_a;
+				sensor_event.y = event.data_b;
+				sensor_event.z = event.data_c;
+
+				mEventDispatcher.accelerometer_changed(sensor_event);
+			}
 			default:
 			{
 				break;

+ 5 - 0
src/input/InputManager.h

@@ -68,6 +68,11 @@ public:
 		mEventDispatcher.AddTouchListener(listener);
 	}
 
+	inline void register_accelerometer_listener(AccelerometerListener* listener)
+	{
+//		mEventDispatcher.AddAccelerometerListener(listener)
+	}
+
 	inline EventDispatcher* GetEventDispatcher()
 	{
 		return &mEventDispatcher;