| Index: content/browser/web_contents/web_contents_impl.cc
|
| diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
|
| index 88f58a782fd7544ae316343b06dc0b6dd50546c2..1ea9beb206bf623936fd6391462b9c5cfa4d22fa 100644
|
| --- a/content/browser/web_contents/web_contents_impl.cc
|
| +++ b/content/browser/web_contents/web_contents_impl.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include <stddef.h>
|
|
|
| +#include <cmath>
|
| #include <utility>
|
|
|
| #include "base/command_line.h"
|
| @@ -396,6 +397,7 @@ WebContentsImpl::WebContentsImpl(BrowserContext* browser_context)
|
| closed_by_user_gesture_(false),
|
| minimum_zoom_percent_(static_cast<int>(kMinimumZoomFactor * 100)),
|
| maximum_zoom_percent_(static_cast<int>(kMaximumZoomFactor * 100)),
|
| + zoom_scroll_remainder_(0),
|
| render_view_message_source_(NULL),
|
| render_frame_message_source_(NULL),
|
| fullscreen_widget_routing_id_(MSG_ROUTING_NONE),
|
| @@ -1587,7 +1589,14 @@ bool WebContentsImpl::HandleWheelEvent(
|
| if (delegate_ && event.wheelTicksY &&
|
| (event.modifiers & blink::WebInputEvent::ControlKey) &&
|
| !event.canScroll) {
|
| - delegate_->ContentsZoomChange(event.wheelTicksY > 0);
|
| + // Count only integer cumulative scrolls as zoom events; this handles
|
| + // smooth scroll and regular scroll device behavior.
|
| + zoom_scroll_remainder_ += event.wheelTicksY;
|
| + int whole_zoom_scroll_remainder_ = std::lround(zoom_scroll_remainder_);
|
| + zoom_scroll_remainder_ -= whole_zoom_scroll_remainder_;
|
| + if (whole_zoom_scroll_remainder_ != 0) {
|
| + delegate_->ContentsZoomChange(whole_zoom_scroll_remainder_ > 0);
|
| + }
|
| return true;
|
| }
|
| #endif
|
|
|