diff options
Diffstat (limited to 'CruUI/ui/control.cpp')
-rw-r--r-- | CruUI/ui/control.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/CruUI/ui/control.cpp b/CruUI/ui/control.cpp index 552eb096..7a705b4b 100644 --- a/CruUI/ui/control.cpp +++ b/CruUI/ui/control.cpp @@ -12,7 +12,7 @@ namespace cru { namespace ui { using namespace events; - Control::Control(bool container) : + Control::Control(const bool container) : is_container_(container), window_(nullptr), parent_(nullptr), @@ -22,6 +22,11 @@ namespace cru { size_(Size::zero), position_cache_(), is_mouse_inside_(false), + is_mouse_leave_{ + { MouseButton::Left, true }, + { MouseButton::Middle, true }, + { MouseButton::Right, true } + }, layout_params_(new BasicLayoutParams()), desired_size_(Size::zero) { @@ -148,6 +153,8 @@ namespace cru { { if (is_container_) TraverseDescendantsInternal(this, predicate); + else + predicate(this); } Point Control::GetPositionRelative() @@ -286,8 +293,8 @@ namespace cru { control->OnAttachToWindow(window); }); window->RefreshControlList(); - } + Relayout(); } void Control::OnRemoveChild(Control* child) @@ -299,6 +306,7 @@ namespace cru { }); window->RefreshControlList(); } + Relayout(); } void Control::OnAttachToWindow(Window* window) @@ -369,6 +377,11 @@ namespace cru { { } + void Control::OnMouseClick(MouseButtonEventArgs& args) + { + + } + void Control::OnMouseEnterCore(MouseEventArgs & args) { is_mouse_inside_ = true; @@ -377,6 +390,8 @@ namespace cru { void Control::OnMouseLeaveCore(MouseEventArgs & args) { is_mouse_inside_ = false; + for (auto& is_mouse_leave : is_mouse_leave_) + is_mouse_leave.second = true; } void Control::OnMouseMoveCore(MouseEventArgs & args) @@ -386,11 +401,17 @@ namespace cru { void Control::OnMouseDownCore(MouseButtonEventArgs & args) { - + is_mouse_leave_[args.GetMouseButton()] = false; } void Control::OnMouseUpCore(MouseButtonEventArgs & args) { + if (!is_mouse_leave_[args.GetMouseButton()]) + OnMouseClickInternal(args); + } + + void Control::OnMouseClickCore(MouseButtonEventArgs& args) + { } @@ -429,6 +450,13 @@ namespace cru { mouse_up_event.Raise(args); } + void Control::OnMouseClickInternal(MouseButtonEventArgs& args) + { + OnMouseClickCore(args); + OnMouseClick(args); + mouse_click_event.Raise(args); + } + void Control::OnGetFocus(FocusChangeEventArgs& args) { |