commit
						50d2b80d79
					
				|  | @ -55,11 +55,6 @@ void Button::SetPressedCallback(const Callback& func) | ||||||
|     pressed_callback_ = func; |     pressed_callback_ = func; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Button::SetReleasedCallback(const Callback& func) |  | ||||||
| { |  | ||||||
|     released_callback_ = func; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void Button::SetMouseOverCallback(const Callback& func) | void Button::SetMouseOverCallback(const Callback& func) | ||||||
| { | { | ||||||
|     mouse_over_callback_ = func; |     mouse_over_callback_ = func; | ||||||
|  | @ -87,12 +82,7 @@ void Button::SetStatus(Status status) | ||||||
|         { |         { | ||||||
|             Window::GetInstance().SetCursor(CursorType::Hand); |             Window::GetInstance().SetCursor(CursorType::Hand); | ||||||
| 
 | 
 | ||||||
|             if (old_status == Status::Pressed) |             if (old_status != Status::Pressed) | ||||||
|             { |  | ||||||
|                 if (released_callback_) |  | ||||||
|                     released_callback_(this); |  | ||||||
|             } |  | ||||||
|             else |  | ||||||
|             { |             { | ||||||
|                 if (mouse_over_callback_) |                 if (mouse_over_callback_) | ||||||
|                     mouse_over_callback_(this); |                     mouse_over_callback_(this); | ||||||
|  | @ -141,16 +131,21 @@ void Button::UpdateStatus(Event* evt) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void Button::BindActor(Actor* actor) | ||||||
|  | { | ||||||
|  |     actor->SetResponsible(true); | ||||||
|  | 
 | ||||||
|  |     EventListener::Callback handler = Closure(this, &Button::UpdateStatus); | ||||||
|  |     actor->AddListener<MouseHoverEvent>(handler); | ||||||
|  |     actor->AddListener<MouseOutEvent>(handler); | ||||||
|  |     actor->AddListener<MouseDownEvent>(handler); | ||||||
|  |     actor->AddListener<MouseUpEvent>(handler); | ||||||
|  |     actor->AddListener<MouseClickEvent>(handler); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| SpriteButton::SpriteButton() | SpriteButton::SpriteButton() | ||||||
| { | { | ||||||
|     SetResponsible(true); |     BindActor(this); | ||||||
| 
 |  | ||||||
|     EventListener::Callback handler = Closure(this, &SpriteButton::UpdateStatus); |  | ||||||
|     AddListener<MouseHoverEvent>(handler); |  | ||||||
|     AddListener<MouseOutEvent>(handler); |  | ||||||
|     AddListener<MouseDownEvent>(handler); |  | ||||||
|     AddListener<MouseUpEvent>(handler); |  | ||||||
|     AddListener<MouseClickEvent>(handler); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| SpriteButtonPtr SpriteButton::Create(Callback const& click) | SpriteButtonPtr SpriteButton::Create(Callback const& click) | ||||||
|  | @ -179,14 +174,7 @@ SpriteButtonPtr SpriteButton::Create(Callback const& click, Callback const& pres | ||||||
| 
 | 
 | ||||||
| TextButton::TextButton() | TextButton::TextButton() | ||||||
| { | { | ||||||
|     SetResponsible(true); |     BindActor(this); | ||||||
| 
 |  | ||||||
|     EventListener::Callback handler = Closure(this, &TextButton::UpdateStatus); |  | ||||||
|     AddListener<MouseHoverEvent>(handler); |  | ||||||
|     AddListener<MouseOutEvent>(handler); |  | ||||||
|     AddListener<MouseDownEvent>(handler); |  | ||||||
|     AddListener<MouseUpEvent>(handler); |  | ||||||
|     AddListener<MouseClickEvent>(handler); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TextButtonPtr TextButton::Create(Callback const& click) | TextButtonPtr TextButton::Create(Callback const& click) | ||||||
|  |  | ||||||
|  | @ -59,10 +59,6 @@ public: | ||||||
|     /// @brief 设置按钮被按下时的回调函数
 |     /// @brief 设置按钮被按下时的回调函数
 | ||||||
|     void SetPressedCallback(const Callback& func); |     void SetPressedCallback(const Callback& func); | ||||||
| 
 | 
 | ||||||
|     /// \~chinese
 |  | ||||||
|     /// @brief 设置按钮被抬起时的回调函数
 |  | ||||||
|     void SetReleasedCallback(const Callback& func); |  | ||||||
| 
 |  | ||||||
|     /// \~chinese
 |     /// \~chinese
 | ||||||
|     /// @brief 设置鼠标移入按钮时的回调函数
 |     /// @brief 设置鼠标移入按钮时的回调函数
 | ||||||
|     void SetMouseOverCallback(const Callback& func); |     void SetMouseOverCallback(const Callback& func); | ||||||
|  | @ -93,12 +89,15 @@ protected: | ||||||
|     /// @brief 更新按钮状态
 |     /// @brief 更新按钮状态
 | ||||||
|     void UpdateStatus(Event* evt); |     void UpdateStatus(Event* evt); | ||||||
| 
 | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 绑定到角色
 | ||||||
|  |     void BindActor(Actor* actor); | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     bool     enabled_; |     bool     enabled_; | ||||||
|     Status   status_; |     Status   status_; | ||||||
|     Callback click_callback_; |     Callback click_callback_; | ||||||
|     Callback pressed_callback_; |     Callback pressed_callback_; | ||||||
|     Callback released_callback_; |  | ||||||
|     Callback mouse_over_callback_; |     Callback mouse_over_callback_; | ||||||
|     Callback mouse_out_callback_; |     Callback mouse_out_callback_; | ||||||
| }; | }; | ||||||
|  | @ -149,4 +148,5 @@ public: | ||||||
|     /// @param mouse_out 按钮移出回调函数
 |     /// @param mouse_out 按钮移出回调函数
 | ||||||
|     static TextButtonPtr Create(Callback const& click, Callback const& pressed, Callback const& mouse_over, Callback const& mouse_out); |     static TextButtonPtr Create(Callback const& click, Callback const& pressed, Callback const& mouse_over, Callback const& mouse_out); | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
| }  // namespace kiwano
 | }  // namespace kiwano
 | ||||||
|  |  | ||||||
|  | @ -56,27 +56,47 @@ SpritePtr Sprite::Create(FramePtr frame) | ||||||
|     return ptr; |     return ptr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | SpritePtr Sprite::Create(String const& file_path, const Rect& crop_rect) | ||||||
|  | { | ||||||
|  |     SpritePtr ptr = Sprite::Create(file_path); | ||||||
|  |     if (ptr) | ||||||
|  |     { | ||||||
|  |         ptr->SetCropRect(crop_rect); | ||||||
|  |     } | ||||||
|  |     return ptr; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | SpritePtr Sprite::Create(Resource const& res, const Rect& crop_rect) | ||||||
|  | { | ||||||
|  |     SpritePtr ptr = Sprite::Create(res); | ||||||
|  |     if (ptr) | ||||||
|  |     { | ||||||
|  |         ptr->SetCropRect(crop_rect); | ||||||
|  |     } | ||||||
|  |     return ptr; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| Sprite::Sprite() {} | Sprite::Sprite() {} | ||||||
| 
 | 
 | ||||||
| Sprite::~Sprite() {} | Sprite::~Sprite() {} | ||||||
| 
 | 
 | ||||||
| bool Sprite::Load(String const& file_path) | bool Sprite::Load(String const& file_path, bool autoresize) | ||||||
| { | { | ||||||
|     FramePtr frame = new (std::nothrow) Frame; |     FramePtr frame = Frame::Create(file_path); | ||||||
|     if (frame->Load(file_path)) |     if (frame) | ||||||
|     { |     { | ||||||
|         SetFrame(frame); |         SetFrame(frame, autoresize); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|     return false; |     return false; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool Sprite::Load(Resource const& res) | bool Sprite::Load(Resource const& res, bool autoresize) | ||||||
| { | { | ||||||
|     FramePtr frame = new (std::nothrow) Frame; |     FramePtr frame = Frame::Create(res); | ||||||
|     if (frame->Load(res)) |     if (frame) | ||||||
|     { |     { | ||||||
|         SetFrame(frame); |         SetFrame(frame, autoresize); | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|     return false; |     return false; | ||||||
|  | @ -91,12 +111,12 @@ void Sprite::SetCropRect(const Rect& crop_rect) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Sprite::SetFrame(FramePtr frame) | void Sprite::SetFrame(FramePtr frame, bool autoresize) | ||||||
| { | { | ||||||
|     if (frame_ != frame) |     if (frame_ != frame) | ||||||
|     { |     { | ||||||
|         frame_ = frame; |         frame_ = frame; | ||||||
|         if (frame_) |         if (frame_ && autoresize) | ||||||
|         { |         { | ||||||
|             SetSize(Size{ frame_->GetWidth(), frame_->GetHeight() }); |             SetSize(Size{ frame_->GetWidth(), frame_->GetHeight() }); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -53,6 +53,18 @@ public: | ||||||
|     /// @param frame 图像帧
 |     /// @param frame 图像帧
 | ||||||
|     static SpritePtr Create(FramePtr frame); |     static SpritePtr Create(FramePtr frame); | ||||||
| 
 | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 创建精灵
 | ||||||
|  |     /// @param file_path 本地图片路径
 | ||||||
|  |     /// @param crop_rect 裁剪矩形
 | ||||||
|  |     static SpritePtr Create(String const& file_path, const Rect& crop_rect); | ||||||
|  | 
 | ||||||
|  |     /// \~chinese
 | ||||||
|  |     /// @brief 创建精灵
 | ||||||
|  |     /// @param res 图片资源
 | ||||||
|  |     /// @param crop_rect 裁剪矩形
 | ||||||
|  |     static SpritePtr Create(Resource const& res, const Rect& crop_rect); | ||||||
|  | 
 | ||||||
|     Sprite(); |     Sprite(); | ||||||
| 
 | 
 | ||||||
|     virtual ~Sprite(); |     virtual ~Sprite(); | ||||||
|  | @ -60,12 +72,14 @@ public: | ||||||
|     /// \~chinese
 |     /// \~chinese
 | ||||||
|     /// @brief 加载本地图片
 |     /// @brief 加载本地图片
 | ||||||
|     /// @param file_path 本地图片路径
 |     /// @param file_path 本地图片路径
 | ||||||
|     bool Load(String const& file_path); |     /// @param[in] autoresize 是否自动调整自身大小为图像大小
 | ||||||
|  |     bool Load(String const& file_path, bool autoresize = true); | ||||||
| 
 | 
 | ||||||
|     /// \~chinese
 |     /// \~chinese
 | ||||||
|     /// @brief 加载图像资源
 |     /// @brief 加载图像资源
 | ||||||
|     /// @param res 图片资源
 |     /// @param res 图片资源
 | ||||||
|     bool Load(Resource const& res); |     /// @param[in] autoresize 是否自动调整自身大小为图像大小
 | ||||||
|  |     bool Load(Resource const& res, bool autoresize = true); | ||||||
| 
 | 
 | ||||||
|     /// \~chinese
 |     /// \~chinese
 | ||||||
|     /// @brief 使用矩形区域裁剪精灵
 |     /// @brief 使用矩形区域裁剪精灵
 | ||||||
|  | @ -79,7 +93,8 @@ public: | ||||||
|     /// \~chinese
 |     /// \~chinese
 | ||||||
|     /// @brief 设置图像帧
 |     /// @brief 设置图像帧
 | ||||||
|     /// @param[in] frame 图像帧
 |     /// @param[in] frame 图像帧
 | ||||||
|     void SetFrame(FramePtr frame); |     /// @param[in] autoresize 是否自动调整自身大小为图像大小
 | ||||||
|  |     void SetFrame(FramePtr frame, bool autoresize = true); | ||||||
| 
 | 
 | ||||||
|     void OnRender(RenderContext& ctx) override; |     void OnRender(RenderContext& ctx) override; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue