Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(855)

Unified Diff: chrome/browser/ui/panels/display_settings_provider.h

Issue 10051020: Move full-screen detection logic from PanelManager to DisplaySettingsProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_
« no previous file with comments | « no previous file | chrome/browser/ui/panels/display_settings_provider.cc » ('j') | chrome/browser/ui/panels/panel_manager.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698