blob: bffdbb0094680f643752c502f183cddc3b42b87d [file] [log] [blame]
// Copyright 2017 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_FULLSCREEN_FULLSCREEN_UI_ELEMENT_H_
#define IOS_CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_UI_ELEMENT_H_
#import <Foundation/Foundation.h>
@class FullscreenAnimator;
// UI elements that need to react to Fullscreen events should conform to this
// protocol to react to changes in Fullscreen state.
@protocol FullscreenUIElement<NSObject>
// Tells the UI to update its state for |progress|. A fullscreen |progress|
// value denotes that the toolbar should be completely visible, and a |progress|
// value of 0.0 denotes that the toolbar should be completely hidden.
//
// This selector is called for every scroll offset, it's not optional, as
// checking |-respondsToSelector:| for every FullscreenUIElement at every scroll
// offset can introduce performance issues.
//
// If the implementation of this selector uses batched layout updates (e.g.
// updating the UI in |-layoutSubviews| or by updating constraints), then a
// layout pass should be forced using |-setNeedsLayout| and |-layoutIfNeeded|.
// This will ensure that the layout is updated for each scroll position rather
// than batching multiple fullscreen progress updates together. This is
// especially important for FullscreenUIElements that do not implement
// |-animateFullscreenWithAnimator:|, as this selctor is called by
// FullscreenUIUpdater in an animation block.
- (void)updateForFullscreenProgress:(CGFloat)progress;
@optional
// Tells the UI to update its state after the max and min viewport insets have
// been updated to new values. |progress| is the current progress value, and
// can be used to update the UI at the current progress with the new viewport
// inset range.
- (void)updateForFullscreenMinViewportInsets:(UIEdgeInsets)minViewportInsets
maxViewportInsets:(UIEdgeInsets)maxViewportInsets;
// Tells the UI that fullscreen is enabled or disabled. FullscreenUIUpdater's
// default behavior if this selector is not implemented is to call
// |-updateForFullscreenProgress:| with a progress value of 1.0.
- (void)updateForFullscreenEnabled:(BOOL)enabled;
// Called when fullscreen is about to initate an animation.
// FullscreenUIUpdater's default behavior if this selector is not implemented is
// to add an animation block calling |-updateForFullscreenProgress:| with a
// progress value of |animator.finalProgress|.
- (void)animateFullscreenWithAnimator:(FullscreenAnimator*)animator;
@end
#endif // IOS_CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_UI_ELEMENT_H_