blob: 3b6c0c20c762b8fda4d6d549e25a7de9a2398ad7 [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_CLEAN_CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_CONTROLLER_H_
#define IOS_CLEAN_CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_CONTROLLER_H_
#include <memory>
#include "base/macros.h"
class FullscreenControllerObserver;
// An object that observes scrolling events in the main content area and
// calculates how much of the toolbar should be visible as a result. When the
// user scrolls down the screen, the toolbar should be hidden to allow more of
// the page's content to be visible.
class FullscreenController {
public:
explicit FullscreenController();
~FullscreenController();
// Adds and removes FullscreenControllerObservers.
void AddObserver(FullscreenControllerObserver* observer);
void RemoveObserver(FullscreenControllerObserver* observer);
// FullscreenController can be disabled when a feature requires that the
// toolbar be fully visible. Since there are multiple reasons fullscreen
// might need to be disabled, this state is represented by a counter rather
// than a single bool. When a feature needs the toolbar to be visible, it
// calls IncrementDisabledCounter(). After that feature no longer requires
// the toolbar, it calls DecrementDisabledCounter(). IsEnabled() returns
// true when the counter is equal to zero. ScopedFullscreenDisabler can be
// used to tie a disabled counter to an object's lifetime.
bool IsEnabled() const;
void IncrementDisabledCounter();
void DecrementDisabledCounter();
private:
DISALLOW_COPY_AND_ASSIGN(FullscreenController);
};
#endif // IOS_CLEAN_CHROME_BROWSER_UI_FULLSCREEN_FULLSCREEN_CONTROLLER_H_