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

Side by Side Diff: ui/events/blink/blink_event_util.cc

Issue 2036873002: Making EventSender talk to the right WebWidget (for OOPIF support). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Proper scaling and lifetime management of events. Created 4 years, 2 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 // MSVC++ requires this to be set before any other includes to get M_PI. 5 // MSVC++ requires this to be set before any other includes to get M_PI.
6 #define _USE_MATH_DEFINES 6 #define _USE_MATH_DEFINES
7 7
8 #include "ui/events/blink/blink_event_util.h" 8 #include "ui/events/blink/blink_event_util.h"
9 9
10 #include <stddef.h> 10 #include <stddef.h>
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 } 352 }
353 353
354 WebGestureEvent CreateWebGestureEventFromGestureEventData( 354 WebGestureEvent CreateWebGestureEventFromGestureEventData(
355 const GestureEventData& data) { 355 const GestureEventData& data) {
356 return CreateWebGestureEvent(data.details, data.time, 356 return CreateWebGestureEvent(data.details, data.time,
357 gfx::PointF(data.x, data.y), 357 gfx::PointF(data.x, data.y),
358 gfx::PointF(data.raw_x, data.raw_y), data.flags, 358 gfx::PointF(data.raw_x, data.raw_y), data.flags,
359 data.unique_touch_event_id); 359 data.unique_touch_event_id);
360 } 360 }
361 361
362 std::unique_ptr<blink::WebInputEvent> MakeDeepCopyOfWebInputEvent(
363 const blink::WebInputEvent& event) {
364 std::unique_ptr<blink::WebInputEvent> cloned_event;
365 if (event.type == blink::WebMouseEvent::MouseWheel) {
366 blink::WebMouseWheelEvent* wheel_event = new blink::WebMouseWheelEvent;
367 cloned_event.reset(wheel_event);
368 *wheel_event = static_cast<const blink::WebMouseWheelEvent&>(event);
369 } else if (blink::WebInputEvent::isMouseEventType(event.type)) {
370 blink::WebMouseEvent* mouse_event = new blink::WebMouseEvent;
371 cloned_event.reset(mouse_event);
372 *mouse_event = static_cast<const blink::WebMouseEvent&>(event);
373 } else if (blink::WebInputEvent::isTouchEventType(event.type)) {
374 blink::WebTouchEvent* touch_event = new blink::WebTouchEvent;
375 cloned_event.reset(touch_event);
376 *touch_event = static_cast<const blink::WebTouchEvent&>(event);
377 } else if (blink::WebInputEvent::isGestureEventType(event.type)) {
378 blink::WebGestureEvent* gesture_event = new blink::WebGestureEvent;
379 cloned_event.reset(gesture_event);
380 *gesture_event = static_cast<const blink::WebGestureEvent&>(event);
381 }
382 return cloned_event;
383 }
384
362 std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent( 385 std::unique_ptr<blink::WebInputEvent> ScaleWebInputEvent(
363 const blink::WebInputEvent& event, 386 const blink::WebInputEvent& event,
364 float scale) { 387 float scale) {
365 std::unique_ptr<blink::WebInputEvent> scaled_event; 388 std::unique_ptr<blink::WebInputEvent> scaled_event;
366 if (scale == 1.f) 389 if (scale == 1.f)
367 return scaled_event; 390 return scaled_event;
368 if (event.type == blink::WebMouseEvent::MouseWheel) { 391
369 blink::WebMouseWheelEvent* wheel_event = new blink::WebMouseWheelEvent; 392 scaled_event = MakeDeepCopyOfWebInputEvent(event);
370 scaled_event.reset(wheel_event); 393 ScaleWebInputEvent(scale, scaled_event.get());
371 *wheel_event = static_cast<const blink::WebMouseWheelEvent&>(event); 394 return scaled_event;
395 }
396
397 void ScaleWebInputEvent(float scale, blink::WebInputEvent* event) {
398 if (event->type == blink::WebMouseEvent::MouseWheel) {
399 blink::WebMouseWheelEvent* wheel_event =
400 static_cast<blink::WebMouseWheelEvent*>(event);
372 wheel_event->x *= scale; 401 wheel_event->x *= scale;
373 wheel_event->y *= scale; 402 wheel_event->y *= scale;
374 wheel_event->deltaX *= scale; 403 wheel_event->deltaX *= scale;
375 wheel_event->deltaY *= scale; 404 wheel_event->deltaY *= scale;
376 wheel_event->wheelTicksX *= scale; 405 wheel_event->wheelTicksX *= scale;
377 wheel_event->wheelTicksY *= scale; 406 wheel_event->wheelTicksY *= scale;
378 } else if (blink::WebInputEvent::isMouseEventType(event.type)) { 407 } else if (blink::WebInputEvent::isMouseEventType(event->type)) {
379 blink::WebMouseEvent* mouse_event = new blink::WebMouseEvent; 408 blink::WebMouseEvent* mouse_event =
380 scaled_event.reset(mouse_event); 409 static_cast<blink::WebMouseEvent*>(event);
381 *mouse_event = static_cast<const blink::WebMouseEvent&>(event);
382 mouse_event->x *= scale; 410 mouse_event->x *= scale;
383 mouse_event->y *= scale; 411 mouse_event->y *= scale;
384 mouse_event->windowX = mouse_event->x; 412 mouse_event->windowX = mouse_event->x;
385 mouse_event->windowY = mouse_event->y; 413 mouse_event->windowY = mouse_event->y;
386 mouse_event->movementX *= scale; 414 mouse_event->movementX *= scale;
387 mouse_event->movementY *= scale; 415 mouse_event->movementY *= scale;
388 } else if (blink::WebInputEvent::isTouchEventType(event.type)) { 416 } else if (blink::WebInputEvent::isTouchEventType(event->type)) {
389 blink::WebTouchEvent* touch_event = new blink::WebTouchEvent; 417 blink::WebTouchEvent* touch_event =
390 scaled_event.reset(touch_event); 418 static_cast<blink::WebTouchEvent*>(event);
391 *touch_event = static_cast<const blink::WebTouchEvent&>(event);
392 for (unsigned i = 0; i < touch_event->touchesLength; i++) { 419 for (unsigned i = 0; i < touch_event->touchesLength; i++) {
393 touch_event->touches[i].position.x *= scale; 420 touch_event->touches[i].position.x *= scale;
394 touch_event->touches[i].position.y *= scale; 421 touch_event->touches[i].position.y *= scale;
395 touch_event->touches[i].radiusX *= scale; 422 touch_event->touches[i].radiusX *= scale;
396 touch_event->touches[i].radiusY *= scale; 423 touch_event->touches[i].radiusY *= scale;
397 } 424 }
398 } else if (blink::WebInputEvent::isGestureEventType(event.type)) { 425 } else if (blink::WebInputEvent::isGestureEventType(event->type)) {
399 blink::WebGestureEvent* gesture_event = new blink::WebGestureEvent; 426 blink::WebGestureEvent* gesture_event =
400 scaled_event.reset(gesture_event); 427 static_cast<blink::WebGestureEvent*>(event);
401 *gesture_event = static_cast<const blink::WebGestureEvent&>(event);
402 gesture_event->x *= scale; 428 gesture_event->x *= scale;
403 gesture_event->y *= scale; 429 gesture_event->y *= scale;
404 switch (gesture_event->type) { 430 switch (gesture_event->type) {
405 case blink::WebInputEvent::GestureScrollUpdate: 431 case blink::WebInputEvent::GestureScrollUpdate:
406 gesture_event->data.scrollUpdate.deltaX *= scale; 432 gesture_event->data.scrollUpdate.deltaX *= scale;
407 gesture_event->data.scrollUpdate.deltaY *= scale; 433 gesture_event->data.scrollUpdate.deltaY *= scale;
408 break; 434 break;
409 case blink::WebInputEvent::GestureScrollBegin: 435 case blink::WebInputEvent::GestureScrollBegin:
410 gesture_event->data.scrollBegin.deltaXHint *= scale; 436 gesture_event->data.scrollBegin.deltaXHint *= scale;
411 gesture_event->data.scrollBegin.deltaYHint *= scale; 437 gesture_event->data.scrollBegin.deltaYHint *= scale;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 case blink::WebInputEvent::GestureTapCancel: 480 case blink::WebInputEvent::GestureTapCancel:
455 case blink::WebInputEvent::GestureFlingCancel: 481 case blink::WebInputEvent::GestureFlingCancel:
456 case blink::WebInputEvent::GestureScrollEnd: 482 case blink::WebInputEvent::GestureScrollEnd:
457 break; 483 break;
458 484
459 // TODO(oshima): Find out if ContextMenu needs to be scaled. 485 // TODO(oshima): Find out if ContextMenu needs to be scaled.
460 default: 486 default:
461 break; 487 break;
462 } 488 }
463 } 489 }
464 return scaled_event; 490 }
491
492 void ShiftWebInputEvent(int delta_x, int delta_y, blink::WebInputEvent* event) {
493 if (blink::WebInputEvent::isMouseEventType(event->type)) {
494 blink::WebMouseEvent* mouse_event =
495 static_cast<blink::WebMouseEvent*>(event);
496 mouse_event->x += delta_x;
497 mouse_event->y += delta_y;
498 } else if (blink::WebInputEvent::isGestureEventType(event->type)) {
499 blink::WebGestureEvent* gesture_event =
500 static_cast<blink::WebGestureEvent*>(event);
501 gesture_event->x += delta_x;
502 gesture_event->y += delta_y;
503 } else if (blink::WebInputEvent::isTouchEventType(event->type)) {
504 blink::WebTouchEvent* touch_event =
505 static_cast<blink::WebTouchEvent*>(event);
506 for (unsigned i = 0; i < touch_event->touchesLength; i++) {
507 blink::WebTouchPoint* p = touch_event->touches + i;
508 p->position.x += delta_x;
509 p->position.y += delta_y;
510 }
511 }
465 } 512 }
466 513
467 WebPointerProperties::PointerType ToWebPointerType( 514 WebPointerProperties::PointerType ToWebPointerType(
468 MotionEvent::ToolType tool_type) { 515 MotionEvent::ToolType tool_type) {
469 switch (tool_type) { 516 switch (tool_type) {
470 case MotionEvent::TOOL_TYPE_UNKNOWN: 517 case MotionEvent::TOOL_TYPE_UNKNOWN:
471 return WebPointerProperties::PointerType::Unknown; 518 return WebPointerProperties::PointerType::Unknown;
472 case MotionEvent::TOOL_TYPE_FINGER: 519 case MotionEvent::TOOL_TYPE_FINGER:
473 return WebPointerProperties::PointerType::Touch; 520 return WebPointerProperties::PointerType::Touch;
474 case MotionEvent::TOOL_TYPE_STYLUS: 521 case MotionEvent::TOOL_TYPE_STYLUS:
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 return blink::WebInputEvent::IsRight; 566 return blink::WebInputEvent::IsRight;
520 case DomKeyLocation::NUMPAD: 567 case DomKeyLocation::NUMPAD:
521 return blink::WebInputEvent::IsKeyPad; 568 return blink::WebInputEvent::IsKeyPad;
522 case DomKeyLocation::STANDARD: 569 case DomKeyLocation::STANDARD:
523 break; 570 break;
524 } 571 }
525 return static_cast<blink::WebInputEvent::Modifiers>(0); 572 return static_cast<blink::WebInputEvent::Modifiers>(0);
526 } 573 }
527 574
528 } // namespace ui 575 } // namespace ui
OLDNEW
« content/test/layouttest_support.cc ('K') | « ui/events/blink/blink_event_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698