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

Unified Diff: ios/chrome/browser/ui/stack_view/card_stack_layout_manager.h

Issue 2587023002: Upstream Chrome on iOS source code [8/11]. (Closed)
Patch Set: Created 4 years 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: ios/chrome/browser/ui/stack_view/card_stack_layout_manager.h
diff --git a/ios/chrome/browser/ui/stack_view/card_stack_layout_manager.h b/ios/chrome/browser/ui/stack_view/card_stack_layout_manager.h
new file mode 100644
index 0000000000000000000000000000000000000000..54d942833a1f085e45e736bf4c1b37adb5d3b9d0
--- /dev/null
+++ b/ios/chrome/browser/ui/stack_view/card_stack_layout_manager.h
@@ -0,0 +1,172 @@
+// Copyright 2012 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.
+
+#ifndef IOS_CHROME_BROWSER_UI_STACK_VIEW_CARD_STACK_LAYOUT_MANAGER_H_
+#define IOS_CHROME_BROWSER_UI_STACK_VIEW_CARD_STACK_LAYOUT_MANAGER_H_
+
+#import <CoreGraphics/CoreGraphics.h>
+#import <Foundation/Foundation.h>
+
+#include "base/mac/scoped_nsobject.h"
+
+@class StackCard;
+
+// Encapsulates a stack of cards and their layout behavior, supporting
+// fanning the cards out along an axis and gathering them to fit in a given
+// area.
+@interface CardStackLayoutManager : NSObject {
+ @private
+ base::scoped_nsobject<NSMutableArray> cards_;
+ // YES if the previous call to one of {|scrollCardAtIndex|,
+ // |handleMultitouchWithFirstDelta|} was to the former method; NO otherwise.
+ BOOL treatOverExtensionAsScroll_;
+ NSUInteger previousFirstPinchCardIndex_;
+ NSUInteger previousSecondPinchCardIndex_;
+}
+
+// The size of a card. Setting this property preserves card origins with the
+// exception that cards are moved as necessary to satisfy placement constraints
+// (e.g., that a card is not placed too far away from its preceding neighbor).
+@property(nonatomic, assign) CGSize cardSize;
+// The center of a card along the axis that is not the layout axis.
+@property(nonatomic, assign) CGFloat layoutAxisPosition;
+// The amount cards should be staggered at full expansion.
+@property(nonatomic, assign) CGFloat maxStagger;
+// The maximum amount that the first card is allowed to overextend toward the
+// start or the end.
+@property(nonatomic, assign) CGFloat maximumOverextensionAmount;
+// The offset denoting the start of the visible stack.
+@property(nonatomic, assign) CGFloat startLimit;
+// The offset denoting the end of the visible stack. Setting this property
+// causes the end stack to be recomputed.
+@property(nonatomic, assign) CGFloat endLimit;
+// YES if the cards should be laid out vertically. Default is YES. A change in
+// this property also sets the cards' positions along the new layout axis to
+// their positions along the previous layout axis.
+@property(nonatomic, assign) BOOL layoutIsVertical;
+// TODO(blundell): The below two vars should be changed to NSUIntegers so that
+// the implementation can uniformly use NSUIntegers. b/5956653
+// The index of the last card that is in the initial stack.
+@property(nonatomic, readonly, assign) NSInteger lastStartStackCardIndex;
+// The index of the first card that is in the ending stack.
+@property(nonatomic, readonly, assign) NSInteger firstEndStackCardIndex;
+
+// Adds a |card| to the top (z-index) of the stack.
+- (void)addCard:(StackCard*)card;
+
+// Adds a |card| to the stack at the given index.
+- (void)insertCard:(StackCard*)card atIndex:(NSUInteger)index;
+
+// Removes |card| from the stack.
+- (void)removeCard:(StackCard*)card;
+
+// Removes all cards from the stack.
+- (void)removeAllCards;
+
+// Returns an array of cards, ordered from bottom to top of the stack (in
+// z-order terms).
+- (NSArray*)cards;
+
+// Based on the cards' current positions and the value of |startLimit|, caps
+// cards that should be in the start stack.
+- (void)layOutStartStack;
+
+// Fans out the cards and then gathers them in such that the first card not
+// collapsed into the start stack is the card at |startIndex|.
+- (void)fanOutCardsWithStartIndex:(NSUInteger)startIndex;
+
+// Scrolls the card at |index| by |delta| (and trailing cards by a maximum of
+// |delta| depending on whether evening out after pinching needs to occur).
+// Scrolls leading cards by delta if |scrollLeadingCards| is |YES|; otherwise,
+// does not scroll leading cards. Allows a certain amount of overscrolling
+// toward the start and end. If |decayOnOverscroll| is |YES|, the impact of the
+// scroll decays once the stack is overscrolled. If |allowEarlyOverscroll|
+// is |YES|, overscrolling is allowed to occur naturally on the scrolled card;
+// otherwise, overscrolling is not allowed to occur until the stack is fully
+// collapsed/fanned out.
+- (void)scrollCardAtIndex:(NSUInteger)index
+ byDelta:(CGFloat)delta
+ allowEarlyOverscroll:(BOOL)allowEarlyOverscroll
+ decayOnOverscroll:(BOOL)decayOnOverscroll
+ scrollLeadingCards:(BOOL)scrollLeadingCards;
+
+// Returns whether the card at |index| is overextended toward the start.
+- (BOOL)overextensionTowardStartOnCardAtIndex:(NSUInteger)index;
+// Returns whether the first card is overextended toward the end. Note that
+// overextension is not a meaningful concept for other cards, as a pinch is
+// allowed to leave cards other than the first card resting in arbitrary
+// positions.
+- (BOOL)overextensionTowardEndOnFirstCard;
+// Moves the cards so that any overextension is eliminated, with the nature of
+// the movement being dependent on whether a scroll or a pinch occurred last.
+- (void)eliminateOverextension;
+
+// Scrolls the card at |index| to be at the maximum separation from the
+// neighboring card, followed by handling start and end capping. If |preceding|,
+// the card at |index| is scrolled away from the previous card toward the end
+// stack, otherwise it is scrolled away from the next card toward the start
+// stack. Also scrolls the cards that the card at |index| is scrolled toward,
+// but does not alter the positions of the cards it is being scrolled away from.
+- (void)scrollCardAtIndex:(NSUInteger)index awayFromNeighbor:(BOOL)preceding;
+
+// Updates the card positions based on the passed-in multitouch event, in which
+// |firstCardIndex| represents the card closer to the start stack,
+// |secondCardIndex > firstCardIndex| represents the card closer to the end
+// stack, and |firstDelta| and |secondDelta| represent the two cards'
+// respective movements. Caps card positions when cards get too close to each
+// other. Allows overpinch toward the start stack, and allows the first card to
+// overpinch toward the end stack when it is being pinched. If
+// |decayOnOverpinch| is |YES|, the impact of each side of the pinch is
+// decayed once the card being pinched is overpinched.
+- (void)handleMultitouchWithFirstDelta:(CGFloat)firstDelta
+ secondDelta:(CGFloat)secondDelta
+ firstCardIndex:(NSInteger)firstCardIndex
+ secondCardIndex:(NSInteger)secondCardIndex
+ decayOnOverpinch:(BOOL)decayOnOverpinch;
+
+// The length required to display a fully fanned-out stack.
+- (CGFloat)fannedStackLength;
+
+// The maximum length that the stack could possibly grow to accounting for the
+// fact that the user can pinch to pull cards apart further than the fanned-out
+// separation.
+- (CGFloat)maximumStackLength;
+
+// The length required to display a fully collapsed stack. Note that this does
+// not depend on the number of cards in the stack; it will always return the
+// amount needed to show an arbitrarily large stack, so that it has a
+// consistent result that can be used to compute card sizes/margins.
+- (CGFloat)fullyCollapsedStackLength;
+
+// Returns YES if |card| is completely covered by other cards.
+- (BOOL)cardIsCovered:(StackCard*)card;
+
+// Returns whether |card| is collapsed behind its succeeding neighbor, defined
+// as being separated by <= the separation distance between visible cards in the
+// edge stacks.
+- (BOOL)cardIsCollapsed:(StackCard*)card;
+
+// Returns whether the title label for |card| is covered by its succeeding
+// neighbor or the edge of the screen.
+- (BOOL)cardLabelCovered:(StackCard*)card;
+
+// Returns |YES| if all cards are scrolled into the start stack.
+- (BOOL)stackIsFullyCollapsed;
+
+// Returns |YES| if the stack is fully fanned out.
+- (BOOL)stackIsFullyFannedOut;
+
+// Returns |YES| if the stack is fully overextended toward the start or the
+// end.
+- (BOOL)stackIsFullyOverextended;
+
+// The amount that the first card is currently overextended.
+- (CGFloat)overextensionAmount;
+
+// The number of cards visible when stack is fanned out.
+- (NSUInteger)fannedStackCount;
+
+@end
+
+#endif // IOS_CHROME_BROWSER_UI_STACK_VIEW_CARD_STACK_LAYOUT_MANAGER_H_
« no previous file with comments | « ios/chrome/browser/ui/stack_view/card_set_unittest.mm ('k') | ios/chrome/browser/ui/stack_view/card_stack_layout_manager.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698