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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 : host_(widget_host), | 179 : host_(widget_host), |
180 needs_begin_frame_(false), | 180 needs_begin_frame_(false), |
181 is_showing_(!widget_host->is_hidden()), | 181 is_showing_(!widget_host->is_hidden()), |
182 content_view_core_(NULL), | 182 content_view_core_(NULL), |
183 ime_adapter_android_(this), | 183 ime_adapter_android_(this), |
184 cached_background_color_(SK_ColorWHITE), | 184 cached_background_color_(SK_ColorWHITE), |
185 last_output_surface_id_(kUndefinedOutputSurfaceId), | 185 last_output_surface_id_(kUndefinedOutputSurfaceId), |
186 weak_ptr_factory_(this), | 186 weak_ptr_factory_(this), |
187 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( | 187 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( |
188 switches::kDisableOverscrollEdgeEffect)), | 188 switches::kDisableOverscrollEdgeEffect)), |
189 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), | |
190 gesture_provider_(CreateGestureProviderConfig(), this), | 189 gesture_provider_(CreateGestureProviderConfig(), this), |
191 gesture_text_selector_(this), | 190 gesture_text_selector_(this), |
192 flush_input_requested_(false), | 191 flush_input_requested_(false), |
193 accelerated_surface_route_id_(0), | 192 accelerated_surface_route_id_(0), |
194 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( | 193 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( |
195 widget_host->GetProcess()->GetID(), | 194 widget_host->GetProcess()->GetID(), |
196 widget_host->GetRoutingID()) != NULL), | 195 widget_host->GetRoutingID()) != NULL), |
197 frame_evictor_(new DelegatedFrameEvictor(this)), | 196 frame_evictor_(new DelegatedFrameEvictor(this)), |
198 locks_on_frame_count_(0), | 197 locks_on_frame_count_(0), |
199 observing_root_window_(false) { | 198 observing_root_window_(false) { |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 void RenderWidgetHostViewAndroid::MovePluginWindows( | 346 void RenderWidgetHostViewAndroid::MovePluginWindows( |
348 const std::vector<WebPluginGeometry>& moves) { | 347 const std::vector<WebPluginGeometry>& moves) { |
349 // We don't have plugin windows on Android. Do nothing. Note: this is called | 348 // We don't have plugin windows on Android. Do nothing. Note: this is called |
350 // from RenderWidgetHost::OnUpdateRect which is itself invoked while | 349 // from RenderWidgetHost::OnUpdateRect which is itself invoked while |
351 // processing the corresponding message from Renderer. | 350 // processing the corresponding message from Renderer. |
352 } | 351 } |
353 | 352 |
354 void RenderWidgetHostViewAndroid::Focus() { | 353 void RenderWidgetHostViewAndroid::Focus() { |
355 host_->Focus(); | 354 host_->Focus(); |
356 host_->SetInputMethodActive(true); | 355 host_->SetInputMethodActive(true); |
357 if (overscroll_effect_enabled_) | 356 if (overscroll_effect_) |
358 overscroll_effect_->Enable(); | 357 overscroll_effect_->Enable(); |
359 } | 358 } |
360 | 359 |
361 void RenderWidgetHostViewAndroid::Blur() { | 360 void RenderWidgetHostViewAndroid::Blur() { |
362 host_->ExecuteEditCommand("Unselect", ""); | 361 host_->ExecuteEditCommand("Unselect", ""); |
363 host_->SetInputMethodActive(false); | 362 host_->SetInputMethodActive(false); |
364 host_->Blur(); | 363 host_->Blur(); |
365 overscroll_effect_->Disable(); | 364 if (overscroll_effect_) |
| 365 overscroll_effect_->Disable(); |
366 } | 366 } |
367 | 367 |
368 bool RenderWidgetHostViewAndroid::HasFocus() const { | 368 bool RenderWidgetHostViewAndroid::HasFocus() const { |
369 if (!content_view_core_) | 369 if (!content_view_core_) |
370 return false; // ContentViewCore not created yet. | 370 return false; // ContentViewCore not created yet. |
371 | 371 |
372 return content_view_core_->HasFocus(); | 372 return content_view_core_->HasFocus(); |
373 } | 373 } |
374 | 374 |
375 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { | 375 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
(...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 // Calculate the content size. This should be 0 if the texture_size is 0. | 852 // Calculate the content size. This should be 0 if the texture_size is 0. |
853 gfx::Vector2dF offset; | 853 gfx::Vector2dF offset; |
854 if (texture_size_in_layer_.GetArea() > 0) | 854 if (texture_size_in_layer_.GetArea() > 0) |
855 offset = frame_metadata.location_bar_content_translation; | 855 offset = frame_metadata.location_bar_content_translation; |
856 offset.set_y(offset.y() + frame_metadata.overdraw_bottom_height); | 856 offset.set_y(offset.y() + frame_metadata.overdraw_bottom_height); |
857 offset.Scale(frame_metadata.device_scale_factor); | 857 offset.Scale(frame_metadata.device_scale_factor); |
858 content_size_in_layer_ = | 858 content_size_in_layer_ = |
859 gfx::Size(texture_size_in_layer_.width() - offset.x(), | 859 gfx::Size(texture_size_in_layer_.width() - offset.x(), |
860 texture_size_in_layer_.height() - offset.y()); | 860 texture_size_in_layer_.height() - offset.y()); |
861 | 861 |
862 overscroll_effect_->UpdateDisplayParameters( | 862 if (overscroll_effect_) { |
863 CreateOverscrollDisplayParameters(frame_metadata)); | 863 overscroll_effect_->UpdateDisplayParameters( |
| 864 CreateOverscrollDisplayParameters(frame_metadata)); |
| 865 } |
864 } | 866 } |
865 | 867 |
866 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( | 868 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
867 uint32 output_surface_id, | 869 uint32 output_surface_id, |
868 scoped_ptr<cc::CompositorFrame> frame) { | 870 scoped_ptr<cc::CompositorFrame> frame) { |
869 if (!frame->delegated_frame_data) { | 871 if (!frame->delegated_frame_data) { |
870 LOG(ERROR) << "Non-delegated renderer path no longer supported"; | 872 LOG(ERROR) << "Non-delegated renderer path no longer supported"; |
871 return; | 873 return; |
872 } | 874 } |
873 | 875 |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1022 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; | 1024 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; |
1023 } | 1025 } |
1024 | 1026 |
1025 void RenderWidgetHostViewAndroid::AttachLayers() { | 1027 void RenderWidgetHostViewAndroid::AttachLayers() { |
1026 if (!content_view_core_) | 1028 if (!content_view_core_) |
1027 return; | 1029 return; |
1028 if (!layer_.get()) | 1030 if (!layer_.get()) |
1029 return; | 1031 return; |
1030 | 1032 |
1031 content_view_core_->AttachLayer(layer_); | 1033 content_view_core_->AttachLayer(layer_); |
1032 if (overscroll_effect_enabled_) | 1034 if (overscroll_effect_) |
1033 overscroll_effect_->Enable(); | 1035 overscroll_effect_->Enable(); |
1034 layer_->SetHideLayerAndSubtree(!is_showing_); | 1036 layer_->SetHideLayerAndSubtree(!is_showing_); |
1035 } | 1037 } |
1036 | 1038 |
1037 void RenderWidgetHostViewAndroid::RemoveLayers() { | 1039 void RenderWidgetHostViewAndroid::RemoveLayers() { |
1038 if (!content_view_core_) | 1040 if (!content_view_core_) |
1039 return; | 1041 return; |
1040 if (!layer_.get()) | 1042 if (!layer_.get()) |
1041 return; | 1043 return; |
1042 | 1044 |
1043 content_view_core_->RemoveLayer(layer_); | 1045 content_view_core_->RemoveLayer(layer_); |
1044 overscroll_effect_->Disable(); | 1046 if (overscroll_effect_) |
| 1047 overscroll_effect_->Disable(); |
1045 } | 1048 } |
1046 | 1049 |
1047 void RenderWidgetHostViewAndroid::SetNeedsAnimate() { | 1050 void RenderWidgetHostViewAndroid::SetNeedsAnimate() { |
1048 content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); | 1051 content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); |
1049 } | 1052 } |
1050 | 1053 |
1051 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 1054 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
1052 return overscroll_effect_->Animate(frame_time); | 1055 return overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; |
1053 } | 1056 } |
1054 | 1057 |
1055 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( | 1058 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( |
1056 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, | 1059 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, |
1057 int gpu_host_id) { | 1060 int gpu_host_id) { |
1058 NOTREACHED(); | 1061 NOTREACHED(); |
1059 } | 1062 } |
1060 | 1063 |
1061 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { | 1064 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { |
1062 NOTREACHED(); | 1065 NOTREACHED(); |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1202 | 1205 |
1203 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( | 1206 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
1204 const blink::WebMouseWheelEvent& event) { | 1207 const blink::WebMouseWheelEvent& event) { |
1205 if (host_) | 1208 if (host_) |
1206 host_->ForwardWheelEvent(event); | 1209 host_->ForwardWheelEvent(event); |
1207 } | 1210 } |
1208 | 1211 |
1209 void RenderWidgetHostViewAndroid::SendGestureEvent( | 1212 void RenderWidgetHostViewAndroid::SendGestureEvent( |
1210 const blink::WebGestureEvent& event) { | 1213 const blink::WebGestureEvent& event) { |
1211 // Sending a gesture that may trigger overscroll should resume the effect. | 1214 // Sending a gesture that may trigger overscroll should resume the effect. |
1212 if (overscroll_effect_enabled_) | 1215 if (overscroll_effect_) |
1213 overscroll_effect_->Enable(); | 1216 overscroll_effect_->Enable(); |
1214 | 1217 |
1215 if (host_) | 1218 if (host_) |
1216 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); | 1219 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); |
1217 } | 1220 } |
1218 | 1221 |
1219 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { | 1222 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { |
1220 if (host_) | 1223 if (host_) |
1221 host_->MoveCaret(point); | 1224 host_->MoveCaret(point); |
1222 } | 1225 } |
1223 | 1226 |
1224 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1227 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
1225 return cached_background_color_; | 1228 return cached_background_color_; |
1226 } | 1229 } |
1227 | 1230 |
1228 void RenderWidgetHostViewAndroid::DidOverscroll( | 1231 void RenderWidgetHostViewAndroid::DidOverscroll( |
1229 const DidOverscrollParams& params) { | 1232 const DidOverscrollParams& params) { |
1230 if (!content_view_core_ || !layer_ || !is_showing_) | 1233 if (!content_view_core_ || !layer_ || !is_showing_) |
1231 return; | 1234 return; |
1232 | 1235 |
1233 const float device_scale_factor = content_view_core_->GetDpiScale(); | 1236 const float device_scale_factor = content_view_core_->GetDpiScale(); |
1234 if (overscroll_effect_->OnOverscrolled( | 1237 |
| 1238 if (overscroll_effect_ && |
| 1239 overscroll_effect_->OnOverscrolled( |
1235 content_view_core_->GetLayer(), | 1240 content_view_core_->GetLayer(), |
1236 base::TimeTicks::Now(), | 1241 base::TimeTicks::Now(), |
1237 gfx::ScaleVector2d(params.accumulated_overscroll, | 1242 gfx::ScaleVector2d(params.accumulated_overscroll, |
1238 device_scale_factor), | 1243 device_scale_factor), |
1239 gfx::ScaleVector2d(params.latest_overscroll_delta, | 1244 gfx::ScaleVector2d(params.latest_overscroll_delta, |
1240 device_scale_factor), | 1245 device_scale_factor), |
1241 gfx::ScaleVector2d(params.current_fling_velocity, | 1246 gfx::ScaleVector2d(params.current_fling_velocity, |
1242 device_scale_factor))) { | 1247 device_scale_factor))) { |
1243 SetNeedsAnimate(); | 1248 SetNeedsAnimate(); |
1244 } | 1249 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1276 AttachLayers(); | 1281 AttachLayers(); |
1277 if (content_view_core_ && !using_synchronous_compositor_) { | 1282 if (content_view_core_ && !using_synchronous_compositor_) { |
1278 content_view_core_->GetWindowAndroid()->AddObserver(this); | 1283 content_view_core_->GetWindowAndroid()->AddObserver(this); |
1279 observing_root_window_ = true; | 1284 observing_root_window_ = true; |
1280 if (needs_begin_frame_) | 1285 if (needs_begin_frame_) |
1281 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); | 1286 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); |
1282 } | 1287 } |
1283 | 1288 |
1284 if (resize && content_view_core_) | 1289 if (resize && content_view_core_) |
1285 WasResized(); | 1290 WasResized(); |
| 1291 |
| 1292 if (!content_view_core_) { |
| 1293 overscroll_effect_.reset(); |
| 1294 } else if (overscroll_effect_enabled_ && !overscroll_effect_) { |
| 1295 DCHECK(content_view_core_->GetWindowAndroid()->GetCompositor()); |
| 1296 overscroll_effect_ = |
| 1297 OverscrollGlow::Create(&content_view_core_->GetWindowAndroid() |
| 1298 ->GetCompositor() |
| 1299 ->GetSystemUIResourceManager()); |
| 1300 } |
1286 } | 1301 } |
1287 | 1302 |
1288 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1303 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
1289 while (!ack_callbacks_.empty()) { | 1304 while (!ack_callbacks_.empty()) { |
1290 ack_callbacks_.front().Run(); | 1305 ack_callbacks_.front().Run(); |
1291 ack_callbacks_.pop(); | 1306 ack_callbacks_.pop(); |
1292 } | 1307 } |
1293 } | 1308 } |
1294 | 1309 |
1295 void RenderWidgetHostViewAndroid::OnGestureEvent( | 1310 void RenderWidgetHostViewAndroid::OnGestureEvent( |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1481 results->orientationAngle = display.RotationAsDegree(); | 1496 results->orientationAngle = display.RotationAsDegree(); |
1482 results->orientationType = | 1497 results->orientationType = |
1483 RenderWidgetHostViewBase::GetOrientationTypeFromDisplay(display); | 1498 RenderWidgetHostViewBase::GetOrientationTypeFromDisplay(display); |
1484 gfx::DeviceDisplayInfo info; | 1499 gfx::DeviceDisplayInfo info; |
1485 results->depth = info.GetBitsPerPixel(); | 1500 results->depth = info.GetBitsPerPixel(); |
1486 results->depthPerComponent = info.GetBitsPerComponent(); | 1501 results->depthPerComponent = info.GetBitsPerComponent(); |
1487 results->isMonochrome = (results->depthPerComponent == 0); | 1502 results->isMonochrome = (results->depthPerComponent == 0); |
1488 } | 1503 } |
1489 | 1504 |
1490 } // namespace content | 1505 } // namespace content |
OLD | NEW |