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

Side by Side Diff: ui/views/win/hwnd_message_handler.cc

Issue 11773007: Add initial support for handling touch events in desktop chrome AURA. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/views/widget/native_widget_win.cc ('k') | ui/views/win/hwnd_message_handler_delegate.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/views/win/hwnd_message_handler.h" 5 #include "ui/views/win/hwnd_message_handler.h"
6 6
7 #include <dwmapi.h> 7 #include <dwmapi.h>
8 #include <shellapi.h> 8 #include <shellapi.h>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 288
289 #endif 289 #endif
290 290
291 // A custom MSAA object id used to determine if a screen reader is actively 291 // A custom MSAA object id used to determine if a screen reader is actively
292 // listening for MSAA events. 292 // listening for MSAA events.
293 const int kCustomObjectID = 1; 293 const int kCustomObjectID = 1;
294 294
295 // The thickness of an auto-hide taskbar in pixels. 295 // The thickness of an auto-hide taskbar in pixels.
296 const int kAutoHideTaskbarThicknessPx = 2; 296 const int kAutoHideTaskbarThicknessPx = 2;
297 297
298 // The touch id to be used for touch events coming in from Windows Aura
299 // Desktop.
300 const int kDesktopChromeAuraTouchId = 9;
301
298 } // namespace 302 } // namespace
299 303
300 // A scoping class that prevents a window from being able to redraw in response 304 // A scoping class that prevents a window from being able to redraw in response
301 // to invalidations that may occur within it for the lifetime of the object. 305 // to invalidations that may occur within it for the lifetime of the object.
302 // 306 //
303 // Why would we want such a thing? Well, it turns out Windows has some 307 // Why would we want such a thing? Well, it turns out Windows has some
304 // "unorthodox" behavior when it comes to painting its non-client areas. 308 // "unorthodox" behavior when it comes to painting its non-client areas.
305 // Occasionally, Windows will paint portions of the default non-client area 309 // Occasionally, Windows will paint portions of the default non-client area
306 // right over the top of the custom frame. This is not simply fixed by handling 310 // right over the top of the custom frame. This is not simply fixed by handling
307 // WM_NCPAINT/WM_PAINT, with some investigation it turns out that this 311 // WM_NCPAINT/WM_PAINT, with some investigation it turns out that this
(...skipping 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 return delegate_->CanActivate() ? MA_ACTIVATE : MA_NOACTIVATEANDEAT; 1460 return delegate_->CanActivate() ? MA_ACTIVATE : MA_NOACTIVATEANDEAT;
1457 if (GetWindowLong(hwnd(), GWL_EXSTYLE) & WS_EX_NOACTIVATE) 1461 if (GetWindowLong(hwnd(), GWL_EXSTYLE) & WS_EX_NOACTIVATE)
1458 return MA_NOACTIVATE; 1462 return MA_NOACTIVATE;
1459 SetMsgHandled(FALSE); 1463 SetMsgHandled(FALSE);
1460 return MA_ACTIVATE; 1464 return MA_ACTIVATE;
1461 } 1465 }
1462 1466
1463 LRESULT HWNDMessageHandler::OnMouseRange(UINT message, 1467 LRESULT HWNDMessageHandler::OnMouseRange(UINT message,
1464 WPARAM w_param, 1468 WPARAM w_param,
1465 LPARAM l_param) { 1469 LPARAM l_param) {
1470 #if defined(USE_AURA)
1471 // We handle touch events on Windows Aura. Ignore synthesized mouse messages
1472 // from Windows.
1473 if (!touch_ids_.empty() || ui::IsMouseEventFromTouch(message))
1474 return 0;
1475 #endif
1466 if (message == WM_RBUTTONUP && is_right_mouse_pressed_on_caption_) { 1476 if (message == WM_RBUTTONUP && is_right_mouse_pressed_on_caption_) {
1467 is_right_mouse_pressed_on_caption_ = false; 1477 is_right_mouse_pressed_on_caption_ = false;
1468 ReleaseCapture(); 1478 ReleaseCapture();
1469 // |point| is in window coordinates, but WM_NCHITTEST and TrackPopupMenu() 1479 // |point| is in window coordinates, but WM_NCHITTEST and TrackPopupMenu()
1470 // expect screen coordinates. 1480 // expect screen coordinates.
1471 CPoint screen_point(l_param); 1481 CPoint screen_point(l_param);
1472 MapWindowPoints(hwnd(), HWND_DESKTOP, &screen_point, 1); 1482 MapWindowPoints(hwnd(), HWND_DESKTOP, &screen_point, 1);
1473 w_param = SendMessage(hwnd(), WM_NCHITTEST, 0, 1483 w_param = SendMessage(hwnd(), WM_NCHITTEST, 0,
1474 MAKELPARAM(screen_point.x, screen_point.y)); 1484 MAKELPARAM(screen_point.x, screen_point.y));
1475 if (w_param == HTCAPTION || w_param == HTSYSMENU) { 1485 if (w_param == HTCAPTION || w_param == HTSYSMENU) {
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
1967 } 1977 }
1968 1978
1969 LRESULT HWNDMessageHandler::OnTouchEvent(UINT message, 1979 LRESULT HWNDMessageHandler::OnTouchEvent(UINT message,
1970 WPARAM w_param, 1980 WPARAM w_param,
1971 LPARAM l_param) { 1981 LPARAM l_param) {
1972 int num_points = LOWORD(w_param); 1982 int num_points = LOWORD(w_param);
1973 scoped_array<TOUCHINPUT> input(new TOUCHINPUT[num_points]); 1983 scoped_array<TOUCHINPUT> input(new TOUCHINPUT[num_points]);
1974 if (GetTouchInputInfo(reinterpret_cast<HTOUCHINPUT>(l_param), 1984 if (GetTouchInputInfo(reinterpret_cast<HTOUCHINPUT>(l_param),
1975 num_points, input.get(), sizeof(TOUCHINPUT))) { 1985 num_points, input.get(), sizeof(TOUCHINPUT))) {
1976 for (int i = 0; i < num_points; ++i) { 1986 for (int i = 0; i < num_points; ++i) {
1977 if (input[i].dwFlags & TOUCHEVENTF_DOWN) 1987 ui::EventType touch_event_type = ui::ET_UNKNOWN;
1988
1989 if (input[i].dwFlags & TOUCHEVENTF_DOWN) {
1978 touch_ids_.insert(input[i].dwID); 1990 touch_ids_.insert(input[i].dwID);
1979 if (input[i].dwFlags & TOUCHEVENTF_UP) 1991 touch_event_type = ui::ET_TOUCH_PRESSED;
1992 } else if (input[i].dwFlags & TOUCHEVENTF_UP) {
1980 touch_ids_.erase(input[i].dwID); 1993 touch_ids_.erase(input[i].dwID);
1994 touch_event_type = ui::ET_TOUCH_RELEASED;
1995 } else if (input[i].dwFlags & TOUCHEVENTF_MOVE) {
1996 touch_event_type = ui::ET_TOUCH_MOVED;
1997 }
1998 // Handle touch events only on Aura for now.
1999 #if defined(USE_AURA)
2000 if (touch_event_type != ui::ET_UNKNOWN) {
2001 POINT point;
2002 point.x = TOUCH_COORD_TO_PIXEL(input[i].x);
2003 point.y = TOUCH_COORD_TO_PIXEL(input[i].y);
2004
2005 ScreenToClient(hwnd(), &point);
2006
2007 ui::TouchEvent event(
2008 touch_event_type,
2009 gfx::Point(point.x, point.y),
2010 kDesktopChromeAuraTouchId,
2011 base::TimeDelta::FromMilliseconds(input[i].dwTime));
2012 delegate_->HandleTouchEvent(event);
2013 }
2014 #endif
1981 } 2015 }
1982 } 2016 }
1983 CloseTouchInputHandle(reinterpret_cast<HTOUCHINPUT>(l_param)); 2017 CloseTouchInputHandle(reinterpret_cast<HTOUCHINPUT>(l_param));
1984 SetMsgHandled(FALSE); 2018 SetMsgHandled(FALSE);
1985 return 0; 2019 return 0;
1986 } 2020 }
1987 2021
1988 void HWNDMessageHandler::OnWindowPosChanging(WINDOWPOS* window_pos) { 2022 void HWNDMessageHandler::OnWindowPosChanging(WINDOWPOS* window_pos) {
1989 if (ignore_window_pos_changes_) { 2023 if (ignore_window_pos_changes_) {
1990 // If somebody's trying to toggle our visibility, change the nonclient area, 2024 // If somebody's trying to toggle our visibility, change the nonclient area,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
2070 DwmExtendFrameIntoClientArea(hwnd(), &m); 2104 DwmExtendFrameIntoClientArea(hwnd(), &m);
2071 } 2105 }
2072 if (window_pos->flags & SWP_SHOWWINDOW) 2106 if (window_pos->flags & SWP_SHOWWINDOW)
2073 delegate_->HandleVisibilityChanged(true); 2107 delegate_->HandleVisibilityChanged(true);
2074 else if (window_pos->flags & SWP_HIDEWINDOW) 2108 else if (window_pos->flags & SWP_HIDEWINDOW)
2075 delegate_->HandleVisibilityChanged(false); 2109 delegate_->HandleVisibilityChanged(false);
2076 SetMsgHandled(FALSE); 2110 SetMsgHandled(FALSE);
2077 } 2111 }
2078 2112
2079 } // namespace views 2113 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/widget/native_widget_win.cc ('k') | ui/views/win/hwnd_message_handler_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698