| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMECAST_UI_DISPLAY_SETTINGS_MANAGER_IMPL_H_ |
| #define CHROMECAST_UI_DISPLAY_SETTINGS_MANAGER_IMPL_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/memory/weak_ptr.h" |
| #include "chromecast/ui/display_settings/screen_power_controller.h" |
| #include "chromecast/ui/display_settings_manager.h" |
| #include "chromecast/ui/mojom/display_settings.mojom.h" |
| #include "mojo/public/cpp/bindings/pending_receiver.h" |
| #include "mojo/public/cpp/bindings/pending_remote.h" |
| #include "mojo/public/cpp/bindings/receiver_set.h" |
| #include "mojo/public/cpp/bindings/remote_set.h" |
| |
| namespace chromecast { |
| |
| class CastWindowManager; |
| class ColorTemperatureAnimation; |
| class BrightnessAnimation; |
| class GammaAnimation; |
| |
| #if defined(USE_AURA) |
| class GammaConfigurator; |
| #endif // defined(USE_AURA) |
| |
| namespace shell { |
| class CastDisplayConfigurator; |
| } // namespace shell |
| |
| class DisplaySettingsManagerImpl : public DisplaySettingsManager, |
| public ScreenPowerController::Delegate, |
| public mojom::DisplaySettings { |
| public: |
| DisplaySettingsManagerImpl( |
| CastWindowManager* window_manager, |
| shell::CastDisplayConfigurator* display_configurator); |
| DisplaySettingsManagerImpl(const DisplaySettingsManagerImpl&) = delete; |
| DisplaySettingsManagerImpl& operator=(const DisplaySettingsManagerImpl&) = |
| delete; |
| ~DisplaySettingsManagerImpl() override; |
| |
| // DisplaySettingsManager implementation: |
| void SetDelegate(DisplaySettingsManager::Delegate* delegate) override; |
| void ResetDelegate() override; |
| void SetColorTemperatureConfig( |
| const DisplaySettingsManager::ColorTemperatureConfig& config) override; |
| void SetGammaCalibration( |
| const std::vector<display::GammaRampRGBEntry>& gamma) override; |
| void NotifyBrightnessChanged(float new_brightness, |
| float old_brightness) override; |
| void SetColorInversion(bool enable) override; |
| void AddReceiver( |
| mojo::PendingReceiver<mojom::DisplaySettings> receiver) override; |
| |
| // ScreenPowerController::Delegate implementation: |
| void SetScreenPowerOn(PowerToggleCallback callback) override; |
| void SetScreenPowerOff(PowerToggleCallback callback) override; |
| void SetScreenBrightnessOn(bool brightness_on, |
| base::TimeDelta duration) override; |
| |
| // mojom::DisplaySettings implementation: |
| void SetColorTemperature(float temperature) override; |
| void SetColorTemperatureSmooth(float temperature, |
| base::TimeDelta duration) override; |
| void ResetColorTemperature() override; |
| void SetBrightness(float brightness) override; |
| void SetBrightnessSmooth(float brightness, base::TimeDelta duration) override; |
| void ResetBrightness() override; |
| void SetScreenOn(bool screen_on) override; |
| void SetAllowScreenPowerOff(bool allow_power_off) override; |
| |
| private: |
| // mojom::DisplaySettingsObserver implementation: |
| void AddDisplaySettingsObserver( |
| mojo::PendingRemote<mojom::DisplaySettingsObserver> observer) override; |
| |
| void UpdateBrightness(float brightness, base::TimeDelta duration); |
| |
| CastWindowManager* const window_manager_; |
| shell::CastDisplayConfigurator* const display_configurator_; |
| |
| #if defined(USE_AURA) |
| const std::unique_ptr<GammaConfigurator> gamma_configurator_; |
| #endif // defined(USE_AURA) |
| |
| float brightness_; |
| |
| std::unique_ptr<ScreenPowerController> screen_power_controller_; |
| std::unique_ptr<ColorTemperatureAnimation> color_temperature_animation_; |
| std::unique_ptr<BrightnessAnimation> brightness_animation_; |
| |
| mojo::ReceiverSet<mojom::DisplaySettings> receivers_; |
| mojo::RemoteSet<mojom::DisplaySettingsObserver> observers_; |
| |
| base::WeakPtrFactory<DisplaySettingsManagerImpl> weak_factory_; |
| }; |
| |
| } // namespace chromecast |
| |
| #endif // CHROMECAST_UI_DISPLAY_SETTINGS_MANAGER_IMPL_H_ |