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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java

Issue 2509873003: CompositorViewHolder is source of truth for viewports (Closed)
Patch Set: fix test merge conflict Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
index 65ff30dd30af161a5a27b166e1533e149a0121fa..0b6b6ad602070ee521e044da6fdb51c578b94a44 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/CompositorViewHolder.java
@@ -118,7 +118,6 @@ public class CompositorViewHolder extends CoordinatorLayout
// Cache objects that should not be created frequently.
private final RectF mCacheViewport = new RectF();
- private final RectF mCacheVisibleViewport = new RectF();
private DrawingInfo mProgressBarDrawingInfo;
// If we've drawn at least one frame.
@@ -204,7 +203,7 @@ public class CompositorViewHolder extends CoordinatorLayout
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom,
int oldLeft, int oldTop, int oldRight, int oldBottom) {
- propagateViewportToLayouts(right - left, bottom - top);
+ onViewportChanged();
// If there's an event that needs to occur after the keyboard is hidden, post
// it as a delayed event. Otherwise this happens in the midst of the
@@ -230,7 +229,7 @@ public class CompositorViewHolder extends CoordinatorLayout
*/
public void setLayoutManager(LayoutManager layoutManager) {
mLayoutManager = layoutManager;
- propagateViewportToLayouts(getWidth(), getHeight());
+ onViewportChanged();
}
/**
@@ -453,13 +452,13 @@ public class CompositorViewHolder extends CoordinatorLayout
@Override
public void onContentOffsetChanged(float offset) {
mLastContentOffset = offset;
- propagateViewportToLayouts(getWidth(), getHeight());
+ onViewportChanged();
}
@Override
public void onVisibleContentOffsetChanged(float offset, boolean needsAnimate) {
mLastVisibleContentOffset = offset;
- propagateViewportToLayouts(getWidth(), getHeight());
+ onViewportChanged();
if (needsAnimate) requestRender();
}
@@ -494,27 +493,12 @@ public class CompositorViewHolder extends CoordinatorLayout
}
}
- private void propagateViewportToLayouts(int contentWidth, int contentHeight) {
- int heightMinusBrowserControls = contentHeight
- - (getTopControlsHeightPixels() + getBottomControlsHeightPixels());
- int bottomControlOffset = mFullscreenManager != null
- ? (int) mFullscreenManager.getBottomControlOffset() : 0;
- int viewportBottom =
- contentHeight - (getBottomControlsHeightPixels() - bottomControlOffset);
-
- // The only time that mCacheViewport and mCacheVisibleViewport are different is when the
- // browser has manipulated the browser controls offset.
- mCacheViewport.set(0, (int) mLastContentOffset, contentWidth, viewportBottom);
- mCacheVisibleViewport.set(0, (int) mLastVisibleContentOffset, contentWidth, viewportBottom);
+ private void onViewportChanged() {
// TODO(changwan): check if this can be merged with setContentMotionEventOffsets.
if (mTabVisible != null && mTabVisible.getContentViewCore() != null) {
- mTabVisible.getContentViewCore().setSmartClipOffsets(
- (int) -mCacheViewport.left, (int) -mCacheViewport.top);
- }
- if (mLayoutManager != null) {
- mLayoutManager.pushNewViewport(
- mCacheViewport, mCacheVisibleViewport, heightMinusBrowserControls);
+ mTabVisible.getContentViewCore().setSmartClipOffsets(0, (int) -mLastContentOffset);
}
+ if (mLayoutManager != null) mLayoutManager.onViewportChanged();
}
/**
@@ -541,6 +525,32 @@ public class CompositorViewHolder extends CoordinatorLayout
}
@Override
+ public void getWindowViewport(RectF outRect) {
+ outRect.set(0, 0, getWidth(), getHeight());
+ }
+
+ @Override
+ public void getVisibleViewport(RectF outRect) {
+ // All of these values are in pixels.
+ float viewportTop = 0;
+ float bottomControlOffset = 0;
+ if (mFullscreenManager != null) {
+ viewportTop = mFullscreenManager.getTopVisibleContentOffset();
+ bottomControlOffset = mFullscreenManager.getBottomControlOffset();
+ }
+ float viewportBottom =
+ getHeight() - (getBottomControlsHeightPixels() - bottomControlOffset);
+
+ outRect.set(0, viewportTop, getWidth(), viewportBottom);
+ }
+
+ @Override
+ public float getHeightMinusBrowserControls() {
+ return getHeight() - (getTopControlsHeightPixels() + getBottomControlsHeightPixels());
+
+ }
+
+ @Override
public void requestRender() {
mCompositorView.requestRender();
}
@@ -609,7 +619,7 @@ public class CompositorViewHolder extends CoordinatorLayout
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (changed) {
- propagateViewportToLayouts(r - l, b - t);
+ onViewportChanged();
}
super.onLayout(changed, l, t, r, b);
@@ -639,7 +649,7 @@ public class CompositorViewHolder extends CoordinatorLayout
mLastVisibleContentOffset = mFullscreenManager.getTopVisibleContentOffset();
mFullscreenManager.addListener(this);
}
- propagateViewportToLayouts(getWidth(), getHeight());
+ onViewportChanged();
}
@Override
@@ -678,7 +688,7 @@ public class CompositorViewHolder extends CoordinatorLayout
public float getOverlayTranslateY() {
return areBrowserControlsPermanentlyHidden()
? getTopControlsHeightPixels()
- : mCacheVisibleViewport.top;
+ : mLastVisibleContentOffset;
}
/**
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698