| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/ui/panels/display_settings_provider.h" | |
| 6 | |
| 7 #include "base/bind.h" | |
| 8 #include "base/logging.h" | |
| 9 #include "build/build_config.h" | |
| 10 #include "chrome/browser/fullscreen.h" | |
| 11 #include "ui/display/display.h" | |
| 12 #include "ui/display/screen.h" | |
| 13 | |
| 14 namespace { | |
| 15 // The polling interval to check any display settings change, like full-screen | |
| 16 // mode changes. | |
| 17 const int kFullScreenModeCheckIntervalMs = 1000; | |
| 18 } // namespace | |
| 19 | |
| 20 DisplaySettingsProvider::DisplaySettingsProvider() | |
| 21 : is_full_screen_(false) { | |
| 22 } | |
| 23 | |
| 24 DisplaySettingsProvider::~DisplaySettingsProvider() { | |
| 25 } | |
| 26 | |
| 27 void DisplaySettingsProvider::AddDisplayObserver(DisplayObserver* observer) { | |
| 28 display_observers_.AddObserver(observer); | |
| 29 } | |
| 30 | |
| 31 void DisplaySettingsProvider::RemoveDisplayObserver(DisplayObserver* observer) { | |
| 32 display_observers_.RemoveObserver(observer); | |
| 33 } | |
| 34 | |
| 35 void DisplaySettingsProvider::AddDesktopBarObserver( | |
| 36 DesktopBarObserver* observer) { | |
| 37 desktop_bar_observers_.AddObserver(observer); | |
| 38 } | |
| 39 | |
| 40 void DisplaySettingsProvider::RemoveDesktopBarObserver( | |
| 41 DesktopBarObserver* observer) { | |
| 42 desktop_bar_observers_.RemoveObserver(observer); | |
| 43 } | |
| 44 | |
| 45 void DisplaySettingsProvider::AddFullScreenObserver( | |
| 46 FullScreenObserver* observer) { | |
| 47 is_full_screen_ = IsFullScreen(); | |
| 48 bool already_started = full_screen_observers_.might_have_observers(); | |
| 49 full_screen_observers_.AddObserver(observer); | |
| 50 | |
| 51 if (!already_started && NeedsPeriodicFullScreenCheck()) { | |
| 52 full_screen_mode_timer_.Start(FROM_HERE, | |
| 53 base::TimeDelta::FromMilliseconds(kFullScreenModeCheckIntervalMs), | |
| 54 base::Bind(&DisplaySettingsProvider::CheckFullScreenMode, | |
| 55 base::Unretained(this), | |
| 56 PERFORM_FULLSCREEN_CHECK)); | |
| 57 } | |
| 58 } | |
| 59 | |
| 60 void DisplaySettingsProvider::RemoveFullScreenObserver( | |
| 61 FullScreenObserver* observer) { | |
| 62 full_screen_observers_.RemoveObserver(observer); | |
| 63 | |
| 64 if (!full_screen_observers_.might_have_observers()) | |
| 65 full_screen_mode_timer_.Stop(); | |
| 66 } | |
| 67 | |
| 68 // TODO(scottmg): This should be moved to ui/. | |
| 69 gfx::Rect DisplaySettingsProvider::GetPrimaryDisplayArea() const { | |
| 70 return display::Screen::GetScreen()->GetPrimaryDisplay().bounds(); | |
| 71 } | |
| 72 | |
| 73 gfx::Rect DisplaySettingsProvider::GetPrimaryWorkArea() const { | |
| 74 #if defined(OS_MACOSX) | |
| 75 // On OSX, panels should be dropped all the way to the bottom edge of the | |
| 76 // screen (and overlap Dock). And we also want to exclude the system menu | |
| 77 // area. Note that the rect returned from display::Screen util functions is in | |
| 78 // platform-independent screen coordinates with (0, 0) as the top-left corner. | |
| 79 display::Display display = display::Screen::GetScreen()->GetPrimaryDisplay(); | |
| 80 gfx::Rect display_area = display.bounds(); | |
| 81 gfx::Rect work_area = display.work_area(); | |
| 82 int system_menu_height = work_area.y() - display_area.y(); | |
| 83 if (system_menu_height > 0) { | |
| 84 display_area.set_y(display_area.y() + system_menu_height); | |
| 85 display_area.set_height(display_area.height() - system_menu_height); | |
| 86 } | |
| 87 return display_area; | |
| 88 #else | |
| 89 return display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | |
| 90 #endif | |
| 91 } | |
| 92 | |
| 93 gfx::Rect DisplaySettingsProvider::GetDisplayAreaMatching( | |
| 94 const gfx::Rect& bounds) const { | |
| 95 return display::Screen::GetScreen()->GetDisplayMatching(bounds).bounds(); | |
| 96 } | |
| 97 | |
| 98 gfx::Rect DisplaySettingsProvider::GetWorkAreaMatching( | |
| 99 const gfx::Rect& bounds) const { | |
| 100 display::Screen* screen = display::Screen::GetScreen(); | |
| 101 display::Display display = screen->GetDisplayMatching(bounds); | |
| 102 if (display.bounds() == screen->GetPrimaryDisplay().bounds()) | |
| 103 return GetPrimaryWorkArea(); | |
| 104 return display.work_area(); | |
| 105 } | |
| 106 | |
| 107 void DisplaySettingsProvider::OnDisplaySettingsChanged() { | |
| 108 FOR_EACH_OBSERVER(DisplayObserver, display_observers_, OnDisplayChanged()); | |
| 109 } | |
| 110 | |
| 111 bool DisplaySettingsProvider::IsAutoHidingDesktopBarEnabled( | |
| 112 DesktopBarAlignment alignment) { | |
| 113 return false; | |
| 114 } | |
| 115 | |
| 116 int DisplaySettingsProvider::GetDesktopBarThickness( | |
| 117 DesktopBarAlignment alignment) const { | |
| 118 return 0; | |
| 119 } | |
| 120 | |
| 121 DisplaySettingsProvider::DesktopBarVisibility | |
| 122 DisplaySettingsProvider::GetDesktopBarVisibility( | |
| 123 DesktopBarAlignment alignment) const { | |
| 124 return DESKTOP_BAR_VISIBLE; | |
| 125 } | |
| 126 | |
| 127 bool DisplaySettingsProvider::NeedsPeriodicFullScreenCheck() const { | |
| 128 return true; | |
| 129 } | |
| 130 | |
| 131 void DisplaySettingsProvider::CheckFullScreenMode( | |
| 132 FullScreenCheckMode check_mode) { | |
| 133 bool is_full_screen = false; | |
| 134 switch (check_mode) { | |
| 135 case ASSUME_FULLSCREEN_ON: | |
| 136 is_full_screen = true; | |
| 137 break; | |
| 138 case ASSUME_FULLSCREEN_OFF: | |
| 139 is_full_screen = false; | |
| 140 break; | |
| 141 case PERFORM_FULLSCREEN_CHECK: | |
| 142 is_full_screen = IsFullScreen(); | |
| 143 break; | |
| 144 default: | |
| 145 NOTREACHED(); | |
| 146 break; | |
| 147 } | |
| 148 if (is_full_screen == is_full_screen_) | |
| 149 return; | |
| 150 is_full_screen_ = is_full_screen; | |
| 151 | |
| 152 FOR_EACH_OBSERVER(FullScreenObserver, | |
| 153 full_screen_observers_, | |
| 154 OnFullScreenModeChanged(is_full_screen_)); | |
| 155 } | |
| 156 | |
| 157 bool DisplaySettingsProvider::IsFullScreen() { | |
| 158 return IsFullScreenMode(); | |
| 159 } | |
| 160 | |
| 161 #if defined(USE_AURA) | |
| 162 // static | |
| 163 DisplaySettingsProvider* DisplaySettingsProvider::Create() { | |
| 164 return new DisplaySettingsProvider(); | |
| 165 } | |
| 166 #endif | |
| OLD | NEW |