Chromium Code Reviews| Index: chrome/browser/ui/panels/display_settings_provider.h |
| diff --git a/chrome/browser/ui/panels/display_settings_provider.h b/chrome/browser/ui/panels/display_settings_provider.h |
| index b50eb5694a2e110b9d0b7f5c1c06d535f339d7ca..aba3cab2e006959c94c16a0667106cf7d965b168 100644 |
| --- a/chrome/browser/ui/panels/display_settings_provider.h |
| +++ b/chrome/browser/ui/panels/display_settings_provider.h |
| @@ -6,6 +6,8 @@ |
| #define CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ |
| #pragma once |
| +#include "base/observer_list.h" |
| +#include "base/timer.h" |
| #include "ui/gfx/rect.h" |
| // Encapsulates the logic to provide display settings support, including the |
| @@ -13,6 +15,19 @@ |
| // 1) Work area |
| // 2) Auto-hiding desktop bars, like Windows taskbar and MacOSX dock. |
| class DisplaySettingsProvider { |
| + private: |
| + enum ObserverType { |
|
Dmitry Titov
2012/04/12 00:08:51
I think it would be simpler to have no base type f
jianli
2012/04/12 00:45:17
Done.
|
| + DISPLAY_AREA_OBSERVER, |
| + DESKTOP_BAR_OBSERVER, |
| + FULL_SCREEN_OBSERVER |
| + }; |
| + |
| + // Base class for different kinds of observers. |
| + class Observer { |
| + public: |
| + virtual ObserverType type() const = 0; |
| + }; |
| + |
| public: |
| // Indicates which screen edge the desktop bar is aligned to. |
| // We do not care about the desktop aligned to the top screen edge. |
| @@ -29,23 +44,36 @@ class DisplaySettingsProvider { |
| DESKTOP_BAR_HIDDEN |
| }; |
| - // Observer can listen to the event regarding the display area change. |
| - class DisplayAreaObserver { |
| + class DisplayAreaObserver : public Observer { |
| public: |
| virtual void OnDisplayAreaChanged(const gfx::Rect& display_area) = 0; |
| + private: |
| + virtual ObserverType type() const OVERRIDE { return DISPLAY_AREA_OBSERVER; } |
| }; |
| - // Observer can listen to the event regarding the desktop bar change. |
| - class DesktopBarObserver { |
| + class DesktopBarObserver : public Observer { |
| public: |
| virtual void OnAutoHidingDesktopBarVisibilityChanged( |
| DesktopBarAlignment alignment, DesktopBarVisibility visibility) = 0; |
| + private: |
| + virtual ObserverType type() const OVERRIDE { return DESKTOP_BAR_OBSERVER; } |
| + }; |
| + |
| + class FullScreenObserver : public Observer { |
| + public: |
| + virtual void OnFullScreenModeChanged(bool is_full_screen) = 0; |
| + private: |
| + virtual ObserverType type() const OVERRIDE { return FULL_SCREEN_OBSERVER; } |
| }; |
| static DisplaySettingsProvider* Create(); |
| virtual ~DisplaySettingsProvider(); |
| + // Subscribes/unsubscribes from the display settings change notification. |
| + void AddObserver(Observer* observer); |
| + void RemoveObserver(Observer* observer); |
| + |
| // Returns the bounds of the display area. |
| gfx::Rect GetDisplayArea(); |
| @@ -70,21 +98,20 @@ class DisplaySettingsProvider { |
| virtual DesktopBarVisibility GetDesktopBarVisibility( |
| DesktopBarAlignment alignment) const; |
| - DisplayAreaObserver* display_area_observer() const { |
| - return display_area_observer_; |
| - } |
| - void set_display_area_observer(DisplayAreaObserver* display_area_observer) { |
| - display_area_observer_ = display_area_observer; |
| + ObserverList<DisplayAreaObserver>& display_area_observers() { |
| + return display_area_observers_; |
| } |
| - DesktopBarObserver* desktop_bar_observer() const { |
| - return desktop_bar_observer_; |
| + ObserverList<DesktopBarObserver>& desktop_bar_observers() { |
| + return desktop_bar_observers_; |
| } |
| - void set_desktop_bar_observer(DesktopBarObserver* desktop_bar_observer) { |
| - desktop_bar_observer_ = desktop_bar_observer; |
| + |
| + ObserverList<FullScreenObserver>& full_screen_observers() { |
| + return full_screen_observers_; |
| } |
| gfx::Rect work_area() const { return work_area_; } |
| + bool is_full_screen() const { return is_full_screen_; } |
| protected: |
| DisplaySettingsProvider(); |
| @@ -94,14 +121,19 @@ class DisplaySettingsProvider { |
| // testing code. |
| virtual gfx::Rect GetWorkArea() const; |
| + // Callback to perform periodic check for full screen mode changes. |
| + virtual void CheckFullScreenMode(); |
| + |
| void OnAutoHidingDesktopBarChanged(); |
| private: |
| // Adjusts the work area to exclude the influence of auto-hiding desktop bars. |
| void AdjustWorkAreaForAutoHidingDesktopBars(); |
| - DisplayAreaObserver* display_area_observer_; |
| - DesktopBarObserver* desktop_bar_observer_; |
| + // Observers that listen to various display settings changes. |
| + ObserverList<DisplayAreaObserver> display_area_observers_; |
| + ObserverList<DesktopBarObserver> desktop_bar_observers_; |
| + ObserverList<FullScreenObserver> full_screen_observers_; |
| // The maximum work area avaialble. This area does not include the area taken |
| // by the always-visible (non-auto-hiding) desktop bars. |
| @@ -112,6 +144,12 @@ class DisplaySettingsProvider { |
| // bars (we only consider those bars that are aligned to bottom, left, and |
| // right of the screen edges) when they become fully visible. |
| gfx::Rect adjusted_work_area_; |
| + |
| + // True if full screen mode or presentation mode is entered. |
| + bool is_full_screen_; |
| + |
| + // Timer used to detect full-screen mode change. |
| + base::RepeatingTimer<DisplaySettingsProvider> full_screen_mode_timer_; |
|
dcheng
2012/04/12 00:18:28
Minor nit: DISALLOW_COPY_AND_ASSIGN should be used
jianli
2012/04/12 00:45:17
Done.
|
| }; |
| #endif // CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ |