summaryrefslogtreecommitdiffstats
path: root/chromeos/display
diff options
context:
space:
mode:
authormukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-01 06:42:51 +0000
committermukai@chromium.org <mukai@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-01 06:42:51 +0000
commit196e945a6a0d734bd3c867a34fe5c9b0c60d0734 (patch)
tree7590bf944307a43bfd527bac99f1a02d45ec97c8 /chromeos/display
parent9d29124d4a1fa47803ff5b371406c722b7c82507 (diff)
downloadchromium_src-196e945a6a0d734bd3c867a34fe5c9b0c60d0734.zip
chromium_src-196e945a6a0d734bd3c867a34fe5c9b0c60d0734.tar.gz
chromium_src-196e945a6a0d734bd3c867a34fe5c9b0c60d0734.tar.bz2
Add Fade-out/Fade-in animation during output-configuration change.
BUG=127493 TEST=manually checked on lumpy Review URL: https://chromiumcodereview.appspot.com/10817028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149382 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos/display')
-rw-r--r--chromeos/display/output_configurator.cc18
-rw-r--r--chromeos/display/output_configurator.h16
2 files changed, 34 insertions, 0 deletions
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc
index 9806edf..d3f2311 100644
--- a/chromeos/display/output_configurator.cc
+++ b/chromeos/display/output_configurator.cc
@@ -16,6 +16,7 @@
#undef Status
#undef RootWindow
+#include "base/bind.h"
#include "base/chromeos/chromeos_version.h"
#include "base/logging.h"
#include "base/message_pump_aurax11.h"
@@ -399,6 +400,11 @@ bool OutputConfigurator::SetDisplayMode(OutputState new_state) {
new_state);
XRRFreeScreenResources(screen);
XUngrabServer(display);
+
+ MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(&OutputConfigurator::NotifyOnDisplayChanged,
+ base::Unretained(this)));
+
return true;
}
@@ -424,6 +430,14 @@ bool OutputConfigurator::Dispatch(const base::NativeEvent& event) {
return true;
}
+void OutputConfigurator::AddObserver(Observer* observer) {
+ observers_.AddObserver(observer);
+}
+
+void OutputConfigurator::RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
bool OutputConfigurator::TryRecacheOutputs(Display* display,
XRRScreenResources* screen) {
bool outputs_did_change = false;
@@ -843,4 +857,8 @@ void OutputConfigurator::CheckIsProjectingAndNotify() {
dbus::ObjectProxy::EmptyResponseCallback());
}
+void OutputConfigurator::NotifyOnDisplayChanged() {
+ FOR_EACH_OBSERVER(Observer, observers_, OnDisplayModeChanged());
+}
+
} // namespace chromeos
diff --git a/chromeos/display/output_configurator.h b/chromeos/display/output_configurator.h
index b1518db..bbf0063 100644
--- a/chromeos/display/output_configurator.h
+++ b/chromeos/display/output_configurator.h
@@ -7,6 +7,7 @@
#include "base/basictypes.h"
#include "base/event_types.h"
+#include "base/observer_list.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop.h"
#include "chromeos/chromeos_export.h"
@@ -40,6 +41,13 @@ enum OutputState {
// it.
class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher {
public:
+ class Observer {
+ public:
+ // Called when the change of the display mode finished. It will usually
+ // start the fading in the displays.
+ virtual void OnDisplayModeChanged() = 0;
+ };
+
explicit OutputConfigurator(bool is_extended_display_enabled);
virtual ~OutputConfigurator();
@@ -67,6 +75,9 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher {
// Spurious events will have no effect.
virtual bool Dispatch(const base::NativeEvent& event) OVERRIDE;
+ void AddObserver(Observer* observer);
+ void RemoveObserver(Observer* observer);
+
private:
// The information we need to cache from an output to implement operations
// such as power state but also to eliminate duplicate operations within a
@@ -124,6 +135,9 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher {
// with the result.
void CheckIsProjectingAndNotify();
+ // Fires OnDisplayModeChanged() event to the observers.
+ void NotifyOnDisplayChanged();
+
// This is detected by the constructor to determine whether or not we should
// be enabled. If we aren't running on ChromeOS, we can't assume that the
// Xrandr X11 extension is supported.
@@ -161,6 +175,8 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher {
// This is used for rotating display modes.
OutputState output_state_;
+ ObserverList<Observer> observers_;
+
DISALLOW_COPY_AND_ASSIGN(OutputConfigurator);
};