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 #include "ash/wm/shelf_layout_manager.h" | 5 #include "ash/wm/shelf_layout_manager.h" |
6 | 6 |
7 #include "ash/launcher/launcher.h" | 7 #include "ash/launcher/launcher.h" |
8 #include "ash/screen_ash.h" | 8 #include "ash/screen_ash.h" |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/shell_delegate.h" | 10 #include "ash/shell_delegate.h" |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 LayoutShelf(); | 186 LayoutShelf(); |
187 } | 187 } |
188 | 188 |
189 void ShelfLayoutManager::SetAlignment(ShelfAlignment alignment) { | 189 void ShelfLayoutManager::SetAlignment(ShelfAlignment alignment) { |
190 if (alignment_ == alignment) | 190 if (alignment_ == alignment) |
191 return; | 191 return; |
192 | 192 |
193 alignment_ = alignment; | 193 alignment_ = alignment; |
194 if (launcher_) | 194 if (launcher_) |
195 launcher_->SetAlignment(alignment); | 195 launcher_->SetAlignment(alignment); |
| 196 if (Shell::GetInstance()->tray()) |
| 197 Shell::GetInstance()->tray()->SetAlignment(alignment); |
196 LayoutShelf(); | 198 LayoutShelf(); |
197 } | 199 } |
198 | 200 |
199 gfx::Rect ShelfLayoutManager::GetIdealBounds() { | 201 gfx::Rect ShelfLayoutManager::GetIdealBounds() { |
200 // TODO: this is wrong. Figure out what monitor shelf is on and everything | 202 // TODO: this is wrong. Figure out what monitor shelf is on and everything |
201 // should be based on it. | 203 // should be based on it. |
202 gfx::Rect bounds( | 204 gfx::Rect bounds( |
203 gfx::Screen::GetMonitorNearestWindow(status_->GetNativeView()).bounds()); | 205 gfx::Screen::GetMonitorNearestWindow(status_->GetNativeView()).bounds()); |
204 int width = 0, height = 0; | 206 int width = 0, height = 0; |
205 GetShelfSize(&width, &height); | 207 GetShelfSize(&width, &height); |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 } | 387 } |
386 | 388 |
387 void ShelfLayoutManager::StopAnimating() { | 389 void ShelfLayoutManager::StopAnimating() { |
388 if (launcher_widget()) | 390 if (launcher_widget()) |
389 GetLayer(launcher_widget())->GetAnimator()->StopAnimating(); | 391 GetLayer(launcher_widget())->GetAnimator()->StopAnimating(); |
390 GetLayer(status_)->GetAnimator()->StopAnimating(); | 392 GetLayer(status_)->GetAnimator()->StopAnimating(); |
391 } | 393 } |
392 | 394 |
393 void ShelfLayoutManager::GetShelfSize(int* width, int* height) { | 395 void ShelfLayoutManager::GetShelfSize(int* width, int* height) { |
394 *width = *height = 0; | 396 *width = *height = 0; |
395 gfx::Rect status_bounds(status_->GetWindowScreenBounds()); | 397 gfx::Size status_size = Shell::GetInstance()->tray() ? |
| 398 status_->GetContentsView()->GetPreferredSize() : gfx::Size(); |
396 gfx::Size launcher_size = launcher_ ? | 399 gfx::Size launcher_size = launcher_ ? |
397 launcher_widget()->GetContentsView()->GetPreferredSize() : gfx::Size(); | 400 launcher_widget()->GetContentsView()->GetPreferredSize() : gfx::Size(); |
398 if (alignment_ == SHELF_ALIGNMENT_BOTTOM) { | 401 if (alignment_ == SHELF_ALIGNMENT_BOTTOM) |
399 *height = std::max(launcher_size.height(), status_bounds.height()); | 402 *height = std::max(launcher_size.height(), status_size.height()); |
400 } else { | 403 else |
401 // TODO: include status when supports alignment. | 404 *width = std::max(launcher_size.width(), status_size.width()); |
402 *width = launcher_size.width(); | |
403 } | |
404 } | 405 } |
405 | 406 |
406 void ShelfLayoutManager::AdjustBoundsBasedOnAlignment(int inset, | 407 void ShelfLayoutManager::AdjustBoundsBasedOnAlignment(int inset, |
407 gfx::Rect* bounds) const { | 408 gfx::Rect* bounds) const { |
408 switch (alignment_) { | 409 switch (alignment_) { |
409 case SHELF_ALIGNMENT_BOTTOM: | 410 case SHELF_ALIGNMENT_BOTTOM: |
410 bounds->Inset(gfx::Insets(0, 0, inset, 0)); | 411 bounds->Inset(gfx::Insets(0, 0, inset, 0)); |
411 break; | 412 break; |
412 case SHELF_ALIGNMENT_LEFT: | 413 case SHELF_ALIGNMENT_LEFT: |
413 bounds->Inset(gfx::Insets(0, inset, 0, 0)); | 414 bounds->Inset(gfx::Insets(0, inset, 0, 0)); |
414 break; | 415 break; |
415 case SHELF_ALIGNMENT_RIGHT: | 416 case SHELF_ALIGNMENT_RIGHT: |
416 bounds->Inset(gfx::Insets(0, 0, 0, inset)); | 417 bounds->Inset(gfx::Insets(0, 0, 0, inset)); |
417 break; | 418 break; |
418 } | 419 } |
419 } | 420 } |
420 | 421 |
421 void ShelfLayoutManager::CalculateTargetBounds( | 422 void ShelfLayoutManager::CalculateTargetBounds( |
422 const State& state, | 423 const State& state, |
423 TargetBounds* target_bounds) { | 424 TargetBounds* target_bounds) { |
424 const gfx::Rect& available_bounds( | 425 const gfx::Rect& available_bounds( |
425 status_->GetNativeView()->GetRootWindow()->bounds()); | 426 status_->GetNativeView()->GetRootWindow()->bounds()); |
426 gfx::Rect status_bounds(status_->GetWindowScreenBounds()); | 427 gfx::Size status_size = Shell::GetInstance()->tray() ? |
| 428 status_->GetContentsView()->GetPreferredSize() : gfx::Size(); |
| 429 |
427 gfx::Size launcher_size = launcher_ ? | 430 gfx::Size launcher_size = launcher_ ? |
428 launcher_widget()->GetContentsView()->GetPreferredSize() : gfx::Size(); | 431 launcher_widget()->GetContentsView()->GetPreferredSize() : gfx::Size(); |
429 int shelf_size = 0; | 432 int shelf_size = 0; |
430 int shelf_width = 0, shelf_height = 0; | 433 int shelf_width = 0, shelf_height = 0; |
431 GetShelfSize(&shelf_width, &shelf_height); | 434 GetShelfSize(&shelf_width, &shelf_height); |
432 if (state.visibility_state == VISIBLE || | 435 if (state.visibility_state == VISIBLE || |
433 (state.visibility_state == AUTO_HIDE && | 436 (state.visibility_state == AUTO_HIDE && |
434 state.auto_hide_state == AUTO_HIDE_SHOWN)) { | 437 state.auto_hide_state == AUTO_HIDE_SHOWN)) { |
435 shelf_size = std::max(shelf_width, shelf_height); | 438 shelf_size = std::max(shelf_width, shelf_height); |
436 } else if (state.visibility_state == AUTO_HIDE && | 439 } else if (state.visibility_state == AUTO_HIDE && |
437 state.auto_hide_state == AUTO_HIDE_HIDDEN) { | 440 state.auto_hide_state == AUTO_HIDE_HIDDEN) { |
438 shelf_size = kAutoHideSize; | 441 shelf_size = kAutoHideSize; |
439 } | 442 } |
440 if (alignment_ == SHELF_ALIGNMENT_BOTTOM) { | 443 if (alignment_ == SHELF_ALIGNMENT_BOTTOM) { |
441 int y = available_bounds.bottom(); | 444 int y = available_bounds.bottom(); |
442 y -= shelf_size; | 445 y -= shelf_size; |
443 // The status widget should extend to the bottom and right edges. | 446 // The status widget should extend to the bottom and right edges. |
444 target_bounds->status_bounds = gfx::Rect( | 447 target_bounds->status_bounds = gfx::Rect( |
445 base::i18n::IsRTL() ? available_bounds.x() : | 448 base::i18n::IsRTL() ? available_bounds.x() : |
446 available_bounds.right() - status_bounds.width(), | 449 available_bounds.right() - status_size.width(), |
447 y + shelf_height - status_bounds.height(), | 450 y + shelf_height - status_size.height(), |
448 status_bounds.width(), status_bounds.height()); | 451 status_size.width(), status_size.height()); |
| 452 |
449 if (launcher_widget()) { | 453 if (launcher_widget()) { |
450 target_bounds->launcher_bounds = gfx::Rect( | 454 target_bounds->launcher_bounds = gfx::Rect( |
451 available_bounds.x(), | 455 available_bounds.x(), |
452 y + (shelf_height - launcher_size.height()) / 2, | 456 y + (shelf_height - launcher_size.height()) / 2, |
453 available_bounds.width(), | 457 available_bounds.width(), |
454 launcher_size.height()); | 458 launcher_size.height()); |
455 } | 459 } |
456 target_bounds->work_area_insets.Set( | 460 target_bounds->work_area_insets.Set( |
457 0, 0, GetWorkAreaSize(state, shelf_height), 0); | 461 0, 0, GetWorkAreaSize(state, shelf_height), 0); |
458 } else { | 462 } else { |
459 int x = (alignment_ == SHELF_ALIGNMENT_LEFT) ? | 463 int x = (alignment_ == SHELF_ALIGNMENT_LEFT) ? |
460 available_bounds.x() + shelf_size - shelf_width : | 464 available_bounds.x() + shelf_size - shelf_width : |
461 available_bounds.right() - shelf_size; | 465 available_bounds.right() - shelf_size; |
462 target_bounds->status_bounds = gfx::Rect( | 466 target_bounds->status_bounds = gfx::Rect( |
463 x, available_bounds.bottom() - status_bounds.height(), | 467 x, available_bounds.bottom() - status_size.height(), |
464 shelf_width, status_bounds.height()); | 468 shelf_width, status_size.height()); |
465 if (launcher_widget()) { | 469 if (launcher_widget()) { |
466 target_bounds->launcher_bounds = gfx::Rect( | 470 target_bounds->launcher_bounds = gfx::Rect( |
467 x, | 471 x, |
468 available_bounds.y(), | 472 available_bounds.y(), |
469 launcher_size.width(), | 473 launcher_size.width(), |
470 available_bounds.height()); | 474 available_bounds.height()); |
471 } | 475 } |
472 if (alignment_ == SHELF_ALIGNMENT_LEFT) { | 476 if (alignment_ == SHELF_ALIGNMENT_LEFT) { |
473 target_bounds->work_area_insets.Set( | 477 target_bounds->work_area_insets.Set( |
474 0, GetWorkAreaSize(state, shelf_width), 0, 0); | 478 0, GetWorkAreaSize(state, shelf_width), 0, 0); |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const { | 571 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const { |
568 if (state.visibility_state == VISIBLE) | 572 if (state.visibility_state == VISIBLE) |
569 return size; | 573 return size; |
570 if (state.visibility_state == AUTO_HIDE) | 574 if (state.visibility_state == AUTO_HIDE) |
571 return kAutoHideSize; | 575 return kAutoHideSize; |
572 return 0; | 576 return 0; |
573 } | 577 } |
574 | 578 |
575 } // namespace internal | 579 } // namespace internal |
576 } // namespace ash | 580 } // namespace ash |
OLD | NEW |