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

Side by Side Diff: ash/system/web_notification/web_notification_tray.cc

Issue 229453005: Shelf Cleanup AlternateShelfLayout P1 Attempt 3 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/system/user/tray_user.cc ('k') | ash/test/shelf_view_test_api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "ash/system/web_notification/web_notification_tray.h" 5 #include "ash/system/web_notification/web_notification_tray.h"
6 6
7 #include "ash/ash_switches.h" 7 #include "ash/ash_switches.h"
8 #include "ash/root_window_controller.h" 8 #include "ash/root_window_controller.h"
9 #include "ash/shelf/shelf_layout_manager.h" 9 #include "ash/shelf/shelf_layout_manager.h"
10 #include "ash/shelf/shelf_layout_manager_observer.h" 10 #include "ash/shelf/shelf_layout_manager_observer.h"
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 StopObserving(); 116 StopObserving();
117 } 117 }
118 118
119 void WorkAreaObserver::SetSystemTrayHeight(int height) { 119 void WorkAreaObserver::SetSystemTrayHeight(int height) {
120 system_tray_height_ = height; 120 system_tray_height_ = height;
121 121
122 // If the shelf is shown during auto-hide state, the distance from the edge 122 // If the shelf is shown during auto-hide state, the distance from the edge
123 // should be reduced by the height of shelf's shown height. 123 // should be reduced by the height of shelf's shown height.
124 if (shelf_ && shelf_->visibility_state() == SHELF_AUTO_HIDE && 124 if (shelf_ && shelf_->visibility_state() == SHELF_AUTO_HIDE &&
125 shelf_->auto_hide_state() == SHELF_AUTO_HIDE_SHOWN) { 125 shelf_->auto_hide_state() == SHELF_AUTO_HIDE_SHOWN) {
126 system_tray_height_ -= ShelfLayoutManager::GetPreferredShelfSize() - 126 system_tray_height_ -= kShelfSize - ShelfLayoutManager::kAutoHideSize;
127 ShelfLayoutManager::kAutoHideSize;
128 } 127 }
129 128
130 if (system_tray_height_ > 0 && ash::switches::UseAlternateShelfLayout()) 129 if (system_tray_height_ > 0)
131 system_tray_height_ += message_center::kMarginBetweenItems; 130 system_tray_height_ += message_center::kMarginBetweenItems;
132 131
133 if (!shelf_) 132 if (!shelf_)
134 return; 133 return;
135 134
136 OnAutoHideStateChanged(shelf_->auto_hide_state()); 135 OnAutoHideStateChanged(shelf_->auto_hide_state());
137 } 136 }
138 137
139 void WorkAreaObserver::StartObserving( 138 void WorkAreaObserver::StartObserving(
140 message_center::MessagePopupCollection* collection, 139 message_center::MessagePopupCollection* collection,
(...skipping 25 matching lines...) Expand all
166 165
167 void WorkAreaObserver::OnAutoHideStateChanged(ShelfAutoHideState new_state) { 166 void WorkAreaObserver::OnAutoHideStateChanged(ShelfAutoHideState new_state) {
168 gfx::Display display = Shell::GetScreen()->GetDisplayNearestWindow( 167 gfx::Display display = Shell::GetScreen()->GetDisplayNearestWindow(
169 shelf_->shelf_widget()->GetNativeView()); 168 shelf_->shelf_widget()->GetNativeView());
170 gfx::Rect work_area = display.work_area(); 169 gfx::Rect work_area = display.work_area();
171 int width = 0; 170 int width = 0;
172 if ((shelf_->visibility_state() == SHELF_AUTO_HIDE) && 171 if ((shelf_->visibility_state() == SHELF_AUTO_HIDE) &&
173 new_state == SHELF_AUTO_HIDE_SHOWN) { 172 new_state == SHELF_AUTO_HIDE_SHOWN) {
174 // Since the work_area is already reduced by kAutoHideSize, the inset width 173 // Since the work_area is already reduced by kAutoHideSize, the inset width
175 // should be just the difference. 174 // should be just the difference.
176 width = ShelfLayoutManager::GetPreferredShelfSize() - 175 width = kShelfSize - ShelfLayoutManager::kAutoHideSize;
177 ShelfLayoutManager::kAutoHideSize;
178 } 176 }
179 work_area.Inset(shelf_->SelectValueForShelfAlignment( 177 work_area.Inset(shelf_->SelectValueForShelfAlignment(
180 gfx::Insets(0, 0, width, 0), 178 gfx::Insets(0, 0, width, 0),
181 gfx::Insets(0, width, 0, 0), 179 gfx::Insets(0, width, 0, 0),
182 gfx::Insets(0, 0, 0, width), 180 gfx::Insets(0, 0, 0, width),
183 gfx::Insets(width, 0, 0, 0))); 181 gfx::Insets(width, 0, 0, 0)));
184 if (system_tray_height_ > 0) { 182 if (system_tray_height_ > 0) {
185 work_area.set_height( 183 work_area.set_height(
186 std::max(0, work_area.height() - system_tray_height_)); 184 std::max(0, work_area.height() - system_tray_height_));
187 if (shelf_->GetAlignment() == SHELF_ALIGNMENT_TOP) 185 if (shelf_->GetAlignment() == SHELF_ALIGNMENT_TOP)
(...skipping 24 matching lines...) Expand all
212 views::TrayBubbleView::InitParams init_params = 210 views::TrayBubbleView::InitParams init_params =
213 bubble->GetInitParams(anchor_alignment); 211 bubble->GetInitParams(anchor_alignment);
214 views::View* anchor = tray->tray_container(); 212 views::View* anchor = tray->tray_container();
215 if (anchor_alignment == views::TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) { 213 if (anchor_alignment == views::TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) {
216 gfx::Point bounds(anchor->width() / 2, 0); 214 gfx::Point bounds(anchor->width() / 2, 0);
217 views::View::ConvertPointToWidget(anchor, &bounds); 215 views::View::ConvertPointToWidget(anchor, &bounds);
218 init_params.arrow_offset = bounds.x(); 216 init_params.arrow_offset = bounds.x();
219 } 217 }
220 views::TrayBubbleView* bubble_view = views::TrayBubbleView::Create( 218 views::TrayBubbleView* bubble_view = views::TrayBubbleView::Create(
221 tray->GetBubbleWindowContainer(), anchor, tray, &init_params); 219 tray->GetBubbleWindowContainer(), anchor, tray, &init_params);
222 if (ash::switches::UseAlternateShelfLayout()) 220 bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
223 bubble_view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
224 bubble_wrapper_.reset(new TrayBubbleWrapper(tray, bubble_view)); 221 bubble_wrapper_.reset(new TrayBubbleWrapper(tray, bubble_view));
225 bubble->InitializeContents(bubble_view); 222 bubble->InitializeContents(bubble_view);
226 } 223 }
227 224
228 message_center::MessageBubbleBase* bubble() const { return bubble_.get(); } 225 message_center::MessageBubbleBase* bubble() const { return bubble_.get(); }
229 226
230 // Convenience accessors. 227 // Convenience accessors.
231 views::TrayBubbleView* bubble_view() const { return bubble_->bubble_view(); } 228 views::TrayBubbleView* bubble_view() const { return bubble_->bubble_view(); }
232 229
233 private: 230 private:
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 // in ash_strings. 262 // in ash_strings.
266 unread_label_->SetText((unread_count > 9) ? 263 unread_label_->SetText((unread_count > 9) ?
267 l10n_util::GetStringUTF16(IDS_ASH_NOTIFICATION_UNREAD_COUNT_NINE_PLUS) : 264 l10n_util::GetStringUTF16(IDS_ASH_NOTIFICATION_UNREAD_COUNT_NINE_PLUS) :
268 base::FormatNumber(unread_count)); 265 base::FormatNumber(unread_count));
269 UpdateIconVisibility(); 266 UpdateIconVisibility();
270 } 267 }
271 268
272 protected: 269 protected:
273 // Overridden from views::ImageButton: 270 // Overridden from views::ImageButton:
274 virtual gfx::Size GetPreferredSize() OVERRIDE { 271 virtual gfx::Size GetPreferredSize() OVERRIDE {
275 const int notification_item_size = GetShelfItemHeight(); 272 return gfx::Size(kShelfItemHeight, kShelfItemHeight);
276 return gfx::Size(notification_item_size, notification_item_size);
277 } 273 }
278 274
279 virtual int GetHeightForWidth(int width) OVERRIDE { 275 virtual int GetHeightForWidth(int width) OVERRIDE {
280 return GetPreferredSize().height(); 276 return GetPreferredSize().height();
281 } 277 }
282 278
283 private: 279 private:
284 void UpdateIconVisibility() { 280 void UpdateIconVisibility() {
285 unread_label_->SetEnabledColor( 281 unread_label_->SetEnabledColor(
286 (!is_bubble_visible_ && unread_count_ > 0) ? 282 (!is_bubble_visible_ && unread_count_ > 0) ?
(...skipping 24 matching lines...) Expand all
311 SetVisible(false); 307 SetVisible(false);
312 message_center_tray_.reset(new message_center::MessageCenterTray( 308 message_center_tray_.reset(new message_center::MessageCenterTray(
313 this, 309 this,
314 message_center::MessageCenter::Get())); 310 message_center::MessageCenter::Get()));
315 popup_collection_.reset(new message_center::MessagePopupCollection( 311 popup_collection_.reset(new message_center::MessagePopupCollection(
316 ash::Shell::GetContainer( 312 ash::Shell::GetContainer(
317 status_area_widget->GetNativeView()->GetRootWindow(), 313 status_area_widget->GetNativeView()->GetRootWindow(),
318 kShellWindowId_StatusContainer), 314 kShellWindowId_StatusContainer),
319 message_center(), 315 message_center(),
320 message_center_tray_.get(), 316 message_center_tray_.get(),
321 ash::switches::UseAlternateShelfLayout())); 317 true));
322 work_area_observer_.reset(new WorkAreaObserver()); 318 work_area_observer_.reset(new WorkAreaObserver());
323 work_area_observer_->StartObserving( 319 work_area_observer_->StartObserving(
324 popup_collection_.get(), 320 popup_collection_.get(),
325 status_area_widget->GetNativeView()->GetRootWindow()); 321 status_area_widget->GetNativeView()->GetRootWindow());
326 OnMessageCenterTrayChanged(); 322 OnMessageCenterTrayChanged();
327 } 323 }
328 324
329 WebNotificationTray::~WebNotificationTray() { 325 WebNotificationTray::~WebNotificationTray() {
330 // Release any child views that might have back pointers before ~View(). 326 // Release any child views that might have back pointers before ~View().
331 message_center_bubble_.reset(); 327 message_center_bubble_.reset();
332 popup_collection_.reset(); 328 popup_collection_.reset();
333 work_area_observer_.reset(); 329 work_area_observer_.reset();
334 } 330 }
335 331
336 // Public methods. 332 // Public methods.
337 333
338 bool WebNotificationTray::ShowMessageCenterInternal(bool show_settings) { 334 bool WebNotificationTray::ShowMessageCenterInternal(bool show_settings) {
339 if (!ShouldShowMessageCenter()) 335 if (!ShouldShowMessageCenter())
340 return false; 336 return false;
341 337
342 should_block_shelf_auto_hide_ = true; 338 should_block_shelf_auto_hide_ = true;
343 message_center::MessageCenterBubble* message_center_bubble = 339 message_center::MessageCenterBubble* message_center_bubble =
344 new message_center::MessageCenterBubble( 340 new message_center::MessageCenterBubble(
345 message_center(), 341 message_center(),
346 message_center_tray_.get(), 342 message_center_tray_.get(),
347 ash::switches::UseAlternateShelfLayout()); 343 true);
348 344
349 int max_height = 0; 345 int max_height = 0;
350 aura::Window* status_area_window = status_area_widget()->GetNativeView(); 346 aura::Window* status_area_window = status_area_widget()->GetNativeView();
351 switch (GetShelfLayoutManager()->GetAlignment()) { 347 switch (GetShelfLayoutManager()->GetAlignment()) {
352 case SHELF_ALIGNMENT_BOTTOM: { 348 case SHELF_ALIGNMENT_BOTTOM: {
353 gfx::Rect shelf_bounds = GetShelfLayoutManager()->GetIdealBounds(); 349 gfx::Rect shelf_bounds = GetShelfLayoutManager()->GetIdealBounds();
354 max_height = shelf_bounds.y(); 350 max_height = shelf_bounds.y();
355 break; 351 break;
356 } 352 }
357 case SHELF_ALIGNMENT_TOP: { 353 case SHELF_ALIGNMENT_TOP: {
358 aura::Window* root = status_area_window->GetRootWindow(); 354 aura::Window* root = status_area_window->GetRootWindow();
359 max_height = 355 max_height =
360 root->bounds().height() - status_area_window->bounds().height(); 356 root->bounds().height() - status_area_window->bounds().height();
361 break; 357 break;
362 } 358 }
363 case SHELF_ALIGNMENT_LEFT: 359 case SHELF_ALIGNMENT_LEFT:
364 case SHELF_ALIGNMENT_RIGHT: { 360 case SHELF_ALIGNMENT_RIGHT: {
365 // Assume that the bottom line of the status area widget and the bubble 361 // Assume that the bottom line of the status area widget and the bubble
366 // are aligned. 362 // are aligned.
367 max_height = status_area_window->GetBoundsInRootWindow().bottom(); 363 max_height = status_area_window->GetBoundsInRootWindow().bottom();
368 break; 364 break;
369 } 365 }
370 default: 366 default:
371 NOTREACHED(); 367 NOTREACHED();
372 } 368 }
373 369
374 message_center_bubble->SetMaxHeight(std::max(0, 370 message_center_bubble->SetMaxHeight(std::max(0,
375 max_height - GetTraySpacing())); 371 max_height - kTraySpacing));
376 if (show_settings) 372 if (show_settings)
377 message_center_bubble->SetSettingsVisible(); 373 message_center_bubble->SetSettingsVisible();
378 message_center_bubble_.reset( 374 message_center_bubble_.reset(
379 new WebNotificationBubbleWrapper(this, message_center_bubble)); 375 new WebNotificationBubbleWrapper(this, message_center_bubble));
380 376
381 status_area_widget()->SetHideSystemNotifications(true); 377 status_area_widget()->SetHideSystemNotifications(true);
382 GetShelfLayoutManager()->UpdateAutoHideState(); 378 GetShelfLayoutManager()->UpdateAutoHideState();
383 button_->SetBubbleVisible(true); 379 button_->SetBubbleVisible(true);
384 SetDrawBackgroundAsActive(true); 380 SetDrawBackgroundAsActive(true);
385 return true; 381 return true;
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 612
617 message_center::MessageCenterBubble* 613 message_center::MessageCenterBubble*
618 WebNotificationTray::GetMessageCenterBubbleForTest() { 614 WebNotificationTray::GetMessageCenterBubbleForTest() {
619 if (!message_center_bubble()) 615 if (!message_center_bubble())
620 return NULL; 616 return NULL;
621 return static_cast<message_center::MessageCenterBubble*>( 617 return static_cast<message_center::MessageCenterBubble*>(
622 message_center_bubble()->bubble()); 618 message_center_bubble()->bubble());
623 } 619 }
624 620
625 } // namespace ash 621 } // namespace ash
OLDNEW
« no previous file with comments | « ash/system/user/tray_user.cc ('k') | ash/test/shelf_view_test_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698