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_;
}
spNode Node::GetParent() const
Node* Node::GetParent() const
{
return parent_;
}
spScene Node::GetScene() const
Scene* Node::GetScene() const
{
return scene_;
}

View File

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

View File

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

View File

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

View File

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

View File

@ -28,7 +28,7 @@ namespace easy2d
Button::Button()
: enabled_(true)
, is_selected_(false)
, callback_(nullptr)
, click_callback_(nullptr)
, status_(Status::Normal)
{
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));
}
Button::Button(const Callback& func)
Button::Button(const Callback& click)
: 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()
@ -62,7 +71,22 @@ namespace easy2d
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)
@ -83,21 +107,30 @@ namespace easy2d
if (me->type == MouseEvent::Hover)
{
SetStatus(Status::Hover);
if (mouse_over_callback_)
mouse_over_callback_();
}
else if (me->type == MouseEvent::Out)
{
SetStatus(Status::Normal);
if (mouse_out_callback_)
mouse_out_callback_();
}
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);
if (callback_)
callback_();
if (click_callback_)
click_callback_();
}
}
}

View File

@ -35,7 +35,14 @@ namespace easy2d
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();
@ -53,8 +60,23 @@ namespace easy2d
const Callback& func
);
// 设置按钮被按下时的回调函数
void SetPressedCallback(
const Callback& func
);
// 设置鼠标移入按钮时的回调函数
void SetMouseOverCallback(
const Callback& func
);
// 设置鼠标移出按钮时的回调函数
void SetMouseOutCallback(
const Callback& func
);
private:
enum class Status { Normal, Hover, Selected };
enum class Status { Normal, Hover, Pressed };
void SetStatus(
Status status
@ -66,7 +88,10 @@ namespace easy2d
bool enabled_;
bool is_selected_;
Status status_;
Callback callback_;
Callback click_callback_;
Callback pressed_callback_;
Callback mouse_over_callback_;
Callback mouse_out_callback_;
};
}
}