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_android.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_android.h" |
6 | 6 |
7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 : host_(widget_host), | 183 : host_(widget_host), |
184 needs_begin_frame_(false), | 184 needs_begin_frame_(false), |
185 is_showing_(!widget_host->is_hidden()), | 185 is_showing_(!widget_host->is_hidden()), |
186 content_view_core_(NULL), | 186 content_view_core_(NULL), |
187 ime_adapter_android_(this), | 187 ime_adapter_android_(this), |
188 cached_background_color_(SK_ColorWHITE), | 188 cached_background_color_(SK_ColorWHITE), |
189 last_output_surface_id_(kUndefinedOutputSurfaceId), | 189 last_output_surface_id_(kUndefinedOutputSurfaceId), |
190 weak_ptr_factory_(this), | 190 weak_ptr_factory_(this), |
191 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( | 191 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( |
192 switches::kDisableOverscrollEdgeEffect)), | 192 switches::kDisableOverscrollEdgeEffect)), |
193 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), | |
194 gesture_provider_(CreateGestureProviderConfig(), this), | 193 gesture_provider_(CreateGestureProviderConfig(), this), |
195 gesture_text_selector_(this), | 194 gesture_text_selector_(this), |
196 touch_scrolling_(false), | 195 touch_scrolling_(false), |
197 potentially_active_fling_count_(0), | 196 potentially_active_fling_count_(0), |
198 flush_input_requested_(false), | 197 flush_input_requested_(false), |
199 accelerated_surface_route_id_(0), | 198 accelerated_surface_route_id_(0), |
200 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( | 199 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( |
201 widget_host->GetProcess()->GetID(), | 200 widget_host->GetProcess()->GetID(), |
202 widget_host->GetRoutingID()) != NULL), | 201 widget_host->GetRoutingID()) != NULL), |
203 frame_evictor_(new DelegatedFrameEvictor(this)), | 202 frame_evictor_(new DelegatedFrameEvictor(this)), |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 void RenderWidgetHostViewAndroid::MovePluginWindows( | 352 void RenderWidgetHostViewAndroid::MovePluginWindows( |
354 const std::vector<WebPluginGeometry>& moves) { | 353 const std::vector<WebPluginGeometry>& moves) { |
355 // We don't have plugin windows on Android. Do nothing. Note: this is called | 354 // We don't have plugin windows on Android. Do nothing. Note: this is called |
356 // from RenderWidgetHost::OnUpdateRect which is itself invoked while | 355 // from RenderWidgetHost::OnUpdateRect which is itself invoked while |
357 // processing the corresponding message from Renderer. | 356 // processing the corresponding message from Renderer. |
358 } | 357 } |
359 | 358 |
360 void RenderWidgetHostViewAndroid::Focus() { | 359 void RenderWidgetHostViewAndroid::Focus() { |
361 host_->Focus(); | 360 host_->Focus(); |
362 host_->SetInputMethodActive(true); | 361 host_->SetInputMethodActive(true); |
363 if (overscroll_effect_enabled_) | 362 if (overscroll_effect_) |
364 overscroll_effect_->Enable(); | 363 overscroll_effect_->Enable(); |
365 } | 364 } |
366 | 365 |
367 void RenderWidgetHostViewAndroid::Blur() { | 366 void RenderWidgetHostViewAndroid::Blur() { |
368 host_->ExecuteEditCommand("Unselect", ""); | 367 host_->ExecuteEditCommand("Unselect", ""); |
369 host_->SetInputMethodActive(false); | 368 host_->SetInputMethodActive(false); |
370 host_->Blur(); | 369 host_->Blur(); |
371 overscroll_effect_->Disable(); | 370 if (overscroll_effect_) |
| 371 overscroll_effect_->Disable(); |
372 } | 372 } |
373 | 373 |
374 bool RenderWidgetHostViewAndroid::HasFocus() const { | 374 bool RenderWidgetHostViewAndroid::HasFocus() const { |
375 if (!content_view_core_) | 375 if (!content_view_core_) |
376 return false; // ContentViewCore not created yet. | 376 return false; // ContentViewCore not created yet. |
377 | 377 |
378 return content_view_core_->HasFocus(); | 378 return content_view_core_->HasFocus(); |
379 } | 379 } |
380 | 380 |
381 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { | 381 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
900 // Calculate the content size. This should be 0 if the texture_size is 0. | 900 // Calculate the content size. This should be 0 if the texture_size is 0. |
901 gfx::Vector2dF offset; | 901 gfx::Vector2dF offset; |
902 if (texture_size_in_layer_.GetArea() > 0) | 902 if (texture_size_in_layer_.GetArea() > 0) |
903 offset = frame_metadata.location_bar_content_translation; | 903 offset = frame_metadata.location_bar_content_translation; |
904 offset.set_y(offset.y() + frame_metadata.overdraw_bottom_height); | 904 offset.set_y(offset.y() + frame_metadata.overdraw_bottom_height); |
905 offset.Scale(frame_metadata.device_scale_factor); | 905 offset.Scale(frame_metadata.device_scale_factor); |
906 content_size_in_layer_ = | 906 content_size_in_layer_ = |
907 gfx::Size(texture_size_in_layer_.width() - offset.x(), | 907 gfx::Size(texture_size_in_layer_.width() - offset.x(), |
908 texture_size_in_layer_.height() - offset.y()); | 908 texture_size_in_layer_.height() - offset.y()); |
909 | 909 |
910 overscroll_effect_->UpdateDisplayParameters( | 910 if (overscroll_effect_) { |
911 CreateOverscrollDisplayParameters(frame_metadata)); | 911 overscroll_effect_->UpdateDisplayParameters( |
| 912 CreateOverscrollDisplayParameters(frame_metadata)); |
| 913 } |
912 } | 914 } |
913 | 915 |
914 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( | 916 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
915 uint32 output_surface_id, | 917 uint32 output_surface_id, |
916 scoped_ptr<cc::CompositorFrame> frame) { | 918 scoped_ptr<cc::CompositorFrame> frame) { |
917 if (!frame->delegated_frame_data) { | 919 if (!frame->delegated_frame_data) { |
918 LOG(ERROR) << "Non-delegated renderer path no longer supported"; | 920 LOG(ERROR) << "Non-delegated renderer path no longer supported"; |
919 return; | 921 return; |
920 } | 922 } |
921 | 923 |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1114 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; | 1116 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; |
1115 } | 1117 } |
1116 | 1118 |
1117 void RenderWidgetHostViewAndroid::AttachLayers() { | 1119 void RenderWidgetHostViewAndroid::AttachLayers() { |
1118 if (!content_view_core_) | 1120 if (!content_view_core_) |
1119 return; | 1121 return; |
1120 if (!layer_.get()) | 1122 if (!layer_.get()) |
1121 return; | 1123 return; |
1122 | 1124 |
1123 content_view_core_->AttachLayer(layer_); | 1125 content_view_core_->AttachLayer(layer_); |
1124 if (overscroll_effect_enabled_) | 1126 if (overscroll_effect_) |
1125 overscroll_effect_->Enable(); | 1127 overscroll_effect_->Enable(); |
1126 layer_->SetHideLayerAndSubtree(!is_showing_); | 1128 layer_->SetHideLayerAndSubtree(!is_showing_); |
1127 } | 1129 } |
1128 | 1130 |
1129 void RenderWidgetHostViewAndroid::RemoveLayers() { | 1131 void RenderWidgetHostViewAndroid::RemoveLayers() { |
1130 if (!content_view_core_) | 1132 if (!content_view_core_) |
1131 return; | 1133 return; |
1132 | 1134 |
1133 if (!layer_.get()) | 1135 if (!layer_.get()) |
1134 return; | 1136 return; |
1135 | 1137 |
1136 content_view_core_->RemoveLayer(layer_); | 1138 content_view_core_->RemoveLayer(layer_); |
1137 overscroll_effect_->Disable(); | 1139 if (overscroll_effect_) |
| 1140 overscroll_effect_->Disable(); |
1138 } | 1141 } |
1139 | 1142 |
1140 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 1143 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
1141 bool needs_animate = overscroll_effect_->Animate(frame_time); | 1144 bool needs_animate = |
| 1145 overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; |
1142 if (selection_controller_) | 1146 if (selection_controller_) |
1143 needs_animate |= selection_controller_->Animate(frame_time); | 1147 needs_animate |= selection_controller_->Animate(frame_time); |
1144 return needs_animate; | 1148 return needs_animate; |
1145 } | 1149 } |
1146 | 1150 |
1147 void RenderWidgetHostViewAndroid::OnContentScrollingChange() { | 1151 void RenderWidgetHostViewAndroid::OnContentScrollingChange() { |
1148 if (selection_controller_) | 1152 if (selection_controller_) |
1149 selection_controller_->SetTemporarilyHidden(IsContentScrolling()); | 1153 selection_controller_->SetTemporarilyHidden(IsContentScrolling()); |
1150 } | 1154 } |
1151 | 1155 |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1338 | 1342 |
1339 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( | 1343 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
1340 const blink::WebMouseWheelEvent& event) { | 1344 const blink::WebMouseWheelEvent& event) { |
1341 if (host_) | 1345 if (host_) |
1342 host_->ForwardWheelEvent(event); | 1346 host_->ForwardWheelEvent(event); |
1343 } | 1347 } |
1344 | 1348 |
1345 void RenderWidgetHostViewAndroid::SendGestureEvent( | 1349 void RenderWidgetHostViewAndroid::SendGestureEvent( |
1346 const blink::WebGestureEvent& event) { | 1350 const blink::WebGestureEvent& event) { |
1347 // Sending a gesture that may trigger overscroll should resume the effect. | 1351 // Sending a gesture that may trigger overscroll should resume the effect. |
1348 if (overscroll_effect_enabled_) | 1352 if (overscroll_effect_) |
1349 overscroll_effect_->Enable(); | 1353 overscroll_effect_->Enable(); |
1350 | 1354 |
1351 if (host_) | 1355 if (host_) |
1352 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); | 1356 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); |
1353 } | 1357 } |
1354 | 1358 |
1355 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { | 1359 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { |
1356 if (host_) | 1360 if (host_) |
1357 host_->MoveCaret(point); | 1361 host_->MoveCaret(point); |
1358 } | 1362 } |
1359 | 1363 |
1360 void RenderWidgetHostViewAndroid::HideTextHandles() { | 1364 void RenderWidgetHostViewAndroid::HideTextHandles() { |
1361 if (selection_controller_) | 1365 if (selection_controller_) |
1362 selection_controller_->HideAndDisallowAutomaticShowing(); | 1366 selection_controller_->HideAndDisallowAutomaticShowing(); |
1363 } | 1367 } |
1364 | 1368 |
1365 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1369 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
1366 return cached_background_color_; | 1370 return cached_background_color_; |
1367 } | 1371 } |
1368 | 1372 |
1369 void RenderWidgetHostViewAndroid::DidOverscroll( | 1373 void RenderWidgetHostViewAndroid::DidOverscroll( |
1370 const DidOverscrollParams& params) { | 1374 const DidOverscrollParams& params) { |
1371 if (!content_view_core_ || !layer_ || !is_showing_) | 1375 if (!content_view_core_ || !layer_ || !is_showing_) |
1372 return; | 1376 return; |
1373 | 1377 |
1374 const float device_scale_factor = content_view_core_->GetDpiScale(); | 1378 const float device_scale_factor = content_view_core_->GetDpiScale(); |
1375 if (overscroll_effect_->OnOverscrolled( | 1379 |
| 1380 if (overscroll_effect_ && |
| 1381 overscroll_effect_->OnOverscrolled( |
1376 content_view_core_->GetLayer(), | 1382 content_view_core_->GetLayer(), |
1377 base::TimeTicks::Now(), | 1383 base::TimeTicks::Now(), |
1378 gfx::ScaleVector2d(params.accumulated_overscroll, | 1384 gfx::ScaleVector2d(params.accumulated_overscroll, |
1379 device_scale_factor), | 1385 device_scale_factor), |
1380 gfx::ScaleVector2d(params.latest_overscroll_delta, | 1386 gfx::ScaleVector2d(params.latest_overscroll_delta, |
1381 device_scale_factor), | 1387 device_scale_factor), |
1382 gfx::ScaleVector2d(params.current_fling_velocity, | 1388 gfx::ScaleVector2d(params.current_fling_velocity, |
1383 device_scale_factor))) { | 1389 device_scale_factor))) { |
1384 SetNeedsAnimate(); | 1390 SetNeedsAnimate(); |
1385 } | 1391 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1430 observing_root_window_ = true; | 1436 observing_root_window_ = true; |
1431 if (needs_begin_frame_) | 1437 if (needs_begin_frame_) |
1432 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); | 1438 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); |
1433 } | 1439 } |
1434 | 1440 |
1435 if (resize) | 1441 if (resize) |
1436 WasResized(); | 1442 WasResized(); |
1437 | 1443 |
1438 if (!selection_controller_) | 1444 if (!selection_controller_) |
1439 selection_controller_.reset(new TouchSelectionController(this)); | 1445 selection_controller_.reset(new TouchSelectionController(this)); |
| 1446 |
| 1447 if (!content_view_core_) { |
| 1448 overscroll_effect_.reset(); |
| 1449 } else if (overscroll_effect_enabled_ && !overscroll_effect_) { |
| 1450 DCHECK(content_view_core_->GetWindowAndroid()->GetCompositor()); |
| 1451 overscroll_effect_ = |
| 1452 OverscrollGlow::Create(&content_view_core_->GetWindowAndroid() |
| 1453 ->GetCompositor() |
| 1454 ->GetSystemUIResourceManager()); |
| 1455 } |
1440 } | 1456 } |
1441 | 1457 |
1442 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1458 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
1443 while (!ack_callbacks_.empty()) { | 1459 while (!ack_callbacks_.empty()) { |
1444 ack_callbacks_.front().Run(); | 1460 ack_callbacks_.front().Run(); |
1445 ack_callbacks_.pop(); | 1461 ack_callbacks_.pop(); |
1446 } | 1462 } |
1447 } | 1463 } |
1448 | 1464 |
1449 void RenderWidgetHostViewAndroid::OnGestureEvent( | 1465 void RenderWidgetHostViewAndroid::OnGestureEvent( |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1634 results->orientationAngle = display.RotationAsDegree(); | 1650 results->orientationAngle = display.RotationAsDegree(); |
1635 results->orientationType = | 1651 results->orientationType = |
1636 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); | 1652 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
1637 gfx::DeviceDisplayInfo info; | 1653 gfx::DeviceDisplayInfo info; |
1638 results->depth = info.GetBitsPerPixel(); | 1654 results->depth = info.GetBitsPerPixel(); |
1639 results->depthPerComponent = info.GetBitsPerComponent(); | 1655 results->depthPerComponent = info.GetBitsPerComponent(); |
1640 results->isMonochrome = (results->depthPerComponent == 0); | 1656 results->isMonochrome = (results->depthPerComponent == 0); |
1641 } | 1657 } |
1642 | 1658 |
1643 } // namespace content | 1659 } // namespace content |
OLD | NEW |