Update Button & Sprite
This commit is contained in:
parent
27fa580cc1
commit
d2cd4f8cba
|
|
@ -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