summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-22 07:01:50 +0000
committermukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-22 07:01:50 +0000
commit38472463f750a820e5c3f727b7bb9d60764dfb00 (patch)
tree3d92aebd573b5f3a5c37e0ff7c49bf06e1804684
parent773217067a3016c17fac70c0efe5ac568f404d12 (diff)
downloadchromium_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.cc16
-rw-r--r--ash/display/display_info.cc12
-rw-r--r--ash/display/display_info.h3
-rw-r--r--ash/display/display_manager.cc3
-rw-r--r--ui/display/chromeos/native_display_delegate.h7
-rw-r--r--ui/display/chromeos/output_configurator.cc23
-rw-r--r--ui/display/chromeos/output_configurator.h8
-rw-r--r--ui/display/chromeos/output_configurator_unittest.cc6
-rw-r--r--ui/display/chromeos/x11/native_display_delegate_x11.cc12
-rw-r--r--ui/display/chromeos/x11/native_display_delegate_x11.h3
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;