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

Side by Side Diff: chrome/browser/ui/panels/display_settings_provider.cc

Issue 2263863002: Remove implementation of Panels on OSes other than ChromeOS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: CR feedback Created 4 years, 4 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 unified diff | Download patch
OLDNEW
(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
OLDNEW
« no previous file with comments | « chrome/browser/ui/panels/display_settings_provider.h ('k') | chrome/browser/ui/panels/docked_panel_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698