diff options
Diffstat (limited to 'CruUI/ui')
-rw-r--r-- | CruUI/ui/control.cpp | 72 | ||||
-rw-r--r-- | CruUI/ui/control.h | 13 | ||||
-rw-r--r-- | CruUI/ui/controls/text_block.cpp | 12 | ||||
-rw-r--r-- | CruUI/ui/controls/text_block.h | 12 | ||||
-rw-r--r-- | CruUI/ui/window.cpp | 22 |
5 files changed, 98 insertions, 33 deletions
diff --git a/CruUI/ui/control.cpp b/CruUI/ui/control.cpp index c7864dc7..552eb096 100644 --- a/CruUI/ui/control.cpp +++ b/CruUI/ui/control.cpp @@ -180,7 +180,7 @@ namespace cru { const auto old_size = size_; size_ = size; SizeChangedEventArgs args(this, this, old_size, size); - OnSizeChangedCore(args); + OnSizeChangedInternal(args); if (auto window = GetWindow()) window->Repaint(); } @@ -327,12 +327,24 @@ namespace cru { void Control::OnPositionChangedCore(PositionChangedEventArgs & args) { + + } + + void Control::OnSizeChangedCore(SizeChangedEventArgs & args) + { + + } + + void Control::OnPositionChangedInternal(PositionChangedEventArgs& args) + { + OnPositionChangedCore(args); OnPositionChanged(args); position_changed_event.Raise(args); } - void Control::OnSizeChangedCore(SizeChangedEventArgs & args) + void Control::OnSizeChangedInternal(SizeChangedEventArgs& args) { + OnSizeChangedCore(args); OnSizeChanged(args); size_changed_event.Raise(args); } @@ -360,51 +372,93 @@ namespace cru { void Control::OnMouseEnterCore(MouseEventArgs & args) { is_mouse_inside_ = true; - OnMouseEnter(args); - mouse_enter_event.Raise(args); } void Control::OnMouseLeaveCore(MouseEventArgs & args) { is_mouse_inside_ = false; + } + + void Control::OnMouseMoveCore(MouseEventArgs & args) + { + + } + + void Control::OnMouseDownCore(MouseButtonEventArgs & args) + { + + } + + void Control::OnMouseUpCore(MouseButtonEventArgs & args) + { + + } + + void Control::OnMouseEnterInternal(MouseEventArgs& args) + { + OnMouseEnterCore(args); + OnMouseEnter(args); + mouse_enter_event.Raise(args); + } + + void Control::OnMouseLeaveInternal(MouseEventArgs& args) + { + OnMouseLeaveCore(args); OnMouseLeave(args); mouse_leave_event.Raise(args); } - void Control::OnMouseMoveCore(MouseEventArgs & args) + void Control::OnMouseMoveInternal(MouseEventArgs& args) { + OnMouseMoveCore(args); OnMouseMove(args); mouse_move_event.Raise(args); } - void Control::OnMouseDownCore(MouseButtonEventArgs & args) + void Control::OnMouseDownInternal(MouseButtonEventArgs& args) { + OnMouseDownCore(args); OnMouseDown(args); mouse_down_event.Raise(args); } - void Control::OnMouseUpCore(MouseButtonEventArgs & args) + void Control::OnMouseUpInternal(MouseButtonEventArgs& args) { + OnMouseUpCore(args); OnMouseUp(args); mouse_up_event.Raise(args); } void Control::OnGetFocus(FocusChangeEventArgs& args) { + } void Control::OnLoseFocus(FocusChangeEventArgs& args) { + } void Control::OnGetFocusCore(FocusChangeEventArgs& args) { + + } + + void Control::OnLoseFocusCore(FocusChangeEventArgs& args) + { + + } + + void Control::OnGetFocusInternal(FocusChangeEventArgs& args) + { + OnGetFocusCore(args); OnGetFocus(args); get_focus_event.Raise(args); } - void Control::OnLoseFocusCore(FocusChangeEventArgs& args) + void Control::OnLoseFocusInternal(FocusChangeEventArgs& args) { + OnLoseFocusCore(args); OnLoseFocus(args); lose_focus_event.Raise(args); } @@ -481,7 +535,7 @@ namespace cru { if (this->old_position_ != this->position_) { PositionChangedEventArgs args(this, this, this->old_position_, this->position_); - this->OnPositionChangedCore(args); + this->OnPositionChangedInternal(args); this->old_position_ = this->position_; } } diff --git a/CruUI/ui/control.h b/CruUI/ui/control.h index d87bed27..126c92d9 100644 --- a/CruUI/ui/control.h +++ b/CruUI/ui/control.h @@ -214,6 +214,8 @@ namespace cru virtual void OnPositionChangedCore(events::PositionChangedEventArgs& args); virtual void OnSizeChangedCore(events::SizeChangedEventArgs& args); + void OnPositionChangedInternal(events::PositionChangedEventArgs& args); + void OnSizeChangedInternal(events::SizeChangedEventArgs& args); //*************** region: mouse event *************** virtual void OnMouseEnter(events::MouseEventArgs& args); @@ -228,6 +230,12 @@ namespace cru virtual void OnMouseDownCore(events::MouseButtonEventArgs& args); virtual void OnMouseUpCore(events::MouseButtonEventArgs& args); + void OnMouseEnterInternal(events::MouseEventArgs& args); + void OnMouseLeaveInternal(events::MouseEventArgs& args); + void OnMouseMoveInternal(events::MouseEventArgs& args); + void OnMouseDownInternal(events::MouseButtonEventArgs& args); + void OnMouseUpInternal(events::MouseButtonEventArgs& args); + //*************** region: focus event *************** virtual void OnGetFocus(events::FocusChangeEventArgs& args); @@ -236,6 +244,9 @@ namespace cru virtual void OnGetFocusCore(events::FocusChangeEventArgs& args); virtual void OnLoseFocusCore(events::FocusChangeEventArgs& args); + void OnGetFocusInternal(events::FocusChangeEventArgs& args); + void OnLoseFocusInternal(events::FocusChangeEventArgs& args); + //*************** region: layout *************** virtual Size OnMeasure(const Size& available_size); virtual void OnLayout(const Rect& rect); @@ -268,7 +279,7 @@ namespace cru // more than once, it will be the oldest position since last // notification. If notification has been sent, it will be updated // to position_. - Point old_position_; + Point old_position_; Point position_; Size size_; diff --git a/CruUI/ui/controls/text_block.cpp b/CruUI/ui/controls/text_block.cpp index f385bd6c..a3dc23c5 100644 --- a/CruUI/ui/controls/text_block.cpp +++ b/CruUI/ui/controls/text_block.cpp @@ -31,7 +31,7 @@ namespace cru if (init_brush == nullptr) brush_ = CreateSolidBrush(D2D1::ColorF(D2D1::ColorF::Black)); - selection_brush_ = CreateSolidBrush(D2D1::ColorF(D2D1::ColorF::Blue)); + selection_brush_ = CreateSolidBrush(D2D1::ColorF(D2D1::ColorF::LightSkyBlue)); } TextBlock::~TextBlock() = default; @@ -61,10 +61,10 @@ namespace cru void TextBlock::OnSizeChangedCore(events::SizeChangedEventArgs& args) { + Control::OnSizeChangedCore(args); text_layout_->SetMaxWidth(args.GetNewSize().width); text_layout_->SetMaxHeight(args.GetNewSize().height); Repaint(); - Control::OnSizeChangedCore(args); } void TextBlock::OnDraw(ID2D1DeviceContext* device_context) @@ -109,6 +109,7 @@ namespace cru void TextBlock::OnMouseDownCore(events::MouseButtonEventArgs& args) { + Control::OnMouseDownCore(args); if (args.GetMouseButton() == MouseButton::Left) { RequestFocus(); @@ -122,11 +123,11 @@ namespace cru } Repaint(); } - Control::OnMouseDownCore(args); } void TextBlock::OnMouseMoveCore(events::MouseEventArgs& args) { + Control::OnMouseMoveCore(args); if (is_selecting_) { const auto hit_test_result = TextLayoutHitTest(text_layout_.Get(), args.GetPoint(this), false).value(); @@ -138,11 +139,11 @@ namespace cru selected_range_ = std::nullopt; Repaint(); } - Control::OnMouseMoveCore(args); } void TextBlock::OnMouseUpCore(events::MouseButtonEventArgs& args) { + Control::OnMouseUpCore(args); if (args.GetMouseButton() == MouseButton::Left) { if (is_selecting_) @@ -151,11 +152,11 @@ namespace cru GetWindow()->ReleaseCurrentMouseCapture(); } } - Control::OnMouseUpCore(args); } void TextBlock::OnLoseFocusCore(events::FocusChangeEventArgs& args) { + Control::OnLoseFocusCore(args); if (is_selecting_) { is_selecting_ = false; @@ -166,7 +167,6 @@ namespace cru selected_range_ = std::nullopt; Repaint(); } - Control::OnLoseFocusCore(args); } Size TextBlock::OnMeasure(const Size& available_size) diff --git a/CruUI/ui/controls/text_block.h b/CruUI/ui/controls/text_block.h index c008f324..be2a1da2 100644 --- a/CruUI/ui/controls/text_block.h +++ b/CruUI/ui/controls/text_block.h @@ -29,7 +29,7 @@ namespace cru explicit operator DWRITE_TEXT_RANGE() const { - DWRITE_TEXT_RANGE result{}; + DWRITE_TEXT_RANGE result; result.startPosition = position; result.length = count; return result; @@ -100,13 +100,13 @@ namespace cru void OnSizeChangedCore(events::SizeChangedEventArgs& args) override final; void OnDraw(ID2D1DeviceContext* device_context) override; - void OnMouseDownCore(events::MouseButtonEventArgs& args) override; - void OnMouseMoveCore(events::MouseEventArgs& args) override; - void OnMouseUpCore(events::MouseButtonEventArgs& args) override; + void OnMouseDownCore(events::MouseButtonEventArgs& args) override final; + void OnMouseMoveCore(events::MouseEventArgs& args) override final; + void OnMouseUpCore(events::MouseButtonEventArgs& args) override final; - void OnLoseFocusCore(events::FocusChangeEventArgs& args) override; + void OnLoseFocusCore(events::FocusChangeEventArgs& args) override final; - Size OnMeasure(const Size& available_size) override; + Size OnMeasure(const Size& available_size) override final; private: void OnTextChangedCore(const String& old_text, const String& new_text); diff --git a/CruUI/ui/window.cpp b/CruUI/ui/window.cpp index cbb3b694..e09b150e 100644 --- a/CruUI/ui/window.cpp +++ b/CruUI/ui/window.cpp @@ -420,11 +420,11 @@ namespace cru if (focus_control_ == control) return true; - DispatchEvent(focus_control_, &Control::OnLoseFocusCore, nullptr, false); + DispatchEvent(focus_control_, &Control::OnLoseFocusInternal, nullptr, false); focus_control_ = control; - DispatchEvent(control, &Control::OnGetFocusCore, nullptr, false); + DispatchEvent(control, &Control::OnGetFocusInternal, nullptr, false); return true; } @@ -511,13 +511,13 @@ namespace cru void Window::OnSetFocusInternal() { window_focus_ = true; - DispatchEvent(focus_control_, &Control::OnGetFocusCore, nullptr, true); + DispatchEvent(focus_control_, &Control::OnGetFocusInternal, nullptr, true); } void Window::OnKillFocusInternal() { window_focus_ = false; - DispatchEvent(focus_control_, &Control::OnLoseFocusCore, nullptr, true); + DispatchEvent(focus_control_, &Control::OnLoseFocusInternal, nullptr, true); } void Window::OnMouseMoveInternal(const POINT point) @@ -542,18 +542,18 @@ namespace cru if (mouse_capture_control_) // if mouse is captured { - DispatchEvent(mouse_capture_control_, &Control::OnMouseMoveCore, nullptr, dip_point); + DispatchEvent(mouse_capture_control_, &Control::OnMouseMoveInternal, nullptr, dip_point); } else { DispatchMouseHoverControlChangeEvent(old_control_mouse_hover, new_control_mouse_hover, dip_point); - DispatchEvent(new_control_mouse_hover, &Control::OnMouseMoveCore, nullptr, dip_point); + DispatchEvent(new_control_mouse_hover, &Control::OnMouseMoveInternal, nullptr, dip_point); } } void Window::OnMouseLeaveInternal() { - DispatchEvent(mouse_hover_control_, &Control::OnMouseLeaveCore, nullptr); + DispatchEvent(mouse_hover_control_, &Control::OnMouseLeaveInternal, nullptr); mouse_hover_control_ = nullptr; } @@ -568,7 +568,7 @@ namespace cru else control = HitTest(dip_point); - DispatchEvent(control, &Control::OnMouseDownCore, nullptr, dip_point, button); + DispatchEvent(control, &Control::OnMouseDownInternal, nullptr, dip_point, button); } void Window::OnMouseUpInternal(MouseButton button, POINT point) @@ -582,7 +582,7 @@ namespace cru else control = HitTest(dip_point); - DispatchEvent(control, &Control::OnMouseUpCore, nullptr, dip_point, button); + DispatchEvent(control, &Control::OnMouseUpInternal, nullptr, dip_point, button); } void Window::OnActivatedInternal() @@ -603,9 +603,9 @@ namespace cru { const auto lowest_common_ancestor = FindLowestCommonAncestor(old_control, new_control); if (old_control != nullptr) // if last mouse-hover-on control exists - DispatchEvent(old_control, &Control::OnMouseLeaveCore, lowest_common_ancestor); // dispatch mouse leave event. + DispatchEvent(old_control, &Control::OnMouseLeaveInternal, lowest_common_ancestor); // dispatch mouse leave event. if (new_control != nullptr) - DispatchEvent(new_control, &Control::OnMouseEnterCore, lowest_common_ancestor, point); // dispatch mouse enter event. + DispatchEvent(new_control, &Control::OnMouseEnterInternal, lowest_common_ancestor, point); // dispatch mouse enter event. } } } |