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

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months 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
Index: chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java
new file mode 100644
index 0000000000000000000000000000000000000000..7d1236bcbe410b2be80ca2fb70347c8b31b512d2
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java
@@ -0,0 +1,131 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.compositor.scene_layer;
+
+import android.content.Context;
+
+import org.chromium.base.JNINamespace;
+import org.chromium.chrome.browser.compositor.LayerTitleCache;
+import org.chromium.chrome.browser.compositor.layouts.components.CompositorButton;
+import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperManager;
+import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutTab;
+import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
+import org.chromium.ui.resources.ResourceManager;
+
+/**
+ * The Java component of what is basically a CC Layer that manages drawing the Tab Strip (which is
+ * composed of {@link StripLayoutTab}s) to the screen. This object keeps the layers up to date and
+ * removes/creates children as necessary. This object is built by its native counterpart.
+ */
+@JNINamespace("chrome::android")
+public class TabStripSceneLayer extends SceneOverlayLayer {
+ private long mNativePtr;
+ private final float mDpToPx;
+ private SceneLayer mChildSceneLayer;
+
+ public TabStripSceneLayer(Context context) {
+ mDpToPx = context.getResources().getDisplayMetrics().density;
+ }
+
+ @Override
+ protected void initializeNative() {
+ if (mNativePtr == 0) {
+ mNativePtr = nativeInit();
+ }
+ assert mNativePtr != 0;
+ }
+
+ @Override
+ public void setContentTree(SceneLayer contentTree) {
+ nativeSetContentTree(mNativePtr, contentTree);
+ }
+
+ /**
+ * Pushes all relevant {@link StripLayoutTab}s to the CC Layer tree.
+ * This also pushes any other assets required to draw the Tab Strip. This should only be called
+ * when the Compositor has disabled ScheduleComposite calls as this will change the tree and
+ * could subsequently cause unnecessary follow up renders.
+ *
+ * @param layoutHelper A layout helper for the tab strip.
+ * @param layerTitleCache A layer title cache.
+ * @param resourceManager A resource manager.
+ * @param fullscreenManager A fullscreen manager.
+ * @param stripLayoutTabsToRender Array of strip layout tabs.
+ */
+ public void pushAndUpdateStrip(StripLayoutHelperManager layoutHelper,
+ LayerTitleCache layerTitleCache, ResourceManager resourceManager,
+ ChromeFullscreenManager fullscreenManager, StripLayoutTab[] stripLayoutTabsToRender) {
+ if (mNativePtr == 0) return;
+
+ nativeBeginBuildingFrame(mNativePtr);
+ pushButtonsAndBackground(layoutHelper, resourceManager, fullscreenManager);
+ pushStripTabs(layoutHelper, layerTitleCache, resourceManager, stripLayoutTabsToRender);
+ nativeFinishBuildingFrame(mNativePtr);
+ }
+
+ private void pushButtonsAndBackground(StripLayoutHelperManager layoutHelper,
+ ResourceManager resourceManager, ChromeFullscreenManager fullscreenManager) {
+ float yOffset = fullscreenManager != null ? fullscreenManager.getControlOffset() : 0.f;
+
+ nativeUpdateTabStripLayer(mNativePtr, layoutHelper.getWidth() * mDpToPx,
+ layoutHelper.getHeight() * mDpToPx, yOffset, layoutHelper.getStripBrightness());
+
+ CompositorButton newTabButton = layoutHelper.getNewTabButton();
+ CompositorButton modelSelectorButton = layoutHelper.getModelSelectorButton();
+ boolean newTabButtonVisible = newTabButton.isVisible();
+ boolean modelSelectorButtonVisible = modelSelectorButton.isVisible();
+
+ nativeUpdateNewTabButton(mNativePtr, newTabButton.getResourceId(),
+ newTabButton.getX() * mDpToPx, newTabButton.getY() * mDpToPx,
+ newTabButton.getWidth() * mDpToPx, newTabButton.getHeight() * mDpToPx,
+ newTabButtonVisible, resourceManager);
+
+ nativeUpdateModelSelectorButton(mNativePtr, modelSelectorButton.getResourceId(),
+ modelSelectorButton.getX() * mDpToPx, modelSelectorButton.getY() * mDpToPx,
+ modelSelectorButton.getWidth() * mDpToPx, modelSelectorButton.getHeight() * mDpToPx,
+ modelSelectorButton.isIncognito(), modelSelectorButtonVisible, resourceManager);
+ }
+
+ private void pushStripTabs(StripLayoutHelperManager layoutHelper,
+ LayerTitleCache layerTitleCache, ResourceManager resourceManager,
+ StripLayoutTab[] stripTabs) {
+ final int tabsCount = stripTabs != null ? stripTabs.length : 0;
+
+ for (int i = 0; i < tabsCount; i++) {
+ final StripLayoutTab st = stripTabs[i];
+ nativePutStripTabLayer(mNativePtr, st.getId(), st.getCloseButton().getResourceId(),
+ st.getResourceId(i == tabsCount - 1), i == tabsCount - 1, st.getClosePressed(),
+ layoutHelper.getWidth() * mDpToPx, st.getDrawX() * mDpToPx,
+ st.getDrawY() * mDpToPx, st.getWidth() * mDpToPx, st.getHeight() * mDpToPx,
+ st.getContentOffsetX() * mDpToPx, st.getCloseButton().getOpacity(),
+ st.isLoading(), st.getLoadingSpinnerRotation(), layoutHelper.getBorderOpacity(),
+ layerTitleCache, resourceManager);
+ }
+ }
+
+ @Override
+ public void destroy() {
+ super.destroy();
+ mNativePtr = 0;
+ }
+
+ private native long nativeInit();
+ private native void nativeBeginBuildingFrame(long nativeTabStripSceneLayer);
+ private native void nativeFinishBuildingFrame(long nativeTabStripSceneLayer);
+ private native void nativeUpdateTabStripLayer(long nativeTabStripSceneLayer, float width,
+ float height, float yOffset, float stripBrightness);
+ private native void nativeUpdateNewTabButton(long nativeTabStripSceneLayer, int resourceId,
+ float x, float y, float width, float height, boolean visible,
+ ResourceManager resourceManager);
+ private native void nativeUpdateModelSelectorButton(long nativeTabStripSceneLayer,
+ int resourceId, float x, float y, float width, float height, boolean incognito,
+ boolean visible, ResourceManager resourceManager);
+ private native void nativePutStripTabLayer(long nativeTabStripSceneLayer, int id,
+ int closeResourceId, int handleResourceId, boolean foreground, boolean closePressed,
+ float toolbarWidth, float x, float y, float width, float height, float contentOffsetX,
+ float closeButtonAlpha, boolean isLoading, float spinnerRotation, float borderOpacity,
+ LayerTitleCache layerTitleCache, ResourceManager resourceManager);
+ private native void nativeSetContentTree(long nativeTabStripSceneLayer, SceneLayer contentTree);
+}

Powered by Google App Engine
This is Rietveld 408576698