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/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 const std::vector<webkit::npapi::WebPluginGeometry>& moves) { | 289 const std::vector<webkit::npapi::WebPluginGeometry>& moves) { |
290 // We don't have plugin windows on Android. Do nothing. Note: this is called | 290 // We don't have plugin windows on Android. Do nothing. Note: this is called |
291 // from RenderWidgetHost::OnUpdateRect which is itself invoked while | 291 // from RenderWidgetHost::OnUpdateRect which is itself invoked while |
292 // processing the corresponding message from Renderer. | 292 // processing the corresponding message from Renderer. |
293 } | 293 } |
294 | 294 |
295 void RenderWidgetHostViewAndroid::Focus() { | 295 void RenderWidgetHostViewAndroid::Focus() { |
296 host_->Focus(); | 296 host_->Focus(); |
297 host_->SetInputMethodActive(true); | 297 host_->SetInputMethodActive(true); |
298 ResetClipping(); | 298 ResetClipping(); |
| 299 if (overscroll_effect_) |
| 300 overscroll_effect_->SetEnabled(true); |
299 } | 301 } |
300 | 302 |
301 void RenderWidgetHostViewAndroid::Blur() { | 303 void RenderWidgetHostViewAndroid::Blur() { |
302 host_->ExecuteEditCommand("Unselect", ""); | 304 host_->ExecuteEditCommand("Unselect", ""); |
303 host_->SetInputMethodActive(false); | 305 host_->SetInputMethodActive(false); |
304 host_->Blur(); | 306 host_->Blur(); |
305 | |
306 if (overscroll_effect_) | 307 if (overscroll_effect_) |
307 overscroll_effect_->Finish(); | 308 overscroll_effect_->SetEnabled(false); |
308 } | 309 } |
309 | 310 |
310 bool RenderWidgetHostViewAndroid::HasFocus() const { | 311 bool RenderWidgetHostViewAndroid::HasFocus() const { |
311 if (!content_view_core_) | 312 if (!content_view_core_) |
312 return false; // ContentViewCore not created yet. | 313 return false; // ContentViewCore not created yet. |
313 | 314 |
314 return content_view_core_->HasFocus(); | 315 return content_view_core_->HasFocus(); |
315 } | 316 } |
316 | 317 |
317 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { | 318 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 if (!content_view_core_) | 733 if (!content_view_core_) |
733 return; | 734 return; |
734 | 735 |
735 if (overscroll_effect_) | 736 if (overscroll_effect_) |
736 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); | 737 content_view_core_->RemoveLayer(overscroll_effect_->root_layer()); |
737 | 738 |
738 content_view_core_->RemoveLayer(layer_); | 739 content_view_core_->RemoveLayer(layer_); |
739 } | 740 } |
740 | 741 |
741 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 742 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
742 if (!overscroll_effect_ || !HasFocus()) | 743 if (!overscroll_effect_) |
743 return false; | 744 return false; |
744 return overscroll_effect_->Animate(frame_time); | 745 return overscroll_effect_->Animate(frame_time); |
745 } | 746 } |
746 | 747 |
747 void RenderWidgetHostViewAndroid::CreateOverscrollEffectIfNecessary() { | 748 void RenderWidgetHostViewAndroid::CreateOverscrollEffectIfNecessary() { |
748 if (!overscroll_effect_enabled_ || overscroll_effect_) | 749 if (!overscroll_effect_enabled_ || overscroll_effect_) |
749 return; | 750 return; |
750 | 751 |
751 overscroll_effect_ = OverscrollGlow::Create(); | 752 overscroll_effect_ = OverscrollGlow::Create(true); |
752 | 753 |
753 // Prevent future creation attempts on failure. | 754 // Prevent future creation attempts on failure. |
754 if (!overscroll_effect_) | 755 if (!overscroll_effect_) |
755 overscroll_effect_enabled_ = false; | 756 overscroll_effect_enabled_ = false; |
756 | 757 |
757 if (overscroll_effect_ && content_view_core_ && are_layers_attached_) | 758 if (overscroll_effect_ && content_view_core_ && are_layers_attached_) |
758 content_view_core_->AttachLayer(overscroll_effect_->root_layer()); | 759 content_view_core_->AttachLayer(overscroll_effect_->root_layer()); |
759 } | 760 } |
760 | 761 |
761 void RenderWidgetHostViewAndroid::UpdateAnimationSize( | 762 void RenderWidgetHostViewAndroid::UpdateAnimationSize( |
762 const cc::CompositorFrameMetadata& frame_metadata) { | 763 const cc::CompositorFrameMetadata& frame_metadata) { |
763 if (!overscroll_effect_) | 764 if (!overscroll_effect_) |
764 return; | 765 return; |
765 // Disable edge effects for axes on which scrolling is impossible. | 766 // Disable edge effects for axes on which scrolling is impossible. |
766 gfx::SizeF ceiled_viewport_size = | 767 gfx::SizeF ceiled_viewport_size = |
767 gfx::ToCeiledSize(frame_metadata.viewport_size); | 768 gfx::ToCeiledSize(frame_metadata.viewport_size); |
768 overscroll_effect_->set_horizontal_overscroll_enabled( | 769 overscroll_effect_->set_horizontal_overscroll_enabled( |
769 ceiled_viewport_size.width() < frame_metadata.root_layer_size.width()); | 770 ceiled_viewport_size.width() < frame_metadata.root_layer_size.width()); |
770 overscroll_effect_->set_vertical_overscroll_enabled( | 771 overscroll_effect_->set_vertical_overscroll_enabled( |
771 ceiled_viewport_size.height() < frame_metadata.root_layer_size.height()); | 772 ceiled_viewport_size.height() < frame_metadata.root_layer_size.height()); |
772 overscroll_effect_->set_size(content_size_in_layer_); | 773 overscroll_effect_->set_size(content_size_in_layer_); |
773 } | 774 } |
774 | 775 |
775 void RenderWidgetHostViewAndroid::ScheduleAnimationIfNecessary() { | 776 void RenderWidgetHostViewAndroid::ScheduleAnimationIfNecessary() { |
776 if (!content_view_core_) | 777 if (!content_view_core_) |
777 return; | 778 return; |
778 if (overscroll_effect_ && overscroll_effect_->IsActive()) | 779 if (overscroll_effect_ && overscroll_effect_->NeedsAnimate()) |
779 content_view_core_->SetNeedsAnimate(); | 780 content_view_core_->SetNeedsAnimate(); |
780 } | 781 } |
781 | 782 |
782 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( | 783 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( |
783 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, | 784 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, |
784 int gpu_host_id) { | 785 int gpu_host_id) { |
785 NOTREACHED(); | 786 NOTREACHED(); |
786 } | 787 } |
787 | 788 |
788 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { | 789 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 } | 957 } |
957 | 958 |
958 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( | 959 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
959 const WebKit::WebMouseWheelEvent& event) { | 960 const WebKit::WebMouseWheelEvent& event) { |
960 if (host_) | 961 if (host_) |
961 host_->ForwardWheelEvent(event); | 962 host_->ForwardWheelEvent(event); |
962 } | 963 } |
963 | 964 |
964 void RenderWidgetHostViewAndroid::SendGestureEvent( | 965 void RenderWidgetHostViewAndroid::SendGestureEvent( |
965 const WebKit::WebGestureEvent& event) { | 966 const WebKit::WebGestureEvent& event) { |
| 967 // Sending a gesture that may trigger overscroll should resume the effect. |
| 968 if (overscroll_effect_) |
| 969 overscroll_effect_->SetEnabled(true); |
| 970 |
966 if (host_) | 971 if (host_) |
967 host_->ForwardGestureEvent(event); | 972 host_->ForwardGestureEvent(event); |
968 } | 973 } |
969 | 974 |
970 void RenderWidgetHostViewAndroid::SelectRange(const gfx::Point& start, | 975 void RenderWidgetHostViewAndroid::SelectRange(const gfx::Point& start, |
971 const gfx::Point& end) { | 976 const gfx::Point& end) { |
972 if (host_) | 977 if (host_) |
973 host_->SelectRange(start, end); | 978 host_->SelectRange(start, end); |
974 } | 979 } |
975 | 980 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 } | 1028 } |
1024 | 1029 |
1025 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1030 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
1026 return cached_background_color_; | 1031 return cached_background_color_; |
1027 } | 1032 } |
1028 | 1033 |
1029 void RenderWidgetHostViewAndroid::OnOverscrolled( | 1034 void RenderWidgetHostViewAndroid::OnOverscrolled( |
1030 gfx::Vector2dF accumulated_overscroll, | 1035 gfx::Vector2dF accumulated_overscroll, |
1031 gfx::Vector2dF current_fling_velocity) { | 1036 gfx::Vector2dF current_fling_velocity) { |
1032 CreateOverscrollEffectIfNecessary(); | 1037 CreateOverscrollEffectIfNecessary(); |
1033 if (!overscroll_effect_ || !HasFocus()) | 1038 if (!overscroll_effect_) |
1034 return; | 1039 return; |
1035 | 1040 |
1036 overscroll_effect_->OnOverscrolled(base::TimeTicks::Now(), | 1041 overscroll_effect_->OnOverscrolled(base::TimeTicks::Now(), |
1037 accumulated_overscroll, | 1042 accumulated_overscroll, |
1038 current_fling_velocity); | 1043 current_fling_velocity); |
1039 ScheduleAnimationIfNecessary(); | 1044 ScheduleAnimationIfNecessary(); |
1040 } | 1045 } |
1041 | 1046 |
1042 void RenderWidgetHostViewAndroid::SetContentViewCore( | 1047 void RenderWidgetHostViewAndroid::SetContentViewCore( |
1043 ContentViewCoreImpl* content_view_core) { | 1048 ContentViewCoreImpl* content_view_core) { |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1103 // RenderWidgetHostView, public: | 1108 // RenderWidgetHostView, public: |
1104 | 1109 |
1105 // static | 1110 // static |
1106 RenderWidgetHostView* | 1111 RenderWidgetHostView* |
1107 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1112 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
1108 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1113 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
1109 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1114 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
1110 } | 1115 } |
1111 | 1116 |
1112 } // namespace content | 1117 } // namespace content |
OLD | NEW |