update Button

This commit is contained in:
Haibo 2018-11-25 19:29:32 +08:00 committed by Nomango
parent ae2e5dad31
commit a76add7880
7 changed files with 111 additions and 53 deletions

View File

@ -190,12 +190,12 @@ namespace easy2d
return transform_matrix_inverse_; return transform_matrix_inverse_;
} }
spNode Node::GetParent() const Node* Node::GetParent() const
{ {
return parent_; return parent_;
} }
spScene Node::GetScene() const Scene* Node::GetScene() const
{ {
return scene_; return scene_;
} }

View File

@ -132,10 +132,10 @@ namespace easy2d
Matrix const& GetTransformInverseMatrix() const; Matrix const& GetTransformInverseMatrix() const;
// 获取父节点 // 获取父节点
spNode GetParent() const; Node* GetParent() const;
// 获取所在场景 // 获取所在场景
spScene GetScene() const; Scene* GetScene() const;
// 设置是否显示 // 设置是否显示
void SetVisible( void SetVisible(

View File

@ -83,11 +83,6 @@ namespace easy2d
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
if (debug_)
{
status_.duration = time::Now() - status_.start;
}
if (!window_occluded_) if (!window_occluded_)
{ {
hr = render_target_->EndDraw(); hr = render_target_->EndDraw();
@ -100,6 +95,11 @@ namespace easy2d
hr = S_OK; hr = S_OK;
} }
} }
if (debug_)
{
status_.duration = time::Now() - status_.start;
}
return hr; return hr;
} }

View File

