| 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 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 void RenderWidgetHostViewAndroid::SetSize(const gfx::Size& size) { | 207 void RenderWidgetHostViewAndroid::SetSize(const gfx::Size& size) { |
| 208 // Ignore the given size as only the Java code has the power to | 208 // Ignore the given size as only the Java code has the power to |
| 209 // resize the view on Android. | 209 // resize the view on Android. |
| 210 WasResized(); | 210 WasResized(); |
| 211 } | 211 } |
| 212 | 212 |
| 213 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { | 213 void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { |
| 214 SetSize(rect.size()); | 214 SetSize(rect.size()); |
| 215 } | 215 } |
| 216 | 216 |
| 217 WebKit::WebGLId RenderWidgetHostViewAndroid::GetScaledContentTexture( | 217 blink::WebGLId RenderWidgetHostViewAndroid::GetScaledContentTexture( |
| 218 float scale, | 218 float scale, |
| 219 gfx::Size* out_size) { | 219 gfx::Size* out_size) { |
| 220 gfx::Size size(gfx::ToCeiledSize( | 220 gfx::Size size(gfx::ToCeiledSize( |
| 221 gfx::ScaleSize(texture_size_in_layer_, scale))); | 221 gfx::ScaleSize(texture_size_in_layer_, scale))); |
| 222 | 222 |
| 223 if (!CompositorImpl::IsInitialized() || | 223 if (!CompositorImpl::IsInitialized() || |
| 224 texture_id_in_layer_ == 0 || | 224 texture_id_in_layer_ == 0 || |
| 225 texture_size_in_layer_.IsEmpty() || | 225 texture_size_in_layer_.IsEmpty() || |
| 226 size.IsEmpty()) { | 226 size.IsEmpty()) { |
| 227 if (out_size) | 227 if (out_size) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 247 texture_size_in_layer_.IsEmpty()) | 247 texture_size_in_layer_.IsEmpty()) |
| 248 return false; | 248 return false; |
| 249 | 249 |
| 250 gfx::JavaBitmap bitmap(jbitmap); | 250 gfx::JavaBitmap bitmap(jbitmap); |
| 251 | 251 |
| 252 // TODO(dtrainor): Eventually add support for multiple formats here. | 252 // TODO(dtrainor): Eventually add support for multiple formats here. |
| 253 DCHECK(bitmap.format() == ANDROID_BITMAP_FORMAT_RGBA_8888); | 253 DCHECK(bitmap.format() == ANDROID_BITMAP_FORMAT_RGBA_8888); |
| 254 | 254 |
| 255 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper(); | 255 GLHelper* helper = ImageTransportFactoryAndroid::GetInstance()->GetGLHelper(); |
| 256 | 256 |
| 257 WebKit::WebGLId texture = helper->CopyAndScaleTexture( | 257 blink::WebGLId texture = helper->CopyAndScaleTexture( |
| 258 texture_id_in_layer_, | 258 texture_id_in_layer_, |
| 259 texture_size_in_layer_, | 259 texture_size_in_layer_, |
| 260 bitmap.size(), | 260 bitmap.size(), |
| 261 true, | 261 true, |
| 262 GLHelper::SCALER_QUALITY_FAST); | 262 GLHelper::SCALER_QUALITY_FAST); |
| 263 if (texture == 0) | 263 if (texture == 0) |
| 264 return false; | 264 return false; |
| 265 | 265 |
| 266 helper->ReadbackTextureSync(texture, | 266 helper->ReadbackTextureSync(texture, |
| 267 gfx::Rect(bitmap.size()), | 267 gfx::Rect(bitmap.size()), |
| 268 static_cast<unsigned char*> (bitmap.pixels())); | 268 static_cast<unsigned char*> (bitmap.pixels())); |
| 269 | 269 |
| 270 WebKit::WebGraphicsContext3D* context = | 270 blink::WebGraphicsContext3D* context = |
| 271 ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); | 271 ImageTransportFactoryAndroid::GetInstance()->GetContext3D(); |
| 272 context->deleteTexture(texture); | 272 context->deleteTexture(texture); |
| 273 | 273 |
| 274 return true; | 274 return true; |
| 275 } | 275 } |
| 276 | 276 |
| 277 bool RenderWidgetHostViewAndroid::HasValidFrame() const { | 277 bool RenderWidgetHostViewAndroid::HasValidFrame() const { |
| 278 if (!content_view_core_) | 278 if (!content_view_core_) |
| 279 return false; | 279 return false; |
| 280 if (texture_size_in_layer_.IsEmpty()) | 280 if (texture_size_in_layer_.IsEmpty()) |
| (...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 if (delegated_renderer_layer_.get()) | 946 if (delegated_renderer_layer_.get()) |
| 947 DestroyDelegatedContent(); | 947 DestroyDelegatedContent(); |
| 948 } | 948 } |
| 949 | 949 |
| 950 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface( | 950 bool RenderWidgetHostViewAndroid::HasAcceleratedSurface( |
| 951 const gfx::Size& desired_size) { | 951 const gfx::Size& desired_size) { |
| 952 NOTREACHED(); | 952 NOTREACHED(); |
| 953 return false; | 953 return false; |
| 954 } | 954 } |
| 955 | 955 |
| 956 void RenderWidgetHostViewAndroid::GetScreenInfo(WebKit::WebScreenInfo* result) { | 956 void RenderWidgetHostViewAndroid::GetScreenInfo(blink::WebScreenInfo* result) { |
| 957 // ScreenInfo isn't tied to the widget on Android. Always return the default. | 957 // ScreenInfo isn't tied to the widget on Android. Always return the default. |
| 958 RenderWidgetHostViewBase::GetDefaultScreenInfo(result); | 958 RenderWidgetHostViewBase::GetDefaultScreenInfo(result); |
| 959 } | 959 } |
| 960 | 960 |
| 961 // TODO(jrg): Find out the implications and answer correctly here, | 961 // TODO(jrg): Find out the implications and answer correctly here, |
| 962 // as we are returning the WebView and not root window bounds. | 962 // as we are returning the WebView and not root window bounds. |
| 963 gfx::Rect RenderWidgetHostViewAndroid::GetBoundsInRootWindow() { | 963 gfx::Rect RenderWidgetHostViewAndroid::GetBoundsInRootWindow() { |
| 964 return GetViewBounds(); | 964 return GetViewBounds(); |
| 965 } | 965 } |
| 966 | 966 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 978 bool has_horizontal_scrollbar) { | 978 bool has_horizontal_scrollbar) { |
| 979 // intentionally empty, like RenderWidgetHostViewViews | 979 // intentionally empty, like RenderWidgetHostViewViews |
| 980 } | 980 } |
| 981 | 981 |
| 982 void RenderWidgetHostViewAndroid::SetScrollOffsetPinning( | 982 void RenderWidgetHostViewAndroid::SetScrollOffsetPinning( |
| 983 bool is_pinned_to_left, bool is_pinned_to_right) { | 983 bool is_pinned_to_left, bool is_pinned_to_right) { |
| 984 // intentionally empty, like RenderWidgetHostViewViews | 984 // intentionally empty, like RenderWidgetHostViewViews |
| 985 } | 985 } |
| 986 | 986 |
| 987 void RenderWidgetHostViewAndroid::UnhandledWheelEvent( | 987 void RenderWidgetHostViewAndroid::UnhandledWheelEvent( |
| 988 const WebKit::WebMouseWheelEvent& event) { | 988 const blink::WebMouseWheelEvent& event) { |
| 989 // intentionally empty, like RenderWidgetHostViewViews | 989 // intentionally empty, like RenderWidgetHostViewViews |
| 990 } | 990 } |
| 991 | 991 |
| 992 void RenderWidgetHostViewAndroid::GestureEventAck( | 992 void RenderWidgetHostViewAndroid::GestureEventAck( |
| 993 int gesture_event_type, | 993 int gesture_event_type, |
| 994 InputEventAckState ack_result) { | 994 InputEventAckState ack_result) { |
| 995 if (gesture_event_type == WebKit::WebInputEvent::GestureScrollUpdate && | 995 if (gesture_event_type == blink::WebInputEvent::GestureScrollUpdate && |
| 996 ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) { | 996 ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) { |
| 997 content_view_core_->OnScrollUpdateGestureConsumed(); | 997 content_view_core_->OnScrollUpdateGestureConsumed(); |
| 998 } | 998 } |
| 999 if (gesture_event_type == WebKit::WebInputEvent::GestureFlingStart && | 999 if (gesture_event_type == blink::WebInputEvent::GestureFlingStart && |
| 1000 ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) { | 1000 ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) { |
| 1001 content_view_core_->UnhandledFlingStartEvent(); | 1001 content_view_core_->UnhandledFlingStartEvent(); |
| 1002 } | 1002 } |
| 1003 } | 1003 } |
| 1004 | 1004 |
| 1005 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( | 1005 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( |
| 1006 const WebKit::WebInputEvent& input_event) { | 1006 const blink::WebInputEvent& input_event) { |
| 1007 if (host_) { | 1007 if (host_) { |
| 1008 SynchronousCompositorImpl* compositor = | 1008 SynchronousCompositorImpl* compositor = |
| 1009 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), | 1009 SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), |
| 1010 host_->GetRoutingID()); | 1010 host_->GetRoutingID()); |
| 1011 if (compositor) | 1011 if (compositor) |
| 1012 return compositor->HandleInputEvent(input_event); | 1012 return compositor->HandleInputEvent(input_event); |
| 1013 } | 1013 } |
| 1014 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; | 1014 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
| 1015 } | 1015 } |
| 1016 | 1016 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 | 1101 |
| 1102 // Methods called from the host to the render | 1102 // Methods called from the host to the render |
| 1103 | 1103 |
| 1104 void RenderWidgetHostViewAndroid::SendKeyEvent( | 1104 void RenderWidgetHostViewAndroid::SendKeyEvent( |
| 1105 const NativeWebKeyboardEvent& event) { | 1105 const NativeWebKeyboardEvent& event) { |
| 1106 if (host_) | 1106 if (host_) |
| 1107 host_->ForwardKeyboardEvent(event); | 1107 host_->ForwardKeyboardEvent(event); |
| 1108 } | 1108 } |
| 1109 | 1109 |
| 1110 void RenderWidgetHostViewAndroid::SendTouchEvent( | 1110 void RenderWidgetHostViewAndroid::SendTouchEvent( |
| 1111 const WebKit::WebTouchEvent& event) { | 1111 const blink::WebTouchEvent& event) { |
| 1112 if (host_) | 1112 if (host_) |
| 1113 host_->ForwardTouchEventWithLatencyInfo(event, ui::LatencyInfo()); | 1113 host_->ForwardTouchEventWithLatencyInfo(event, ui::LatencyInfo()); |
| 1114 } | 1114 } |
| 1115 | 1115 |
| 1116 | 1116 |
| 1117 void RenderWidgetHostViewAndroid::SendMouseEvent( | 1117 void RenderWidgetHostViewAndroid::SendMouseEvent( |
| 1118 const WebKit::WebMouseEvent& event) { | 1118 const blink::WebMouseEvent& event) { |
| 1119 if (host_) | 1119 if (host_) |
| 1120 host_->ForwardMouseEvent(event); | 1120 host_->ForwardMouseEvent(event); |
| 1121 } | 1121 } |
| 1122 | 1122 |
| 1123 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( | 1123 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
| 1124 const WebKit::WebMouseWheelEvent& event) { | 1124 const blink::WebMouseWheelEvent& event) { |
| 1125 if (host_) | 1125 if (host_) |
| 1126 host_->ForwardWheelEvent(event); | 1126 host_->ForwardWheelEvent(event); |
| 1127 } | 1127 } |
| 1128 | 1128 |
| 1129 void RenderWidgetHostViewAndroid::SendGestureEvent( | 1129 void RenderWidgetHostViewAndroid::SendGestureEvent( |
| 1130 const WebKit::WebGestureEvent& event) { | 1130 const blink::WebGestureEvent& event) { |
| 1131 // Sending a gesture that may trigger overscroll should resume the effect. | 1131 // Sending a gesture that may trigger overscroll should resume the effect. |
| 1132 if (overscroll_effect_) | 1132 if (overscroll_effect_) |
| 1133 overscroll_effect_->SetEnabled(true); | 1133 overscroll_effect_->SetEnabled(true); |
| 1134 | 1134 |
| 1135 if (host_) | 1135 if (host_) |
| 1136 host_->ForwardGestureEvent(event); | 1136 host_->ForwardGestureEvent(event); |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 void RenderWidgetHostViewAndroid::SelectRange(const gfx::Point& start, | 1139 void RenderWidgetHostViewAndroid::SelectRange(const gfx::Point& start, |
| 1140 const gfx::Point& end) { | 1140 const gfx::Point& end) { |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 | 1338 |
| 1339 DCHECK_EQ(source->width(), dst_size_in_pixel.width()); | 1339 DCHECK_EQ(source->width(), dst_size_in_pixel.width()); |
| 1340 DCHECK_EQ(source->height(), dst_size_in_pixel.height()); | 1340 DCHECK_EQ(source->height(), dst_size_in_pixel.height()); |
| 1341 | 1341 |
| 1342 ignore_result(scoped_callback_runner.Release()); | 1342 ignore_result(scoped_callback_runner.Release()); |
| 1343 callback.Run(true, *source); | 1343 callback.Run(true, *source); |
| 1344 } | 1344 } |
| 1345 | 1345 |
| 1346 // static | 1346 // static |
| 1347 void RenderWidgetHostViewPort::GetDefaultScreenInfo( | 1347 void RenderWidgetHostViewPort::GetDefaultScreenInfo( |
| 1348 WebKit::WebScreenInfo* results) { | 1348 blink::WebScreenInfo* results) { |
| 1349 const gfx::Display& display = | 1349 const gfx::Display& display = |
| 1350 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 1350 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
| 1351 results->rect = display.bounds(); | 1351 results->rect = display.bounds(); |
| 1352 // TODO(husky): Remove any system controls from availableRect. | 1352 // TODO(husky): Remove any system controls from availableRect. |
| 1353 results->availableRect = display.work_area(); | 1353 results->availableRect = display.work_area(); |
| 1354 results->deviceScaleFactor = display.device_scale_factor(); | 1354 results->deviceScaleFactor = display.device_scale_factor(); |
| 1355 gfx::DeviceDisplayInfo info; | 1355 gfx::DeviceDisplayInfo info; |
| 1356 results->depth = info.GetBitsPerPixel(); | 1356 results->depth = info.GetBitsPerPixel(); |
| 1357 results->depthPerComponent = info.GetBitsPerComponent(); | 1357 results->depthPerComponent = info.GetBitsPerComponent(); |
| 1358 results->isMonochrome = (results->depthPerComponent == 0); | 1358 results->isMonochrome = (results->depthPerComponent == 0); |
| 1359 } | 1359 } |
| 1360 | 1360 |
| 1361 //////////////////////////////////////////////////////////////////////////////// | 1361 //////////////////////////////////////////////////////////////////////////////// |
| 1362 // RenderWidgetHostView, public: | 1362 // RenderWidgetHostView, public: |
| 1363 | 1363 |
| 1364 // static | 1364 // static |
| 1365 RenderWidgetHostView* | 1365 RenderWidgetHostView* |
| 1366 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1366 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1367 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1367 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1368 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1368 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1369 } | 1369 } |
| 1370 | 1370 |
| 1371 } // namespace content | 1371 } // namespace content |
| OLD | NEW |