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

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 and added test Created 6 years, 5 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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698