@ -99,7 +99,7 @@ namespace easy2d
// Duration // Duration
//------------------------------------------------------- //-------------------------------------------------------
const Duration Millisecond = Duration(1); const Duration Millisecond = Duration{ 1LL };
const Duration Second = 1000 * Millisecond; const Duration Second = 1000 * Millisecond;
const Duration Minute = 60 * Second; const Duration Minute = 60 * Second;
const Duration Hour = 60 * Minute; const Duration Hour = 60 * Minute;
@ -123,29 +123,29 @@ namespace easy2d
{ {
} }
Duration::Duration(int64_t milliseconds) Duration::Duration(long long milliseconds)
: milliseconds_(milliseconds) : milliseconds_(milliseconds)
{ {
} }
float Duration::Seconds() const float Duration::Seconds() const
{ {
int64_t sec = milliseconds_ / Second.milliseconds_; long long sec = milliseconds_ / Second.milliseconds_;
int64_t ms = milliseconds_ % Second.milliseconds_; long long ms = milliseconds_ % Second.milliseconds_;
return static_cast<float>(sec) + static_cast<float>(ms) / 1000.f; return static_cast<float>(sec) + static_cast<float>(ms) / 1000.f;
} }
float Duration::Minutes() const float Duration::Minutes() const
{ {
int64_t min = milliseconds_ / Minute.milliseconds_; long long min = milliseconds_ / Minute.milliseconds_;
int64_t ms = milliseconds_ % Minute.milliseconds_; long long ms = milliseconds_ % Minute.milliseconds_;
return static_cast<float>(min) + static_cast<float>(ms) / (60 * 1000.f); return static_cast<float>(min) + static_cast<float>(ms) / (60 * 1000.f);
} }
float Duration::Hours() const float Duration::Hours() const
{ {
int64_t hour = milliseconds_ / Hour.milliseconds_; long long hour = milliseconds_ / Hour.milliseconds_;
int64_t ms = milliseconds_ % Hour.milliseconds_; long long ms = milliseconds_ % Hour.milliseconds_;
return static_cast<float>(hour) + static_cast<float>(ms) / (60 * 60 * 1000.f); return static_cast<float>(hour) + static_cast<float>(ms) / (60 * 60 * 1000.f);
} }
@ -157,10 +157,10 @@ namespace easy2d
} }
std::wstring result; std::wstring result;
int64_t hour = milliseconds_ / Hour.milliseconds_; long long hour = milliseconds_ / Hour.milliseconds_;
int64_t min = milliseconds_ / Minute.milliseconds_ - hour * 60; long long min = milliseconds_ / Minute.milliseconds_ - hour * 60;
int64_t sec = milliseconds_ / Second.milliseconds_ - (hour * 60 * 60 + min * 60); long long sec = milliseconds_ / Second.milliseconds_ - (hour * 60 * 60 + min * 60);
int64_t ms = milliseconds_ % Second.milliseconds_; long long ms = milliseconds_ % Second.milliseconds_;
if (milliseconds_ < 0) if (milliseconds_ < 0)
result.append(L"-"); result.append(L"-");
@ -256,42 +256,42 @@ namespace easy2d
const Duration easy2d::time::Duration::operator*(unsigned long long val) const const Duration easy2d::time::Duration::operator*(unsigned long long val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ * val)); return Duration(static_cast<long long>(milliseconds_ * val));
} }
const Duration easy2d::time::Duration::operator/(unsigned long long val) const const Duration easy2d::time::Duration::operator/(unsigned long long val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ / val)); return Duration(static_cast<long long>(milliseconds_ / val));
} }
const Duration Duration::operator*(float val) const const Duration Duration::operator*(float val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ * val)); return Duration(static_cast<long long>(milliseconds_ * val));
} }
const Duration Duration::operator/(float val) const const Duration Duration::operator/(float val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ / val)); return Duration(static_cast<long long>(milliseconds_ / val));
} }
const Duration Duration::operator*(double val) const const Duration Duration::operator*(double val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ * val)); return Duration(static_cast<long long>(milliseconds_ * val));
} }
const Duration Duration::operator*(long double val) const const Duration Duration::operator*(long double val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ * val)); return Duration(static_cast<long long>(milliseconds_ * val));
} }
const Duration Duration::operator/(double val) const const Duration Duration::operator/(double val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ / val)); return Duration(static_cast<long long>(milliseconds_ / val));
} }
const Duration Duration::operator/(long double val) const const Duration Duration::operator/(long double val) const
{ {
return Duration(static_cast<int64_t>(milliseconds_ / val)); return Duration(static_cast<long long>(milliseconds_ / val));
} }
Duration & Duration::operator+=(const Duration &other) Duration & Duration::operator+=(const Duration &other)
@ -314,55 +314,55 @@ namespace easy2d
Duration & Duration::operator/=(int val) Duration & Duration::operator/=(int val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ / val); milliseconds_ = static_cast<long long>(milliseconds_ / val);
return (*this); return (*this);
} }
Duration & easy2d::time::Duration::operator*=(unsigned long long val) Duration & easy2d::time::Duration::operator*=(unsigned long long val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ * val); milliseconds_ = static_cast<long long>(milliseconds_ * val);
return (*this); return (*this);
} }
Duration & easy2d::time::Duration::operator/=(unsigned long long val) Duration & easy2d::time::Duration::operator/=(unsigned long long val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ * val); milliseconds_ = static_cast<long long>(milliseconds_ * val);
return (*this); return (*this);
} }
Duration & Duration::operator*=(float val) Duration & Duration::operator*=(float val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ * val); milliseconds_ = static_cast<long long>(milliseconds_ * val);
return (*this); return (*this);
} }
Duration & Duration::operator/=(float val) Duration & Duration::operator/=(float val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ / val); milliseconds_ = static_cast<long long>(milliseconds_ / val);
return (*this); return (*this);
} }
Duration & Duration::operator*=(double val) Duration & Duration::operator*=(double val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ * val); milliseconds_ = static_cast<long long>(milliseconds_ * val);
return (*this); return (*this);
} }
Duration & Duration::operator*=(long double val) Duration & Duration::operator*=(long double val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ * val); milliseconds_ = static_cast<long long>(milliseconds_ * val);
return (*this); return (*this);
} }
Duration & Duration::operator/=(double val) Duration & Duration::operator/=(double val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ / val); milliseconds_ = static_cast<long long>(milliseconds_ / val);
return (*this); return (*this);
} }
Duration & Duration::operator/=(long double val) Duration & Duration::operator/=(long double val)
{ {
milliseconds_ = static_cast<int64_t>(milliseconds_ / val); milliseconds_ = static_cast<long long>(milliseconds_ / val);
return (*this); return (*this);
} }

View File

@ -44,12 +44,12 @@ namespace easy2d
public: public:
Duration(); Duration();
explicit Duration( Duration(
int64_t milliseconds long long milliseconds
); );
// 转化为毫秒 // 转化为毫秒
inline int64_t Milliseconds() const { return milliseconds_; } inline long long Milliseconds() const { return milliseconds_; }
// 转化为秒 // 转化为秒
float Seconds() const; float Seconds() const;
@ -117,7 +117,7 @@ namespace easy2d
friend std::wistream& operator>> (std::wistream &, Duration &); friend std::wistream& operator>> (std::wistream &, Duration &);
private: private:
int64_t milliseconds_; long long milliseconds_;
}; };
extern const Duration Millisecond; // 毫秒 extern const Duration Millisecond; // 毫秒

