| 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 "chrome/browser/ui/views/tabs/tab_strip.h" | 5 #include "chrome/browser/ui/views/tabs/tab_strip.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windowsx.h> | 8 #include <windowsx.h> |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 1158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1169 | 1169 |
| 1170 return view && view->id() == VIEW_ID_TAB ? static_cast<Tab*>(view) : NULL; | 1170 return view && view->id() == VIEW_ID_TAB ? static_cast<Tab*>(view) : NULL; |
| 1171 } | 1171 } |
| 1172 | 1172 |
| 1173 void TabStrip::OnMouseEventInTab(views::View* source, | 1173 void TabStrip::OnMouseEventInTab(views::View* source, |
| 1174 const ui::MouseEvent& event) { | 1174 const ui::MouseEvent& event) { |
| 1175 UpdateStackedLayoutFromMouseEvent(source, event); | 1175 UpdateStackedLayoutFromMouseEvent(source, event); |
| 1176 } | 1176 } |
| 1177 | 1177 |
| 1178 bool TabStrip::ShouldPaintTab(const Tab* tab, gfx::Rect* clip) { | 1178 bool TabStrip::ShouldPaintTab(const Tab* tab, gfx::Rect* clip) { |
| 1179 const bool dragging = drag_controller_ && drag_controller_->started_drag(); |
| 1179 // Only touch layout needs to restrict the clip. | 1180 // Only touch layout needs to restrict the clip. |
| 1180 if (!touch_layout_ && !IsStackingDraggedTabs()) | 1181 if (!touch_layout_ && !dragging) |
| 1181 return true; | 1182 return true; |
| 1182 | 1183 |
| 1183 int index = GetModelIndexOfTab(tab); | 1184 int index = GetModelIndexOfTab(tab); |
| 1184 if (index == -1) | 1185 if (index == -1) |
| 1185 return true; // Tab is closing, paint it all. | 1186 return true; // Tab is closing, paint it all. |
| 1186 | 1187 |
| 1187 int active_index = IsStackingDraggedTabs() ? | 1188 int active_index = |
| 1188 controller_->GetActiveIndex() : touch_layout_->active_index(); | 1189 dragging ? controller_->GetActiveIndex() : touch_layout_->active_index(); |
| 1189 if (active_index == tab_count()) | 1190 if (active_index == tab_count()) |
| 1190 active_index--; | 1191 active_index--; |
| 1191 | 1192 |
| 1192 if (index < active_index) { | 1193 if (index < active_index) { |
| 1193 if (tab_at(index)->x() == tab_at(index + 1)->x()) | 1194 if (tab_at(index)->x() == tab_at(index + 1)->x()) |
| 1194 return false; | 1195 return false; |
| 1195 | 1196 |
| 1196 if (tab_at(index)->x() > tab_at(index + 1)->x()) | 1197 if (tab_at(index)->x() > tab_at(index + 1)->x()) |
| 1197 return true; // Can happen during dragging. | 1198 return true; // Can happen during dragging. |
| 1198 | 1199 |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1744 new_bounds.set_x(std::min(min_x, new_bounds.x() + delta)); | 1745 new_bounds.set_x(std::min(min_x, new_bounds.x() + delta)); |
| 1745 tabs_.set_ideal_bounds(i, new_bounds); | 1746 tabs_.set_ideal_bounds(i, new_bounds); |
| 1746 } | 1747 } |
| 1747 if (ideal_bounds(tab_count() - 1).right() >= newtab_button_->x()) | 1748 if (ideal_bounds(tab_count() - 1).right() >= newtab_button_->x()) |
| 1748 newtab_button_->SetVisible(false); | 1749 newtab_button_->SetVisible(false); |
| 1749 } | 1750 } |
| 1750 views::ViewModelUtils::SetViewBoundsToIdealBounds(tabs_); | 1751 views::ViewModelUtils::SetViewBoundsToIdealBounds(tabs_); |
| 1751 SchedulePaint(); | 1752 SchedulePaint(); |
| 1752 } | 1753 } |
| 1753 | 1754 |
| 1754 bool TabStrip::IsStackingDraggedTabs() const { | |
| 1755 return drag_controller_.get() && drag_controller_->started_drag() && | |
| 1756 (drag_controller_->move_behavior() == | |
| 1757 TabDragController::MOVE_VISIBILE_TABS); | |
| 1758 } | |
| 1759 | |
| 1760 void TabStrip::LayoutDraggedTabsAt(const Tabs& tabs, | 1755 void TabStrip::LayoutDraggedTabsAt(const Tabs& tabs, |
| 1761 Tab* active_tab, | 1756 Tab* active_tab, |
| 1762 const gfx::Point& location, | 1757 const gfx::Point& location, |
| 1763 bool initial_drag) { | 1758 bool initial_drag) { |
| 1764 // Immediately hide the new tab button if the last tab is being dragged. | 1759 // Immediately hide the new tab button if the last tab is being dragged. |
| 1765 const Tab* last_visible_tab = GetLastVisibleTab(); | 1760 const Tab* last_visible_tab = GetLastVisibleTab(); |
| 1766 if (last_visible_tab && last_visible_tab->dragging()) | 1761 if (last_visible_tab && last_visible_tab->dragging()) |
| 1767 newtab_button_->SetVisible(false); | 1762 newtab_button_->SetVisible(false); |
| 1768 std::vector<gfx::Rect> bounds; | 1763 std::vector<gfx::Rect> bounds; |
| 1769 CalculateBoundsForDraggedTabs(tabs, &bounds); | 1764 CalculateBoundsForDraggedTabs(tabs, &bounds); |
| (...skipping 1000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2770 ConvertPointToViewAndGetEventHandler(this, newtab_button_, point); | 2765 ConvertPointToViewAndGetEventHandler(this, newtab_button_, point); |
| 2771 if (view) | 2766 if (view) |
| 2772 return view; | 2767 return view; |
| 2773 } | 2768 } |
| 2774 Tab* tab = FindTabForEvent(point); | 2769 Tab* tab = FindTabForEvent(point); |
| 2775 if (tab) | 2770 if (tab) |
| 2776 return ConvertPointToViewAndGetEventHandler(this, tab, point); | 2771 return ConvertPointToViewAndGetEventHandler(this, tab, point); |
| 2777 } | 2772 } |
| 2778 return this; | 2773 return this; |
| 2779 } | 2774 } |
| OLD | NEW |