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/web_contents/web_contents_impl.h" | 5 #include "content/browser/web_contents/web_contents_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 should_normally_be_visible_(true), | 325 should_normally_be_visible_(true), |
326 is_being_destroyed_(false), | 326 is_being_destroyed_(false), |
327 notify_disconnection_(false), | 327 notify_disconnection_(false), |
328 dialog_manager_(NULL), | 328 dialog_manager_(NULL), |
329 is_showing_before_unload_dialog_(false), | 329 is_showing_before_unload_dialog_(false), |
330 last_active_time_(base::TimeTicks::Now()), | 330 last_active_time_(base::TimeTicks::Now()), |
331 closed_by_user_gesture_(false), | 331 closed_by_user_gesture_(false), |
332 minimum_zoom_percent_(static_cast<int>(kMinimumZoomFactor * 100)), | 332 minimum_zoom_percent_(static_cast<int>(kMinimumZoomFactor * 100)), |
333 maximum_zoom_percent_(static_cast<int>(kMaximumZoomFactor * 100)), | 333 maximum_zoom_percent_(static_cast<int>(kMaximumZoomFactor * 100)), |
334 temporary_zoom_settings_(false), | 334 temporary_zoom_settings_(false), |
| 335 totalPinchGestureAmount_(0), |
| 336 currentPinchZoomStepDelta_(0), |
335 color_chooser_identifier_(0), | 337 color_chooser_identifier_(0), |
336 render_view_message_source_(NULL), | 338 render_view_message_source_(NULL), |
337 fullscreen_widget_routing_id_(MSG_ROUTING_NONE), | 339 fullscreen_widget_routing_id_(MSG_ROUTING_NONE), |
338 is_subframe_(false) { | 340 is_subframe_(false) { |
339 for (size_t i = 0; i < g_created_callbacks.Get().size(); i++) | 341 for (size_t i = 0; i < g_created_callbacks.Get().size(); i++) |
340 g_created_callbacks.Get().at(i).Run(this); | 342 g_created_callbacks.Get().at(i).Run(this); |
341 frame_tree_.SetFrameRemoveListener( | 343 frame_tree_.SetFrameRemoveListener( |
342 base::Bind(&WebContentsImpl::OnFrameRemoved, | 344 base::Bind(&WebContentsImpl::OnFrameRemoved, |
343 base::Unretained(this))); | 345 base::Unretained(this))); |
344 } | 346 } |
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1208 } | 1210 } |
1209 #endif | 1211 #endif |
1210 return false; | 1212 return false; |
1211 } | 1213 } |
1212 | 1214 |
1213 bool WebContentsImpl::PreHandleGestureEvent( | 1215 bool WebContentsImpl::PreHandleGestureEvent( |
1214 const blink::WebGestureEvent& event) { | 1216 const blink::WebGestureEvent& event) { |
1215 return delegate_ && delegate_->PreHandleGestureEvent(this, event); | 1217 return delegate_ && delegate_->PreHandleGestureEvent(this, event); |
1216 } | 1218 } |
1217 | 1219 |
| 1220 bool WebContentsImpl::HandleGestureEvent( |
| 1221 const blink::WebGestureEvent& event) { |
| 1222 // Some platforms (eg. Mac) send GesturePinch events for trackpad pinch-zoom. |
| 1223 // Use them to implement browser zoom, as for HandleWheelEvent above. |
| 1224 if (event.type == blink::WebInputEvent::GesturePinchUpdate && |
| 1225 event.sourceDevice == blink::WebGestureEvent::Touchpad) { |
| 1226 // The scale difference necessary to trigger a zoom action. Derived from |
| 1227 // experimentation to find a value that feels reasonable. |
| 1228 const float kZoomStepValue = 0.6f; |
| 1229 |
| 1230 // Find the (absolute) thresholds on either side of the current zoom factor, |
| 1231 // then convert those to actual numbers to trigger a zoom in or out. |
| 1232 // This logic deliberately makes the range around the starting zoom value |
| 1233 // for the gesture twice as large as the other ranges (i.e., the notches are |
| 1234 // at ..., -3*step, -2*step, -step, step, 2*step, 3*step, ... but not at 0) |
| 1235 // so that it's easier to get back to your starting point than it is to |
| 1236 // overshoot. |
| 1237 float nextStep = (abs(currentPinchZoomStepDelta_) + 1) * kZoomStepValue; |
| 1238 float backStep = abs(currentPinchZoomStepDelta_) * kZoomStepValue; |
| 1239 float zoomInThreshold = (currentPinchZoomStepDelta_ >= 0) ? nextStep |
| 1240 : -backStep; |
| 1241 float zoomOutThreshold = (currentPinchZoomStepDelta_ <= 0) ? -nextStep |
| 1242 : backStep; |
| 1243 |
| 1244 totalPinchGestureAmount_ += event.data.pinchUpdate.scale; |
| 1245 if (totalPinchGestureAmount_ > zoomInThreshold) { |
| 1246 currentPinchZoomStepDelta_++; |
| 1247 delegate_->ContentsZoomChange(true); |
| 1248 } else if (totalPinchGestureAmount_ < zoomOutThreshold) { |
| 1249 currentPinchZoomStepDelta_--; |
| 1250 delegate_->ContentsZoomChange(false); |
| 1251 } |
| 1252 return true; |
| 1253 } |
| 1254 |
| 1255 return false; |
| 1256 } |
| 1257 |
1218 #if defined(OS_WIN) | 1258 #if defined(OS_WIN) |
1219 gfx::NativeViewAccessible WebContentsImpl::GetParentNativeViewAccessible() { | 1259 gfx::NativeViewAccessible WebContentsImpl::GetParentNativeViewAccessible() { |
1220 return accessible_parent_; | 1260 return accessible_parent_; |
1221 } | 1261 } |
1222 #endif | 1262 #endif |
1223 | 1263 |
1224 void WebContentsImpl::HandleMouseDown() { | 1264 void WebContentsImpl::HandleMouseDown() { |
1225 if (delegate_) | 1265 if (delegate_) |
1226 delegate_->HandleMouseDown(); | 1266 delegate_->HandleMouseDown(); |
1227 } | 1267 } |
(...skipping 2402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3630 | 3670 |
3631 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { | 3671 void WebContentsImpl::OnPreferredSizeChanged(const gfx::Size& old_size) { |
3632 if (!delegate_) | 3672 if (!delegate_) |
3633 return; | 3673 return; |
3634 const gfx::Size new_size = GetPreferredSize(); | 3674 const gfx::Size new_size = GetPreferredSize(); |
3635 if (new_size != old_size) | 3675 if (new_size != old_size) |
3636 delegate_->UpdatePreferredSize(this, new_size); | 3676 delegate_->UpdatePreferredSize(this, new_size); |
3637 } | 3677 } |
3638 | 3678 |
3639 } // namespace content | 3679 } // namespace content |
OLD | NEW |