Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 377013002: android: Use UIResource for overscroll glow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698