| Index: chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStacker.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStacker.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStacker.java
|
| index 02e24cbeaf6ef130f96aa61597d8b9aff10c68bf..41968dde3f6b7fad82a7bbed27405266add60b46 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStacker.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripStacker.java
|
| @@ -5,43 +5,88 @@
|
| package org.chromium.chrome.browser.compositor.overlays.strip;
|
|
|
| import org.chromium.chrome.browser.compositor.layouts.Layout;
|
| +import org.chromium.chrome.browser.util.MathUtils;
|
|
|
| /**
|
| * An interface that defines how to stack tabs and how they should look visually. This lets
|
| * certain components customize how the {@link StripLayoutHelper} functions and how other
|
| * {@link Layout}s visually order tabs.
|
| */
|
| -public interface StripStacker {
|
| +public abstract class StripStacker {
|
| /**
|
| * @return Whether or not the close button can be shown. Note that even if it can be shown,
|
| * it might not be due to how much of the tab is actually visible to preserve proper hit
|
| * target sizes.
|
| */
|
| - public boolean canShowCloseButton();
|
| -
|
| - /**
|
| - * @return Whether or not the title text can slide to the right to stay visible.
|
| - */
|
| - public boolean canSlideTitleText();
|
| + public boolean canShowCloseButton() {
|
| + return true;
|
| + }
|
|
|
| /**
|
| * This gives the implementing class a chance to determine how the tabs should be ordered
|
| - * visually. The positioning logic is the same regardless, this just has to do with visual
|
| + * visually. The positioning logic is the same regardless, this just has to do with visual
|
| * stacking.
|
| *
|
| * @param selectedIndex The selected index of the tabs.
|
| * @param indexOrderedTabs A list of tabs ordered by index.
|
| - * @param outVisualOrderedTabs The new list of tabs, ordered from back to front visually.
|
| + * @param outVisualOrderedTabs The new list of tabs, ordered from back (low z-index) to front
|
| + * (high z-index) visually.
|
| */
|
| public void createVisualOrdering(int selectedIndex, StripLayoutTab[] indexOrderedTabs,
|
| - StripLayoutTab[] outVisualOrderedTabs);
|
| + StripLayoutTab[] outVisualOrderedTabs) {
|
| + assert indexOrderedTabs.length == outVisualOrderedTabs.length;
|
| +
|
| + selectedIndex = MathUtils.clamp(selectedIndex, 0, indexOrderedTabs.length);
|
| +
|
| + int outIndex = 0;
|
| + for (int i = 0; i < selectedIndex; i++) {
|
| + outVisualOrderedTabs[outIndex++] = indexOrderedTabs[i];
|
| + }
|
| +
|
| + for (int i = indexOrderedTabs.length - 1; i >= selectedIndex; --i) {
|
| + outVisualOrderedTabs[outIndex++] = indexOrderedTabs[i];
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Computes and sets the draw X, draw Y, visibility and content offset for each tab.
|
| + *
|
| + * @param selectedIndex The selected index of the tabs.
|
| + * @param indexOrderedTabs A list of tabs ordered by index.
|
| + * @param tabStackWidth The width of a tab when it's stacked behind another tab.
|
| + * @param maxTabsToStack The maximum number of tabs to stack.
|
| + * @param tabOverlapWidth The amount tabs overlap.
|
| + * @param stripLeftMargin The left margin of the tab strip.
|
| + * @param stripRightMargin The right margin of the tab strip.
|
| + * @param stripWidth The width of the tab strip.
|
| + * @param inReorderMode Whether the strip is in reorder mode.
|
| + */
|
| + public abstract void setTabOffsets(int selectedIndex, StripLayoutTab[] indexOrderedTabs,
|
| + float tabStackWidth, int maxTabsToStack, float tabOverlapWidth, float stripLeftMargin,
|
| + float stripRightMargin, float stripWidth, boolean inReorderMode);
|
| +
|
| + /**
|
| + * Computes the X offset for the new tab button.
|
| + *
|
| + * @param indexOrderedTabs A list of tabs ordered by index.
|
| + * @param tabOverlapWidth The amount tabs overlap.
|
| + * @param stripLeftMargin The left margin of the tab strip.
|
| + * @param stripRightMargin The right margin of the tab strip.
|
| + * @param stripWidth The width of the tab strip.
|
| + * @param mNewTabButtonWidth The width of the new tab button.
|
| + * @return The x offset for the new tab button.
|
| + */
|
| + public abstract float computeNewTabButtonOffset(StripLayoutTab[] indexOrderedTabs,
|
| + float tabOverlapWidth, float stripLeftMargin, float stripRightMargin, float stripWidth,
|
| + float mNewTabButtonWidth);
|
|
|
| /**
|
| - * Performs an occlusion pass, setting the visibility on tabs depending on whether or not they
|
| - * overlap each other perfectly. This is relegated to this interface because the implementing
|
| - * class knows the proper visual order to optimize this pass.
|
| + * Performs an occlusion pass, setting the visibility on tabs. This is relegated to this
|
| + * interface because the implementing class knows the proper visual order to optimize this pass.
|
| * @param selectedIndex The selected index of the tabs.
|
| * @param indexOrderedTabs A list of tabs ordered by index.
|
| + * @param stripWidth The width of the tab strip.
|
| */
|
| - public void performOcclusionPass(int selectedIndex, StripLayoutTab[] indexOrderedTabs);
|
| + public abstract void performOcclusionPass(int selectedIndex, StripLayoutTab[] indexOrderedTabs,
|
| + float stripWidth);
|
| }
|
|
|