| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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/android/content_view_core_impl.h" | 5 #include "content/browser/android/content_view_core_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 | 416 |
| 417 // All positions and sizes are in CSS pixels. | 417 // All positions and sizes are in CSS pixels. |
| 418 // Note that viewport_width/height is a best effort based. | 418 // Note that viewport_width/height is a best effort based. |
| 419 // ContentViewCore has the actual information about the physical viewport size. | 419 // ContentViewCore has the actual information about the physical viewport size. |
| 420 void ContentViewCoreImpl::UpdateFrameInfo( | 420 void ContentViewCoreImpl::UpdateFrameInfo( |
| 421 const gfx::Vector2dF& scroll_offset, | 421 const gfx::Vector2dF& scroll_offset, |
| 422 float page_scale_factor, | 422 float page_scale_factor, |
| 423 const gfx::Vector2dF& page_scale_factor_limits, | 423 const gfx::Vector2dF& page_scale_factor_limits, |
| 424 const gfx::SizeF& content_size, | 424 const gfx::SizeF& content_size, |
| 425 const gfx::SizeF& viewport_size, | 425 const gfx::SizeF& viewport_size, |
| 426 const gfx::Vector2dF& controls_offset, | 426 const gfx::Vector2dF& top_controls_height, |
| 427 const gfx::Vector2dF& content_offset, | 427 const float top_controls_shown_ratio, |
| 428 const gfx::Vector2dF& bottom_controls_height, |
| 429 const float bottom_controls_shown_ratio, |
| 428 bool is_mobile_optimized_hint, | 430 bool is_mobile_optimized_hint, |
| 429 const gfx::SelectionBound& selection_start) { | 431 const gfx::SelectionBound& selection_start) { |
| 430 JNIEnv* env = AttachCurrentThread(); | 432 JNIEnv* env = AttachCurrentThread(); |
| 431 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 433 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 432 if (obj.is_null() || !window_android_) | 434 if (obj.is_null() || !window_android_) |
| 433 return; | 435 return; |
| 434 | 436 |
| 435 window_android_->set_content_offset( | 437 window_android_->set_content_offset(gfx::ScaleVector2d( |
| 436 gfx::ScaleVector2d(content_offset, dpi_scale_)); | 438 gfx::Vector2dF(0.0f, top_controls_height.y() * top_controls_shown_ratio), |
| 439 dpi_scale_)); |
| 437 | 440 |
| 438 page_scale_ = page_scale_factor; | 441 page_scale_ = page_scale_factor; |
| 439 | 442 |
| 440 // The CursorAnchorInfo API in Android only supports zero width selection | 443 // The CursorAnchorInfo API in Android only supports zero width selection |
| 441 // bounds. | 444 // bounds. |
| 442 const jboolean has_insertion_marker = | 445 const jboolean has_insertion_marker = |
| 443 selection_start.type() == gfx::SelectionBound::CENTER; | 446 selection_start.type() == gfx::SelectionBound::CENTER; |
| 444 const jboolean is_insertion_marker_visible = selection_start.visible(); | 447 const jboolean is_insertion_marker_visible = selection_start.visible(); |
| 445 const jfloat insertion_marker_horizontal = | 448 const jfloat insertion_marker_horizontal = |
| 446 has_insertion_marker ? selection_start.edge_top().x() : 0.0f; | 449 has_insertion_marker ? selection_start.edge_top().x() : 0.0f; |
| 447 const jfloat insertion_marker_top = | 450 const jfloat insertion_marker_top = |
| 448 has_insertion_marker ? selection_start.edge_top().y() : 0.0f; | 451 has_insertion_marker ? selection_start.edge_top().y() : 0.0f; |
| 449 const jfloat insertion_marker_bottom = | 452 const jfloat insertion_marker_bottom = |
| 450 has_insertion_marker ? selection_start.edge_bottom().y() : 0.0f; | 453 has_insertion_marker ? selection_start.edge_bottom().y() : 0.0f; |
| 451 | 454 |
| 452 Java_ContentViewCore_updateFrameInfo( | 455 Java_ContentViewCore_updateFrameInfo( |
| 453 env, obj.obj(), | 456 env, obj.obj(), |
| 454 scroll_offset.x(), | 457 scroll_offset.x(), |
| 455 scroll_offset.y(), | 458 scroll_offset.y(), |
| 456 page_scale_factor, | 459 page_scale_factor, |
| 457 page_scale_factor_limits.x(), | 460 page_scale_factor_limits.x(), |
| 458 page_scale_factor_limits.y(), | 461 page_scale_factor_limits.y(), |
| 459 content_size.width(), | 462 content_size.width(), |
| 460 content_size.height(), | 463 content_size.height(), |
| 461 viewport_size.width(), | 464 viewport_size.width(), |
| 462 viewport_size.height(), | 465 viewport_size.height(), |
| 463 controls_offset.y(), | 466 top_controls_height.y(), |
| 464 content_offset.y(), | 467 top_controls_shown_ratio, |
| 468 bottom_controls_height.y(), |
| 469 bottom_controls_shown_ratio, |
| 465 is_mobile_optimized_hint, | 470 is_mobile_optimized_hint, |
| 466 has_insertion_marker, | 471 has_insertion_marker, |
| 467 is_insertion_marker_visible, | 472 is_insertion_marker_visible, |
| 468 insertion_marker_horizontal, | 473 insertion_marker_horizontal, |
| 469 insertion_marker_top, | 474 insertion_marker_top, |
| 470 insertion_marker_bottom); | 475 insertion_marker_bottom); |
| 471 } | 476 } |
| 472 | 477 |
| 473 void ContentViewCoreImpl::SetTitle(const base::string16& title) { | 478 void ContentViewCoreImpl::SetTitle(const base::string16& title) { |
| 474 JNIEnv* env = AttachCurrentThread(); | 479 JNIEnv* env = AttachCurrentThread(); |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 | 780 |
| 776 gfx::Size size_dip = gfx::ScaleToCeiledSize(size_pix, 1.0f / dpi_scale()); | 781 gfx::Size size_dip = gfx::ScaleToCeiledSize(size_pix, 1.0f / dpi_scale()); |
| 777 if (DoTopControlsShrinkBlinkSize()) | 782 if (DoTopControlsShrinkBlinkSize()) |
| 778 size_dip.Enlarge(0, -GetTopControlsHeightDip()); | 783 size_dip.Enlarge(0, -GetTopControlsHeightDip()); |
| 779 return size_dip; | 784 return size_dip; |
| 780 } | 785 } |
| 781 | 786 |
| 782 gfx::Size ContentViewCoreImpl::GetViewSize() const { | 787 gfx::Size ContentViewCoreImpl::GetViewSize() const { |
| 783 gfx::Size size = GetViewportSizeDip(); | 788 gfx::Size size = GetViewportSizeDip(); |
| 784 if (DoTopControlsShrinkBlinkSize()) | 789 if (DoTopControlsShrinkBlinkSize()) |
| 785 size.Enlarge(0, -GetTopControlsHeightDip()); | 790 size.Enlarge(0, -GetTopControlsHeightDip() - GetBottomControlsHeightDip()); |
| 786 return size; | 791 return size; |
| 787 } | 792 } |
| 788 | 793 |
| 789 gfx::Size ContentViewCoreImpl::GetPhysicalBackingSize() const { | 794 gfx::Size ContentViewCoreImpl::GetPhysicalBackingSize() const { |
| 790 JNIEnv* env = AttachCurrentThread(); | 795 JNIEnv* env = AttachCurrentThread(); |
| 791 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 796 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 792 if (j_obj.is_null()) | 797 if (j_obj.is_null()) |
| 793 return gfx::Size(); | 798 return gfx::Size(); |
| 794 return gfx::Size( | 799 return gfx::Size( |
| 795 Java_ContentViewCore_getPhysicalBackingWidthPix(env, j_obj.obj()), | 800 Java_ContentViewCore_getPhysicalBackingWidthPix(env, j_obj.obj()), |
| (...skipping 11 matching lines...) Expand all Loading... |
| 807 } | 812 } |
| 808 | 813 |
| 809 int ContentViewCoreImpl::GetTopControlsHeightPix() const { | 814 int ContentViewCoreImpl::GetTopControlsHeightPix() const { |
| 810 JNIEnv* env = AttachCurrentThread(); | 815 JNIEnv* env = AttachCurrentThread(); |
| 811 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 816 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 812 if (j_obj.is_null()) | 817 if (j_obj.is_null()) |
| 813 return 0; | 818 return 0; |
| 814 return Java_ContentViewCore_getTopControlsHeightPix(env, j_obj.obj()); | 819 return Java_ContentViewCore_getTopControlsHeightPix(env, j_obj.obj()); |
| 815 } | 820 } |
| 816 | 821 |
| 822 int ContentViewCoreImpl::GetBottomControlsHeightPix() const { |
| 823 JNIEnv* env = AttachCurrentThread(); |
| 824 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 825 if (j_obj.is_null()) |
| 826 return 0; |
| 827 return Java_ContentViewCore_getBottomControlsHeightPix(env, j_obj.obj()); |
| 828 } |
| 829 |
| 817 gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const { | 830 gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const { |
| 818 return gfx::ScaleToCeiledSize(GetViewportSizePix(), 1.0f / dpi_scale()); | 831 return gfx::ScaleToCeiledSize(GetViewportSizePix(), 1.0f / dpi_scale()); |
| 819 } | 832 } |
| 820 | 833 |
| 821 bool ContentViewCoreImpl::DoTopControlsShrinkBlinkSize() const { | 834 bool ContentViewCoreImpl::DoTopControlsShrinkBlinkSize() const { |
| 822 JNIEnv* env = AttachCurrentThread(); | 835 JNIEnv* env = AttachCurrentThread(); |
| 823 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 836 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 824 if (j_obj.is_null()) | 837 if (j_obj.is_null()) |
| 825 return false; | 838 return false; |
| 826 return Java_ContentViewCore_doTopControlsShrinkBlinkSize(env, j_obj.obj()); | 839 return Java_ContentViewCore_doTopControlsShrinkBlinkSize(env, j_obj.obj()); |
| 827 } | 840 } |
| 828 | 841 |
| 829 float ContentViewCoreImpl::GetTopControlsHeightDip() const { | 842 float ContentViewCoreImpl::GetTopControlsHeightDip() const { |
| 830 return GetTopControlsHeightPix() / dpi_scale(); | 843 return GetTopControlsHeightPix() / dpi_scale(); |
| 831 } | 844 } |
| 832 | 845 |
| 846 float ContentViewCoreImpl::GetBottomControlsHeightDip() const { |
| 847 return GetBottomControlsHeightPix() / dpi_scale(); |
| 848 } |
| 849 |
| 833 void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) { | 850 void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) { |
| 834 root_layer_->InsertChild(layer, 0); | 851 root_layer_->InsertChild(layer, 0); |
| 835 root_layer_->SetIsDrawable(false); | 852 root_layer_->SetIsDrawable(false); |
| 836 } | 853 } |
| 837 | 854 |
| 838 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { | 855 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { |
| 839 layer->RemoveFromParent(); | 856 layer->RemoveFromParent(); |
| 840 | 857 |
| 841 if (!root_layer_->children().size()) | 858 if (!root_layer_->children().size()) |
| 842 root_layer_->SetIsDrawable(true); | 859 root_layer_->SetIsDrawable(true); |
| (...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1642 return ScopedJavaLocalRef<jobject>(); | 1659 return ScopedJavaLocalRef<jobject>(); |
| 1643 | 1660 |
| 1644 return view->GetJavaObject(); | 1661 return view->GetJavaObject(); |
| 1645 } | 1662 } |
| 1646 | 1663 |
| 1647 bool RegisterContentViewCore(JNIEnv* env) { | 1664 bool RegisterContentViewCore(JNIEnv* env) { |
| 1648 return RegisterNativesImpl(env) && JNI_DragEvent::RegisterNativesImpl(env); | 1665 return RegisterNativesImpl(env) && JNI_DragEvent::RegisterNativesImpl(env); |
| 1649 } | 1666 } |
| 1650 | 1667 |
| 1651 } // namespace content | 1668 } // namespace content |
| OLD | NEW |