// Copyright 2015 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 UI_BASE_MATERIAL_DESIGN_MATERIAL_DESIGN_CONTROLLER_H_ #define UI_BASE_MATERIAL_DESIGN_MATERIAL_DESIGN_CONTROLLER_H_ #include "base/macros.h" #include "ui/base/ui_base_export.h" namespace ui { namespace test { class MaterialDesignControllerTestAPI; } // namespace test // Central controller to handle material design modes. class UI_BASE_EXPORT MaterialDesignController { public: // The different material design modes. The order cannot be changed without // updating references as these are used as array indices. enum Mode { // Classic, non-material design. NON_MATERIAL = 0, // Basic material design. MATERIAL_NORMAL = 1, // Material design targeted at mouse/touch hybrid devices. MATERIAL_HYBRID = 2 }; // Get the current Mode that should be used by the system. static Mode GetMode(); // Returns true if the current mode is a material design variant. static bool IsModeMaterial(); // Returns the per-platform default material design variant. static Mode DefaultMode(); private: friend class test::MaterialDesignControllerTestAPI; // Tracks whether |mode_| has been initialized. This is necessary so tests can // reset the state back to a clean state during tear down. static bool is_mode_initialized_; // The current Mode to be used by the system. static Mode mode_; // Declarations only. Do not allow construction of an object. MaterialDesignController(); ~MaterialDesignController(); // Initializes |mode_|. static void InitializeMode(); // Resets the Mode state to uninitialized. To be used by tests to cleanup // global state. static void UninitializeMode(); // Set |mode_| to |mode| and updates |is_mode_initialized_| to true. Can be // used by tests to directly set the mode. static void SetMode(Mode mode); DISALLOW_COPY_AND_ASSIGN(MaterialDesignController); }; } // namespace ui #endif // UI_BASE_MATERIAL_DESIGN_MATERIAL_DESIGN_CONTROLLER_H_