| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/ui/views/tabs/base_tab_strip.h" | 5 #include "chrome/browser/ui/views/tabs/base_tab_strip.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chrome/browser/ui/title_prefix_matcher.h" | 8 #include "chrome/browser/ui/title_prefix_matcher.h" |
| 9 #include "chrome/browser/ui/view_ids.h" | 9 #include "chrome/browser/ui/view_ids.h" |
| 10 #include "chrome/browser/ui/views/tabs/dragged_tab_controller.h" | 10 #include "chrome/browser/ui/views/tabs/dragged_tab_controller.h" |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 371 return false; | 371 return false; |
| 372 bool started_drag = drag_controller_->started_drag(); | 372 bool started_drag = drag_controller_->started_drag(); |
| 373 drag_controller_->EndDrag(canceled); | 373 drag_controller_->EndDrag(canceled); |
| 374 return started_drag; | 374 return started_drag; |
| 375 } | 375 } |
| 376 | 376 |
| 377 BaseTab* BaseTabStrip::GetTabAt(BaseTab* tab, | 377 BaseTab* BaseTabStrip::GetTabAt(BaseTab* tab, |
| 378 const gfx::Point& tab_in_tab_coordinates) { | 378 const gfx::Point& tab_in_tab_coordinates) { |
| 379 gfx::Point local_point = tab_in_tab_coordinates; | 379 gfx::Point local_point = tab_in_tab_coordinates; |
| 380 ConvertPointToView(tab, this, &local_point); | 380 ConvertPointToView(tab, this, &local_point); |
| 381 views::View* view = GetEventHandlerForPoint(local_point); | 381 return GetTabAtLocal(local_point); |
| 382 if (!view) | |
| 383 return NULL; // No tab contains the point. | |
| 384 | |
| 385 // Walk up the view hierarchy until we find a tab, or the TabStrip. | |
| 386 while (view && view != this && view->GetID() != VIEW_ID_TAB) | |
| 387 view = view->parent(); | |
| 388 | |
| 389 return view && view->GetID() == VIEW_ID_TAB ? | |
| 390 static_cast<BaseTab*>(view) : NULL; | |
| 391 } | 382 } |
| 392 | 383 |
| 393 void BaseTabStrip::Layout() { | 384 void BaseTabStrip::Layout() { |
| 394 // Only do a layout if our size changed. | 385 // Only do a layout if our size changed. |
| 395 if (last_layout_size_ == size()) | 386 if (last_layout_size_ == size()) |
| 396 return; | 387 return; |
| 397 DoLayout(); | 388 DoLayout(); |
| 398 } | 389 } |
| 399 | 390 |
| 400 bool BaseTabStrip::OnMouseDragged(const views::MouseEvent& event) { | 391 bool BaseTabStrip::OnMouseDragged(const views::MouseEvent& event) { |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 StopAnimating(false); | 555 StopAnimating(false); |
| 565 | 556 |
| 566 GenerateIdealBounds(); | 557 GenerateIdealBounds(); |
| 567 | 558 |
| 568 for (int i = 0; i < tab_count(); ++i) | 559 for (int i = 0; i < tab_count(); ++i) |
| 569 tab_data_[i].tab->SetBoundsRect(tab_data_[i].ideal_bounds); | 560 tab_data_[i].tab->SetBoundsRect(tab_data_[i].ideal_bounds); |
| 570 | 561 |
| 571 SchedulePaint(); | 562 SchedulePaint(); |
| 572 } | 563 } |
| 573 | 564 |
| 565 BaseTab* BaseTabStrip::GetTabAtLocal( |
| 566 const gfx::Point& local_point) { |
| 567 views::View* view = GetEventHandlerForPoint(local_point); |
| 568 if (!view) |
| 569 return NULL; // No tab contains the point. |
| 570 |
| 571 // Walk up the view hierarchy until we find a tab, or the TabStrip. |
| 572 while (view && view != this && view->GetID() != VIEW_ID_TAB) |
| 573 view = view->parent(); |
| 574 |
| 575 return view && view->GetID() == VIEW_ID_TAB ? |
| 576 static_cast<BaseTab*>(view) : NULL; |
| 577 } |
| 578 |
| 574 void BaseTabStrip::StoppedDraggingTab(BaseTab* tab, bool* is_first_tab) { | 579 void BaseTabStrip::StoppedDraggingTab(BaseTab* tab, bool* is_first_tab) { |
| 575 int tab_data_index = TabIndexOfTab(tab); | 580 int tab_data_index = TabIndexOfTab(tab); |
| 576 if (tab_data_index == -1) { | 581 if (tab_data_index == -1) { |
| 577 // The tab was removed before the drag completed. Don't do anything. | 582 // The tab was removed before the drag completed. Don't do anything. |
| 578 return; | 583 return; |
| 579 } | 584 } |
| 580 | 585 |
| 581 if (*is_first_tab) { | 586 if (*is_first_tab) { |
| 582 *is_first_tab = false; | 587 *is_first_tab = false; |
| 583 PrepareForAnimation(); | 588 PrepareForAnimation(); |
| 584 | 589 |
| 585 // Animate the view back to its correct position. | 590 // Animate the view back to its correct position. |
| 586 GenerateIdealBounds(); | 591 GenerateIdealBounds(); |
| 587 AnimateToIdealBounds(); | 592 AnimateToIdealBounds(); |
| 588 } | 593 } |
| 589 bounds_animator_.AnimateViewTo(tab, ideal_bounds(TabIndexOfTab(tab))); | 594 bounds_animator_.AnimateViewTo(tab, ideal_bounds(TabIndexOfTab(tab))); |
| 590 // Install a delegate to reset the dragging state when done. We have to leave | 595 // Install a delegate to reset the dragging state when done. We have to leave |
| 591 // dragging true for the tab otherwise it'll draw beneath the new tab button. | 596 // dragging true for the tab otherwise it'll draw beneath the new tab button. |
| 592 bounds_animator_.SetAnimationDelegate( | 597 bounds_animator_.SetAnimationDelegate( |
| 593 tab, new ResetDraggingStateDelegate(tab), true); | 598 tab, new ResetDraggingStateDelegate(tab), true); |
| 594 } | 599 } |
| OLD | NEW |