1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
// Copyright 2014 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_DISPLAY_CHROMEOS_UPDATE_DISPLAY_CONFIGURATION_TASK_H_
#define UI_DISPLAY_CHROMEOS_UPDATE_DISPLAY_CONFIGURATION_TASK_H_
#include <vector>
#include "base/memory/weak_ptr.h"
#include "ui/display/chromeos/configure_displays_task.h"
#include "ui/display/chromeos/display_configurator.h"
namespace ui {
class DisplaySnapshot;
class NativeDisplayDelegate;
class DISPLAY_EXPORT UpdateDisplayConfigurationTask {
public:
typedef base::Callback<void(
bool /* success */,
const std::vector<DisplayConfigurator::DisplayState>& /* displays */,
const gfx::Size& /* framebuffer_size */,
MultipleDisplayState /* new_display_state */,
chromeos::DisplayPowerState /* new_power_state */)> ResponseCallback;
UpdateDisplayConfigurationTask(
NativeDisplayDelegate* delegate,
DisplayConfigurator::DisplayLayoutManager* layout_manager,
MultipleDisplayState new_display_state,
chromeos::DisplayPowerState new_power_state,
int power_flags,
uint32_t background_color_argb,
bool force_configure,
const ResponseCallback& callback);
~UpdateDisplayConfigurationTask();
void Run();
private:
// Callback to NativeDisplayDelegate::GetDisplays().
void OnDisplaysUpdated(const std::vector<DisplaySnapshot*>& displays);
// Callback to ConfigureDisplaysTask used to process the result of a display
// configuration run.
void OnStateEntered(ConfigureDisplaysTask::Status status);
// If the initial display configuration run failed due to errors entering
// mirror more, another configuration run is executed to enter software
// mirroring. This is the callback used to process the result of that
// configuration.
void OnEnableSoftwareMirroring(ConfigureDisplaysTask::Status status);
// Starts the configuration process. |callback| is used to continue the task
// after |configure_taks_| finishes executing.
void EnterState(const ConfigureDisplaysTask::ResponseCallback& callback);
// Finishes display configuration and runs |callback_|.
void FinishConfiguration(bool success);
// Returns true if the DPMS state should be force to on.
bool ShouldForceDpms() const;
// Returns true if a display configuration is required.
bool ShouldConfigure() const;
// Returns a display state based on the power state.
MultipleDisplayState ChooseDisplayState() const;
NativeDisplayDelegate* delegate_; // Not owned.
DisplayConfigurator::DisplayLayoutManager* layout_manager_; // Not owned.
// Requested display state.
MultipleDisplayState new_display_state_;
// Requested power state.
chromeos::DisplayPowerState new_power_state_;
// Bitwise-or-ed values for the kSetDisplayPower* values defined in
// DisplayConfigurator.
int power_flags_;
uint32_t background_color_argb_;
bool force_configure_;
// Used to signal that the task has finished.
ResponseCallback callback_;
bool force_dpms_;
// List of updated displays.
std::vector<DisplayConfigurator::DisplayState> cached_displays_;
gfx::Size framebuffer_size_;
scoped_ptr<ConfigureDisplaysTask> configure_task_;
base::WeakPtrFactory<UpdateDisplayConfigurationTask> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(UpdateDisplayConfigurationTask);
};
} // namespace ui
#endif // UI_DISPLAY_CHROMEOS_UPDATE_DISPLAY_CONFIGURATION_TASK_H_
|