blob: 298a995979b832fb701c6f18330665275ec82ae3 [file] [log] [blame]
// 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_VIEW_H_
#define IOS_CHROME_BROWSER_UI_STACK_VIEW_CARD_VIEW_H_
#import <UIKit/UIKit.h>
struct LayoutRect;
// The insets of the snapshot image within the card.
extern const UIEdgeInsets kCardImageInsets;
// Inset from the edge of the card view to the edge of the card frame image.
extern const CGFloat kCardFrameInset;
// Thickness of the shadow cast by a card view.
extern const CGFloat kCardShadowThickness;
// The corner radius of the card frame image.
extern const CGFloat kCardFrameCornerRadius;
// The inset from the top of the card to the beginning of its tab view.
extern const CGFloat kCardTabTopInset;
// The brightness values for the background colors of the card frame images.
extern const CGFloat kCardFrameBackgroundBrightness;
extern const CGFloat kCardFrameBackgroundBrightnessIncognito;
// The amount by which the card frame image overlaps the content snapshot.
extern const CGFloat kCardFrameImageSnapshotOverlap;
// The name of the shadow image used for the card views.
extern NSString* const kCardShadowImageName;
// The outsets that will line the edge of a view with the shadow image.
extern const UIEdgeInsets kCardShadowLayoutOutsets;
// Enum class describing on which side to draw the close button.
enum class CardCloseButtonSide : short { LEADING = 0, TRAILING };
typedef enum {
CARD_TAB_ANIMATION_STYLE_NONE = 0,
CARD_TAB_ANIMATION_STYLE_FADE_IN,
CARD_TAB_ANIMATION_STYLE_FADE_OUT
} CardTabAnimationStyle;
@class CardSnapshotView;
@class CardTabView;
@class TitleLabel;
// A view class for displaying a card in the tab-switching stack. Has a title
// and an image. On its target, has actions for when the close box is clicked,
// when the card is selected, when it's dragged, and when VoiceOver focuses on
// its title label or close button.
@interface CardView : UIView
// |YES| if this card represents the current active tab.
@property(nonatomic, assign) BOOL isActiveTab;
// The snapshot displayed on the card.
@property(nonatomic, retain) UIImage* image;
// Whether the card view should render its shadow.
@property(nonatomic, assign) BOOL shouldShowShadow;
// Whether the card view should mask its shadow to only the overlapping portion.
@property(nonatomic, assign) BOOL shouldMaskShadow;
// The side on which to draw the close button.
@property(nonatomic, assign) CardCloseButtonSide closeButtonSide;
// Initializes CardView with |frame| and |isIncognito| state.
- (instancetype)initWithFrame:(CGRect)frame
isIncognito:(BOOL)isIncognito NS_DESIGNATED_INITIALIZER;
- (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE;
// Sets the page title. Can be nil.
- (void)setTitle:(NSString*)title;
// Returns TitleLabel element.
- (TitleLabel*)titleLabel;
// Sets the favicon. Can be nil, in which case the default favicon will be
// displayed.
- (void)setFavicon:(UIImage*)favicon;
// Sets the opacity of the tab. Uses opacity instead of hidden so that it's
// animatable.
- (void)setTabOpacity:(CGFloat)opacity;
// Sets target-action that is called when the close button is tapped. |target|
// can be nil and is not retained.
- (void)addCardCloseTarget:(id)target action:(SEL)action;
// Returns the touch target area of the button used to close the card.
- (CGRect)closeButtonFrame;
// Sets target-action that is called when VoiceOver focuses on the card view.
// |target| can be nil and is not retained.
- (void)addAccessibilityTarget:(id)target action:(SEL)action;
// Posts accessibility notification in VoiceOver to indicate when screen
// has changed and move cursor to CardView's titleLabel.
- (void)postAccessibilityNotification;
// Animates from |beginFrame| to |endFrame|, animating the card's tab as
// specified by |tabAnimationStyle|:
// - CardTabAnimationStyleNone: Animate frames of tab subviews
// - CardTabAnimationStyleFadeIn: Animate frames and fade in tab subviews
// - CardTabAnimationStyleFadeOut: Aniamte frames and fade out tab subviews
- (void)animateFromBeginFrame:(CGRect)beginFrame
toEndFrame:(CGRect)endFrame
tabAnimationStyle:(CardTabAnimationStyle)tabAnimationStyle;
// Removes the top-level frame animation added by
// |-animateFromBeginFrame:toEndFrame:tabAnimationStyle:|. This is necessary to
// avoid animation glitches that occur when a card is closed mid-animation, as
// ios_internal::page_animation_util::AnimateOutWithCompletion updates the
// CardView's anchorPoint.
- (void)removeFrameAnimation;
// Adds the dummy toolbar background view to the back of the card tab view.
- (void)installDummyToolbarBackgroundView:(UIView*)dummyToolbarBackgroundView;
// Reverses animations added by
// |-animateFromBeginFrame:toEndFrame:tabAnimationStyle:|.
- (void)reverseAnimations;
// Removes animations added by
// |-animateFromBeginFrame:toEndFrame:tabAnimationStyle:|.
- (void)cleanUpAnimations;
@end
@interface CardView (ExposedForTesting)
// The LayoutRect for CardTabView.
- (LayoutRect)tabLayout;
// The a11y ID of the "close" button in the find-in-page bar.
@property(nonatomic, readonly) NSString* closeButtonId;
@end
#endif // IOS_CHROME_BROWSER_UI_STACK_VIEW_CARD_VIEW_H_