Remove event declare macros
This commit is contained in:
		
							parent
							
								
									939fadcb97
								
							
						
					
					
						commit
						13cbca8f49
					
				|  | @ -53,17 +53,5 @@ namespace kiwano | ||||||
| 			ContactEndEvent(); | 			ContactEndEvent(); | ||||||
| 			ContactEndEvent(Contact const& contact); | 			ContactEndEvent(Contact const& contact); | ||||||
| 		}; | 		}; | ||||||
| 
 |  | ||||||
| 		/**
 |  | ||||||
| 		* \addtogroup EventTypes |  | ||||||
| 		* @{ |  | ||||||
| 		*/ |  | ||||||
| 
 |  | ||||||
| 		KGE_EVENT_BEGIN(PhysicEvents); |  | ||||||
| 			KGE_DEFINE_EVENT(ContactBegin, ContactBeginEvent);	///< ½Ó´¥¿ªÊ¼ @see kiwano::physics::ContactBeginEvent
 |  | ||||||
| 			KGE_DEFINE_EVENT(ContactEnd, ContactEndEvent);		///< ½Ó´¥½áÊø @see kiwano::physics::ContactEndEvent
 |  | ||||||
| 		KGE_EVENT_END; |  | ||||||
| 
 |  | ||||||
| 		/** @} */ |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -66,8 +66,8 @@ namespace kiwano | ||||||
| 		style.line_spacing = 20.f; | 		style.line_spacing = 20.f; | ||||||
| 		debug_text_->SetStyle(style); | 		debug_text_->SetStyle(style); | ||||||
| 
 | 
 | ||||||
