From d4658bfd97e1770e7ab4de356b3fd8c0d1999493 Mon Sep 17 00:00:00 2001 From: crupest Date: Sat, 24 Nov 2018 00:41:38 +0800 Subject: Improve hit test for clip. --- src/ui/window.hpp | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'src/ui/window.hpp') diff --git a/src/ui/window.hpp b/src/ui/window.hpp index d98e60e2..a3fba57a 100644 --- a/src/ui/window.hpp +++ b/src/ui/window.hpp @@ -2,7 +2,6 @@ #include "system_headers.hpp" #include -#include #include #include "control.hpp" @@ -208,15 +207,6 @@ namespace cru::ui void SetSizeFitContent(const Size& max_size = Size(1000, 1000)); - //*************** region: functions *************** - - //Refresh control list. - //It should be invoked every time a control is added or removed from the tree. - void RefreshControlList(); - - //Get the most top control at "point". - Control* HitTest(const Point& point); - //*************** region: focus *************** @@ -320,8 +310,6 @@ namespace cru::ui Window* parent_window_ = nullptr; std::shared_ptr render_target_{}; - std::list control_list_{}; - Control* mouse_hover_control_ = nullptr; bool window_focus_ = false; -- cgit v1.2.3 From b88992fd00df7b8c243bc0e7d577ef2aa9437c3f Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 25 Nov 2018 23:11:06 +0800 Subject: Reorganize headers and add memory leak check. --- CruUI.vcxproj | 2 +- CruUI.vcxproj.filters | 6 +++--- src/any_map.hpp | 3 +++ src/application.hpp | 3 +++ src/base.hpp | 3 +-- src/cru_debug.hpp | 3 +++ src/cru_event.hpp | 3 +++ src/exception.hpp | 3 +++ src/format.hpp | 3 +++ src/global_macros.hpp | 9 --------- src/graph/graph.hpp | 3 +++ src/main.cpp | 7 ++++++- src/math_util.hpp | 3 +++ src/pre.hpp | 18 ++++++++++++++++++ src/system_headers.hpp | 2 ++ src/timer.hpp | 2 ++ src/ui/animations/animation.hpp | 3 +++ src/ui/border_property.hpp | 3 +++ src/ui/control.hpp | 3 +++ src/ui/controls/button.hpp | 3 +++ src/ui/controls/frame_layout.hpp | 3 +++ src/ui/controls/linear_layout.hpp | 3 +++ src/ui/controls/list_item.hpp | 3 +++ src/ui/controls/popup_menu.hpp | 3 +++ src/ui/controls/scroll_control.hpp | 3 +++ src/ui/controls/text_block.hpp | 3 +++ src/ui/controls/text_box.hpp | 3 +++ src/ui/controls/text_control.hpp | 3 +++ src/ui/controls/toggle_button.hpp | 3 +++ src/ui/convert_util.hpp | 3 +++ src/ui/cursor.hpp | 3 +++ src/ui/events/ui_event.hpp | 3 +++ src/ui/layout_base.hpp | 3 +++ src/ui/ui_base.hpp | 3 +++ src/ui/ui_manager.hpp | 3 +++ src/ui/window.hpp | 3 +++ 36 files changed, 117 insertions(+), 16 deletions(-) delete mode 100644 src/global_macros.hpp create mode 100644 src/pre.hpp (limited to 'src/ui/window.hpp') diff --git a/CruUI.vcxproj b/CruUI.vcxproj index c397f1d0..30f39f28 100644 --- a/CruUI.vcxproj +++ b/CruUI.vcxproj @@ -159,7 +159,7 @@ - + diff --git a/CruUI.vcxproj.filters b/CruUI.vcxproj.filters index 7852404c..71025931 100644 --- a/CruUI.vcxproj.filters +++ b/CruUI.vcxproj.filters @@ -158,9 +158,6 @@ Header Files - - Header Files - Header Files @@ -191,6 +188,9 @@ Header Files + + Header Files + diff --git a/src/any_map.hpp b/src/any_map.hpp index ea6044b1..dfc54f3f 100644 --- a/src/any_map.hpp +++ b/src/any_map.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include #include diff --git a/src/application.hpp b/src/application.hpp index b9427826..a8d59cc8 100644 --- a/src/application.hpp +++ b/src/application.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include #include diff --git a/src/base.hpp b/src/base.hpp index fdd736a0..64ce7f6e 100644 --- a/src/base.hpp +++ b/src/base.hpp @@ -1,8 +1,7 @@ #pragma once // ReSharper disable once CppUnusedIncludeDirective -#include "global_macros.hpp" - +#include "pre.hpp" #include #include diff --git a/src/cru_debug.hpp b/src/cru_debug.hpp index ed6fcaf6..17cc7b53 100644 --- a/src/cru_debug.hpp +++ b/src/cru_debug.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include "base.hpp" diff --git a/src/cru_event.hpp b/src/cru_event.hpp index 76a36b22..69832a0e 100644 --- a/src/cru_event.hpp +++ b/src/cru_event.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include #include diff --git a/src/exception.hpp b/src/exception.hpp index 68558478..b8cef604 100644 --- a/src/exception.hpp +++ b/src/exception.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include diff --git a/src/format.hpp b/src/format.hpp index 3f6253ff..efd25f89 100644 --- a/src/format.hpp +++ b/src/format.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "base.hpp" namespace cru diff --git a/src/global_macros.hpp b/src/global_macros.hpp deleted file mode 100644 index eda57187..00000000 --- a/src/global_macros.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#ifdef _DEBUG -#define CRU_DEBUG -#endif - -#ifdef CRU_DEBUG -#define CRU_DEBUG_LAYOUT -#endif diff --git a/src/graph/graph.hpp b/src/graph/graph.hpp index 7771b48f..440b0594 100644 --- a/src/graph/graph.hpp +++ b/src/graph/graph.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include #include diff --git a/src/main.cpp b/src/main.cpp index 5cc98a72..7b27d95e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,3 +1,5 @@ +#include "pre.hpp" + #include "application.hpp" #include "ui/window.hpp" #include "ui/controls/linear_layout.hpp" @@ -36,6 +38,10 @@ int APIENTRY wWinMain( LPWSTR lpCmdLine, int nCmdShow) { +#ifdef CRU_DEBUG + _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); +#endif + Application application(hInstance); const auto window = Window::CreateOverlapped(); @@ -225,7 +231,6 @@ int APIENTRY wWinMain( window.AddChild(linear_layout); */ - window->Show(); return application.Run(); diff --git a/src/math_util.hpp b/src/math_util.hpp index 7b286346..b9830d6b 100644 --- a/src/math_util.hpp +++ b/src/math_util.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + // ReSharper disable once CppUnusedIncludeDirective #include #include diff --git a/src/pre.hpp b/src/pre.hpp new file mode 100644 index 00000000..03c51a94 --- /dev/null +++ b/src/pre.hpp @@ -0,0 +1,18 @@ +#pragma once + +#ifdef _DEBUG +#define CRU_DEBUG +#endif + +#ifdef CRU_DEBUG +#define CRU_DEBUG_LAYOUT +#endif + + +#ifdef CRU_DEBUG +// ReSharper disable once IdentifierTypo +// ReSharper disable once CppInconsistentNaming +#define _CRTDBG_MAP_ALLOC +#include +#include +#endif diff --git a/src/system_headers.hpp b/src/system_headers.hpp index d471678a..eabc7c25 100644 --- a/src/system_headers.hpp +++ b/src/system_headers.hpp @@ -1,5 +1,7 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" //include system headers diff --git a/src/timer.hpp b/src/timer.hpp index 3488db45..5055a3d8 100644 --- a/src/timer.hpp +++ b/src/timer.hpp @@ -1,5 +1,7 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" #include "system_headers.hpp" #include diff --git a/src/ui/animations/animation.hpp b/src/ui/animations/animation.hpp index f25e4699..2226f021 100644 --- a/src/ui/animations/animation.hpp +++ b/src/ui/animations/animation.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include "base.hpp" diff --git a/src/ui/border_property.hpp b/src/ui/border_property.hpp index 7766f5a3..4dee0e0f 100644 --- a/src/ui/border_property.hpp +++ b/src/ui/border_property.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include "base.hpp" diff --git a/src/ui/control.hpp b/src/ui/control.hpp index 1ce4afe3..5f5285b6 100644 --- a/src/ui/control.hpp +++ b/src/ui/control.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include #include diff --git a/src/ui/controls/button.hpp b/src/ui/controls/button.hpp index 50640b11..c53f7ed9 100644 --- a/src/ui/controls/button.hpp +++ b/src/ui/controls/button.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include "ui/control.hpp" diff --git a/src/ui/controls/frame_layout.hpp b/src/ui/controls/frame_layout.hpp index ca022780..45971584 100644 --- a/src/ui/controls/frame_layout.hpp +++ b/src/ui/controls/frame_layout.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include "ui/control.hpp" diff --git a/src/ui/controls/linear_layout.hpp b/src/ui/controls/linear_layout.hpp index b7ca42ec..deb51bd1 100644 --- a/src/ui/controls/linear_layout.hpp +++ b/src/ui/controls/linear_layout.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "ui/control.hpp" namespace cru::ui::controls diff --git a/src/ui/controls/list_item.hpp b/src/ui/controls/list_item.hpp index 1de89b5f..a77d13e6 100644 --- a/src/ui/controls/list_item.hpp +++ b/src/ui/controls/list_item.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include diff --git a/src/ui/controls/popup_menu.hpp b/src/ui/controls/popup_menu.hpp index d47e3eb6..a2916590 100644 --- a/src/ui/controls/popup_menu.hpp +++ b/src/ui/controls/popup_menu.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include #include diff --git a/src/ui/controls/scroll_control.hpp b/src/ui/controls/scroll_control.hpp index faf192ad..76762f21 100644 --- a/src/ui/controls/scroll_control.hpp +++ b/src/ui/controls/scroll_control.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include diff --git a/src/ui/controls/text_block.hpp b/src/ui/controls/text_block.hpp index 4d017da5..66f5defa 100644 --- a/src/ui/controls/text_block.hpp +++ b/src/ui/controls/text_block.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "text_control.hpp" namespace cru::ui::controls diff --git a/src/ui/controls/text_box.hpp b/src/ui/controls/text_box.hpp index 65f81fc3..3a30ecb2 100644 --- a/src/ui/controls/text_box.hpp +++ b/src/ui/controls/text_box.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "text_control.hpp" #include "timer.hpp" diff --git a/src/ui/controls/text_control.hpp b/src/ui/controls/text_control.hpp index 93120a44..762d85f3 100644 --- a/src/ui/controls/text_control.hpp +++ b/src/ui/controls/text_control.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "ui/control.hpp" namespace cru::ui::controls diff --git a/src/ui/controls/toggle_button.hpp b/src/ui/controls/toggle_button.hpp index 5de40ca5..4cbb4f37 100644 --- a/src/ui/controls/toggle_button.hpp +++ b/src/ui/controls/toggle_button.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "ui/control.hpp" namespace cru::ui::controls diff --git a/src/ui/convert_util.hpp b/src/ui/convert_util.hpp index 6deb7fff..5408f2e4 100644 --- a/src/ui/convert_util.hpp +++ b/src/ui/convert_util.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include "ui_base.hpp" diff --git a/src/ui/cursor.hpp b/src/ui/cursor.hpp index 0b056365..273e524d 100644 --- a/src/ui/cursor.hpp +++ b/src/ui/cursor.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include diff --git a/src/ui/events/ui_event.hpp b/src/ui/events/ui_event.hpp index c0585506..cc651832 100644 --- a/src/ui/events/ui_event.hpp +++ b/src/ui/events/ui_event.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include diff --git a/src/ui/layout_base.hpp b/src/ui/layout_base.hpp index 7ae6f65c..2ae21837 100644 --- a/src/ui/layout_base.hpp +++ b/src/ui/layout_base.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include #include "base.hpp" diff --git a/src/ui/ui_base.hpp b/src/ui/ui_base.hpp index aaba343e..b898b2ed 100644 --- a/src/ui/ui_base.hpp +++ b/src/ui/ui_base.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include diff --git a/src/ui/ui_manager.hpp b/src/ui/ui_manager.hpp index 9ad68eff..f0e1e8ce 100644 --- a/src/ui/ui_manager.hpp +++ b/src/ui/ui_manager.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include "base.hpp" diff --git a/src/ui/window.hpp b/src/ui/window.hpp index a3fba57a..7c82bf89 100644 --- a/src/ui/window.hpp +++ b/src/ui/window.hpp @@ -1,5 +1,8 @@ #pragma once +// ReSharper disable once CppUnusedIncludeDirective +#include "pre.hpp" + #include "system_headers.hpp" #include #include -- cgit v1.2.3 From 7ccb08ac09a83e81a822712b712dc0473c9b23cf Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 27 Nov 2018 17:53:21 +0800 Subject: Add mouse wheel support. --- src/ui/control.cpp | 17 +++++++++++++++++ src/ui/control.hpp | 7 +++++++ src/ui/controls/scroll_control.cpp | 23 +++++++++++++++++++++++ src/ui/controls/scroll_control.hpp | 4 +++- src/ui/events/ui_event.hpp | 25 +++++++++++++++++++++++++ src/ui/window.cpp | 22 ++++++++++++++++++++++ src/ui/window.hpp | 3 ++- 7 files changed, 99 insertions(+), 2 deletions(-) (limited to 'src/ui/window.hpp') diff --git a/src/ui/control.cpp b/src/ui/control.cpp index 32909c75..2a81427a 100644 --- a/src/ui/control.cpp +++ b/src/ui/control.cpp @@ -709,6 +709,16 @@ namespace cru::ui } + void Control::OnMouseWheel(events::MouseWheelEventArgs& args) + { + + } + + void Control::OnMouseWheelCore(events::MouseWheelEventArgs& args) + { + + } + void Control::RaiseMouseEnterEvent(MouseEventArgs& args) { OnMouseEnterCore(args); @@ -751,6 +761,13 @@ namespace cru::ui mouse_click_event.Raise(args); } + void Control::RaiseMouseWheelEvent(MouseWheelEventArgs& args) + { + OnMouseWheelCore(args); + OnMouseWheel(args); + mouse_wheel_event.Raise(args); + } + void Control::OnMouseClickBegin(MouseButton button) { diff --git a/src/ui/control.hpp b/src/ui/control.hpp index 5f5285b6..d6ad9f02 100644 --- a/src/ui/control.hpp +++ b/src/ui/control.hpp @@ -261,6 +261,8 @@ namespace cru::ui //Raised when a mouse button is pressed in the control and released in the control with mouse not leaving it between two operations. events::MouseButtonEvent mouse_click_event; + events::MouseWheelEvent mouse_wheel_event; + events::KeyEvent key_down_event; events::KeyEvent key_up_event; events::CharEvent char_event; @@ -334,6 +336,9 @@ namespace cru::ui virtual void OnMouseUpCore(events::MouseButtonEventArgs& args); virtual void OnMouseClickCore(events::MouseButtonEventArgs& args); + virtual void OnMouseWheel(events::MouseWheelEventArgs& args); + virtual void OnMouseWheelCore(events::MouseWheelEventArgs& args); + void RaiseMouseEnterEvent(events::MouseEventArgs& args); void RaiseMouseLeaveEvent(events::MouseEventArgs& args); void RaiseMouseMoveEvent(events::MouseEventArgs& args); @@ -341,6 +346,8 @@ namespace cru::ui void RaiseMouseUpEvent(events::MouseButtonEventArgs& args); void RaiseMouseClickEvent(events::MouseButtonEventArgs& args); + void RaiseMouseWheelEvent(events::MouseWheelEventArgs& args); + virtual void OnMouseClickBegin(MouseButton button); virtual void OnMouseClickEnd(MouseButton button); diff --git a/src/ui/controls/scroll_control.cpp b/src/ui/controls/scroll_control.cpp index 103a5c20..aa5403d4 100644 --- a/src/ui/controls/scroll_control.cpp +++ b/src/ui/controls/scroll_control.cpp @@ -308,6 +308,29 @@ namespace cru::ui::controls } } + void ScrollControl::OnMouseWheelCore(events::MouseWheelEventArgs& args) + { + Control::OnMouseWheelCore(args); + + constexpr const auto view_delta = 30.0f; + + if (args.GetDelta() == 0.0f) + return; + + const auto content_rect = GetRect(RectRange::Content); + if (IsVerticalScrollEnabled() && GetScrollOffsetY() != (args.GetDelta() > 0.0f ? 0.0f : AtLeast0(GetViewHeight() - content_rect.height))) + { + SetScrollOffset(std::nullopt, GetScrollOffsetY() - args.GetDelta() / WHEEL_DELTA * view_delta); + return; + } + + if (IsHorizontalScrollEnabled() && GetScrollOffsetX() != (args.GetDelta() > 0.0f ? 0.0f : AtLeast0(GetViewWidth() - content_rect.width))) + { + SetScrollOffset(GetScrollOffsetX() - args.GetDelta() / WHEEL_DELTA * view_delta, std::nullopt); + return; + } + } + void ScrollControl::CoerceAndSetOffsets(const float offset_x, const float offset_y, const bool update_children) { const auto old_offset_x = offset_x_; diff --git a/src/ui/controls/scroll_control.hpp b/src/ui/controls/scroll_control.hpp index 76762f21..0541a010 100644 --- a/src/ui/controls/scroll_control.hpp +++ b/src/ui/controls/scroll_control.hpp @@ -16,7 +16,7 @@ namespace cru::ui::controls // Done: Draw(no need) // Done: API // Done: ScrollBar - // TODO: MouseEvent + // Done: MouseEvent class ScrollControl : public Control { private: @@ -128,6 +128,8 @@ namespace cru::ui::controls void OnMouseMoveCore(events::MouseEventArgs& args) override final; void OnMouseUpCore(events::MouseButtonEventArgs& args) override final; + void OnMouseWheelCore(events::MouseWheelEventArgs& args) override; + private: void CoerceAndSetOffsets(float offset_x, float offset_y, bool update_children = true); void UpdateScrollBarVisibility(); diff --git a/src/ui/events/ui_event.hpp b/src/ui/events/ui_event.hpp index cc651832..321e7135 100644 --- a/src/ui/events/ui_event.hpp +++ b/src/ui/events/ui_event.hpp @@ -88,6 +88,30 @@ namespace cru::ui::events }; + class MouseWheelEventArgs : public MouseEventArgs + { + public: + MouseWheelEventArgs(Object* sender, Object* original_sender, const Point& point, const float delta) + : MouseEventArgs(sender, original_sender, point), delta_(delta) + { + + } + MouseWheelEventArgs(const MouseWheelEventArgs& other) = default; + MouseWheelEventArgs(MouseWheelEventArgs&& other) = default; + MouseWheelEventArgs& operator=(const MouseWheelEventArgs& other) = default; + MouseWheelEventArgs& operator=(MouseWheelEventArgs&& other) = default; + ~MouseWheelEventArgs() override = default; + + float GetDelta() const + { + return delta_; + } + + private: + float delta_; + }; + + class DrawEventArgs : public UiEventArgs { public: @@ -307,6 +331,7 @@ namespace cru::ui::events using UiEvent = Event; using MouseEvent = Event; using MouseButtonEvent = Event; + using MouseWheelEvent = Event; using DrawEvent = Event; using PositionChangedEvent = Event; using SizeChangedEvent = Event; diff --git a/src/ui/window.cpp b/src/ui/window.cpp index ceabddef..9352b747 100644 --- a/src/ui/window.cpp +++ b/src/ui/window.cpp @@ -412,6 +412,14 @@ namespace cru::ui result = 0; return true; } + case WM_MOUSEWHEEL: + POINT point; + point.x = GET_X_LPARAM(l_param); + point.y = GET_Y_LPARAM(l_param); + ScreenToClient(hwnd, &point); + OnMouseWheelInternal(GET_WHEEL_DELTA_WPARAM(w_param), point); + result = 0; + return true; case WM_KEYDOWN: OnKeyDownInternal(static_cast(w_param)); result = 0; @@ -722,6 +730,20 @@ namespace cru::ui DispatchEvent(control, &Control::RaiseMouseUpEvent, nullptr, dip_point, button); } + void Window::OnMouseWheelInternal(short delta, POINT point) + { + const auto dip_point = PiToDip(point); + + Control* control; + + if (mouse_capture_control_) + control = mouse_capture_control_; + else + control = HitTest(dip_point); + + DispatchEvent(control, &Control::RaiseMouseWheelEvent, nullptr, dip_point, static_cast(delta)); + } + void Window::OnKeyDownInternal(int virtual_code) { DispatchEvent(focus_control_, &Control::RaiseKeyDownEvent, nullptr, virtual_code); diff --git a/src/ui/window.hpp b/src/ui/window.hpp index 7c82bf89..e82aa585 100644 --- a/src/ui/window.hpp +++ b/src/ui/window.hpp @@ -270,7 +270,8 @@ namespace cru::ui void OnMouseLeaveInternal(); void OnMouseDownInternal(MouseButton button, POINT point); void OnMouseUpInternal(MouseButton button, POINT point); - + + void OnMouseWheelInternal(short delta, POINT point); void OnKeyDownInternal(int virtual_code); void OnKeyUpInternal(int virtual_code); void OnCharInternal(wchar_t c); -- cgit v1.2.3