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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/phone/StackLayout.java

Issue 2774443002: chrome/android: Push EventFilters into the Layout implementations. (Closed)
Patch Set: fix for re-landing Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 package org.chromium.chrome.browser.compositor.layouts.phone; 5 package org.chromium.chrome.browser.compositor.layouts.phone;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.graphics.Rect; 8 import android.graphics.Rect;
9 import android.graphics.RectF; 9 import android.graphics.RectF;
10 import android.os.SystemClock; 10 import android.os.SystemClock;
11 import android.view.ViewConfiguration; 11 import android.view.ViewConfiguration;
12 import android.view.ViewGroup; 12 import android.view.ViewGroup;
13 import android.view.ViewGroup.LayoutParams; 13 import android.view.ViewGroup.LayoutParams;
14 import android.widget.FrameLayout; 14 import android.widget.FrameLayout;
15 15
16 import org.chromium.base.VisibleForTesting; 16 import org.chromium.base.VisibleForTesting;
17 import org.chromium.chrome.browser.compositor.LayerTitleCache; 17 import org.chromium.chrome.browser.compositor.LayerTitleCache;
18 import org.chromium.chrome.browser.compositor.layouts.ChromeAnimation.Animatable ; 18 import org.chromium.chrome.browser.compositor.layouts.ChromeAnimation.Animatable ;
19 import org.chromium.chrome.browser.compositor.layouts.Layout; 19 import org.chromium.chrome.browser.compositor.layouts.Layout;
20 import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
20 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost; 21 import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost;
21 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; 22 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
22 import org.chromium.chrome.browser.compositor.layouts.components.LayoutTab; 23 import org.chromium.chrome.browser.compositor.layouts.components.LayoutTab;
23 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; 24 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
24 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter; 25 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EventFilter;
26 import org.chromium.chrome.browser.compositor.layouts.eventfilter.GestureEventFi lter;
27 import org.chromium.chrome.browser.compositor.layouts.eventfilter.GestureHandler ;
25 import org.chromium.chrome.browser.compositor.layouts.eventfilter.ScrollDirectio n; 28 import org.chromium.chrome.browser.compositor.layouts.eventfilter.ScrollDirectio n;
26 import org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack; 29 import org.chromium.chrome.browser.compositor.layouts.phone.stack.Stack;
27 import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab; 30 import org.chromium.chrome.browser.compositor.layouts.phone.stack.StackTab;
28 import org.chromium.chrome.browser.compositor.scene_layer.SceneLayer; 31 import org.chromium.chrome.browser.compositor.scene_layer.SceneLayer;
29 import org.chromium.chrome.browser.compositor.scene_layer.TabListSceneLayer; 32 import org.chromium.chrome.browser.compositor.scene_layer.TabListSceneLayer;
30 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; 33 import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
31 import org.chromium.chrome.browser.partnercustomizations.HomepageManager; 34 import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
32 import org.chromium.chrome.browser.tab.Tab; 35 import org.chromium.chrome.browser.tab.Tab;
33 import org.chromium.chrome.browser.tabmodel.TabModel; 36 import org.chromium.chrome.browser.tabmodel.TabModel;
34 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 37 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 private boolean mDelayedLayoutTabInitRequired; 128 private boolean mDelayedLayoutTabInitRequired;
126 129
127 private Boolean mTemporarySelectedStack; 130 private Boolean mTemporarySelectedStack;
128 131
129 // Orientation Variables 132 // Orientation Variables
130 private PortraitViewport mCachedPortraitViewport; 133 private PortraitViewport mCachedPortraitViewport;
131 private PortraitViewport mCachedLandscapeViewport; 134 private PortraitViewport mCachedLandscapeViewport;
132 135
133 private final ViewGroup mViewContainer; 136 private final ViewGroup mViewContainer;
134 137
138 private final GestureEventFilter mGestureEventFilter;
135 private final TabListSceneLayer mSceneLayer; 139 private final TabListSceneLayer mSceneLayer;
136 140
141 private StackLayoutGestureHandler mGestureHandler;
142
143 private class StackLayoutGestureHandler implements GestureHandler {
144 @Override
145 public void onDown(float x, float y, boolean fromMouse, int buttons) {
146 long time = time();
147 mLastOnDownX = x;
148 mLastOnDownY = y;
149 mLastOnDownTimeStamp = time;
150 mInputMode = computeInputMode(time, x, y, 0, 0);
151 mStacks[getTabStackIndex()].onDown(time);
152 }
153
154 @Override
155 public void onUpOrCancel() {
156 onUpOrCancel(time());
157 }
158
159 @Override
160 public void drag(float x, float y, float dx, float dy, float tx, float t y) {
161 SwipeMode oldInputMode = mInputMode;
162 long time = time();
163 float amountX = dx;
164 float amountY = dy;
165 mInputMode = computeInputMode(time, x, y, amountX, amountY);
166
167 if (oldInputMode == SwipeMode.SEND_TO_STACK && mInputMode == SwipeMo de.SWITCH_STACK) {
168 mStacks[getTabStackIndex()].onUpOrCancel(time);
169 } else if (oldInputMode == SwipeMode.SWITCH_STACK
170 && mInputMode == SwipeMode.SEND_TO_STACK) {
171 onUpOrCancel(time);
172 }
173
174 if (mInputMode == SwipeMode.SEND_TO_STACK) {
175 mStacks[getTabStackIndex()].drag(time, x, y, amountX, amountY);
176 } else if (mInputMode == SwipeMode.SWITCH_STACK) {
177 scrollStacks(getOrientation() == Orientation.PORTRAIT ? amountX : amountY);
178 }
179 }
180
181 @Override
182 public void click(float x, float y, boolean fromMouse, int buttons) {
183 // Click event happens before the up event. mClicked is set to mute the up event.
184 mClicked = true;
185 PortraitViewport viewportParams = getViewportParameters();
186 int stackIndexAt = viewportParams.getStackIndexAt(x, y);
187 if (stackIndexAt == getTabStackIndex()) {
188 mStacks[getTabStackIndex()].click(time(), x, y);
189 } else {
190 flingStacks(getTabStackIndex() == 0);
191 }
192 requestStackUpdate();
193 }
194
195 @Override
196 public void fling(float x, float y, float velocityX, float velocityY) {
197 long time = time();
198 float vx = velocityX;
199 float vy = velocityY;
200
201 if (mInputMode == SwipeMode.NONE) {
202 mInputMode = computeInputMode(
203 time, x, y, vx * SWITCH_STACK_FLING_DT, vy * SWITCH_STAC K_FLING_DT);
204 }
205
206 if (mInputMode == SwipeMode.SEND_TO_STACK) {
207 mStacks[getTabStackIndex()].fling(time, x, y, vx, vy);
208 } else if (mInputMode == SwipeMode.SWITCH_STACK) {
209 final float velocity = getOrientation() == Orientation.PORTRAIT ? vx : vy;
210 final float origin = getOrientation() == Orientation.PORTRAIT ? x : y;
211 final float max =
212 getOrientation() == Orientation.PORTRAIT ? getWidth() : getHeight();
213 final float predicted = origin + velocity * SWITCH_STACK_FLING_D T;
214 final float delta = MathUtils.clamp(predicted, 0, max) - origin;
215 scrollStacks(delta);
216 }
217 requestStackUpdate();
218 }
219
220 @Override
221 public void onLongPress(float x, float y) {
222 mStacks[getTabStackIndex()].onLongPress(time(), x, y);
223 }
224
225 @Override
226 public void onPinch(float x0, float y0, float x1, float y1, boolean firs tEvent) {
227 mStacks[getTabStackIndex()].onPinch(time(), x0, y0, x1, y1, firstEve nt);
228 }
229
230 private void onUpOrCancel(long time) {
231 int currentIndex = getTabStackIndex();
232 int nextIndex = 1 - currentIndex;
233 if (!mClicked
234 && Math.abs(currentIndex + mRenderedScrollOffset) > THRESHOL D_TO_SWITCH_STACK
235 && mStacks[nextIndex].isDisplayable()) {
236 setActiveStackState(nextIndex == 1);
237 }
238 mClicked = false;
239 finishScrollStacks();
240 mStacks[getTabStackIndex()].onUpOrCancel(time);
241 mInputMode = SwipeMode.NONE;
242 }
243
244 private long time() {
245 return LayoutManager.time();
246 }
247 }
248
137 /** 249 /**
138 * @param context The current Android's context. 250 * @param context The current Android's context.
139 * @param updateHost The {@link LayoutUpdateHost} view for this layout. 251 * @param updateHost The {@link LayoutUpdateHost} view for this layout.
140 * @param renderHost The {@link LayoutRenderHost} view for this layout. 252 * @param renderHost The {@link LayoutRenderHost} view for this layout.
141 * @param eventFilter The {@link EventFilter} that is needed for this view. 253 * @param eventFilter The {@link EventFilter} that is needed for this view.
142 */ 254 */
143 public StackLayout(Context context, LayoutUpdateHost updateHost, LayoutRende rHost renderHost, 255 public StackLayout(Context context, LayoutUpdateHost updateHost, LayoutRende rHost renderHost) {
144 EventFilter eventFilter) { 256 super(context, updateHost, renderHost);
145 super(context, updateHost, renderHost, eventFilter);
146 257
258 mGestureHandler = new StackLayoutGestureHandler();
259 mGestureEventFilter = new GestureEventFilter(context, mGestureHandler);
147 final ViewConfiguration configuration = ViewConfiguration.get(context); 260 final ViewConfiguration configuration = ViewConfiguration.get(context);
148 mMinDirectionThreshold = configuration.getScaledTouchSlop(); 261 mMinDirectionThreshold = configuration.getScaledTouchSlop();
149 mMinShortPressThresholdSqr = 262 mMinShortPressThresholdSqr =
150 configuration.getScaledPagingTouchSlop() * configuration.getScal edPagingTouchSlop(); 263 configuration.getScaledPagingTouchSlop() * configuration.getScal edPagingTouchSlop();
151 264
152 mMinMaxInnerMargin = (int) (MIN_INNER_MARGIN_PERCENT_DP + 0.5); 265 mMinMaxInnerMargin = (int) (MIN_INNER_MARGIN_PERCENT_DP + 0.5);
153 mFlingSpeed = FLING_SPEED_DP; 266 mFlingSpeed = FLING_SPEED_DP;
154 mStacks = new Stack[2]; 267 mStacks = new Stack[2];
155 mStacks[0] = new Stack(context, this); 268 mStacks[0] = new Stack(context, this);
156 mStacks[1] = new Stack(context, this); 269 mStacks[1] = new Stack(context, this);
157 mStackRects = new RectF[2]; 270 mStackRects = new RectF[2];
158 mStackRects[0] = new RectF(); 271 mStackRects[0] = new RectF();
159 mStackRects[1] = new RectF(); 272 mStackRects[1] = new RectF();
160 273
161 mViewContainer = new FrameLayout(getContext()); 274 mViewContainer = new FrameLayout(getContext());
162 mSceneLayer = new TabListSceneLayer(); 275 mSceneLayer = new TabListSceneLayer();
163 } 276 }
164 277
165 @Override 278 @Override
166 public boolean forceShowBrowserControlsAndroidView() { 279 public boolean forceShowBrowserControlsAndroidView() {
167 return true; 280 return true;
168 } 281 }
169 282
283 /**
284 * Simulates a click on the view at the specified pixel offset
285 * from the top left of the view.
286 * This is used by UI tests.
287 * @param x Coordinate of the click in dp.
288 * @param y Coordinate of the click in dp.
289 */
290 @VisibleForTesting
291 public void simulateClick(float x, float y) {
292 mGestureHandler.click(x, y, false, -1);
293 }
294
295 /**
296 * Simulates a drag and issues Up-event to commit the drag.
297 * @param x Coordinate to start the Drag from in dp.
298 * @param y Coordinate to start the Drag from in dp.
299 * @param dX Amount of drag in X direction in dp.
300 * @param dY Amount of drag in Y direction in dp.
301 */
302 @VisibleForTesting
303 public void simulateDrag(float x, float y, float dX, float dY) {
304 mGestureHandler.onDown(x, y, false, -1);
305 mGestureHandler.drag(x, y, dX, dY, -1, -1);
306 mGestureHandler.onUpOrCancel();
307 }
308
170 @Override 309 @Override
171 public ViewportMode getViewportMode() { 310 public ViewportMode getViewportMode() {
172 return ViewportMode.ALWAYS_FULLSCREEN; 311 return ViewportMode.ALWAYS_FULLSCREEN;
173 } 312 }
174 313
175 @Override 314 @Override
176 public void setTabModelSelector(TabModelSelector modelSelector, TabContentMa nager manager) { 315 public void setTabModelSelector(TabModelSelector modelSelector, TabContentMa nager manager) {
177 super.setTabModelSelector(modelSelector, manager); 316 super.setTabModelSelector(modelSelector, manager);
178 mStacks[0].setTabModel(modelSelector.getModel(false)); 317 mStacks[0].setTabModel(modelSelector.getModel(false));
179 mStacks[1].setTabModel(modelSelector.getModel(true)); 318 mStacks[1].setTabModel(modelSelector.getModel(true));
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 730
592 @Override 731 @Override
593 public void contextChanged(Context context) { 732 public void contextChanged(Context context) {
594 super.contextChanged(context); 733 super.contextChanged(context);
595 StackTab.resetDimensionConstants(context); 734 StackTab.resetDimensionConstants(context);
596 mStacks[0].contextChanged(context); 735 mStacks[0].contextChanged(context);
597 mStacks[1].contextChanged(context); 736 mStacks[1].contextChanged(context);
598 requestStackUpdate(); 737 requestStackUpdate();
599 } 738 }
600 739
601 @Override
602 public void drag(long time, float x, float y, float amountX, float amountY) {
603 SwipeMode oldInputMode = mInputMode;
604 mInputMode = computeInputMode(time, x, y, amountX, amountY);
605
606 if (oldInputMode == SwipeMode.SEND_TO_STACK && mInputMode == SwipeMode.S WITCH_STACK) {
607 mStacks[getTabStackIndex()].onUpOrCancel(time);
608 } else if (oldInputMode == SwipeMode.SWITCH_STACK
609 && mInputMode == SwipeMode.SEND_TO_STACK) {
610 onUpOrCancel(time);
611 }
612
613 if (mInputMode == SwipeMode.SEND_TO_STACK) {
614 mStacks[getTabStackIndex()].drag(time, x, y, amountX, amountY);
615 } else if (mInputMode == SwipeMode.SWITCH_STACK) {
616 scrollStacks(getOrientation() == Orientation.PORTRAIT ? amountX : am ountY);
617 }
618 }
619
620 /** 740 /**
621 * Computes the input mode for drag and fling based on the first event posit ion. 741 * Computes the input mode for drag and fling based on the first event posit ion.
622 * @param time The current time of the app in ms. 742 * @param time The current time of the app in ms.
623 * @param x The x layout position of the mouse (without the displacement) . 743 * @param x The x layout position of the mouse (without the displacement) .
624 * @param y The y layout position of the mouse (without the displacement) . 744 * @param y The y layout position of the mouse (without the displacement) .
625 * @param dx The x displacement happening this frame. 745 * @param dx The x displacement happening this frame.
626 * @param dy The y displacement happening this frame. 746 * @param dy The y displacement happening this frame.
627 * @return The input mode to select. 747 * @return The input mode to select.
628 */ 748 */
629 private SwipeMode computeInputMode(long time, float x, float y, float dx, fl oat dy) { 749 private SwipeMode computeInputMode(long time, float x, float y, float dx, fl oat dy) {
(...skipping 29 matching lines...) Expand all
659 if (time - mLastOnDownTimeStamp > THRESHOLD_TIME_TO_SWITCH_STACK_INPUT_M ODE) { 779 if (time - mLastOnDownTimeStamp > THRESHOLD_TIME_TO_SWITCH_STACK_INPUT_M ODE) {
660 return SwipeMode.SEND_TO_STACK; 780 return SwipeMode.SEND_TO_STACK;
661 } 781 }
662 // Dragging fast 782 // Dragging fast
663 if (distanceToDownSqr > mMinShortPressThresholdSqr) { 783 if (distanceToDownSqr > mMinShortPressThresholdSqr) {
664 return SwipeMode.SWITCH_STACK; 784 return SwipeMode.SWITCH_STACK;
665 } 785 }
666 return SwipeMode.NONE; 786 return SwipeMode.NONE;
667 } 787 }
668 788
669 @Override
670 public void fling(long time, float x, float y, float vx, float vy) {
671 if (mInputMode == SwipeMode.NONE) {
672 mInputMode = computeInputMode(
673 time, x, y, vx * SWITCH_STACK_FLING_DT, vy * SWITCH_STACK_FL ING_DT);
674 }
675
676 if (mInputMode == SwipeMode.SEND_TO_STACK) {
677 mStacks[getTabStackIndex()].fling(time, x, y, vx, vy);
678 } else if (mInputMode == SwipeMode.SWITCH_STACK) {
679 final float velocity = getOrientation() == Orientation.PORTRAIT ? vx : vy;
680 final float origin = getOrientation() == Orientation.PORTRAIT ? x : y;
681 final float max = getOrientation() == Orientation.PORTRAIT ? getWidt h() : getHeight();
682 final float predicted = origin + velocity * SWITCH_STACK_FLING_DT;
683 final float delta = MathUtils.clamp(predicted, 0, max) - origin;
684 scrollStacks(delta);
685 }
686 requestStackUpdate();
687 }
688
689 class PortraitViewport { 789 class PortraitViewport {
690 protected float mWidth, mHeight; 790 protected float mWidth, mHeight;
691 PortraitViewport() { 791 PortraitViewport() {
692 mWidth = StackLayout.this.getWidth(); 792 mWidth = StackLayout.this.getWidth();
693 mHeight = StackLayout.this.getHeightMinusBrowserControls(); 793 mHeight = StackLayout.this.getHeightMinusBrowserControls();
694 } 794 }
695 795
696 float getClampedRenderedScrollOffset() { 796 float getClampedRenderedScrollOffset() {
697 if (mStacks[1].isDisplayable() || mFlingFromModelChange) { 797 if (mStacks[1].isDisplayable() || mFlingFromModelChange) {
698 return MathUtils.clamp(mRenderedScrollOffset, 0, -1); 798 return MathUtils.clamp(mRenderedScrollOffset, 0, -1);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 } 911 }
812 return mCachedPortraitViewport; 912 return mCachedPortraitViewport;
813 } else { 913 } else {
814 if (mCachedLandscapeViewport == null) { 914 if (mCachedLandscapeViewport == null) {
815 mCachedLandscapeViewport = new LandscapeViewport(); 915 mCachedLandscapeViewport = new LandscapeViewport();
816 } 916 }
817 return mCachedLandscapeViewport; 917 return mCachedLandscapeViewport;
818 } 918 }
819 } 919 }
820 920
821 @Override
822 public void click(long time, float x, float y) {
823 // Click event happens before the up event. mClicked is set to mute the up event.
824 mClicked = true;
825 PortraitViewport viewportParams = getViewportParameters();
826 int stackIndexAt = viewportParams.getStackIndexAt(x, y);
827 if (stackIndexAt == getTabStackIndex()) {
828 mStacks[getTabStackIndex()].click(time, x, y);
829 } else {
830 flingStacks(getTabStackIndex() == 0);
831 }
832 requestStackUpdate();
833 }
834
835 /** 921 /**
836 * Check if we are dragging stack in a wrong direction. 922 * Check if we are dragging stack in a wrong direction.
837 * 923 *
838 * @param downX The X coordinate on the last down event. 924 * @param downX The X coordinate on the last down event.
839 * @param downY The Y coordinate on the last down event. 925 * @param downY The Y coordinate on the last down event.
840 * @param x The current X coordinate. 926 * @param x The current X coordinate.
841 * @param y The current Y coordinate. 927 * @param y The current Y coordinate.
842 * @param dx The amount of change in X coordinate. 928 * @param dx The amount of change in X coordinate.
843 * @param dy The amount of change in Y coordinate. 929 * @param dy The amount of change in Y coordinate.
844 * @param orientation The device orientation (portrait / landscape). 930 * @param orientation The device orientation (portrait / landscape).
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 addToAnimation(this, Property.STACK_SNAP, mRenderedScrollOffset, tar get, duration, 0); 983 addToAnimation(this, Property.STACK_SNAP, mRenderedScrollOffset, tar get, duration, 0);
898 } else { 984 } else {
899 setProperty(Property.STACK_SNAP, target); 985 setProperty(Property.STACK_SNAP, target);
900 if (mTemporarySelectedStack != null) { 986 if (mTemporarySelectedStack != null) {
901 mTabModelSelector.selectModel(mTemporarySelectedStack); 987 mTabModelSelector.selectModel(mTemporarySelectedStack);
902 mTemporarySelectedStack = null; 988 mTemporarySelectedStack = null;
903 } 989 }
904 } 990 }
905 } 991 }
906 992
907 @Override
908 public void onDown(long time, float x, float y) {
909 mLastOnDownX = x;
910 mLastOnDownY = y;
911 mLastOnDownTimeStamp = time;
912 mInputMode = computeInputMode(time, x, y, 0, 0);
913 mStacks[getTabStackIndex()].onDown(time);
914 }
915
916 @Override
917 public void onLongPress(long time, float x, float y) {
918 mStacks[getTabStackIndex()].onLongPress(time, x, y);
919 }
920
921 @Override
922 public void onUpOrCancel(long time) {
923 int currentIndex = getTabStackIndex();
924 int nextIndex = 1 - currentIndex;
925 if (!mClicked && Math.abs(currentIndex + mRenderedScrollOffset) > THRESH OLD_TO_SWITCH_STACK
926 && mStacks[nextIndex].isDisplayable()) {
927 setActiveStackState(nextIndex == 1);
928 }
929 mClicked = false;
930 finishScrollStacks();
931 mStacks[getTabStackIndex()].onUpOrCancel(time);
932 mInputMode = SwipeMode.NONE;
933 }
934
935 /** 993 /**
936 * Pushes a rectangle to be drawn on the screen on top of everything. 994 * Pushes a rectangle to be drawn on the screen on top of everything.
937 * 995 *
938 * @param rect The rectangle to be drawn on screen 996 * @param rect The rectangle to be drawn on screen
939 * @param color The color of the rectangle 997 * @param color The color of the rectangle
940 */ 998 */
941 public void pushDebugRect(Rect rect, int color) { 999 public void pushDebugRect(Rect rect, int color) {
942 if (rect.left > rect.right) { 1000 if (rect.left > rect.right) {
943 int tmp = rect.right; 1001 int tmp = rect.right;
944 rect.right = rect.left; 1002 rect.right = rect.left;
945 rect.left = tmp; 1003 rect.left = tmp;
946 } 1004 }
947 if (rect.top > rect.bottom) { 1005 if (rect.top > rect.bottom) {
948 int tmp = rect.bottom; 1006 int tmp = rect.bottom;
949 rect.bottom = rect.top; 1007 rect.bottom = rect.top;
950 rect.top = tmp; 1008 rect.top = tmp;
951 } 1009 }
952 mRenderHost.pushDebugRect(rect, color); 1010 mRenderHost.pushDebugRect(rect, color);
953 } 1011 }
954 1012
955 @Override 1013 @Override
956 public void onPinch(long time, float x0, float y0, float x1, float y1, boole an firstEvent) {
957 mStacks[getTabStackIndex()].onPinch(time, x0, y0, x1, y1, firstEvent);
958 }
959
960 @Override
961 protected void updateLayout(long time, long dt) { 1014 protected void updateLayout(long time, long dt) {
962 super.updateLayout(time, dt); 1015 super.updateLayout(time, dt);
963 boolean needUpdate = false; 1016 boolean needUpdate = false;
964 1017
965 final PortraitViewport viewport = getViewportParameters(); 1018 final PortraitViewport viewport = getViewportParameters();
966 mStackRects[0].left = viewport.getStack0Left(); 1019 mStackRects[0].left = viewport.getStack0Left();
967 mStackRects[0].right = mStackRects[0].left + viewport.getWidth(); 1020 mStackRects[0].right = mStackRects[0].left + viewport.getWidth();
968 mStackRects[0].top = viewport.getStack0Top(); 1021 mStackRects[0].top = viewport.getStack0Top();
969 mStackRects[0].bottom = mStackRects[0].top + viewport.getHeight(); 1022 mStackRects[0].bottom = mStackRects[0].top + viewport.getHeight();
970 mStackRects[1].left = mStackRects[0].left + viewport.getStack0ToStack1Tr anslationX(); 1023 mStackRects[1].left = mStackRects[0].left + viewport.getStack0ToStack1Tr anslationX();
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 1273
1221 /** 1274 /**
1222 * Called by the stacks whenever they finish their animations. 1275 * Called by the stacks whenever they finish their animations.
1223 */ 1276 */
1224 public void onStackAnimationFinished() { 1277 public void onStackAnimationFinished() {
1225 mStackAnimationCount--; 1278 mStackAnimationCount--;
1226 if (mStackAnimationCount == 0) super.onAnimationFinished(); 1279 if (mStackAnimationCount == 0) super.onAnimationFinished();
1227 } 1280 }
1228 1281
1229 @Override 1282 @Override
1283 protected EventFilter getEventFilter() {
1284 return mGestureEventFilter;
1285 }
1286
1287 @Override
1230 protected SceneLayer getSceneLayer() { 1288 protected SceneLayer getSceneLayer() {
1231 return mSceneLayer; 1289 return mSceneLayer;
1232 } 1290 }
1233 1291
1234 @Override 1292 @Override
1235 protected void updateSceneLayer(RectF viewport, RectF contentViewport, 1293 protected void updateSceneLayer(RectF viewport, RectF contentViewport,
1236 LayerTitleCache layerTitleCache, TabContentManager tabContentManager , 1294 LayerTitleCache layerTitleCache, TabContentManager tabContentManager ,
1237 ResourceManager resourceManager, ChromeFullscreenManager fullscreenM anager) { 1295 ResourceManager resourceManager, ChromeFullscreenManager fullscreenM anager) {
1238 super.updateSceneLayer(viewport, contentViewport, layerTitleCache, tabCo ntentManager, 1296 super.updateSceneLayer(viewport, contentViewport, layerTitleCache, tabCo ntentManager,
1239 resourceManager, fullscreenManager); 1297 resourceManager, fullscreenManager);
1240 assert mSceneLayer != null; 1298 assert mSceneLayer != null;
1241 mSceneLayer.pushLayers(getContext(), viewport, contentViewport, this, la yerTitleCache, 1299 mSceneLayer.pushLayers(getContext(), viewport, contentViewport, this, la yerTitleCache,
1242 tabContentManager, resourceManager, fullscreenManager); 1300 tabContentManager, resourceManager, fullscreenManager);
1243 } 1301 }
1244 } 1302 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698