Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_mac.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h" |
| 6 | 6 |
| 7 #import <Carbon/Carbon.h> | 7 #import <Carbon/Carbon.h> |
| 8 #import <objc/runtime.h> | 8 #import <objc/runtime.h> |
| 9 #include <OpenGL/gl.h> | 9 #include <OpenGL/gl.h> |
| 10 #include <QuartzCore/QuartzCore.h> | 10 #include <QuartzCore/QuartzCore.h> |
| (...skipping 1737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1748 | 1748 |
| 1749 if (changed_metrics & DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR) { | 1749 if (changed_metrics & DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR) { |
| 1750 RenderWidgetHostImpl* host = | 1750 RenderWidgetHostImpl* host = |
| 1751 RenderWidgetHostImpl::From(GetRenderWidgetHost()); | 1751 RenderWidgetHostImpl::From(GetRenderWidgetHost()); |
| 1752 if (host && host->delegate()) | 1752 if (host && host->delegate()) |
| 1753 host->delegate()->UpdateDeviceScaleFactor(display.device_scale_factor()); | 1753 host->delegate()->UpdateDeviceScaleFactor(display.device_scale_factor()); |
| 1754 } | 1754 } |
| 1755 | 1755 |
| 1756 UpdateScreenInfo(cocoa_view_); | 1756 UpdateScreenInfo(cocoa_view_); |
| 1757 } | 1757 } |
| 1758 void RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded( | |
| 1759 blink::WebMouseWheelEvent wheel_event, | |
| 1760 bool should_route_event) { | |
| 1761 wheel_event.dispatch_type = | |
| 1762 blink::WebInputEvent::DispatchType::kEventNonBlocking; | |
| 1763 if (should_route_event) { | |
| 1764 render_widget_host_->delegate() | |
| 1765 ->GetInputEventRouter() | |
| 1766 ->RouteMouseWheelEvent(this, &wheel_event, | |
| 1767 ui::LatencyInfo(ui::SourceEventType::WHEEL)); | |
| 1768 } else { | |
| 1769 ProcessMouseWheelEvent(wheel_event, | |
| 1770 ui::LatencyInfo(ui::SourceEventType::WHEEL)); | |
| 1771 } | |
| 1772 } | |
| 1773 | |
| 1774 void RenderWidgetHostViewMac::StartMouseWheelEndDispatchTimer( | |
| 1775 blink::WebMouseWheelEvent wheel_event, | |
| 1776 bool should_route_event) { | |
| 1777 mouse_wheel_end_dispatch_timer_.Start( | |
| 1778 FROM_HERE, | |
| 1779 base::TimeDelta::FromMilliseconds( | |
| 1780 kDefaultMouseWheelLatchingTransactionMs), | |
| 1781 base::Bind( | |
| 1782 &RenderWidgetHostViewMac::SendSyntheticWheelEventWithPhaseEnded, | |
| 1783 base::Unretained(this), wheel_event, should_route_event)); | |
| 1784 } | |
| 1758 | 1785 |
| 1759 } // namespace content | 1786 } // namespace content |
| 1760 | 1787 |
| 1761 // RenderWidgetHostViewCocoa --------------------------------------------------- | 1788 // RenderWidgetHostViewCocoa --------------------------------------------------- |
| 1762 | 1789 |
| 1763 @implementation RenderWidgetHostViewCocoa | 1790 @implementation RenderWidgetHostViewCocoa |
| 1764 @synthesize selectedRange = selectedRange_; | 1791 @synthesize selectedRange = selectedRange_; |
| 1765 @synthesize suppressNextEscapeKeyUp = suppressNextEscapeKeyUp_; | 1792 @synthesize suppressNextEscapeKeyUp = suppressNextEscapeKeyUp_; |
| 1766 @synthesize markedRange = markedRange_; | 1793 @synthesize markedRange = markedRange_; |
| 1767 | 1794 |
| (...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2349 if ([event phase] != NSEventPhaseEnded && | 2376 if ([event phase] != NSEventPhaseEnded && |
| 2350 [event phase] != NSEventPhaseCancelled) { | 2377 [event phase] != NSEventPhaseCancelled) { |
| 2351 return; | 2378 return; |
| 2352 } | 2379 } |
| 2353 | 2380 |
| 2354 if (renderWidgetHostView_->render_widget_host_) { | 2381 if (renderWidgetHostView_->render_widget_host_) { |
| 2355 // History-swiping is not possible if the logic reaches this point. | 2382 // History-swiping is not possible if the logic reaches this point. |
| 2356 WebMouseWheelEvent webEvent = WebMouseWheelEventBuilder::Build( | 2383 WebMouseWheelEvent webEvent = WebMouseWheelEventBuilder::Build( |
| 2357 event, self); | 2384 event, self); |
| 2358 webEvent.rails_mode = mouseWheelFilter_.UpdateRailsMode(webEvent); | 2385 webEvent.rails_mode = mouseWheelFilter_.UpdateRailsMode(webEvent); |
| 2359 ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL); | 2386 if (renderWidgetHostView_->WheelScrollLatchingEnabled()) { |
| 2360 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); | 2387 renderWidgetHostView_->StartMouseWheelEndDispatchTimer(webEvent, false); |
| 2361 renderWidgetHostView_->render_widget_host_-> | 2388 } else { |
| 2362 ForwardWheelEventWithLatencyInfo(webEvent, latency_info); | 2389 ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL); |
| 2390 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); | |
| 2391 renderWidgetHostView_->render_widget_host_ | |
| 2392 ->ForwardWheelEventWithLatencyInfo(webEvent, latency_info); | |
| 2393 } | |
| 2363 } | 2394 } |
| 2364 | 2395 |
| 2365 if (endWheelMonitor_) { | 2396 if (endWheelMonitor_) { |
| 2366 [NSEvent removeMonitor:endWheelMonitor_]; | 2397 [NSEvent removeMonitor:endWheelMonitor_]; |
| 2367 endWheelMonitor_ = nil; | 2398 endWheelMonitor_ = nil; |
| 2368 } | 2399 } |
| 2369 } | 2400 } |
| 2370 | 2401 |
| 2371 - (void)beginGestureWithEvent:(NSEvent*)event { | 2402 - (void)beginGestureWithEvent:(NSEvent*)event { |
| 2372 [responderDelegate_ beginGestureWithEvent:event]; | 2403 [responderDelegate_ beginGestureWithEvent:event]; |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2558 return blockEvent; | 2589 return blockEvent; |
| 2559 }]; | 2590 }]; |
| 2560 } | 2591 } |
| 2561 | 2592 |
| 2562 // This is responsible for content scrolling! | 2593 // This is responsible for content scrolling! |
| 2563 if (renderWidgetHostView_->render_widget_host_) { | 2594 if (renderWidgetHostView_->render_widget_host_) { |
| 2564 WebMouseWheelEvent webEvent = WebMouseWheelEventBuilder::Build(event, self); | 2595 WebMouseWheelEvent webEvent = WebMouseWheelEventBuilder::Build(event, self); |
| 2565 webEvent.rails_mode = mouseWheelFilter_.UpdateRailsMode(webEvent); | 2596 webEvent.rails_mode = mouseWheelFilter_.UpdateRailsMode(webEvent); |
| 2566 ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL); | 2597 ui::LatencyInfo latency_info(ui::SourceEventType::WHEEL); |
| 2567 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); | 2598 latency_info.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
| 2599 if (renderWidgetHostView_->WheelScrollLatchingEnabled()) { | |
| 2600 if (webEvent.phase == blink::WebMouseWheelEvent::kPhaseEnded) { | |
|
tdresser
2017/05/25 15:18:36
Could you add a comment per condition here?
sahel
2017/05/25 16:00:04
Done.
| |
| 2601 renderWidgetHostView_->StartMouseWheelEndDispatchTimer( | |
| 2602 webEvent, renderWidgetHostView_->ShouldRouteEvent(webEvent)); | |
| 2603 return; | |
| 2604 } | |
| 2605 if (webEvent.phase == blink::WebMouseWheelEvent::kPhaseBegan) { | |
| 2606 // A new scrolling sequence hase started, stop the timer and send its | |
|
tdresser
2017/05/25 15:18:36
hase -> has
sahel
2017/05/25 16:00:04
Done.
| |
| 2607 // wheel end event. | |
| 2608 if (renderWidgetHostView_->mouse_wheel_end_dispatch_timer_ | |
| 2609 .IsRunning()) { | |
| 2610 base::Closure task = | |
| 2611 renderWidgetHostView_->mouse_wheel_end_dispatch_timer_ | |
| 2612 .user_task(); | |
| 2613 renderWidgetHostView_->mouse_wheel_end_dispatch_timer_.Stop(); | |
| 2614 task.Run(); | |
| 2615 } | |
| 2616 | |
| 2617 } else if (webEvent.momentum_phase == | |
| 2618 blink::WebMouseWheelEvent::kPhaseBegan) { | |
| 2619 renderWidgetHostView_->mouse_wheel_end_dispatch_timer_.Stop(); | |
| 2620 } | |
| 2621 } | |
| 2622 | |
| 2568 if (renderWidgetHostView_->ShouldRouteEvent(webEvent)) { | 2623 if (renderWidgetHostView_->ShouldRouteEvent(webEvent)) { |
| 2569 renderWidgetHostView_->render_widget_host_->delegate() | 2624 renderWidgetHostView_->render_widget_host_->delegate() |
| 2570 ->GetInputEventRouter() | 2625 ->GetInputEventRouter() |
| 2571 ->RouteMouseWheelEvent(renderWidgetHostView_.get(), &webEvent, | 2626 ->RouteMouseWheelEvent(renderWidgetHostView_.get(), &webEvent, |
| 2572 latency_info); | 2627 latency_info); |
| 2573 } else { | 2628 } else { |
| 2574 renderWidgetHostView_->ProcessMouseWheelEvent(webEvent, latency_info); | 2629 renderWidgetHostView_->ProcessMouseWheelEvent(webEvent, latency_info); |
| 2575 } | 2630 } |
| 2576 } | 2631 } |
| 2577 } | 2632 } |
| (...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3524 | 3579 |
| 3525 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding | 3580 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding |
| 3526 // regions that are not draggable. (See ControlRegionView in | 3581 // regions that are not draggable. (See ControlRegionView in |
| 3527 // native_app_window_cocoa.mm). This requires the render host view to be | 3582 // native_app_window_cocoa.mm). This requires the render host view to be |
| 3528 // draggable by default. | 3583 // draggable by default. |
| 3529 - (BOOL)mouseDownCanMoveWindow { | 3584 - (BOOL)mouseDownCanMoveWindow { |
| 3530 return YES; | 3585 return YES; |
| 3531 } | 3586 } |
| 3532 | 3587 |
| 3533 @end | 3588 @end |
| OLD | NEW |