View File

@ -28,7 +28,7 @@ namespace easy2d
Button::Button() Button::Button()
: enabled_(true) : enabled_(true)
, is_selected_(false) , is_selected_(false)
, callback_(nullptr) , click_callback_(nullptr)
, status_(Status::Normal) , status_(Status::Normal)
{ {
AddListener(MouseEvent::Hover, std::bind(&Button::UpdateStatus, this, std::placeholders::_1)); AddListener(MouseEvent::Hover, std::bind(&Button::UpdateStatus, this, std::placeholders::_1));
@ -37,10 +37,19 @@ namespace easy2d
AddListener(MouseEvent::Up, std::bind(&Button::UpdateStatus, this, std::placeholders::_1)); AddListener(MouseEvent::Up, std::bind(&Button::UpdateStatus, this, std::placeholders::_1));
} }
Button::Button(const Callback& func) Button::Button(const Callback& click)
: Button() : Button()
{ {
this->SetClickCallback(func); this->SetClickCallback(click);
}
Button::Button(Callback const & click, Callback const & pressed, Callback const & mouse_over, Callback const & mouse_out)
: Button()
{
this->SetClickCallback(click);
this->SetPressedCallback(pressed);
this->SetMouseOverCallback(mouse_over);
this->SetMouseOutCallback(mouse_out);
} }
Button::~Button() Button::~Button()
@ -62,7 +71,22 @@ namespace easy2d
void Button::SetClickCallback(const Callback& func) void Button::SetClickCallback(const Callback& func)
{ {
callback_ = func; click_callback_ = func;
}
void Button::SetPressedCallback(const Callback & func)
{
pressed_callback_ = func;
}
void Button::SetMouseOverCallback(const Callback & func)
{
mouse_over_callback_ = func;
}
void Button::SetMouseOutCallback(const Callback & func)
{
mouse_out_callback_ = func;
} }
void Button::SetStatus(Status status) void Button::SetStatus(Status status)
@ -83,21 +107,30 @@ namespace easy2d
if (me->type == MouseEvent::Hover) if (me->type == MouseEvent::Hover)
{ {
SetStatus(Status::Hover); SetStatus(Status::Hover);
if (mouse_over_callback_)
mouse_over_callback_();
} }
else if (me->type == MouseEvent::Out) else if (me->type == MouseEvent::Out)
{ {
SetStatus(Status::Normal); SetStatus(Status::Normal);
if (mouse_out_callback_)
mouse_out_callback_();
} }
else if (me->type == MouseEvent::Down && status_ == Status::Hover) else if (me->type == MouseEvent::Down && status_ == Status::Hover)
{ {
SetStatus(Status::Selected); SetStatus(Status::Pressed);
if (pressed_callback_)
pressed_callback_();
} }
else if (me->type == MouseEvent::Up && status_ == Status::Selected) else if (me->type == MouseEvent::Up && status_ == Status::Pressed)
{ {
SetStatus(Status::Hover); SetStatus(Status::Hover);
if (callback_) if (click_callback_)
callback_(); click_callback_();
} }
} }
} }

View File

@ -35,7 +35,14 @@ namespace easy2d
Button(); Button();
explicit Button( explicit Button(
Callback const& func /* 按钮回调函数 */ Callback const& click /* 按钮点击回调函数 */
);
explicit Button(
Callback const& click, /* 按钮点击回调函数 */
Callback const& pressed, /* 按钮按下回调函数 */
Callback const& mouse_over, /* 按钮移入回调函数 */
Callback const& mouse_out /* 按钮移出回调函数 */
); );
virtual ~Button(); virtual ~Button();
@ -53,8 +60,23 @@ namespace easy2d
const Callback& func const Callback& func
); );
// 设置按钮被按下时的回调函数
void SetPressedCallback(
const Callback& func
);
// 设置鼠标移入按钮时的回调函数
void SetMouseOverCallback(
const Callback& func
);
// 设置鼠标移出按钮时的回调函数
void SetMouseOutCallback(
const Callback& func
);
private: private:
enum class Status { Normal, Hover, Selected }; enum class Status { Normal, Hover, Pressed };
void SetStatus( void SetStatus(
Status status Status status
@ -66,7 +88,10 @@ namespace easy2d
bool enabled_; bool enabled_;
bool is_selected_; bool is_selected_;
Status status_; Status status_;
Callback callback_; Callback click_callback_;
Callback pressed_callback_;
Callback mouse_over_callback_;
Callback mouse_out_callback_;
}; };
} }
} }