diff options
author | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-22 07:01:50 +0000 |
---|---|---|
committer | mukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-22 07:01:50 +0000 |
commit | 38472463f750a820e5c3f727b7bb9d60764dfb00 (patch) | |
tree | 3d92aebd573b5f3a5c37e0ff7c49bf06e1804684 | |
parent | 773217067a3016c17fac70c0efe5ac568f404d12 (diff) | |
download | chromium_src-38472463f750a820e5c3f727b7bb9d60764dfb00.zip chromium_src-38472463f750a820e5c3f727b7bb9d60764dfb00.tar.gz chromium_src-38472463f750a820e5c3f727b7bb9d60764dfb00.tar.bz2 |
Refactors getting available color profiles code.
My first CL got affected the recent refactoring of display/chromeos
and it needs some cleanups. I think the new code makes more sense.
- DisplayState struct isn't accessible from native_display_delegate
but the color profiles are in the native layer. It doesn't make
sense to put the list there.
- Instead of moving the data into DisplaySnapshot, it seems nicer
to query the list of available profiles and to treat the list
as a cache. This also avoids duplicating the same list both in
DisplayInfo and another struct.
- The destructor of DisplayState was introduced by me because
it gets a complicated struct due to available_color_profiles.
Now it's gone, so it doesn't necessarily exist.
BUG=None
R=oshima@chromium.org, marcheu@chromium.org
TEST=build succeeds
Review URL: https://codereview.chromium.org/208943002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258798 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/display/display_change_observer_chromeos.cc | 16 | ||||
-rw-r--r-- | ash/display/display_info.cc | 12 | ||||
-rw-r--r-- | ash/display/display_info.h | 3 | ||||
-rw-r--r-- | ash/display/display_manager.cc | 3 | ||||
-rw-r--r-- | ui/display/chromeos/native_display_delegate.h | 7 | ||||
-rw-r--r-- | ui/display/chromeos/output_configurator.cc | 23 | ||||
-rw-r--r-- | ui/display/chromeos/output_configurator.h | 8 | ||||
-rw-r--r-- | ui/display/chromeos/output_configurator_unittest.cc | 6 | ||||
-rw-r--r-- | ui/display/chromeos/x11/native_display_delegate_x11.cc | 12 | ||||
-rw-r--r-- | ui/display/chromeos/x11/native_display_delegate_x11.h | 3 |
10 files changed, 67 insertions, 26 deletions
diff --git a/ash/display/display_change_observer_chromeos.cc b/ash/display/display_change_observer_chromeos.cc index 461b7be..97c9d26 100644 --- a/ash/display/display_change_observer_chromeos.cc +++ b/ash/display/display_change_observer_chromeos.cc @@ -158,15 +158,17 @@ void DisplayChangeObserver::OnDisplayModeChanged( ids.insert(id); displays.push_back(DisplayInfo(id, name, has_overscan)); - displays.back().set_device_scale_factor(device_scale_factor); - displays.back().SetBounds(display_bounds); - displays.back().set_native(true); - displays.back().set_display_modes(display_modes); - displays.back().set_touch_support( + DisplayInfo& new_info = displays.back(); + new_info.set_device_scale_factor(device_scale_factor); + new_info.SetBounds(display_bounds); + new_info.set_native(true); + new_info.set_display_modes(display_modes); + new_info.set_touch_support( output.touch_device_id == 0 ? gfx::Display::TOUCH_SUPPORT_UNAVAILABLE : gfx::Display::TOUCH_SUPPORT_AVAILABLE); - displays.back().set_available_color_profiles( - output.available_color_profiles); + new_info.set_available_color_profiles( + Shell::GetInstance()->output_configurator()-> + GetAvailableColorCalibrationProfiles(id)); } // DisplayManager can be null during the boot. diff --git a/ash/display/display_info.cc b/ash/display/display_info.cc index 25b6a74..e3a4b63 100644 --- a/ash/display/display_info.cc +++ b/ash/display/display_info.cc @@ -305,11 +305,15 @@ std::string DisplayInfo::ToFullString() const { } void DisplayInfo::SetColorProfile(ui::ColorCalibrationProfile profile) { - if (std::find(available_color_profiles_.begin(), - available_color_profiles_.end(), - profile) != available_color_profiles_.end()) { + if (IsColorProfileAvailable(profile)) color_profile_ = profile; - } +} + +bool DisplayInfo::IsColorProfileAvailable( + ui::ColorCalibrationProfile profile) const { + return std::find(available_color_profiles_.begin(), + available_color_profiles_.end(), + profile) != available_color_profiles_.end(); } } // namespace internal diff --git a/ash/display/display_info.h b/ash/display/display_info.h index d47ac37..14af285 100644 --- a/ash/display/display_info.h +++ b/ash/display/display_info.h @@ -163,6 +163,9 @@ class ASH_EXPORT DisplayInfo { // |available_color_profiles_|. void SetColorProfile(ui::ColorCalibrationProfile profile); + // Returns true if |profile| is in |available_color_profiles_|. + bool IsColorProfileAvailable(ui::ColorCalibrationProfile profile) const; + const std::vector<ui::ColorCalibrationProfile>& available_color_profiles() const { return available_color_profiles_; diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc index c548428..8c02f44 100644 --- a/ash/display/display_manager.cc +++ b/ash/display/display_manager.cc @@ -508,6 +508,9 @@ void DisplayManager::SetColorCalibrationProfile( int64 display_id, ui::ColorCalibrationProfile profile) { #if defined(OS_CHROMEOS) + if (!display_info_[display_id].IsColorProfileAvailable(profile)) + return; + if (delegate_) delegate_->PreDisplayConfigurationChange(false); if (Shell::GetInstance()->output_configurator()->SetColorCalibrationProfile( diff --git a/ui/display/chromeos/native_display_delegate.h b/ui/display/chromeos/native_display_delegate.h index 2b3b776..5d96142 100644 --- a/ui/display/chromeos/native_display_delegate.h +++ b/ui/display/chromeos/native_display_delegate.h @@ -5,6 +5,8 @@ #ifndef UI_DISPLAY_CHROMEOS_NATIVE_DISPLAY_DELEGATE_H_ #define UI_DISPLAY_CHROMEOS_NATIVE_DISPLAY_DELEGATE_H_ +#include <vector> + #include "ui/display/display_constants.h" #include "ui/display/display_export.h" @@ -71,6 +73,11 @@ class DISPLAY_EXPORT NativeDisplayDelegate { virtual bool SetHDCPState(const ui::DisplaySnapshot& output, ui::HDCPState state) = 0; + // Gets the available list of color calibrations. + virtual std::vector<ui::ColorCalibrationProfile> + GetAvailableColorCalibrationProfiles( + const ui::DisplaySnapshot& output) = 0; + // Sets the color calibration of |output| to |new_profile|. virtual bool SetColorCalibrationProfile( const ui::DisplaySnapshot& output, diff --git a/ui/display/chromeos/output_configurator.cc b/ui/display/chromeos/output_configurator.cc index 1a98b1d..cd95866 100644 --- a/ui/display/chromeos/output_configurator.cc +++ b/ui/display/chromeos/output_configurator.cc @@ -98,8 +98,6 @@ OutputConfigurator::DisplayState::DisplayState() selected_mode(NULL), mirror_mode(NULL) {} -OutputConfigurator::DisplayState::~DisplayState() {} - bool OutputConfigurator::TestApi::TriggerConfigureTimeout() { if (configurator_->configure_timer_.get() && configurator_->configure_timer_->IsRunning()) { @@ -381,19 +379,26 @@ bool OutputConfigurator::EnableOutputProtection( return true; } +std::vector<ui::ColorCalibrationProfile> +OutputConfigurator::GetAvailableColorCalibrationProfiles( + int64 display_id) { + for (size_t i = 0; i < cached_outputs_.size(); ++i) { + if (cached_outputs_[i].display && + cached_outputs_[i].display->display_id() == display_id) { + return native_display_delegate_->GetAvailableColorCalibrationProfiles( + *cached_outputs_[i].display); + } + } + + return std::vector<ui::ColorCalibrationProfile>(); +} + bool OutputConfigurator::SetColorCalibrationProfile( int64 display_id, ui::ColorCalibrationProfile new_profile) { for (size_t i = 0; i < cached_outputs_.size(); ++i) { if (cached_outputs_[i].display && cached_outputs_[i].display->display_id() == display_id) { - std::vector<ColorCalibrationProfile>::const_iterator iter = - std::find(cached_outputs_[i].available_color_profiles.begin(), - cached_outputs_[i].available_color_profiles.end(), - new_profile); - if (iter == cached_outputs_[i].available_color_profiles.end()) - return false; - return native_display_delegate_->SetColorCalibrationProfile( *cached_outputs_[i].display, new_profile); } diff --git a/ui/display/chromeos/output_configurator.h b/ui/display/chromeos/output_configurator.h index d23621b..27c3be2 100644 --- a/ui/display/chromeos/output_configurator.h +++ b/ui/display/chromeos/output_configurator.h @@ -47,7 +47,6 @@ class DISPLAY_EXPORT OutputConfigurator : public NativeDisplayObserver { struct DisplayState { DisplayState(); - ~DisplayState(); DisplaySnapshot* display; // Not owned. @@ -61,8 +60,6 @@ class DISPLAY_EXPORT OutputConfigurator : public NativeDisplayObserver { // Mode used when displaying the same desktop on multiple outputs. const DisplayMode* mirror_mode; - - std::vector<ui::ColorCalibrationProfile> available_color_profiles; }; typedef std::vector<DisplayState> DisplayStateList; @@ -262,6 +259,11 @@ class DISPLAY_EXPORT OutputConfigurator : public NativeDisplayObserver { int64 display_id, uint32_t desired_protection_mask); + // Checks the available color profiles for |display_id| and fills the result + // into |profiles|. + std::vector<ui::ColorCalibrationProfile> GetAvailableColorCalibrationProfiles( + int64 display_id); + // Updates the color calibration to |new_profile|. bool SetColorCalibrationProfile( int64 display_id, diff --git a/ui/display/chromeos/output_configurator_unittest.cc b/ui/display/chromeos/output_configurator_unittest.cc index 27b5446..0f5e6db 100644 --- a/ui/display/chromeos/output_configurator_unittest.cc +++ b/ui/display/chromeos/output_configurator_unittest.cc @@ -254,6 +254,12 @@ class TestNativeDisplayDelegate : public NativeDisplayDelegate { return true; } + virtual std::vector<ui::ColorCalibrationProfile> + GetAvailableColorCalibrationProfiles( + const DisplaySnapshot& output) OVERRIDE { + return std::vector<ui::ColorCalibrationProfile>(); + } + virtual bool SetColorCalibrationProfile( const DisplaySnapshot& output, ui::ColorCalibrationProfile new_profile) OVERRIDE { diff --git a/ui/display/chromeos/x11/native_display_delegate_x11.cc b/ui/display/chromeos/x11/native_display_delegate_x11.cc index 2135ad9..b56146e 100644 --- a/ui/display/chromeos/x11/native_display_delegate_x11.cc +++ b/ui/display/chromeos/x11/native_display_delegate_x11.cc @@ -384,9 +384,6 @@ DisplaySnapshotX11* NativeDisplayDelegateX11::InitDisplaySnapshot( const DisplayMode* native_mode = NULL; std::vector<const DisplayMode*> display_modes; - // TODO(mukai|marcheu): check the system status and fill the correct list of - // available color profiles. - for (int i = 0; i < info->nmode; ++i) { const RRMode mode = info->modes[i]; if (modes_.find(mode) != modes_.end()) { @@ -607,6 +604,15 @@ bool NativeDisplayDelegateX11::IsOutputAspectPreservingScaling(RROutput id) { return ret; } + +std::vector<ColorCalibrationProfile> +NativeDisplayDelegateX11::GetAvailableColorCalibrationProfiles( + const DisplaySnapshot& output) { + // TODO(mukai|marcheu): Checks the system data and fills the result. + // Note that the order would be Dynamic -> Standard -> Movie -> Reading. + return std::vector<ColorCalibrationProfile>(); +} + bool NativeDisplayDelegateX11::SetColorCalibrationProfile( const DisplaySnapshot& output, ColorCalibrationProfile new_profile) { diff --git a/ui/display/chromeos/x11/native_display_delegate_x11.h b/ui/display/chromeos/x11/native_display_delegate_x11.h index 1affda4..88ba506 100644 --- a/ui/display/chromeos/x11/native_display_delegate_x11.h +++ b/ui/display/chromeos/x11/native_display_delegate_x11.h @@ -83,6 +83,9 @@ class DISPLAY_EXPORT NativeDisplayDelegateX11 : public NativeDisplayDelegate { HDCPState* state) OVERRIDE; virtual bool SetHDCPState(const DisplaySnapshot& output, HDCPState state) OVERRIDE; + virtual std::vector<ColorCalibrationProfile> + GetAvailableColorCalibrationProfiles( + const DisplaySnapshot& output) OVERRIDE; virtual bool SetColorCalibrationProfile( const DisplaySnapshot& output, ColorCalibrationProfile new_profile) OVERRIDE; |