| 		AddListener(MouseEvents::Hover(), [=](Event&) { SetOpacity(0.4f); }); | 		AddListener<MouseHoverEvent>([=](Event&) { SetOpacity(0.4f); }); | ||||||
| 		AddListener(MouseEvents::Out(), [=](Event&) { SetOpacity(1.f); }); | 		AddListener<MouseOutEvent>([=](Event&) { SetOpacity(1.f); }); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	DebugActor::~DebugActor() | 	DebugActor::~DebugActor() | ||||||
|  |  | ||||||
|  | @ -29,14 +29,14 @@ namespace kiwano | ||||||
| 	{ | 	{ | ||||||
| 		auto handler = Closure(this, &Layer::HandleMessages); | 		auto handler = Closure(this, &Layer::HandleMessages); | ||||||
| 
 | 
 | ||||||
| 		AddListener(MouseEvents::Down(), handler); | 		AddListener<MouseDownEvent>(handler); | ||||||
| 		AddListener(MouseEvents::Up(), handler); | 		AddListener<MouseUpEvent>(handler); | ||||||
| 		AddListener(MouseEvents::Move(), handler); | 		AddListener<MouseMoveEvent>(handler); | ||||||
| 		AddListener(MouseEvents::Wheel(), handler); | 		AddListener<MouseWheelEvent>(handler); | ||||||
| 
 | 
 | ||||||
| 		AddListener(KeyEvents::Down(), handler); | 		AddListener<KeyDownEvent>(handler); | ||||||
| 		AddListener(KeyEvents::Up(), handler); | 		AddListener<KeyUpEvent>(handler); | ||||||
| 		AddListener(KeyEvents::Char(), handler); | 		AddListener<KeyCharEvent>(handler); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	Layer::~Layer() | 	Layer::~Layer() | ||||||
|  |  | ||||||
|  | @ -95,22 +95,47 @@ namespace kiwano | ||||||
| 			return type_ == KGE_EVENT(_Ty); | 			return type_ == KGE_EVENT(_Ty); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		/// \~chinese
 | ||||||
|  | 		/// @brief 转换为其他类型事件
 | ||||||
|  | 		/// @throw std::bad_cast 类型无法转换时抛出
 | ||||||
|  | 		template < | ||||||
|  | 			typename _Ty, | ||||||
|  | 			typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type | ||||||
|  | 		> | ||||||
|  | 		inline const _Ty& Cast() const | ||||||
|  | 		{ | ||||||
|  | 			return *dynamic_cast<const _Ty*>(this); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		/// \~chinese
 | ||||||
|  | 		/// @brief 转换为其他类型事件
 | ||||||
|  | 		/// @throw std::bad_cast 类型无法转换时抛出
 | ||||||
|  | 		template < | ||||||
|  | 			typename _Ty, | ||||||
|  | 			typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type | ||||||
|  | 		> | ||||||
|  | 		inline _Ty& Cast() | ||||||
|  | 		{ | ||||||
|  | 			return *dynamic_cast<_Ty*>(this); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		/// \~chinese
 | 		/// \~chinese
 | ||||||
| 		/// @brief 安全转换为其他类型事件
 | 		/// @brief 安全转换为其他类型事件
 | ||||||
| 		/// @throw std::bad_cast 无法转换的类型
 | 		/// @throw std::bad_cast 类型无法转换时抛出
 | ||||||
| 		template < | 		template < | ||||||
| 			typename _Ty, | 			typename _Ty, | ||||||
| 			typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type | 			typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type | ||||||
| 		> | 		> | ||||||
| 		inline const _Ty& SafeCast() const | 		inline const _Ty& SafeCast() const | ||||||
| 		{ | 		{ | ||||||
| 			if (!IsType<_Ty>()) throw std::bad_cast(); | 			if (!IsType<_Ty>()) | ||||||
| 			return *dynamic_cast<const _Ty*>(this); | 				throw std::bad_cast(); | ||||||
|  | 			return Cast<_Ty>(); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		/// \~chinese
 | 		/// \~chinese
 | ||||||
| 		/// @brief 安全转换为其他类型事件
 | 		/// @brief 安全转换为其他类型事件
 | ||||||
| 		/// @throw std::bad_cast 无法转换的类型
 | 		/// @throw std::bad_cast 类型无法转换时抛出
 | ||||||
| 		template < | 		template < | ||||||
| 			typename _Ty, | 			typename _Ty, | ||||||
| 			typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type | 			typename = typename std::enable_if<std::is_base_of<Event, _Ty>::value, int>::type | ||||||
|  | @ -305,57 +330,4 @@ namespace kiwano | ||||||
| 
 | 
 | ||||||
| 	/** @} */ | 	/** @} */ | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 	/**
 |  | ||||||
| 	* \~chinese |  | ||||||
| 	* \defgroup EventTypes 事件类型 |  | ||||||
| 	*  |  | ||||||
| 	*/ |  | ||||||
| 
 |  | ||||||
| 	/**
 |  | ||||||
| 	* \addtogroup EventTypes |  | ||||||
| 	* @{ |  | ||||||
| 	*/ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| #define KGE_EVENT_BEGIN(NAME)	struct NAME { |  | ||||||
| #define KGE_EVENT_END			}; |  | ||||||
| #define KGE_DEFINE_EVENT(EVENT_NAME, EVENT_TYPE) \ |  | ||||||
| 	static inline const EventType& EVENT_NAME() \ |  | ||||||
| 	{ \ |  | ||||||
| 		static EventType event_type = KGE_EVENT(EVENT_TYPE); \ |  | ||||||
| 		return event_type; \ |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/// \~chinese
 |  | ||||||
| 	/// @brief 鼠标事件
 |  | ||||||
| 	KGE_EVENT_BEGIN(MouseEvents); |  | ||||||
| 		KGE_DEFINE_EVENT(Move,	MouseMoveEvent);	///< 鼠标移动
 |  | ||||||
| 		KGE_DEFINE_EVENT(Down,	MouseDownEvent);	///< 鼠标按下
 |  | ||||||
| 		KGE_DEFINE_EVENT(Up,	MouseUpEvent);		///< 鼠标抬起
 |  | ||||||
| 		KGE_DEFINE_EVENT(Wheel, MouseWheelEvent);	///< 滚轮滚动
 |  | ||||||
| 		KGE_DEFINE_EVENT(Hover, MouseHoverEvent);	///< 鼠标移入
 |  | ||||||
| 		KGE_DEFINE_EVENT(Out,	MouseOutEvent);		///< 鼠标移出
 |  | ||||||
| 		KGE_DEFINE_EVENT(Click,	MouseClickEvent);	///< 鼠标点击
 |  | ||||||
| 	KGE_EVENT_END; |  | ||||||
| 
 |  | ||||||
| 	/// \~chinese
 |  | ||||||
| 	/// @brief 键盘按键事件
 |  | ||||||
| 	KGE_EVENT_BEGIN(KeyEvents); |  | ||||||
| 		KGE_DEFINE_EVENT(Down,	KeyDownEvent);		///< 按键按下
 |  | ||||||
| 		KGE_DEFINE_EVENT(Up,	KeyUpEvent);		///< 按键抬起
 |  | ||||||
| 		KGE_DEFINE_EVENT(Char,	KeyCharEvent);		///< 输出字符
 |  | ||||||
| 	KGE_EVENT_END; |  | ||||||
| 
 |  | ||||||
| 	/// \~chinese
 |  | ||||||
| 	/// @brief 窗口事件
 |  | ||||||
| 	KGE_EVENT_BEGIN(WindowEvents); |  | ||||||
| 		KGE_DEFINE_EVENT(Moved,			WindowMovedEvent);			///< 窗口移动
 |  | ||||||
| 		KGE_DEFINE_EVENT(Resized,		WindowResizedEvent);		///< 窗口大小变化
 |  | ||||||
| 		KGE_DEFINE_EVENT(FocusChanged,	WindowFocusChangedEvent);	///< 获得或失去焦点
 |  | ||||||
| 		KGE_DEFINE_EVENT(TitleChanged,	WindowTitleChangedEvent);	///< 标题变化
 |  | ||||||
| 		KGE_DEFINE_EVENT(Closed,		WindowClosedEvent);			///< 窗口被关闭
 |  | ||||||
| 	KGE_EVENT_END; |  | ||||||
| 
 |  | ||||||
| 	/** @} */ |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -54,6 +54,24 @@ namespace kiwano | ||||||
| 			Callback const& callback | 			Callback const& callback | ||||||
| 		); | 		); | ||||||
| 
 | 
 | ||||||
|  | 		template < | ||||||
|  | 			typename _EventTy, | ||||||
|  | 			typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type | ||||||
|  | 		> | ||||||
|  | 		EventListener(Callback const& callback) | ||||||
|  | 			: EventListener(KGE_EVENT(_EventTy), callback) | ||||||
|  | 		{ | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		template < | ||||||
|  | 			typename _EventTy, | ||||||
|  | 			typename = typename std::enable_if<IsEvent<_EventTy>::value, int>::type | ||||||
|  | 		> | ||||||
|  | 		EventListener(String const& name, Callback const& callback) | ||||||
|  | 			: EventListener(name, KGE_EVENT(_EventTy), callback) | ||||||
|  | 		{ | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		virtual ~EventListener(); | 		virtual ~EventListener(); | ||||||
| 
 | 
 | ||||||
| 		void Start(); | 		void Start(); | ||||||
|  |  | ||||||
|  | @ -32,10 +32,10 @@ namespace kiwano | ||||||
| 	{ | 	{ | ||||||
| 		SetResponsible(true); | 		SetResponsible(true); | ||||||
| 
 | 
 | ||||||
| 		AddListener(MouseEvents::Hover(), Closure(this, &Button::UpdateStatus)); | 		AddListener<MouseHoverEvent>(Closure(this, &Button::UpdateStatus)); | ||||||
| 		AddListener(MouseEvents::Out(), Closure(this, &Button::UpdateStatus)); | 		AddListener<MouseOutEvent>(Closure(this, &Button::UpdateStatus)); | ||||||
| 		AddListener(MouseEvents::Down(), Closure(this, &Button::UpdateStatus)); | 		AddListener<MouseDownEvent>(Closure(this, &Button::UpdateStatus)); | ||||||
| 		AddListener(MouseEvents::Up(), Closure(this, &Button::UpdateStatus)); | 		AddListener<MouseUpEvent>(Closure(this, &Button::UpdateStatus)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	Button::Button(const Callback& click) | 	Button::Button(const Callback& click) | ||||||
|  | @ -105,10 +105,7 @@ namespace kiwano | ||||||
| 
 | 
 | ||||||
| 	void Button::UpdateStatus(Event& evt) | 	void Button::UpdateStatus(Event& evt) | ||||||
| 	{ | 	{ | ||||||
| 		auto mouse_evt = dynamic_cast<MouseEvent*>(&evt); | 		if (enabled_ && (evt.Cast<MouseEvent>().target == this)) | ||||||
| 		KGE_ASSERT(mouse_evt != nullptr); |  | ||||||
| 
 |  | ||||||
| 		if (enabled_ && (mouse_evt->target == this)) |  | ||||||
| 		{ | 		{ | ||||||
| 			if (evt.IsType<MouseHoverEvent>()) | 			if (evt.IsType<MouseHoverEvent>()) | ||||||
| 			{ | 			{ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue