Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ | 5 #ifndef CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ |
| 6 #define CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ | 6 #define CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/observer_list.h" | |
| 10 #include "base/timer.h" | |
| 9 #include "ui/gfx/rect.h" | 11 #include "ui/gfx/rect.h" |
| 10 | 12 |
| 11 // Encapsulates the logic to provide display settings support, including the | 13 // Encapsulates the logic to provide display settings support, including the |
| 12 // information for: | 14 // information for: |
| 13 // 1) Work area | 15 // 1) Work area |
| 14 // 2) Auto-hiding desktop bars, like Windows taskbar and MacOSX dock. | 16 // 2) Auto-hiding desktop bars, like Windows taskbar and MacOSX dock. |
| 15 class DisplaySettingsProvider { | 17 class DisplaySettingsProvider { |
| 18 private: | |
| 19 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.
| |
| 20 DISPLAY_AREA_OBSERVER, | |
| 21 DESKTOP_BAR_OBSERVER, | |
| 22 FULL_SCREEN_OBSERVER | |
| 23 }; | |
| 24 | |
| 25 // Base class for different kinds of observers. | |
| 26 class Observer { | |
| 27 public: | |
| 28 virtual ObserverType type() const = 0; | |
| 29 }; | |
| 30 | |
| 16 public: | 31 public: |
| 17 // Indicates which screen edge the desktop bar is aligned to. | 32 // Indicates which screen edge the desktop bar is aligned to. |
| 18 // We do not care about the desktop aligned to the top screen edge. | 33 // We do not care about the desktop aligned to the top screen edge. |
| 19 enum DesktopBarAlignment { | 34 enum DesktopBarAlignment { |
| 20 DESKTOP_BAR_ALIGNED_BOTTOM = 0, | 35 DESKTOP_BAR_ALIGNED_BOTTOM = 0, |
| 21 DESKTOP_BAR_ALIGNED_LEFT = 1, | 36 DESKTOP_BAR_ALIGNED_LEFT = 1, |
| 22 DESKTOP_BAR_ALIGNED_RIGHT = 2 | 37 DESKTOP_BAR_ALIGNED_RIGHT = 2 |
| 23 }; | 38 }; |
| 24 | 39 |
| 25 // Indicates current visibility state of the desktop bar. | 40 // Indicates current visibility state of the desktop bar. |
| 26 enum DesktopBarVisibility { | 41 enum DesktopBarVisibility { |
| 27 DESKTOP_BAR_VISIBLE, | 42 DESKTOP_BAR_VISIBLE, |
| 28 DESKTOP_BAR_ANIMATING, | 43 DESKTOP_BAR_ANIMATING, |
| 29 DESKTOP_BAR_HIDDEN | 44 DESKTOP_BAR_HIDDEN |
| 30 }; | 45 }; |
| 31 | 46 |
| 32 // Observer can listen to the event regarding the display area change. | 47 class DisplayAreaObserver : public Observer { |
| 33 class DisplayAreaObserver { | |
| 34 public: | 48 public: |
| 35 virtual void OnDisplayAreaChanged(const gfx::Rect& display_area) = 0; | 49 virtual void OnDisplayAreaChanged(const gfx::Rect& display_area) = 0; |
| 50 private: | |
| 51 virtual ObserverType type() const OVERRIDE { return DISPLAY_AREA_OBSERVER; } | |
| 36 }; | 52 }; |
| 37 | 53 |
| 38 // Observer can listen to the event regarding the desktop bar change. | 54 class DesktopBarObserver : public Observer { |
| 39 class DesktopBarObserver { | |
| 40 public: | 55 public: |
| 41 virtual void OnAutoHidingDesktopBarVisibilityChanged( | 56 virtual void OnAutoHidingDesktopBarVisibilityChanged( |
| 42 DesktopBarAlignment alignment, DesktopBarVisibility visibility) = 0; | 57 DesktopBarAlignment alignment, DesktopBarVisibility visibility) = 0; |
| 58 private: | |
| 59 virtual ObserverType type() const OVERRIDE { return DESKTOP_BAR_OBSERVER; } | |
| 60 }; | |
| 61 | |
| 62 class FullScreenObserver : public Observer { | |
| 63 public: | |
| 64 virtual void OnFullScreenModeChanged(bool is_full_screen) = 0; | |
| 65 private: | |
| 66 virtual ObserverType type() const OVERRIDE { return FULL_SCREEN_OBSERVER; } | |
| 43 }; | 67 }; |
| 44 | 68 |
| 45 static DisplaySettingsProvider* Create(); | 69 static DisplaySettingsProvider* Create(); |
| 46 | 70 |
| 47 virtual ~DisplaySettingsProvider(); | 71 virtual ~DisplaySettingsProvider(); |
| 48 | 72 |
| 73 // Subscribes/unsubscribes from the display settings change notification. | |
| 74 void AddObserver(Observer* observer); | |
| 75 void RemoveObserver(Observer* observer); | |
| 76 | |
| 49 // Returns the bounds of the display area. | 77 // Returns the bounds of the display area. |
| 50 gfx::Rect GetDisplayArea(); | 78 gfx::Rect GetDisplayArea(); |
| 51 | 79 |
| 52 // Invoked when the display settings has changed, due to any of the following: | 80 // Invoked when the display settings has changed, due to any of the following: |
| 53 // 1) screen resolution changes | 81 // 1) screen resolution changes |
| 54 // 2) the thickness of desktop bar changes | 82 // 2) the thickness of desktop bar changes |
| 55 // 3) desktop bar switches between auto-hiding and non-auto-hiding | 83 // 3) desktop bar switches between auto-hiding and non-auto-hiding |
| 56 virtual void OnDisplaySettingsChanged(); | 84 virtual void OnDisplaySettingsChanged(); |
| 57 | 85 |
| 58 // Returns true if there is a desktop bar that is aligned to the specified | 86 // Returns true if there is a desktop bar that is aligned to the specified |
| 59 // screen edge and set to auto-hide. | 87 // screen edge and set to auto-hide. |
| 60 virtual bool IsAutoHidingDesktopBarEnabled(DesktopBarAlignment alignment); | 88 virtual bool IsAutoHidingDesktopBarEnabled(DesktopBarAlignment alignment); |
| 61 | 89 |
| 62 // Returns the thickness of the desktop bar that is aligned to the specified | 90 // Returns the thickness of the desktop bar that is aligned to the specified |
| 63 // screen edge, when it is visible. When the desktop bar is aligned to bottom | 91 // screen edge, when it is visible. When the desktop bar is aligned to bottom |
| 64 // edge, this is the height of the bar. If the desktop bar is aligned to | 92 // edge, this is the height of the bar. If the desktop bar is aligned to |
| 65 // left or right edge, this is the width of the bar. | 93 // left or right edge, this is the width of the bar. |
| 66 virtual int GetDesktopBarThickness(DesktopBarAlignment alignment) const; | 94 virtual int GetDesktopBarThickness(DesktopBarAlignment alignment) const; |
| 67 | 95 |
| 68 // Returns the visibility state of the desktop bar that is aligned to the | 96 // Returns the visibility state of the desktop bar that is aligned to the |
| 69 // specified screen edge. | 97 // specified screen edge. |
| 70 virtual DesktopBarVisibility GetDesktopBarVisibility( | 98 virtual DesktopBarVisibility GetDesktopBarVisibility( |
| 71 DesktopBarAlignment alignment) const; | 99 DesktopBarAlignment alignment) const; |
| 72 | 100 |
| 73 DisplayAreaObserver* display_area_observer() const { | 101 ObserverList<DisplayAreaObserver>& display_area_observers() { |
| 74 return display_area_observer_; | 102 return display_area_observers_; |
| 75 } | |
| 76 void set_display_area_observer(DisplayAreaObserver* display_area_observer) { | |
| 77 display_area_observer_ = display_area_observer; | |
| 78 } | 103 } |
| 79 | 104 |
| 80 DesktopBarObserver* desktop_bar_observer() const { | 105 ObserverList<DesktopBarObserver>& desktop_bar_observers() { |
| 81 return desktop_bar_observer_; | 106 return desktop_bar_observers_; |
| 82 } | 107 } |
| 83 void set_desktop_bar_observer(DesktopBarObserver* desktop_bar_observer) { | 108 |
| 84 desktop_bar_observer_ = desktop_bar_observer; | 109 ObserverList<FullScreenObserver>& full_screen_observers() { |
| 110 return full_screen_observers_; | |
| 85 } | 111 } |
| 86 | 112 |
| 87 gfx::Rect work_area() const { return work_area_; } | 113 gfx::Rect work_area() const { return work_area_; } |
| 114 bool is_full_screen() const { return is_full_screen_; } | |
| 88 | 115 |
| 89 protected: | 116 protected: |
| 90 DisplaySettingsProvider(); | 117 DisplaySettingsProvider(); |
| 91 | 118 |
| 92 // Returns the bounds of the work area that has not been adjusted to take | 119 // Returns the bounds of the work area that has not been adjusted to take |
| 93 // auto-hiding desktop bars into account. This can be overridden by the | 120 // auto-hiding desktop bars into account. This can be overridden by the |
| 94 // testing code. | 121 // testing code. |
| 95 virtual gfx::Rect GetWorkArea() const; | 122 virtual gfx::Rect GetWorkArea() const; |
| 96 | 123 |
| 124 // Callback to perform periodic check for full screen mode changes. | |
| 125 virtual void CheckFullScreenMode(); | |
| 126 | |
| 97 void OnAutoHidingDesktopBarChanged(); | 127 void OnAutoHidingDesktopBarChanged(); |
| 98 | 128 |
| 99 private: | 129 private: |
| 100 // Adjusts the work area to exclude the influence of auto-hiding desktop bars. | 130 // Adjusts the work area to exclude the influence of auto-hiding desktop bars. |
| 101 void AdjustWorkAreaForAutoHidingDesktopBars(); | 131 void AdjustWorkAreaForAutoHidingDesktopBars(); |
| 102 | 132 |
| 103 DisplayAreaObserver* display_area_observer_; | 133 // Observers that listen to various display settings changes. |
| 104 DesktopBarObserver* desktop_bar_observer_; | 134 ObserverList<DisplayAreaObserver> display_area_observers_; |
| 135 ObserverList<DesktopBarObserver> desktop_bar_observers_; | |
| 136 ObserverList<FullScreenObserver> full_screen_observers_; | |
| 105 | 137 |
| 106 // The maximum work area avaialble. This area does not include the area taken | 138 // The maximum work area avaialble. This area does not include the area taken |
| 107 // by the always-visible (non-auto-hiding) desktop bars. | 139 // by the always-visible (non-auto-hiding) desktop bars. |
| 108 gfx::Rect work_area_; | 140 gfx::Rect work_area_; |
| 109 | 141 |
| 110 // The useable work area for computing the panel bounds. This area excludes | 142 // The useable work area for computing the panel bounds. This area excludes |
| 111 // the potential area that could be taken by the auto-hiding desktop | 143 // the potential area that could be taken by the auto-hiding desktop |
| 112 // bars (we only consider those bars that are aligned to bottom, left, and | 144 // bars (we only consider those bars that are aligned to bottom, left, and |
| 113 // right of the screen edges) when they become fully visible. | 145 // right of the screen edges) when they become fully visible. |
| 114 gfx::Rect adjusted_work_area_; | 146 gfx::Rect adjusted_work_area_; |
| 147 | |
| 148 // True if full screen mode or presentation mode is entered. | |
| 149 bool is_full_screen_; | |
| 150 | |
| 151 // Timer used to detect full-screen mode change. | |
| 152 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.
| |
| 115 }; | 153 }; |
| 116 | 154 |
| 117 #endif // CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ | 155 #endif // CHROME_BROWSER_UI_PANELS_DISPLAY_SETTINGS_PROVIDER_H_ |
| OLD | NEW |