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