OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "athena/wm/split_view_controller.h" | 5 #include "athena/wm/split_view_controller.h" |
6 | 6 |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #include "athena/screen/public/screen_manager.h" | 9 #include "athena/screen/public/screen_manager.h" |
10 #include "athena/wm/public/window_manager.h" | 10 #include "athena/wm/public/window_manager.h" |
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 | 548 |
549 float SplitViewController::GetMaxDistanceFromMiddleForTest() const { | 549 float SplitViewController::GetMaxDistanceFromMiddleForTest() const { |
550 return kMaxDistanceFromMiddle; | 550 return kMaxDistanceFromMiddle; |
551 } | 551 } |
552 | 552 |
553 float SplitViewController::GetMinFlingVelocityForTest() const { | 553 float SplitViewController::GetMinFlingVelocityForTest() const { |
554 return kMinFlingVelocity; | 554 return kMinFlingVelocity; |
555 } | 555 } |
556 | 556 |
557 /////////////////////////////////////////////////////////////////////////////// | 557 /////////////////////////////////////////////////////////////////////////////// |
558 // BezelController::ScrollDelegate: | 558 // DragHandleScrollDelegate: |
559 | 559 |
560 void SplitViewController::BezelScrollBegin(BezelController::Bezel bezel, | 560 void SplitViewController::HandleScrollBegin(float delta) { |
561 float delta) { | 561 CHECK(state_ == ACTIVE); |
562 if (!BezelCanScroll()) | 562 state_ = SCROLLING; |
563 return; | 563 divider_scroll_start_position_ = GetDefaultDividerPosition(); |
564 | |
565 SetState(SCROLLING); | |
566 | |
567 const aura::Window::Windows& windows = window_list_provider_->GetWindowList(); | |
568 CHECK(windows.size() >= 2); | |
569 aura::Window::Windows::const_reverse_iterator iter = windows.rbegin(); | |
570 aura::Window* current_window = *(iter); | |
571 | |
572 if (delta > 0) { | |
573 right_window_ = current_window; | |
574 left_window_ = *(iter + 1); | |
575 } else { | |
576 left_window_ = current_window; | |
577 right_window_ = *(iter + 1); | |
578 } | |
579 | |
580 CHECK(left_window_); | |
581 CHECK(right_window_); | |
582 | |
583 // Calculate divider_scroll_start_position_ | |
584 gfx::Screen* screen = gfx::Screen::GetScreenFor(container_); | |
585 const gfx::Rect& display_bounds = | |
586 screen->GetDisplayNearestWindow(container_).bounds(); | |
587 gfx::Rect container_bounds = container_->GetBoundsInScreen(); | |
588 divider_scroll_start_position_ = | |
589 delta > 0 ? display_bounds.x() - container_bounds.x() | |
590 : display_bounds.right() - container_bounds.x(); | |
591 | |
592 divider_position_ = divider_scroll_start_position_ + delta; | 564 divider_position_ = divider_scroll_start_position_ + delta; |
593 UpdateLayout(false); | 565 UpdateLayout(false); |
594 } | 566 } |
595 | 567 |
596 void SplitViewController::BezelScrollEnd(float velocity) { | 568 void SplitViewController::HandleScrollEnd(float velocity) { |
597 if (state_ != SCROLLING) | 569 if (state_ != SCROLLING) |
598 return; | 570 return; |
599 | 571 |
600 int delta = GetDefaultDividerPosition() - divider_position_; | 572 int delta = GetDefaultDividerPosition() - divider_position_; |
601 WindowToActivate window = WINDOW_NONE; | 573 WindowToActivate window = WINDOW_NONE; |
602 if (std::abs(velocity) > kMinFlingVelocity) | 574 if (std::abs(velocity) > kMinFlingVelocity) |
603 window = velocity > 0 ? WINDOW_LEFT : WINDOW_RIGHT; | 575 window = velocity > 0 ? WINDOW_LEFT : WINDOW_RIGHT; |
604 else if (std::abs(delta) > kMaxDistanceFromMiddle) | 576 else if (std::abs(delta) > kMaxDistanceFromMiddle) |
605 window = delta > 0 ? WINDOW_RIGHT : WINDOW_LEFT; | 577 window = delta > 0 ? WINDOW_RIGHT : WINDOW_LEFT; |
606 | 578 |
(...skipping 10 matching lines...) Expand all Loading... |
617 case WINDOW_RIGHT: | 589 case WINDOW_RIGHT: |
618 divider_position_ = 0; | 590 divider_position_ = 0; |
619 SetState(INACTIVE); | 591 SetState(INACTIVE); |
620 wm::ActivateWindow(right_window_); | 592 wm::ActivateWindow(right_window_); |
621 break; | 593 break; |
622 } | 594 } |
623 | 595 |
624 UpdateLayout(true); | 596 UpdateLayout(true); |
625 } | 597 } |
626 | 598 |
627 void SplitViewController::BezelScrollUpdate(float delta) { | 599 void SplitViewController::HandleScrollUpdate(float delta) { |
628 if (state_ != SCROLLING) | 600 if (state_ != SCROLLING) |
629 return; | 601 return; |
630 divider_position_ = divider_scroll_start_position_ + delta; | 602 divider_position_ = divider_scroll_start_position_ + delta; |
631 UpdateLayout(false); | 603 UpdateLayout(false); |
632 } | 604 } |
633 | 605 |
634 bool SplitViewController::BezelCanScroll() { | |
635 return CanActivateSplitViewMode(); | |
636 } | |
637 | |
638 /////////////////////////////////////////////////////////////////////////////// | |
639 // DragHandleScrollDelegate: | |
640 | |
641 void SplitViewController::HandleScrollBegin(float delta) { | |
642 CHECK(state_ == ACTIVE); | |
643 state_ = SCROLLING; | |
644 divider_scroll_start_position_ = GetDefaultDividerPosition(); | |
645 divider_position_ = divider_scroll_start_position_ + delta; | |
646 UpdateLayout(false); | |
647 } | |
648 | |
649 void SplitViewController::HandleScrollEnd(float velocity) { | |
650 BezelScrollEnd(velocity); | |
651 } | |
652 | |
653 void SplitViewController::HandleScrollUpdate(float delta) { | |
654 BezelScrollUpdate(delta); | |
655 } | |
656 | |
657 /////////////////////////////////////////////////////////////////////////////// | 606 /////////////////////////////////////////////////////////////////////////////// |
658 // WindowManagerObserver: | 607 // WindowManagerObserver: |
659 | 608 |
660 void SplitViewController::OnOverviewModeEnter() { | 609 void SplitViewController::OnOverviewModeEnter() { |
661 if (divider_widget_) | 610 if (divider_widget_) |
662 HideDivider(); | 611 HideDivider(); |
663 } | 612 } |
664 | 613 |
665 void SplitViewController::OnOverviewModeExit() { | 614 void SplitViewController::OnOverviewModeExit() { |
666 if (state_ != INACTIVE) | 615 if (state_ != INACTIVE) |
667 ShowDivider(); | 616 ShowDivider(); |
668 } | 617 } |
669 | 618 |
670 void SplitViewController::OnSplitViewModeEnter() { | 619 void SplitViewController::OnSplitViewModeEnter() { |
671 } | 620 } |
672 | 621 |
673 void SplitViewController::OnSplitViewModeExit() { | 622 void SplitViewController::OnSplitViewModeExit() { |
674 } | 623 } |
675 | 624 |
676 } // namespace athena | 625 } // namespace athena |
OLD | NEW |