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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_win.cc

Issue 63253002: Rename WebKit namespace to blink (part 3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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
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 "content/browser/renderer_host/render_widget_host_view_win.h" 5 #include "content/browser/renderer_host/render_widget_host_view_win.h"
6 6
7 #include <InputScope.h> 7 #include <InputScope.h>
8 #include <wtsapi32.h> 8 #include <wtsapi32.h>
9 #pragma comment(lib, "wtsapi32.lib") 9 #pragma comment(lib, "wtsapi32.lib")
10 10
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 #include "ui/gfx/sequential_id_generator.h" 76 #include "ui/gfx/sequential_id_generator.h"
77 #include "ui/gfx/text_elider.h" 77 #include "ui/gfx/text_elider.h"
78 #include "ui/gfx/win/dpi.h" 78 #include "ui/gfx/win/dpi.h"
79 #include "ui/gfx/win/hwnd_util.h" 79 #include "ui/gfx/win/hwnd_util.h"
80 #include "webkit/common/cursors/webcursor.h" 80 #include "webkit/common/cursors/webcursor.h"
81 #include "win8/util/win8_util.h" 81 #include "win8/util/win8_util.h"
82 82
83 using base::TimeDelta; 83 using base::TimeDelta;
84 using base::TimeTicks; 84 using base::TimeTicks;
85 using ui::ViewProp; 85 using ui::ViewProp;
86 using WebKit::WebInputEvent; 86 using blink::WebInputEvent;
87 using WebKit::WebMouseEvent; 87 using blink::WebMouseEvent;
88 using WebKit::WebTextDirection; 88 using blink::WebTextDirection;
89 89
90 namespace content { 90 namespace content {
91 namespace { 91 namespace {
92 92
93 // Tooltips will wrap after this width. Yes, wrap. Imagine that! 93 // Tooltips will wrap after this width. Yes, wrap. Imagine that!
94 const int kTooltipMaxWidthPixels = 300; 94 const int kTooltipMaxWidthPixels = 300;
95 95
96 // Maximum number of characters we allow in a tooltip. 96 // Maximum number of characters we allow in a tooltip.
97 const int kMaxTooltipLength = 1024; 97 const int kMaxTooltipLength = 1024;
98 98
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 } else { 195 } else {
196 delta->x = gi.ptsLocation.x - last_pt.x; 196 delta->x = gi.ptsLocation.x - last_pt.x;
197 delta->y = gi.ptsLocation.y - last_pt.y; 197 delta->y = gi.ptsLocation.y - last_pt.y;
198 } 198 }
199 last_pt.x = gi.ptsLocation.x; 199 last_pt.x = gi.ptsLocation.x;
200 last_pt.y = gi.ptsLocation.y; 200 last_pt.y = gi.ptsLocation.y;
201 *start = start_pt; 201 *start = start_pt;
202 return true; 202 return true;
203 } 203 }
204 204
205 WebKit::WebMouseWheelEvent MakeFakeScrollWheelEvent(HWND hwnd, 205 blink::WebMouseWheelEvent MakeFakeScrollWheelEvent(HWND hwnd,
206 POINT start, 206 POINT start,
207 POINT delta) { 207 POINT delta) {
208 WebKit::WebMouseWheelEvent result; 208 blink::WebMouseWheelEvent result;
209 result.type = WebInputEvent::MouseWheel; 209 result.type = WebInputEvent::MouseWheel;
210 result.timeStampSeconds = ::GetMessageTime() / 1000.0; 210 result.timeStampSeconds = ::GetMessageTime() / 1000.0;
211 result.button = WebMouseEvent::ButtonNone; 211 result.button = WebMouseEvent::ButtonNone;
212 result.globalX = start.x; 212 result.globalX = start.x;
213 result.globalY = start.y; 213 result.globalY = start.y;
214 // Map to window coordinates. 214 // Map to window coordinates.
215 POINT client_point = { result.globalX, result.globalY }; 215 POINT client_point = { result.globalX, result.globalY };
216 MapWindowPoints(0, hwnd, &client_point, 1); 216 MapWindowPoints(0, hwnd, &client_point, 1);
217 result.x = client_point.x; 217 result.x = client_point.x;
218 result.y = client_point.y; 218 result.y = client_point.y;
(...skipping 10 matching lines...) Expand all
229 static const int kTouchMask = 0x7; 229 static const int kTouchMask = 0x7;
230 230
231 inline int GetTouchType(const TOUCHINPUT& point) { 231 inline int GetTouchType(const TOUCHINPUT& point) {
232 return point.dwFlags & kTouchMask; 232 return point.dwFlags & kTouchMask;
233 } 233 }
234 234
235 inline void SetTouchType(TOUCHINPUT* point, int type) { 235 inline void SetTouchType(TOUCHINPUT* point, int type) {
236 point->dwFlags = (point->dwFlags & kTouchMask) | type; 236 point->dwFlags = (point->dwFlags & kTouchMask) | type;
237 } 237 }
238 238
239 ui::EventType ConvertToUIEvent(WebKit::WebTouchPoint::State t) { 239 ui::EventType ConvertToUIEvent(blink::WebTouchPoint::State t) {
240 switch (t) { 240 switch (t) {
241 case WebKit::WebTouchPoint::StatePressed: 241 case blink::WebTouchPoint::StatePressed:
242 return ui::ET_TOUCH_PRESSED; 242 return ui::ET_TOUCH_PRESSED;
243 case WebKit::WebTouchPoint::StateMoved: 243 case blink::WebTouchPoint::StateMoved:
244 return ui::ET_TOUCH_MOVED; 244 return ui::ET_TOUCH_MOVED;
245 case WebKit::WebTouchPoint::StateStationary: 245 case blink::WebTouchPoint::StateStationary:
246 return ui::ET_TOUCH_STATIONARY; 246 return ui::ET_TOUCH_STATIONARY;
247 case WebKit::WebTouchPoint::StateReleased: 247 case blink::WebTouchPoint::StateReleased:
248 return ui::ET_TOUCH_RELEASED; 248 return ui::ET_TOUCH_RELEASED;
249 case WebKit::WebTouchPoint::StateCancelled: 249 case blink::WebTouchPoint::StateCancelled:
250 return ui::ET_TOUCH_CANCELLED; 250 return ui::ET_TOUCH_CANCELLED;
251 default: 251 default:
252 DCHECK(false) << "Unexpected ui type. " << t; 252 DCHECK(false) << "Unexpected ui type. " << t;
253 return ui::ET_UNKNOWN; 253 return ui::ET_UNKNOWN;
254 } 254 }
255 } 255 }
256 256
257 // Creates a WebGestureEvent corresponding to the given |gesture| 257 // Creates a WebGestureEvent corresponding to the given |gesture|
258 WebKit::WebGestureEvent CreateWebGestureEvent(HWND hwnd, 258 blink::WebGestureEvent CreateWebGestureEvent(HWND hwnd,
259 const ui::GestureEvent& gesture) { 259 const ui::GestureEvent& gesture) {
260 WebKit::WebGestureEvent gesture_event = 260 blink::WebGestureEvent gesture_event =
261 MakeWebGestureEventFromUIEvent(gesture); 261 MakeWebGestureEventFromUIEvent(gesture);
262 262
263 POINT client_point = gesture.location().ToPOINT(); 263 POINT client_point = gesture.location().ToPOINT();
264 POINT screen_point = gesture.location().ToPOINT(); 264 POINT screen_point = gesture.location().ToPOINT();
265 MapWindowPoints(hwnd, HWND_DESKTOP, &screen_point, 1); 265 MapWindowPoints(hwnd, HWND_DESKTOP, &screen_point, 1);
266 266
267 gesture_event.x = client_point.x; 267 gesture_event.x = client_point.x;
268 gesture_event.y = client_point.y; 268 gesture_event.y = client_point.y;
269 gesture_event.globalX = screen_point.x; 269 gesture_event.globalX = screen_point.x;
270 gesture_event.globalY = screen_point.y; 270 gesture_event.globalY = screen_point.y;
271 271
272 return gesture_event; 272 return gesture_event;
273 } 273 }
274 274
275 WebKit::WebGestureEvent CreateFlingCancelEvent(double time_stamp) { 275 blink::WebGestureEvent CreateFlingCancelEvent(double time_stamp) {
276 WebKit::WebGestureEvent gesture_event; 276 blink::WebGestureEvent gesture_event;
277 gesture_event.timeStampSeconds = time_stamp; 277 gesture_event.timeStampSeconds = time_stamp;
278 gesture_event.type = WebKit::WebGestureEvent::GestureFlingCancel; 278 gesture_event.type = blink::WebGestureEvent::GestureFlingCancel;
279 gesture_event.sourceDevice = WebKit::WebGestureEvent::Touchscreen; 279 gesture_event.sourceDevice = blink::WebGestureEvent::Touchscreen;
280 return gesture_event; 280 return gesture_event;
281 } 281 }
282 282
283 class TouchEventFromWebTouchPoint : public ui::TouchEvent { 283 class TouchEventFromWebTouchPoint : public ui::TouchEvent {
284 public: 284 public:
285 TouchEventFromWebTouchPoint(const WebKit::WebTouchPoint& touch_point, 285 TouchEventFromWebTouchPoint(const blink::WebTouchPoint& touch_point,
286 base::TimeDelta& timestamp) 286 base::TimeDelta& timestamp)
287 : ui::TouchEvent(ConvertToUIEvent(touch_point.state), 287 : ui::TouchEvent(ConvertToUIEvent(touch_point.state),
288 touch_point.position, 288 touch_point.position,
289 touch_point.id, 289 touch_point.id,
290 timestamp) { 290 timestamp) {
291 set_radius(touch_point.radiusX, touch_point.radiusY); 291 set_radius(touch_point.radiusX, touch_point.radiusY);
292 set_rotation_angle(touch_point.rotationAngle); 292 set_rotation_angle(touch_point.rotationAngle);
293 set_force(touch_point.force); 293 set_force(touch_point.force);
294 set_flags(ui::GetModifiersFromKeyState()); 294 set_flags(ui::GetModifiersFromKeyState());
295 } 295 }
296 296
297 virtual ~TouchEventFromWebTouchPoint() {} 297 virtual ~TouchEventFromWebTouchPoint() {}
298 298
299 private: 299 private:
300 DISALLOW_COPY_AND_ASSIGN(TouchEventFromWebTouchPoint); 300 DISALLOW_COPY_AND_ASSIGN(TouchEventFromWebTouchPoint);
301 }; 301 };
302 302
303 bool ShouldSendPinchGesture() { 303 bool ShouldSendPinchGesture() {
304 static bool pinch_allowed = 304 static bool pinch_allowed =
305 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnablePinch); 305 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnablePinch);
306 return pinch_allowed; 306 return pinch_allowed;
307 } 307 }
308 308
309 void GetScreenInfoForWindow(gfx::NativeViewId id, 309 void GetScreenInfoForWindow(gfx::NativeViewId id,
310 WebKit::WebScreenInfo* results) { 310 blink::WebScreenInfo* results) {
311 HWND window = gfx::NativeViewFromId(id); 311 HWND window = gfx::NativeViewFromId(id);
312 312
313 HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY); 313 HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY);
314 314
315 MONITORINFOEX monitor_info; 315 MONITORINFOEX monitor_info;
316 monitor_info.cbSize = sizeof(MONITORINFOEX); 316 monitor_info.cbSize = sizeof(MONITORINFOEX);
317 if (!base::win::GetMonitorInfoWrapper(monitor, &monitor_info)) 317 if (!base::win::GetMonitorInfoWrapper(monitor, &monitor_info))
318 return; 318 return;
319 319
320 DEVMODE dev_mode; 320 DEVMODE dev_mode;
321 dev_mode.dmSize = sizeof(dev_mode); 321 dev_mode.dmSize = sizeof(dev_mode);
322 dev_mode.dmDriverExtra = 0; 322 dev_mode.dmDriverExtra = 0;
323 EnumDisplaySettings(monitor_info.szDevice, ENUM_CURRENT_SETTINGS, &dev_mode); 323 EnumDisplaySettings(monitor_info.szDevice, ENUM_CURRENT_SETTINGS, &dev_mode);
324 324
325 WebKit::WebScreenInfo screen_info; 325 blink::WebScreenInfo screen_info;
326 screen_info.depth = dev_mode.dmBitsPerPel; 326 screen_info.depth = dev_mode.dmBitsPerPel;
327 screen_info.depthPerComponent = 8; 327 screen_info.depthPerComponent = 8;
328 screen_info.deviceScaleFactor = gfx::win::GetDeviceScaleFactor(); 328 screen_info.deviceScaleFactor = gfx::win::GetDeviceScaleFactor();
329 screen_info.isMonochrome = dev_mode.dmColor == DMCOLOR_MONOCHROME; 329 screen_info.isMonochrome = dev_mode.dmColor == DMCOLOR_MONOCHROME;
330 screen_info.rect = gfx::Rect(monitor_info.rcMonitor); 330 screen_info.rect = gfx::Rect(monitor_info.rcMonitor);
331 screen_info.availableRect = gfx::Rect(monitor_info.rcWork); 331 screen_info.availableRect = gfx::Rect(monitor_info.rcWork);
332 332
333 *results = screen_info; 333 *results = screen_info;
334 } 334 }
335 335
336 } // namespace 336 } // namespace
337 337
338 const wchar_t kRenderWidgetHostHWNDClass[] = L"Chrome_RenderWidgetHostHWND"; 338 const wchar_t kRenderWidgetHostHWNDClass[] = L"Chrome_RenderWidgetHostHWND";
339 339
340 // Wrapper for maintaining touchstate associated with a WebTouchEvent. 340 // Wrapper for maintaining touchstate associated with a WebTouchEvent.
341 class WebTouchState { 341 class WebTouchState {
342 public: 342 public:
343 explicit WebTouchState(const RenderWidgetHostViewWin* window); 343 explicit WebTouchState(const RenderWidgetHostViewWin* window);
344 344
345 // Updates the current touchpoint state with the supplied touches. 345 // Updates the current touchpoint state with the supplied touches.
346 // Touches will be consumed only if they are of the same type (e.g. down, 346 // Touches will be consumed only if they are of the same type (e.g. down,
347 // up, move). Returns the number of consumed touches. 347 // up, move). Returns the number of consumed touches.
348 size_t UpdateTouchPoints(TOUCHINPUT* points, size_t count); 348 size_t UpdateTouchPoints(TOUCHINPUT* points, size_t count);
349 349
350 // Marks all active touchpoints as released. 350 // Marks all active touchpoints as released.
351 bool ReleaseTouchPoints(); 351 bool ReleaseTouchPoints();
352 352
353 // The contained WebTouchEvent. 353 // The contained WebTouchEvent.
354 const WebKit::WebTouchEvent& touch_event() { return touch_event_; } 354 const blink::WebTouchEvent& touch_event() { return touch_event_; }
355 355
356 // Returns if any touches are modified in the event. 356 // Returns if any touches are modified in the event.
357 bool is_changed() { return touch_event_.changedTouchesLength != 0; } 357 bool is_changed() { return touch_event_.changedTouchesLength != 0; }
358 358
359 private: 359 private:
360 // Adds a touch point or returns NULL if there's not enough space. 360 // Adds a touch point or returns NULL if there's not enough space.
361 WebKit::WebTouchPoint* AddTouchPoint(TOUCHINPUT* touch_input); 361 blink::WebTouchPoint* AddTouchPoint(TOUCHINPUT* touch_input);
362 362
363 // Copy details from a TOUCHINPUT to an existing WebTouchPoint, returning 363 // Copy details from a TOUCHINPUT to an existing WebTouchPoint, returning
364 // true if the resulting point is a stationary move. 364 // true if the resulting point is a stationary move.
365 bool UpdateTouchPoint(WebKit::WebTouchPoint* touch_point, 365 bool UpdateTouchPoint(blink::WebTouchPoint* touch_point,
366 TOUCHINPUT* touch_input); 366 TOUCHINPUT* touch_input);
367 367
368 // Find (or create) a mapping for _os_touch_id_. 368 // Find (or create) a mapping for _os_touch_id_.
369 unsigned int GetMappedTouch(unsigned int os_touch_id); 369 unsigned int GetMappedTouch(unsigned int os_touch_id);
370 370
371 // Remove any mappings that are no longer in use. 371 // Remove any mappings that are no longer in use.
372 void RemoveExpiredMappings(); 372 void RemoveExpiredMappings();
373 373
374 WebKit::WebTouchEvent touch_event_; 374 blink::WebTouchEvent touch_event_;
375 const RenderWidgetHostViewWin* const window_; 375 const RenderWidgetHostViewWin* const window_;
376 376
377 ui::SequentialIDGenerator id_generator_; 377 ui::SequentialIDGenerator id_generator_;
378 378
379 DISALLOW_COPY_AND_ASSIGN(WebTouchState); 379 DISALLOW_COPY_AND_ASSIGN(WebTouchState);
380 }; 380 };
381 381
382 typedef void (*MetroSetFrameWindow)(HWND window); 382 typedef void (*MetroSetFrameWindow)(HWND window);
383 typedef void (*MetroCloseFrameWindow)(HWND window); 383 typedef void (*MetroCloseFrameWindow)(HWND window);
384 384
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 FROM_HERE, 588 FROM_HERE,
589 base::Bind(base::IgnoreResult(&::DestroyWindow), 589 base::Bind(base::IgnoreResult(&::DestroyWindow),
590 compositor_host_window_), 590 compositor_host_window_),
591 base::TimeDelta::FromMilliseconds(kDestroyCompositorHostWindowDelay)); 591 base::TimeDelta::FromMilliseconds(kDestroyCompositorHostWindowDelay));
592 592
593 compositor_host_window_ = NULL; 593 compositor_host_window_ = NULL;
594 } 594 }
595 595
596 bool RenderWidgetHostViewWin::IsActivatable() const { 596 bool RenderWidgetHostViewWin::IsActivatable() const {
597 // Popups should not be activated. 597 // Popups should not be activated.
598 return popup_type_ == WebKit::WebPopupTypeNone; 598 return popup_type_ == blink::WebPopupTypeNone;
599 } 599 }
600 600
601 void RenderWidgetHostViewWin::Focus() { 601 void RenderWidgetHostViewWin::Focus() {
602 if (IsWindow()) 602 if (IsWindow())
603 SetFocus(); 603 SetFocus();
604 } 604 }
605 605
606 void RenderWidgetHostViewWin::Blur() { 606 void RenderWidgetHostViewWin::Blur() {
607 NOTREACHED(); 607 NOTREACHED();
608 } 608 }
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 ui::GestureEvent* event) { 955 ui::GestureEvent* event) {
956 ForwardGestureEventToRenderer(event); 956 ForwardGestureEventToRenderer(event);
957 } 957 }
958 958
959 void RenderWidgetHostViewWin::DispatchCancelTouchEvent( 959 void RenderWidgetHostViewWin::DispatchCancelTouchEvent(
960 ui::TouchEvent* event) { 960 ui::TouchEvent* event) {
961 if (!render_widget_host_ || !touch_events_enabled_ || 961 if (!render_widget_host_ || !touch_events_enabled_ ||
962 !render_widget_host_->ShouldForwardTouchEvent()) { 962 !render_widget_host_->ShouldForwardTouchEvent()) {
963 return; 963 return;
964 } 964 }
965 DCHECK(event->type() == WebKit::WebInputEvent::TouchCancel); 965 DCHECK(event->type() == blink::WebInputEvent::TouchCancel);
966 WebKit::WebTouchEvent cancel_event; 966 blink::WebTouchEvent cancel_event;
967 cancel_event.type = WebKit::WebInputEvent::TouchCancel; 967 cancel_event.type = blink::WebInputEvent::TouchCancel;
968 cancel_event.timeStampSeconds = event->time_stamp().InSecondsF(); 968 cancel_event.timeStampSeconds = event->time_stamp().InSecondsF();
969 render_widget_host_->ForwardTouchEventWithLatencyInfo( 969 render_widget_host_->ForwardTouchEventWithLatencyInfo(
970 cancel_event, *event->latency()); 970 cancel_event, *event->latency());
971 } 971 }
972 972
973 void RenderWidgetHostViewWin::SetHasHorizontalScrollbar( 973 void RenderWidgetHostViewWin::SetHasHorizontalScrollbar(
974 bool has_horizontal_scrollbar) { 974 bool has_horizontal_scrollbar) {
975 } 975 }
976 976
977 void RenderWidgetHostViewWin::SetScrollOffsetPinning( 977 void RenderWidgetHostViewWin::SetScrollOffsetPinning(
978 bool is_pinned_to_left, bool is_pinned_to_right) { 978 bool is_pinned_to_left, bool is_pinned_to_right) {
979 } 979 }
980 980
981 void RenderWidgetHostViewWin::SetCompositionText( 981 void RenderWidgetHostViewWin::SetCompositionText(
982 const ui::CompositionText& composition) { 982 const ui::CompositionText& composition) {
983 if (!base::win::IsTSFAwareRequired()) { 983 if (!base::win::IsTSFAwareRequired()) {
984 NOTREACHED(); 984 NOTREACHED();
985 return; 985 return;
986 } 986 }
987 if (!render_widget_host_) 987 if (!render_widget_host_)
988 return; 988 return;
989 // ui::CompositionUnderline should be identical to 989 // ui::CompositionUnderline should be identical to
990 // WebKit::WebCompositionUnderline, so that we can do reinterpret_cast safely. 990 // blink::WebCompositionUnderline, so that we can do reinterpret_cast safely.
991 COMPILE_ASSERT(sizeof(ui::CompositionUnderline) == 991 COMPILE_ASSERT(sizeof(ui::CompositionUnderline) ==
992 sizeof(WebKit::WebCompositionUnderline), 992 sizeof(blink::WebCompositionUnderline),
993 ui_CompositionUnderline__WebKit_WebCompositionUnderline_diff); 993 ui_CompositionUnderline__WebKit_WebCompositionUnderline_diff);
994 const std::vector<WebKit::WebCompositionUnderline>& underlines = 994 const std::vector<blink::WebCompositionUnderline>& underlines =
995 reinterpret_cast<const std::vector<WebKit::WebCompositionUnderline>&>( 995 reinterpret_cast<const std::vector<blink::WebCompositionUnderline>&>(
996 composition.underlines); 996 composition.underlines);
997 render_widget_host_->ImeSetComposition(composition.text, underlines, 997 render_widget_host_->ImeSetComposition(composition.text, underlines,
998 composition.selection.end(), 998 composition.selection.end(),
999 composition.selection.end()); 999 composition.selection.end());
1000 } 1000 }
1001 1001
1002 void RenderWidgetHostViewWin::ConfirmCompositionText() { 1002 void RenderWidgetHostViewWin::ConfirmCompositionText() {
1003 if (!base::win::IsTSFAwareRequired()) { 1003 if (!base::win::IsTSFAwareRequired()) {
1004 NOTREACHED(); 1004 NOTREACHED();
1005 return; 1005 return;
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
1657 LRESULT RenderWidgetHostViewWin::OnImeComposition( 1657 LRESULT RenderWidgetHostViewWin::OnImeComposition(
1658 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) { 1658 UINT message, WPARAM wparam, LPARAM lparam, BOOL& handled) {
1659 TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeComposition"); 1659 TRACE_EVENT0("browser", "RenderWidgetHostViewWin::OnImeComposition");
1660 if (!render_widget_host_) 1660 if (!render_widget_host_)
1661 return 0; 1661 return 0;
1662 1662
1663 // At first, update the position of the IME window. 1663 // At first, update the position of the IME window.
1664 imm32_manager_->UpdateImeWindow(m_hWnd); 1664 imm32_manager_->UpdateImeWindow(m_hWnd);
1665 1665
1666 // ui::CompositionUnderline should be identical to 1666 // ui::CompositionUnderline should be identical to
1667 // WebKit::WebCompositionUnderline, so that we can do reinterpret_cast safely. 1667 // blink::WebCompositionUnderline, so that we can do reinterpret_cast safely.
1668 COMPILE_ASSERT(sizeof(ui::CompositionUnderline) == 1668 COMPILE_ASSERT(sizeof(ui::CompositionUnderline) ==
1669 sizeof(WebKit::WebCompositionUnderline), 1669 sizeof(blink::WebCompositionUnderline),
1670 ui_CompositionUnderline__WebKit_WebCompositionUnderline_diff); 1670 ui_CompositionUnderline__WebKit_WebCompositionUnderline_diff);
1671 1671
1672 // Retrieve the result string and its attributes of the ongoing composition 1672 // Retrieve the result string and its attributes of the ongoing composition
1673 // and send it to a renderer process. 1673 // and send it to a renderer process.
1674 ui::CompositionText composition; 1674 ui::CompositionText composition;
1675 if (imm32_manager_->GetResult(m_hWnd, lparam, &composition.text)) { 1675 if (imm32_manager_->GetResult(m_hWnd, lparam, &composition.text)) {
1676 render_widget_host_->ImeConfirmComposition( 1676 render_widget_host_->ImeConfirmComposition(
1677 composition.text, gfx::Range::InvalidRange(), false); 1677 composition.text, gfx::Range::InvalidRange(), false);
1678 imm32_manager_->ResetComposition(m_hWnd); 1678 imm32_manager_->ResetComposition(m_hWnd);
1679 // Fall though and try reading the composition string. 1679 // Fall though and try reading the composition string.
1680 // Japanese IMEs send a message containing both GCS_RESULTSTR and 1680 // Japanese IMEs send a message containing both GCS_RESULTSTR and
1681 // GCS_COMPSTR, which means an ongoing composition has been finished 1681 // GCS_COMPSTR, which means an ongoing composition has been finished
1682 // by the start of another composition. 1682 // by the start of another composition.
1683 } 1683 }
1684 // Retrieve the composition string and its attributes of the ongoing 1684 // Retrieve the composition string and its attributes of the ongoing
1685 // composition and send it to a renderer process. 1685 // composition and send it to a renderer process.
1686 if (imm32_manager_->GetComposition(m_hWnd, lparam, &composition)) { 1686 if (imm32_manager_->GetComposition(m_hWnd, lparam, &composition)) {
1687 // TODO(suzhe): due to a bug of webkit, we can't use selection range with 1687 // TODO(suzhe): due to a bug of webkit, we can't use selection range with
1688 // composition string. See: https://bugs.webkit.org/show_bug.cgi?id=37788 1688 // composition string. See: https://bugs.webkit.org/show_bug.cgi?id=37788
1689 composition.selection = gfx::Range(composition.selection.end()); 1689 composition.selection = gfx::Range(composition.selection.end());
1690 1690
1691 // TODO(suzhe): convert both renderer_host and renderer to use 1691 // TODO(suzhe): convert both renderer_host and renderer to use
1692 // ui::CompositionText. 1692 // ui::CompositionText.
1693 const std::vector<WebKit::WebCompositionUnderline>& underlines = 1693 const std::vector<blink::WebCompositionUnderline>& underlines =
1694 reinterpret_cast<const std::vector<WebKit::WebCompositionUnderline>&>( 1694 reinterpret_cast<const std::vector<blink::WebCompositionUnderline>&>(
1695 composition.underlines); 1695 composition.underlines);
1696 render_widget_host_->ImeSetComposition( 1696 render_widget_host_->ImeSetComposition(
1697 composition.text, underlines, 1697 composition.text, underlines,
1698 composition.selection.start(), composition.selection.end()); 1698 composition.selection.start(), composition.selection.end());
1699 } 1699 }
1700 // We have to prevent WTL from calling ::DefWindowProc() because we do not 1700 // We have to prevent WTL from calling ::DefWindowProc() because we do not
1701 // want for the IMM (Input Method Manager) to send WM_IME_CHAR messages. 1701 // want for the IMM (Input Method Manager) to send WM_IME_CHAR messages.
1702 handled = TRUE; 1702 handled = TRUE;
1703 if (!can_compose_inline_) { 1703 if (!can_compose_inline_) {
1704 // When the focus is on an element that does not draw composition by itself 1704 // When the focus is on an element that does not draw composition by itself
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
1921 // Bug 9718: http://crbug.com/9718 To investigate IE and notepad, this 1921 // Bug 9718: http://crbug.com/9718 To investigate IE and notepad, this
1922 // shortcut is enabled only on a PC having RTL keyboard layouts installed. 1922 // shortcut is enabled only on a PC having RTL keyboard layouts installed.
1923 // We should emulate them. 1923 // We should emulate them.
1924 if (ui::IMM32Manager::IsRTLKeyboardLayoutInstalled()) { 1924 if (ui::IMM32Manager::IsRTLKeyboardLayoutInstalled()) {
1925 if (message == WM_KEYDOWN) { 1925 if (message == WM_KEYDOWN) {
1926 if (wparam == VK_SHIFT) { 1926 if (wparam == VK_SHIFT) {
1927 base::i18n::TextDirection dir; 1927 base::i18n::TextDirection dir;
1928 if (ui::IMM32Manager::IsCtrlShiftPressed(&dir)) { 1928 if (ui::IMM32Manager::IsCtrlShiftPressed(&dir)) {
1929 render_widget_host_->UpdateTextDirection( 1929 render_widget_host_->UpdateTextDirection(
1930 dir == base::i18n::RIGHT_TO_LEFT ? 1930 dir == base::i18n::RIGHT_TO_LEFT ?
1931 WebKit::WebTextDirectionRightToLeft : 1931 blink::WebTextDirectionRightToLeft :
1932 WebKit::WebTextDirectionLeftToRight); 1932 blink::WebTextDirectionLeftToRight);
1933 } 1933 }
1934 } else if (wparam != VK_CONTROL) { 1934 } else if (wparam != VK_CONTROL) {
1935 // Bug 9762: http://crbug.com/9762 A user pressed a key except shift 1935 // Bug 9762: http://crbug.com/9762 A user pressed a key except shift
1936 // and control keys. 1936 // and control keys.
1937 // When a user presses a key while he/she holds control and shift keys, 1937 // When a user presses a key while he/she holds control and shift keys,
1938 // we cancel sending an IPC message in NotifyTextDirection() below and 1938 // we cancel sending an IPC message in NotifyTextDirection() below and
1939 // ignore succeeding UpdateTextDirection() calls while we call 1939 // ignore succeeding UpdateTextDirection() calls while we call
1940 // NotifyTextDirection(). 1940 // NotifyTextDirection().
1941 // To cancel it, this call set a flag that prevents sending an IPC 1941 // To cancel it, this call set a flag that prevents sending an IPC
1942 // message in NotifyTextDirection() only if we are going to send it. 1942 // message in NotifyTextDirection() only if we are going to send it.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1999 // dismiss them. 1999 // dismiss them.
2000 if (m_hWnd != GetForegroundWindow()) { 2000 if (m_hWnd != GetForegroundWindow()) {
2001 HWND toplevel_hwnd = ::GetAncestor(m_hWnd, GA_ROOT); 2001 HWND toplevel_hwnd = ::GetAncestor(m_hWnd, GA_ROOT);
2002 EnumThreadWindows( 2002 EnumThreadWindows(
2003 GetCurrentThreadId(), 2003 GetCurrentThreadId(),
2004 DismissOwnedPopups, 2004 DismissOwnedPopups,
2005 reinterpret_cast<LPARAM>(toplevel_hwnd)); 2005 reinterpret_cast<LPARAM>(toplevel_hwnd));
2006 } 2006 }
2007 2007
2008 if (render_widget_host_) { 2008 if (render_widget_host_) {
2009 WebKit::WebMouseWheelEvent wheel_event = 2009 blink::WebMouseWheelEvent wheel_event =
2010 WebMouseWheelEventBuilder::Build(m_hWnd, message, wparam, lparam); 2010 WebMouseWheelEventBuilder::Build(m_hWnd, message, wparam, lparam);
2011 float scale = gfx::win::GetDeviceScaleFactor(); 2011 float scale = gfx::win::GetDeviceScaleFactor();
2012 wheel_event.x /= scale; 2012 wheel_event.x /= scale;
2013 wheel_event.y /= scale; 2013 wheel_event.y /= scale;
2014 wheel_event.deltaX /= scale; 2014 wheel_event.deltaX /= scale;
2015 wheel_event.deltaY /= scale; 2015 wheel_event.deltaY /= scale;
2016 2016
2017 render_widget_host_->ForwardWheelEvent(wheel_event); 2017 render_widget_host_->ForwardWheelEvent(wheel_event);
2018 } 2018 }
2019 handled = TRUE; 2019 handled = TRUE;
2020 return 0; 2020 return 0;
2021 } 2021 }
2022 2022
2023 WebTouchState::WebTouchState(const RenderWidgetHostViewWin* window) 2023 WebTouchState::WebTouchState(const RenderWidgetHostViewWin* window)
2024 : window_(window), 2024 : window_(window),
2025 id_generator_(0) { 2025 id_generator_(0) {
2026 } 2026 }
2027 2027
2028 size_t WebTouchState::UpdateTouchPoints( 2028 size_t WebTouchState::UpdateTouchPoints(
2029 TOUCHINPUT* points, size_t count) { 2029 TOUCHINPUT* points, size_t count) {
2030 // First we reset all touch event state. This involves removing any released 2030 // First we reset all touch event state. This involves removing any released
2031 // touchpoints and marking the rest as stationary. After that we go through 2031 // touchpoints and marking the rest as stationary. After that we go through
2032 // and alter/add any touchpoints (from the touch input buffer) that we can 2032 // and alter/add any touchpoints (from the touch input buffer) that we can
2033 // coalesce into a single message. The return value is the number of consumed 2033 // coalesce into a single message. The return value is the number of consumed
2034 // input message. 2034 // input message.
2035 WebKit::WebTouchPoint* point = touch_event_.touches; 2035 blink::WebTouchPoint* point = touch_event_.touches;
2036 WebKit::WebTouchPoint* end = point + touch_event_.touchesLength; 2036 blink::WebTouchPoint* end = point + touch_event_.touchesLength;
2037 while (point < end) { 2037 while (point < end) {
2038 if (point->state == WebKit::WebTouchPoint::StateReleased) { 2038 if (point->state == blink::WebTouchPoint::StateReleased) {
2039 *point = *(--end); 2039 *point = *(--end);
2040 --touch_event_.touchesLength; 2040 --touch_event_.touchesLength;
2041 } else { 2041 } else {
2042 point->state = WebKit::WebTouchPoint::StateStationary; 2042 point->state = blink::WebTouchPoint::StateStationary;
2043 point++; 2043 point++;
2044 } 2044 }
2045 } 2045 }
2046 touch_event_.changedTouchesLength = 0; 2046 touch_event_.changedTouchesLength = 0;
2047 touch_event_.modifiers = content::EventFlagsToWebEventModifiers( 2047 touch_event_.modifiers = content::EventFlagsToWebEventModifiers(
2048 ui::GetModifiersFromKeyState()); 2048 ui::GetModifiersFromKeyState());
2049 2049
2050 // Consume all events of the same type and add them to the changed list. 2050 // Consume all events of the same type and add them to the changed list.
2051 int last_type = 0; 2051 int last_type = 0;
2052 for (size_t i = 0; i < count; ++i) { 2052 for (size_t i = 0; i < count; ++i) {
2053 unsigned int mapped_id = GetMappedTouch(points[i].dwID); 2053 unsigned int mapped_id = GetMappedTouch(points[i].dwID);
2054 2054
2055 WebKit::WebTouchPoint* point = NULL; 2055 blink::WebTouchPoint* point = NULL;
2056 for (unsigned j = 0; j < touch_event_.touchesLength; ++j) { 2056 for (unsigned j = 0; j < touch_event_.touchesLength; ++j) {
2057 if (static_cast<DWORD>(touch_event_.touches[j].id) == mapped_id) { 2057 if (static_cast<DWORD>(touch_event_.touches[j].id) == mapped_id) {
2058 point = &touch_event_.touches[j]; 2058 point = &touch_event_.touches[j];
2059 break; 2059 break;
2060 } 2060 }
2061 } 2061 }
2062 2062
2063 // Use a move instead if we see a down on a point we already have. 2063 // Use a move instead if we see a down on a point we already have.
2064 int type = GetTouchType(points[i]); 2064 int type = GetTouchType(points[i]);
2065 if (point && type == TOUCHEVENTF_DOWN) 2065 if (point && type == TOUCHEVENTF_DOWN)
2066 SetTouchType(&points[i], TOUCHEVENTF_MOVE); 2066 SetTouchType(&points[i], TOUCHEVENTF_MOVE);
2067 2067
2068 // Stop processing when the event type changes. 2068 // Stop processing when the event type changes.
2069 if (touch_event_.changedTouchesLength && type != last_type) 2069 if (touch_event_.changedTouchesLength && type != last_type)
2070 return i; 2070 return i;
2071 2071
2072 touch_event_.timeStampSeconds = points[i].dwTime / 1000.0; 2072 touch_event_.timeStampSeconds = points[i].dwTime / 1000.0;
2073 2073
2074 last_type = type; 2074 last_type = type;
2075 switch (type) { 2075 switch (type) {
2076 case TOUCHEVENTF_DOWN: { 2076 case TOUCHEVENTF_DOWN: {
2077 if (!(point = AddTouchPoint(&points[i]))) 2077 if (!(point = AddTouchPoint(&points[i])))
2078 continue; 2078 continue;
2079 touch_event_.type = WebKit::WebInputEvent::TouchStart; 2079 touch_event_.type = blink::WebInputEvent::TouchStart;
2080 break; 2080 break;
2081 } 2081 }
2082 2082
2083 case TOUCHEVENTF_UP: { 2083 case TOUCHEVENTF_UP: {
2084 if (!point) // Just throw away a stray up. 2084 if (!point) // Just throw away a stray up.
2085 continue; 2085 continue;
2086 point->state = WebKit::WebTouchPoint::StateReleased; 2086 point->state = blink::WebTouchPoint::StateReleased;
2087 UpdateTouchPoint(point, &points[i]); 2087 UpdateTouchPoint(point, &points[i]);
2088 touch_event_.type = WebKit::WebInputEvent::TouchEnd; 2088 touch_event_.type = blink::WebInputEvent::TouchEnd;
2089 break; 2089 break;
2090 } 2090 }
2091 2091
2092 case TOUCHEVENTF_MOVE: { 2092 case TOUCHEVENTF_MOVE: {
2093 if (point) { 2093 if (point) {
2094 point->state = WebKit::WebTouchPoint::StateMoved; 2094 point->state = blink::WebTouchPoint::StateMoved;
2095 // Don't update the message if the point didn't really move. 2095 // Don't update the message if the point didn't really move.
2096 if (UpdateTouchPoint(point, &points[i])) 2096 if (UpdateTouchPoint(point, &points[i]))
2097 continue; 2097 continue;
2098 touch_event_.type = WebKit::WebInputEvent::TouchMove; 2098 touch_event_.type = blink::WebInputEvent::TouchMove;
2099 } else if (touch_event_.changedTouchesLength) { 2099 } else if (touch_event_.changedTouchesLength) {
2100 RemoveExpiredMappings(); 2100 RemoveExpiredMappings();
2101 // Can't add a point if we're already handling move events. 2101 // Can't add a point if we're already handling move events.
2102 return i; 2102 return i;
2103 } else { 2103 } else {
2104 // Treat a move with no existing point as a down. 2104 // Treat a move with no existing point as a down.
2105 if (!(point = AddTouchPoint(&points[i]))) 2105 if (!(point = AddTouchPoint(&points[i])))
2106 continue; 2106 continue;
2107 last_type = TOUCHEVENTF_DOWN; 2107 last_type = TOUCHEVENTF_DOWN;
2108 SetTouchType(&points[i], TOUCHEVENTF_DOWN); 2108 SetTouchType(&points[i], TOUCHEVENTF_DOWN);
2109 touch_event_.type = WebKit::WebInputEvent::TouchStart; 2109 touch_event_.type = blink::WebInputEvent::TouchStart;
2110 } 2110 }
2111 break; 2111 break;
2112 } 2112 }
2113 2113
2114 default: 2114 default:
2115 NOTREACHED(); 2115 NOTREACHED();
2116 continue; 2116 continue;
2117 } 2117 }
2118 touch_event_.changedTouches[touch_event_.changedTouchesLength++] = *point; 2118 touch_event_.changedTouches[touch_event_.changedTouchesLength++] = *point;
2119 } 2119 }
2120 2120
2121 RemoveExpiredMappings(); 2121 RemoveExpiredMappings();
2122 return count; 2122 return count;
2123 } 2123 }
2124 2124
2125 void WebTouchState::RemoveExpiredMappings() { 2125 void WebTouchState::RemoveExpiredMappings() {
2126 WebKit::WebTouchPoint* point = touch_event_.touches; 2126 blink::WebTouchPoint* point = touch_event_.touches;
2127 WebKit::WebTouchPoint* end = point + touch_event_.touchesLength; 2127 blink::WebTouchPoint* end = point + touch_event_.touchesLength;
2128 for (; point < end; ++point) { 2128 for (; point < end; ++point) {
2129 if (point->state == WebKit::WebTouchPoint::StateReleased) 2129 if (point->state == blink::WebTouchPoint::StateReleased)
2130 id_generator_.ReleaseGeneratedID(point->id); 2130 id_generator_.ReleaseGeneratedID(point->id);
2131 } 2131 }
2132 } 2132 }
2133 2133
2134 2134
2135 bool WebTouchState::ReleaseTouchPoints() { 2135 bool WebTouchState::ReleaseTouchPoints() {
2136 if (touch_event_.touchesLength == 0) 2136 if (touch_event_.touchesLength == 0)
2137 return false; 2137 return false;
2138 // Mark every active touchpoint as released. 2138 // Mark every active touchpoint as released.
2139 touch_event_.type = WebKit::WebInputEvent::TouchEnd; 2139 touch_event_.type = blink::WebInputEvent::TouchEnd;
2140 touch_event_.changedTouchesLength = touch_event_.touchesLength; 2140 touch_event_.changedTouchesLength = touch_event_.touchesLength;
2141 for (unsigned int i = 0; i < touch_event_.touchesLength; ++i) { 2141 for (unsigned int i = 0; i < touch_event_.touchesLength; ++i) {
2142 touch_event_.touches[i].state = WebKit::WebTouchPoint::StateReleased; 2142 touch_event_.touches[i].state = blink::WebTouchPoint::StateReleased;
2143 touch_event_.changedTouches[i].state = 2143 touch_event_.changedTouches[i].state =
2144 WebKit::WebTouchPoint::StateReleased; 2144 blink::WebTouchPoint::StateReleased;
2145 } 2145 }
2146 2146
2147 return true; 2147 return true;
2148 } 2148 }
2149 2149
2150 WebKit::WebTouchPoint* WebTouchState::AddTouchPoint( 2150 blink::WebTouchPoint* WebTouchState::AddTouchPoint(
2151 TOUCHINPUT* touch_input) { 2151 TOUCHINPUT* touch_input) {
2152 DCHECK(touch_event_.touchesLength < 2152 DCHECK(touch_event_.touchesLength <
2153 WebKit::WebTouchEvent::touchesLengthCap); 2153 blink::WebTouchEvent::touchesLengthCap);
2154 if (touch_event_.touchesLength >= 2154 if (touch_event_.touchesLength >=
2155 WebKit::WebTouchEvent::touchesLengthCap) 2155 blink::WebTouchEvent::touchesLengthCap)
2156 return NULL; 2156 return NULL;
2157 WebKit::WebTouchPoint* point = 2157 blink::WebTouchPoint* point =
2158 &touch_event_.touches[touch_event_.touchesLength++]; 2158 &touch_event_.touches[touch_event_.touchesLength++];
2159 point->state = WebKit::WebTouchPoint::StatePressed; 2159 point->state = blink::WebTouchPoint::StatePressed;
2160 point->id = GetMappedTouch(touch_input->dwID); 2160 point->id = GetMappedTouch(touch_input->dwID);
2161 UpdateTouchPoint(point, touch_input); 2161 UpdateTouchPoint(point, touch_input);
2162 return point; 2162 return point;
2163 } 2163 }
2164 2164
2165 bool WebTouchState::UpdateTouchPoint( 2165 bool WebTouchState::UpdateTouchPoint(
2166 WebKit::WebTouchPoint* touch_point, 2166 blink::WebTouchPoint* touch_point,
2167 TOUCHINPUT* touch_input) { 2167 TOUCHINPUT* touch_input) {
2168 CPoint coordinates( 2168 CPoint coordinates(
2169 TOUCH_COORD_TO_PIXEL(touch_input->x) / 2169 TOUCH_COORD_TO_PIXEL(touch_input->x) /
2170 gfx::win::GetUndocumentedDPITouchScale(), 2170 gfx::win::GetUndocumentedDPITouchScale(),
2171 TOUCH_COORD_TO_PIXEL(touch_input->y) / 2171 TOUCH_COORD_TO_PIXEL(touch_input->y) /
2172 gfx::win::GetUndocumentedDPITouchScale()); 2172 gfx::win::GetUndocumentedDPITouchScale());
2173 int radius_x = 1; 2173 int radius_x = 1;
2174 int radius_y = 1; 2174 int radius_y = 1;
2175 if (touch_input->dwMask & TOUCHINPUTMASKF_CONTACTAREA) { 2175 if (touch_input->dwMask & TOUCHINPUTMASKF_CONTACTAREA) {
2176 // Some touch drivers send a contact area of "-1", yet flag it as valid. 2176 // Some touch drivers send a contact area of "-1", yet flag it as valid.
2177 radius_x = std::max(1, 2177 radius_x = std::max(1,
2178 static_cast<int>(TOUCH_COORD_TO_PIXEL(touch_input->cxContact) / 2178 static_cast<int>(TOUCH_COORD_TO_PIXEL(touch_input->cxContact) /
2179 gfx::win::GetUndocumentedDPITouchScale())); 2179 gfx::win::GetUndocumentedDPITouchScale()));
2180 radius_y = std::max(1, 2180 radius_y = std::max(1,
2181 static_cast<int>(TOUCH_COORD_TO_PIXEL(touch_input->cyContact) / 2181 static_cast<int>(TOUCH_COORD_TO_PIXEL(touch_input->cyContact) /
2182 gfx::win::GetUndocumentedDPITouchScale())); 2182 gfx::win::GetUndocumentedDPITouchScale()));
2183 } 2183 }
2184 2184
2185 // Detect and exclude stationary moves. 2185 // Detect and exclude stationary moves.
2186 if (GetTouchType(*touch_input) == TOUCHEVENTF_MOVE && 2186 if (GetTouchType(*touch_input) == TOUCHEVENTF_MOVE &&
2187 touch_point->screenPosition.x == coordinates.x && 2187 touch_point->screenPosition.x == coordinates.x &&
2188 touch_point->screenPosition.y == coordinates.y && 2188 touch_point->screenPosition.y == coordinates.y &&
2189 touch_point->radiusX == radius_x && 2189 touch_point->radiusX == radius_x &&
2190 touch_point->radiusY == radius_y) { 2190 touch_point->radiusY == radius_y) {
2191 touch_point->state = WebKit::WebTouchPoint::StateStationary; 2191 touch_point->state = blink::WebTouchPoint::StateStationary;
2192 return true; 2192 return true;
2193 } 2193 }
2194 2194
2195 touch_point->screenPosition.x = coordinates.x; 2195 touch_point->screenPosition.x = coordinates.x;
2196 touch_point->screenPosition.y = coordinates.y; 2196 touch_point->screenPosition.y = coordinates.y;
2197 window_->ScreenToClient(&coordinates); 2197 window_->ScreenToClient(&coordinates);
2198 static float scale = gfx::win::GetDeviceScaleFactor(); 2198 static float scale = gfx::win::GetDeviceScaleFactor();
2199 touch_point->position.x = coordinates.x / scale; 2199 touch_point->position.x = coordinates.x / scale;
2200 touch_point->position.y = coordinates.y / scale; 2200 touch_point->position.y = coordinates.y / scale;
2201 touch_point->radiusX = radius_x; 2201 touch_point->radiusX = radius_x;
(...skipping 14 matching lines...) Expand all
2216 // Finish the ongoing composition whenever a touch event happens. 2216 // Finish the ongoing composition whenever a touch event happens.
2217 // It matches IE's behavior. 2217 // It matches IE's behavior.
2218 if (base::win::IsTSFAwareRequired()) { 2218 if (base::win::IsTSFAwareRequired()) {
2219 ui::TSFBridge::GetInstance()->CancelComposition(); 2219 ui::TSFBridge::GetInstance()->CancelComposition();
2220 } else { 2220 } else {
2221 imm32_manager_->CleanupComposition(m_hWnd); 2221 imm32_manager_->CleanupComposition(m_hWnd);
2222 } 2222 }
2223 2223
2224 // TODO(jschuh): Add support for an arbitrary number of touchpoints. 2224 // TODO(jschuh): Add support for an arbitrary number of touchpoints.
2225 size_t total = std::min(static_cast<int>(LOWORD(wparam)), 2225 size_t total = std::min(static_cast<int>(LOWORD(wparam)),
2226 static_cast<int>(WebKit::WebTouchEvent::touchesLengthCap)); 2226 static_cast<int>(blink::WebTouchEvent::touchesLengthCap));
2227 TOUCHINPUT points[WebKit::WebTouchEvent::touchesLengthCap]; 2227 TOUCHINPUT points[blink::WebTouchEvent::touchesLengthCap];
2228 2228
2229 if (!total || !ui::GetTouchInputInfoWrapper((HTOUCHINPUT)lparam, total, 2229 if (!total || !ui::GetTouchInputInfoWrapper((HTOUCHINPUT)lparam, total,
2230 points, sizeof(TOUCHINPUT))) { 2230 points, sizeof(TOUCHINPUT))) {
2231 TRACE_EVENT0("browser", "EarlyOut_NothingToDo"); 2231 TRACE_EVENT0("browser", "EarlyOut_NothingToDo");
2232 return 0; 2232 return 0;
2233 } 2233 }
2234 2234
2235 if (total == 1 && (points[0].dwFlags & TOUCHEVENTF_DOWN)) { 2235 if (total == 1 && (points[0].dwFlags & TOUCHEVENTF_DOWN)) {
2236 pointer_down_context_ = true; 2236 pointer_down_context_ = true;
2237 last_touch_location_ = gfx::Point( 2237 last_touch_location_ = gfx::Point(
2238 TOUCH_COORD_TO_PIXEL(points[0].x) / 2238 TOUCH_COORD_TO_PIXEL(points[0].x) /
2239 gfx::win::GetUndocumentedDPITouchScale(), 2239 gfx::win::GetUndocumentedDPITouchScale(),
2240 TOUCH_COORD_TO_PIXEL(points[0].y) / 2240 TOUCH_COORD_TO_PIXEL(points[0].y) /
2241 gfx::win::GetUndocumentedDPITouchScale()); 2241 gfx::win::GetUndocumentedDPITouchScale());
2242 } 2242 }
2243 2243
2244 bool should_forward = render_widget_host_->ShouldForwardTouchEvent() && 2244 bool should_forward = render_widget_host_->ShouldForwardTouchEvent() &&
2245 touch_events_enabled_; 2245 touch_events_enabled_;
2246 2246
2247 // Send a copy of the touch events on to the gesture recognizer. 2247 // Send a copy of the touch events on to the gesture recognizer.
2248 for (size_t start = 0; start < total;) { 2248 for (size_t start = 0; start < total;) {
2249 start += touch_state_->UpdateTouchPoints(points + start, total - start); 2249 start += touch_state_->UpdateTouchPoints(points + start, total - start);
2250 if (should_forward) { 2250 if (should_forward) {
2251 if (touch_state_->is_changed()) 2251 if (touch_state_->is_changed())
2252 render_widget_host_->ForwardTouchEventWithLatencyInfo( 2252 render_widget_host_->ForwardTouchEventWithLatencyInfo(
2253 touch_state_->touch_event(), ui::LatencyInfo()); 2253 touch_state_->touch_event(), ui::LatencyInfo());
2254 } else { 2254 } else {
2255 const WebKit::WebTouchEvent& touch_event = touch_state_->touch_event(); 2255 const blink::WebTouchEvent& touch_event = touch_state_->touch_event();
2256 base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds( 2256 base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(
2257 touch_event.timeStampSeconds * 1000); 2257 touch_event.timeStampSeconds * 1000);
2258 for (size_t i = 0; i < touch_event.touchesLength; ++i) { 2258 for (size_t i = 0; i < touch_event.touchesLength; ++i) {
2259 scoped_ptr<ui::GestureRecognizer::Gestures> gestures; 2259 scoped_ptr<ui::GestureRecognizer::Gestures> gestures;
2260 gestures.reset(gesture_recognizer_->ProcessTouchEventForGesture( 2260 gestures.reset(gesture_recognizer_->ProcessTouchEventForGesture(
2261 TouchEventFromWebTouchPoint(touch_event.touches[i], timestamp), 2261 TouchEventFromWebTouchPoint(touch_event.touches[i], timestamp),
2262 ui::ER_UNHANDLED, this)); 2262 ui::ER_UNHANDLED, this));
2263 ProcessGestures(gestures.get()); 2263 ProcessGestures(gestures.get());
2264 } 2264 }
2265 } 2265 }
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
2476 } 2476 }
2477 } 2477 }
2478 2478
2479 void RenderWidgetHostViewWin::AcceleratedPaint(HDC dc) { 2479 void RenderWidgetHostViewWin::AcceleratedPaint(HDC dc) {
2480 if (render_widget_host_) 2480 if (render_widget_host_)
2481 render_widget_host_->ScheduleComposite(); 2481 render_widget_host_->ScheduleComposite();
2482 if (accelerated_surface_) 2482 if (accelerated_surface_)
2483 accelerated_surface_->Present(dc); 2483 accelerated_surface_->Present(dc);
2484 } 2484 }
2485 2485
2486 void RenderWidgetHostViewWin::GetScreenInfo(WebKit::WebScreenInfo* results) { 2486 void RenderWidgetHostViewWin::GetScreenInfo(blink::WebScreenInfo* results) {
2487 GetScreenInfoForWindow(GetNativeViewId(), results); 2487 GetScreenInfoForWindow(GetNativeViewId(), results);
2488 } 2488 }
2489 2489
2490 gfx::Rect RenderWidgetHostViewWin::GetBoundsInRootWindow() { 2490 gfx::Rect RenderWidgetHostViewWin::GetBoundsInRootWindow() {
2491 RECT window_rect = {0}; 2491 RECT window_rect = {0};
2492 HWND root_window = GetAncestor(m_hWnd, GA_ROOT); 2492 HWND root_window = GetAncestor(m_hWnd, GA_ROOT);
2493 ::GetWindowRect(root_window, &window_rect); 2493 ::GetWindowRect(root_window, &window_rect);
2494 gfx::Rect rect(window_rect); 2494 gfx::Rect rect(window_rect);
2495 2495
2496 // Maximized windows are outdented from the work area by the frame thickness 2496 // Maximized windows are outdented from the work area by the frame thickness
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
2868 2868
2869 // Pinch gestures are disabled by default on windows desktop. See 2869 // Pinch gestures are disabled by default on windows desktop. See
2870 // crbug.com/128477 and crbug.com/148816 2870 // crbug.com/128477 and crbug.com/148816
2871 if ((gesture->type() == ui::ET_GESTURE_PINCH_BEGIN || 2871 if ((gesture->type() == ui::ET_GESTURE_PINCH_BEGIN ||
2872 gesture->type() == ui::ET_GESTURE_PINCH_UPDATE || 2872 gesture->type() == ui::ET_GESTURE_PINCH_UPDATE ||
2873 gesture->type() == ui::ET_GESTURE_PINCH_END) && 2873 gesture->type() == ui::ET_GESTURE_PINCH_END) &&
2874 !ShouldSendPinchGesture()) { 2874 !ShouldSendPinchGesture()) {
2875 return true; 2875 return true;
2876 } 2876 }
2877 2877
2878 WebKit::WebGestureEvent web_gesture = CreateWebGestureEvent(m_hWnd, *gesture); 2878 blink::WebGestureEvent web_gesture = CreateWebGestureEvent(m_hWnd, *gesture);
2879 if (web_gesture.type == WebKit::WebGestureEvent::Undefined) 2879 if (web_gesture.type == blink::WebGestureEvent::Undefined)
2880 return false; 2880 return false;
2881 if (web_gesture.type == WebKit::WebGestureEvent::GestureTapDown) { 2881 if (web_gesture.type == blink::WebGestureEvent::GestureTapDown) {
2882 render_widget_host_->ForwardGestureEvent( 2882 render_widget_host_->ForwardGestureEvent(
2883 CreateFlingCancelEvent(gesture->time_stamp().InSecondsF())); 2883 CreateFlingCancelEvent(gesture->time_stamp().InSecondsF()));
2884 } 2884 }
2885 render_widget_host_->ForwardGestureEventWithLatencyInfo(web_gesture, 2885 render_widget_host_->ForwardGestureEventWithLatencyInfo(web_gesture,
2886 *gesture->latency()); 2886 *gesture->latency());
2887 return true; 2887 return true;
2888 } 2888 }
2889 2889
2890 void RenderWidgetHostViewWin::ForwardMouseEventToRenderer(UINT message, 2890 void RenderWidgetHostViewWin::ForwardMouseEventToRenderer(UINT message,
2891 WPARAM wparam, 2891 WPARAM wparam,
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
3197 // RenderWidgetHostView, public: 3197 // RenderWidgetHostView, public:
3198 3198
3199 // static 3199 // static
3200 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( 3200 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget(
3201 RenderWidgetHost* widget) { 3201 RenderWidgetHost* widget) {
3202 return new RenderWidgetHostViewWin(widget); 3202 return new RenderWidgetHostViewWin(widget);
3203 } 3203 }
3204 3204
3205 // static 3205 // static
3206 void RenderWidgetHostViewPort::GetDefaultScreenInfo( 3206 void RenderWidgetHostViewPort::GetDefaultScreenInfo(
3207 WebKit::WebScreenInfo* results) { 3207 blink::WebScreenInfo* results) {
3208 GetScreenInfoForWindow(0, results); 3208 GetScreenInfoForWindow(0, results);
3209 } 3209 }
3210 3210
3211 } // namespace content 3211 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_win.h ('k') | content/browser/renderer_host/test_render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698