Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1394)

Unified Diff: ui/views/win/hwnd_message_handler.cc

Issue 2648683003: Introduce WM_POINTER to Handle pointer events with pen type (Closed)
Patch Set: wm pointer Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/win/hwnd_message_handler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 83ace04055ca90111db512fd9be52da95f213907..4984233e65c75a14e2c81ac2336c8f6cae75ec3e 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"
@@ -346,6 +346,7 @@ HWNDMessageHandler::HWNDMessageHandler(HWNDMessageHandlerDelegate* delegate)
sent_window_size_changing_(false),
left_button_down_on_caption_(false),
background_fullscreen_hack_(false),
+ is_pointer_in_range_(false),
autohide_factory_(this),
weak_factory_(this) {}
@@ -942,6 +943,9 @@ LRESULT HWNDMessageHandler::HandleMouseMessage(unsigned int message,
WPARAM w_param,
LPARAM l_param,
bool* handled) {
+ if (is_pointer_in_range_)
ananta 2017/03/09 00:37:33 Does not appear to be set anywhere.
lanwei 2017/03/09 21:05:05 It is not useful now, I deleted it.
+ return 0;
+
// Don't track forwarded mouse messages. We expect the caller to track the
// mouse.
base::WeakPtr<HWNDMessageHandler> ref(weak_factory_.GetWeakPtr());
@@ -974,6 +978,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 +1656,85 @@ 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);
+ using GetPointerTypeFn = BOOL(WINAPI*)(UINT32, POINTER_INPUT_TYPE*);
+
+ POINTER_INPUT_TYPE pointer_type;
+ static GetPointerTypeFn get_pointer_type = reinterpret_cast<GetPointerTypeFn>(
+ GetProcAddress(GetModuleHandleA("user32.dll"), "GetPointerType"));
+ if (get_pointer_type && get_pointer_type(pointer_id, &pointer_type)) {
ananta 2017/03/09 00:37:33 If we are getting a WM_POINTER*** message then we
lanwei 2017/03/09 21:05:05 You are right, but the other places calling the Ge
+ if (pointer_type != PT_PEN) {
+ SetMsgHandled(FALSE);
+ return 0;
+ }
+
+ using GetPointerPenInfoFn = BOOL(WINAPI*)(UINT32, POINTER_PEN_INFO*);
+ using GetPointerInfoFn = BOOL(WINAPI*)(UINT32, POINTER_INFO*);
+
+ POINTER_INFO pointer_info;
+ static GetPointerInfoFn get_pointer_info =
+ reinterpret_cast<GetPointerInfoFn>(
+ GetProcAddress(GetModuleHandleA("user32.dll"), "GetPointerInfo"));
+
+ POINTER_PEN_INFO pointer_pen_info;
+ static GetPointerPenInfoFn get_pointer_pen_info =
+ reinterpret_cast<GetPointerPenInfoFn>(GetProcAddress(
+ GetModuleHandleA("user32.dll"), "GetPointerPenInfo"));
+ if (get_pointer_pen_info &&
+ 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;
+ gfx::Point point;
+ if (get_pointer_info && get_pointer_info(pointer_id, &pointer_info)) {
+ POINT client_point = pointer_info.ptPixelLocation;
+ ScreenToClient(hwnd(), &client_point);
+ point = gfx::Point(client_point.x, client_point.y);
+ }
+ ui::EventType event_type = ui::ET_MOUSE_MOVED;
ananta 2017/03/09 00:37:33 Please add some comments here. The code below is c
lanwei 2017/03/09 21:05:05 Yes. Touch and mouse work as before, and we are re
+ 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(ui::EventPointerType::POINTER_TYPE_PEN,
+ 0.0f, 0.0f, pressure, tiltX, tiltY,
+ 0.0f, rotation, pointer_id);
+ 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);
+ }
+ }
+ return 0;
+}
+
void HWNDMessageHandler::OnMove(const gfx::Point& point) {
delegate_->HandleMove();
SetMsgHandled(FALSE);
@@ -2168,13 +2261,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) {
« no previous file with comments | « ui/views/win/hwnd_message_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698