aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-09-14 22:50:47 +0800
committercrupest <crupest@outlook.com>2018-09-14 22:50:47 +0800
commit8248001b2506a866b6be0e22af36f8399a595da2 (patch)
treeea010157edd9754064befc17215b507577fb682e
parent85e51b0b2e67ac2395c6ba91b96f8bde0d308205 (diff)
downloadcru-8248001b2506a866b6be0e22af36f8399a595da2.tar.gz
cru-8248001b2506a866b6be0e22af36f8399a595da2.tar.bz2
cru-8248001b2506a866b6be0e22af36f8399a595da2.zip
...
-rw-r--r--CruUI/ui/control.cpp72
-rw-r--r--CruUI/ui/control.h13
-rw-r--r--CruUI/ui/controls/text_block.cpp12
-rw-r--r--CruUI/ui/controls/text_block.h12
-rw-r--r--CruUI/ui/window.cpp22
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.
}
}
}