// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_COMMON_MATERIAL_TIMING_H_
#define IOS_CHROME_COMMON_MATERIAL_TIMING_H_
#import <CoreGraphics/CoreGraphics.h>
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
extern const CGFloat kMaterialDuration0;
extern const CGFloat kMaterialDuration1;
extern const CGFloat kMaterialDuration2;
extern const CGFloat kMaterialDuration3;
extern const CGFloat kMaterialDuration4;
extern const CGFloat kMaterialDuration5;
extern const CGFloat kMaterialDuration6;
extern const CGFloat kMaterialDuration7;
extern const CGFloat kMaterialDuration8;
// Type of material timing curve.
typedef NS_ENUM(NSUInteger, MaterialCurve) {
MaterialCurveEaseInOut,
MaterialCurveEaseOut,
MaterialCurveEaseIn,
MaterialCurveLinear,
};
// Per material spec, a motion curve with "follow through".
CAMediaTimingFunction* MaterialTransformCurve2();
// Returns a timing function related to the given `curve`.
CAMediaTimingFunction* MaterialTimingFunction(MaterialCurve curve);
@interface UIView (CrMaterialAnimations)
// Performs a standard UIView animation using a material timing `curve`.
// Note: any curve option specified in `options` will be ignored in favor of the
// specified curve value.
// See also: +[UIView animateWithDuration:delay:animations:completion].
+ (void)cr_animateWithDuration:(NSTimeInterval)duration
delay:(NSTimeInterval)delay
materialCurve:(MaterialCurve)materialCurve
options:(UIViewAnimationOptions)options
animations:(void (^)(void))animations
completion:(void (^)(BOOL finished))completion;
@end
#endif // IOS_CHROME_COMMON_MATERIAL_TIMING_H_