Index: ui/views/win/hwnd_message_handler.cc |
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc |
index a58c5f73ed84f641a44d043652cd2939c1d5d7cd..9d7d27b184f995e98fd4741da78e6b4e30c64a21 100644 |
--- a/ui/views/win/hwnd_message_handler.cc |
+++ b/ui/views/win/hwnd_message_handler.cc |
@@ -18,7 +18,6 @@ |
#include "base/macros.h" |
#include "base/single_thread_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
-#include "base/time/time.h" |
#include "base/trace_event/trace_event.h" |
#include "base/win/scoped_gdi_object.h" |
#include "base/win/windows_version.h" |
@@ -31,6 +30,7 @@ |
#include "ui/display/win/dpi.h" |
#include "ui/display/win/screen_win.h" |
#include "ui/events/event.h" |
+#include "ui/events/event_constants.h" |
#include "ui/events/event_utils.h" |
#include "ui/events/keycodes/keyboard_code_conversion_win.h" |
#include "ui/events/win/system_event_state_lookup.h" |
@@ -347,7 +347,9 @@ HWNDMessageHandler::HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate) |
left_button_down_on_caption_(false), |
background_fullscreen_hack_(false), |
autohide_factory_(this), |
- weak_factory_(this) {} |
+ weak_factory_(this) { |
+ // EnableMouseInPointer(true); |
+} |
HWNDMessageHandler::~HWNDMessageHandler() { |
delegate_ = NULL; |
@@ -974,6 +976,16 @@ LRESULT HWNDMessageHandler::HandleTouchMessage(unsigned int message, |
return ret; |
} |
+LRESULT HWNDMessageHandler::HandlePointerMessage(unsigned int message, |
+ WPARAM w_param, |
+ LPARAM l_param, |
+ bool* handled) { |
+ base::WeakPtr<HWNDMessageHandler> ref(weak_factory_.GetWeakPtr()); |
+ LRESULT ret = OnPointerEvent(message, w_param, l_param); |
+ *handled = IsMsgHandled(); |
+ return ret; |
+} |
+ |
LRESULT HWNDMessageHandler::HandleScrollMessage(unsigned int message, |
WPARAM w_param, |
LPARAM l_param, |
@@ -1642,6 +1654,68 @@ LRESULT HWNDMessageHandler::OnPointerActivate(UINT message, |
return -1; |
} |
+LRESULT HWNDMessageHandler::OnPointerEvent(UINT message, |
+ WPARAM w_param, |
+ LPARAM l_param) { |
+ UINT32 pointer_id = GET_POINTERID_WPARAM(w_param); |
+ POINTER_INFO pointer_info; |
+ if (GetPointerInfo(pointer_id, &pointer_info)) { |
+ POINTER_INPUT_TYPE pointer_type; |
+ if (GetPointerType(pointer_id, &pointer_type)) { |
+ if (pointer_type != PT_PEN) |
+ return 0; |
+ |
+ POINTER_PEN_INFO pointer_pen_info; |
+ if (GetPointerPenInfo(pointer_id, &pointer_pen_info)) { |
+ float pressure = (float)pointer_pen_info.pressure / 1024; |
+ float rotation = pointer_pen_info.rotation; |
+ int tiltX = pointer_pen_info.tiltX; |
+ int tiltY = pointer_pen_info.tiltY; |
+ POINT client_point = pointer_info.ptPixelLocation; |
+ ScreenToClient(hwnd(), &client_point); |
+ gfx::Point point(client_point.x, client_point.y); |
+ ui::EventType event_type = ui::ET_MOUSE_MOVED; |
+ int flag = 0; |
+ switch (message) { |
+ case WM_POINTERDOWN: |
+ event_type = ui::ET_MOUSE_PRESSED; |
+ flag = ui::EF_LEFT_MOUSE_BUTTON; |
+ break; |
+ case WM_POINTERUP: |
+ event_type = ui::ET_MOUSE_RELEASED; |
+ flag = ui::EF_LEFT_MOUSE_BUTTON; |
+ break; |
+ case WM_POINTERUPDATE: |
+ event_type = ui::ET_MOUSE_MOVED; |
+ break; |
+ case WM_POINTERLEAVE: |
+ event_type = ui::ET_MOUSE_EXITED; |
+ break; |
+ default: |
+ break; |
+ } |
+ ui::MouseEvent event(event_type, point, point, base::TimeTicks::Now(), |
+ 0, 0); |
+ event.set_flags(flag); |
+ ui::PointerDetails pointer_details( |
dtapuska
2017/01/23 14:15:37
We need to make another change to aura to add rot
|
+ ui::EventPointerType::POINTER_TYPE_PEN, 0.0f, 0.0f, pressure, tiltX, |
+ tiltY); |
+ event.set_pointer_details(pointer_details); |
+ |
+ // There are cases where the code handling the message destroys the |
+ // window, |
+ // so use the weak ptr to check if destruction occured or not. |
+ base::WeakPtr<HWNDMessageHandler> ref(weak_factory_.GetWeakPtr()); |
+ bool handled = delegate_->HandleMouseEvent(event); |
+ |
+ if (ref.get()) |
+ SetMsgHandled(handled); |
dtapuska
2017/01/23 14:15:37
I wonder if you need to always return SetMsgHandle
|
+ } |
+ } |
+ } |
+ return 0; |
+} |
+ |
void HWNDMessageHandler::OnMove(const gfx::Point& point) { |
delegate_->HandleMove(); |
SetMsgHandled(FALSE); |
@@ -2168,13 +2242,6 @@ void HWNDMessageHandler::OnThemeChanged() { |
ui::NativeThemeWin::CloseHandles(); |
} |
-void HWNDMessageHandler::OnTimeChange() { |
- // Call NowFromSystemTime() to force base::Time to re-initialize the clock |
- // from system time. Otherwise base::Time::Now() might continue to reflect the |
- // old system clock for some amount of time. See https://crbug.com/672906#c5 |
- base::Time::NowFromSystemTime(); |
-} |
- |
LRESULT HWNDMessageHandler::OnTouchEvent(UINT message, |
WPARAM w_param, |
LPARAM l_param) { |