Index: chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..df42ad9051dbf9d45e5f96aead298c4df3279f43 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/compositor/scene_layer/TabListSceneLayer.java |
@@ -0,0 +1,138 @@ |
+// 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 android.content.res.Resources; |
+import android.graphics.Rect; |
+ |
+import com.google.android.apps.chrome.R; |
+ |
+import org.chromium.base.JNINamespace; |
+import org.chromium.chrome.browser.compositor.LayerTitleCache; |
+import org.chromium.chrome.browser.compositor.layouts.Layout; |
+import org.chromium.chrome.browser.compositor.layouts.Layout.Orientation; |
+import org.chromium.chrome.browser.compositor.layouts.components.LayoutTab; |
+import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; |
+import org.chromium.chrome.browser.tab.ChromeTab; |
+import org.chromium.ui.resources.ResourceManager; |
+ |
+/** |
+ * A SceneLayer to render a tab stack. |
+ * TODO(changwan): change layouts to share one instance of this. |
+ */ |
+@JNINamespace("chrome::android") |
+public class TabListSceneLayer extends SceneLayer { |
+ private long mNativePtr; |
+ |
+ /** |
+ * Sets a content tree inside this scene overlay tree. |
+ * |
+ * TODO(changwan): use SceneOverlayTree's setContentTree() once we have refactored |
+ * ContextualSearchSupportedLayout into LayoutHelper. |
+ * |
+ * @param contentTree A content tree. |
+ */ |
+ public void setContentTree(SceneLayer contentTree) { |
+ nativeSetContentTree(mNativePtr, contentTree); |
+ } |
+ |
+ /** |
+ * Pushes all relevant {@link LayoutTab}s from a {@link Layout} to the CC Layer tree. This will |
+ * let them be rendered on the screen. 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 context The {@link Context} to use to query device information. |
+ * @param layout The {@link Layout} to push to the screen. |
+ */ |
+ public void pushLayers(Context context, Rect viewport, Rect contentViewport, Layout layout, |
+ LayerTitleCache layerTitleCache, TabContentManager tabContentManager, |
+ ResourceManager resourceManager) { |
+ if (mNativePtr == 0) return; |
+ |
+ Resources res = context.getResources(); |
+ final float dpToPx = res.getDisplayMetrics().density; |
+ |
+ LayoutTab[] tabs = layout.getLayoutTabsToRender(); |
+ int tabsCount = tabs != null ? tabs.length : 0; |
+ |
+ nativeBeginBuildingFrame(mNativePtr); |
+ for (int i = 0; i < tabsCount; i++) { |
+ LayoutTab t = tabs[i]; |
+ assert t.isVisible() : "LayoutTab in that list should be visible"; |
+ final float decoration = t.getDecorationAlpha(); |
+ |
+ int borderResource = t.isIncognito() ? R.drawable.tabswitcher_border_frame_incognito |
+ : R.drawable.tabswitcher_border_frame; |
+ int closeBtnResource = t.isIncognito() ? R.drawable.btn_tab_close_white_normal |
+ : R.drawable.btn_tab_close_normal; |
+ int borderColorResource = |
+ t.isIncognito() ? R.color.tab_back_incognito : R.color.tab_back; |
+ // TODO(dtrainor, clholgat): remove "* dpToPx" once the native part fully supports dp. |
+ nativePutLayer(mNativePtr, t.getId(), R.id.control_container, closeBtnResource, |
+ R.drawable.tabswitcher_border_frame_shadow, |
+ R.drawable.tabswitcher_border_frame_decoration, R.drawable.logo_card_back, |
+ borderResource, t.canUseLiveTexture(), |
+ (t.getFallbackThumbnailId() == ChromeTab.NTP_TAB_ID), t.getBackgroundColor(), |
+ context.getResources().getColor(R.color.tab_switcher_background), |
+ res.getColor(borderColorResource), t.isIncognito(), |
+ layout.getOrientation() == Orientation.PORTRAIT, t.getRenderX() * dpToPx, |
+ t.getRenderY() * dpToPx, t.getScaledContentWidth() * dpToPx, |
+ t.getScaledContentHeight() * dpToPx, t.getOriginalContentWidth() * dpToPx, |
+ t.getOriginalContentHeight() * dpToPx, contentViewport.height(), viewport.left, |
+ viewport.top, viewport.width(), viewport.height(), t.getClippedX() * dpToPx, |
+ t.getClippedY() * dpToPx, |
+ Math.min(t.getClippedWidth(), t.getScaledContentWidth()) * dpToPx, |
+ Math.min(t.getClippedHeight(), t.getScaledContentHeight()) * dpToPx, |
+ t.getTiltXPivotOffset() * dpToPx, t.getTiltYPivotOffset() * dpToPx, |
+ t.getTiltX(), t.getTiltY(), t.getAlpha(), t.getBorderAlpha() * decoration, |
+ decoration, t.getShadowOpacity() * decoration, |
+ t.getBorderCloseButtonAlpha() * decoration, |
+ LayoutTab.CLOSE_BUTTON_WIDTH_DP * dpToPx, t.getStaticToViewBlend(), |
+ t.getBorderScale(), t.getSaturation(), t.getBrightness(), t.showToolbar(), |
+ t.anonymizeToolbar(), t.getToolbarAlpha(), t.getToolbarYOffset() * dpToPx, |
+ t.getSideBorderScale(), true, t.insetBorderVertical(), layerTitleCache, |
+ tabContentManager, resourceManager); |
+ } |
+ nativeFinishBuildingFrame(mNativePtr); |
+ } |
+ |
+ @Override |
+ protected void initializeNative() { |
+ if (mNativePtr == 0) { |
+ mNativePtr = nativeInit(); |
+ } |
+ assert mNativePtr != 0; |
+ } |
+ |
+ /** |
+ * Destroys this object and the corresponding native component. |
+ */ |
+ @Override |
+ public void destroy() { |
+ super.destroy(); |
+ mNativePtr = 0; |
+ } |
+ |
+ private native long nativeInit(); |
+ private native void nativeSetContentTree(long nativeTabListSceneLayer, SceneLayer contentTree); |
+ private native void nativeBeginBuildingFrame(long nativeTabListSceneLayer); |
+ private native void nativeFinishBuildingFrame(long nativeTabListSceneLayer); |
+ private native void nativePutLayer(long nativeTabListSceneLayer, int id, int toolbarResourceId, |
+ int closeButtonResourceId, int shadowResourceId, int contourResourceId, |
+ int backLogoResourceId, int borderResourceId, boolean canUseLiveLayer, |
+ boolean canUseNtpFallback, int tabBackgroundColor, int backgroundColor, |
+ int backLogoColor, boolean incognito, boolean isPortrait, float x, float y, float width, |
+ float height, float contentWidth, float contentHeight, float visibleContentHeight, |
+ float viewportX, float viewportY, float viewportWidth, float viewportHeight, |
+ float shadowX, float shadowY, float shadowWidth, float shadowHeight, float pivotX, |
+ float pivotY, float rotationX, float rotationY, float alpha, float borderAlpha, |
+ float contourAlpha, float shadowAlpha, float closeAlpha, float closeBtnWidth, |
+ float staticToViewBlend, float borderScale, float saturation, float brightness, |
+ boolean showToolbar, boolean anonymizeToolbar, float toolbarAlpha, float toolbarYOffset, |
+ float sideBorderScale, boolean attachContent, boolean insetVerticalBorder, |
+ LayerTitleCache layerTitleCache, TabContentManager tabContentManager, |
+ ResourceManager resourceManager); |
+} |