| 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_list_provider.h" | 10 #include "athena/wm/public/window_list_provider.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 return window_; | 126 return window_; |
| 127 } | 127 } |
| 128 | 128 |
| 129 return WindowTargeter::FindTargetForLocatedEvent(root, event); | 129 return WindowTargeter::FindTargetForLocatedEvent(root, event); |
| 130 } | 130 } |
| 131 | 131 |
| 132 // aura::WindowObserver: | 132 // aura::WindowObserver: |
| 133 virtual void OnWindowDestroying(aura::Window* window) override { | 133 virtual void OnWindowDestroying(aura::Window* window) override { |
| 134 DCHECK_EQ(window, window_); | 134 DCHECK_EQ(window, window_); |
| 135 window_->RemoveObserver(this); | 135 window_->RemoveObserver(this); |
| 136 window_ = NULL; | 136 window_ = nullptr; |
| 137 } | 137 } |
| 138 | 138 |
| 139 // Minimum dimension of a target to be comfortably touchable. | 139 // Minimum dimension of a target to be comfortably touchable. |
| 140 // The effective touch target area of |priority_window_| gets expanded so | 140 // The effective touch target area of |priority_window_| gets expanded so |
| 141 // that it's width and height is ayt least |kMinTouchDimension|. | 141 // that it's width and height is ayt least |kMinTouchDimension|. |
| 142 int const kMinTouchDimension = 26; | 142 int const kMinTouchDimension = 26; |
| 143 | 143 |
| 144 aura::Window* window_; | 144 aura::Window* window_; |
| 145 views::View* priority_view_; | 145 views::View* priority_view_; |
| 146 | 146 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 163 } | 163 } |
| 164 | 164 |
| 165 } // namespace | 165 } // namespace |
| 166 | 166 |
| 167 SplitViewController::SplitViewController( | 167 SplitViewController::SplitViewController( |
| 168 aura::Window* container, | 168 aura::Window* container, |
| 169 WindowListProvider* window_list_provider) | 169 WindowListProvider* window_list_provider) |
| 170 : state_(INACTIVE), | 170 : state_(INACTIVE), |
| 171 container_(container), | 171 container_(container), |
| 172 window_list_provider_(window_list_provider), | 172 window_list_provider_(window_list_provider), |
| 173 left_window_(NULL), | 173 left_window_(nullptr), |
| 174 right_window_(NULL), | 174 right_window_(nullptr), |
| 175 divider_position_(0), | 175 divider_position_(0), |
| 176 divider_scroll_start_position_(0), | 176 divider_scroll_start_position_(0), |
| 177 divider_widget_(NULL), | 177 divider_widget_(nullptr), |
| 178 drag_handle_(NULL), | 178 drag_handle_(nullptr), |
| 179 weak_factory_(this) { | 179 weak_factory_(this) { |
| 180 } | 180 } |
| 181 | 181 |
| 182 SplitViewController::~SplitViewController() { | 182 SplitViewController::~SplitViewController() { |
| 183 } | 183 } |
| 184 | 184 |
| 185 bool SplitViewController::CanActivateSplitViewMode() const { | 185 bool SplitViewController::CanActivateSplitViewMode() const { |
| 186 // TODO(mfomitchev): return false in full screen. | 186 // TODO(mfomitchev): return false in full screen. |
| 187 return (!IsSplitViewModeActive() && | 187 return (!IsSplitViewModeActive() && |
| 188 window_list_provider_->GetWindowList().size() >= 2 && | 188 window_list_provider_->GetWindowList().size() >= 2 && |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 } | 257 } |
| 258 | 258 |
| 259 void SplitViewController::ReplaceWindow(aura::Window* window, | 259 void SplitViewController::ReplaceWindow(aura::Window* window, |
| 260 aura::Window* replace_with) { | 260 aura::Window* replace_with) { |
| 261 CHECK(IsSplitViewModeActive()); | 261 CHECK(IsSplitViewModeActive()); |
| 262 CHECK(replace_with); | 262 CHECK(replace_with); |
| 263 CHECK(window == left_window_ || window == right_window_); | 263 CHECK(window == left_window_ || window == right_window_); |
| 264 CHECK(replace_with != left_window_ && replace_with != right_window_); | 264 CHECK(replace_with != left_window_ && replace_with != right_window_); |
| 265 DCHECK(window_list_provider_->IsWindowInList(replace_with)); | 265 DCHECK(window_list_provider_->IsWindowInList(replace_with)); |
| 266 | 266 |
| 267 aura::Window* not_replaced = NULL; | 267 aura::Window* not_replaced = nullptr; |
| 268 if (window == left_window_) { | 268 if (window == left_window_) { |
| 269 left_window_ = replace_with; | 269 left_window_ = replace_with; |
| 270 not_replaced = right_window_; | 270 not_replaced = right_window_; |
| 271 } else { | 271 } else { |
| 272 right_window_ = replace_with; | 272 right_window_ = replace_with; |
| 273 not_replaced = left_window_; | 273 not_replaced = left_window_; |
| 274 } | 274 } |
| 275 UpdateLayout(false); | 275 UpdateLayout(false); |
| 276 | 276 |
| 277 wm::ActivateWindow(replace_with); | 277 wm::ActivateWindow(replace_with); |
| 278 window_list_provider_->StackWindowBehindTo(not_replaced, replace_with); | 278 window_list_provider_->StackWindowBehindTo(not_replaced, replace_with); |
| 279 | 279 |
| 280 window->SetTransform(gfx::Transform()); | 280 window->SetTransform(gfx::Transform()); |
| 281 window->Hide(); | 281 window->Hide(); |
| 282 } | 282 } |
| 283 | 283 |
| 284 void SplitViewController::DeactivateSplitMode() { | 284 void SplitViewController::DeactivateSplitMode() { |
| 285 CHECK_EQ(ACTIVE, state_); | 285 CHECK_EQ(ACTIVE, state_); |
| 286 SetState(INACTIVE); | 286 SetState(INACTIVE); |
| 287 UpdateLayout(false); | 287 UpdateLayout(false); |
| 288 left_window_ = right_window_ = NULL; | 288 left_window_ = right_window_ = nullptr; |
| 289 } | 289 } |
| 290 | 290 |
| 291 void SplitViewController::InitializeDivider() { | 291 void SplitViewController::InitializeDivider() { |
| 292 CHECK(!divider_widget_); | 292 CHECK(!divider_widget_); |
| 293 CHECK(!drag_handle_); | 293 CHECK(!drag_handle_); |
| 294 | 294 |
| 295 drag_handle_ = CreateDragHandleView(DRAG_HANDLE_HORIZONTAL, | 295 drag_handle_ = CreateDragHandleView(DRAG_HANDLE_HORIZONTAL, |
| 296 this, | 296 this, |
| 297 kDragHandleWidth, | 297 kDragHandleWidth, |
| 298 kDragHandleHeight); | 298 kDragHandleHeight); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 366 return gfx::Rect(divider_position_ + kDividerWidth / 2, | 366 return gfx::Rect(divider_position_ + kDividerWidth / 2, |
| 367 0, | 367 0, |
| 368 container_width - divider_position_ - kDividerWidth / 2, | 368 container_width - divider_position_ - kDividerWidth / 2, |
| 369 work_area.height()); | 369 work_area.height()); |
| 370 } | 370 } |
| 371 | 371 |
| 372 void SplitViewController::SetState(SplitViewController::State state) { | 372 void SplitViewController::SetState(SplitViewController::State state) { |
| 373 if (state_ == state) | 373 if (state_ == state) |
| 374 return; | 374 return; |
| 375 | 375 |
| 376 if (divider_widget_ == NULL) | 376 if (divider_widget_ == nullptr) |
| 377 InitializeDivider(); | 377 InitializeDivider(); |
| 378 | 378 |
| 379 state_ = state; | 379 state_ = state; |
| 380 | 380 |
| 381 ScreenManager::Get()->SetRotationLocked(state_ != INACTIVE); | 381 ScreenManager::Get()->SetRotationLocked(state_ != INACTIVE); |
| 382 if (state == INACTIVE) | 382 if (state == INACTIVE) |
| 383 HideDivider(); | 383 HideDivider(); |
| 384 else | 384 else |
| 385 ShowDivider(); | 385 ShowDivider(); |
| 386 } | 386 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 if (right_window_->bounds().width() >= right_area_bounds.width()) { | 447 if (right_window_->bounds().width() >= right_area_bounds.width()) { |
| 448 right_transform.Translate( | 448 right_transform.Translate( |
| 449 right_area_bounds.x() - right_window_->bounds().x(), 0); | 449 right_area_bounds.x() - right_window_->bounds().x(), 0); |
| 450 } else { | 450 } else { |
| 451 right_transform = | 451 right_transform = |
| 452 GetTransformForBounds(right_window_->bounds(), right_area_bounds); | 452 GetTransformForBounds(right_window_->bounds(), right_area_bounds); |
| 453 } | 453 } |
| 454 SetWindowTransforms( | 454 SetWindowTransforms( |
| 455 left_transform, right_transform, divider_transform, animate); | 455 left_transform, right_transform, divider_transform, animate); |
| 456 } | 456 } |
| 457 // Note: |left_window_| and |right_window_| may be NULL if calling | 457 // Note: |left_window_| and |right_window_| may be nullptr if calling |
| 458 // SetWindowTransforms(): | 458 // SetWindowTransforms(): |
| 459 // - caused the in-progress animation to abort. | 459 // - caused the in-progress animation to abort. |
| 460 // - started a zero duration animation. | 460 // - started a zero duration animation. |
| 461 } | 461 } |
| 462 | 462 |
| 463 void SplitViewController::SetWindowTransforms( | 463 void SplitViewController::SetWindowTransforms( |
| 464 const gfx::Transform& left_transform, | 464 const gfx::Transform& left_transform, |
| 465 const gfx::Transform& right_transform, | 465 const gfx::Transform& right_transform, |
| 466 const gfx::Transform& divider_transform, | 466 const gfx::Transform& divider_transform, |
| 467 bool animate) { | 467 bool animate) { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 488 right_window_->SetTransform(right_transform); | 488 right_window_->SetTransform(right_transform); |
| 489 } else { | 489 } else { |
| 490 left_window_->SetTransform(left_transform); | 490 left_window_->SetTransform(left_transform); |
| 491 divider_widget_->GetNativeWindow()->SetTransform(divider_transform); | 491 divider_widget_->GetNativeWindow()->SetTransform(divider_transform); |
| 492 right_window_->SetTransform(right_transform); | 492 right_window_->SetTransform(right_transform); |
| 493 } | 493 } |
| 494 } | 494 } |
| 495 | 495 |
| 496 void SplitViewController::OnAnimationCompleted() { | 496 void SplitViewController::OnAnimationCompleted() { |
| 497 // Animation can be cancelled when deactivated. | 497 // Animation can be cancelled when deactivated. |
| 498 if (left_window_ == NULL) | 498 if (left_window_ == nullptr) |
| 499 return; | 499 return; |
| 500 UpdateLayout(false); | 500 UpdateLayout(false); |
| 501 | 501 |
| 502 for (size_t i = 0; i < to_hide_.size(); ++i) | 502 for (size_t i = 0; i < to_hide_.size(); ++i) |
| 503 to_hide_[i]->Hide(); | 503 to_hide_[i]->Hide(); |
| 504 to_hide_.clear(); | 504 to_hide_.clear(); |
| 505 | 505 |
| 506 if (state_ == INACTIVE) { | 506 if (state_ == INACTIVE) { |
| 507 left_window_ = NULL; | 507 left_window_ = nullptr; |
| 508 right_window_ = NULL; | 508 right_window_ = nullptr; |
| 509 } | 509 } |
| 510 } | 510 } |
| 511 | 511 |
| 512 int SplitViewController::GetDefaultDividerPosition() { | 512 int SplitViewController::GetDefaultDividerPosition() { |
| 513 return container_->GetBoundsInScreen().width() / 2; | 513 return container_->GetBoundsInScreen().width() / 2; |
| 514 } | 514 } |
| 515 | 515 |
| 516 float SplitViewController::GetMaxDistanceFromMiddleForTest() const { | 516 float SplitViewController::GetMaxDistanceFromMiddleForTest() const { |
| 517 return kMaxDistanceFromMiddle; | 517 return kMaxDistanceFromMiddle; |
| 518 } | 518 } |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 ShowDivider(); | 634 ShowDivider(); |
| 635 } | 635 } |
| 636 | 636 |
| 637 void SplitViewController::OnSplitViewModeEnter() { | 637 void SplitViewController::OnSplitViewModeEnter() { |
| 638 } | 638 } |
| 639 | 639 |
| 640 void SplitViewController::OnSplitViewModeExit() { | 640 void SplitViewController::OnSplitViewModeExit() { |
| 641 } | 641 } |
| 642 | 642 |
| 643 } // namespace athena | 643 } // namespace athena |
| OLD | NEW |