| 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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 // Amount of time we delay before resizing after a close from a touch. | 113 // Amount of time we delay before resizing after a close from a touch. |
| 114 const int kTouchResizeLayoutTimeMS = 2000; | 114 const int kTouchResizeLayoutTimeMS = 2000; |
| 115 | 115 |
| 116 // Amount to adjust the clip by when the tab is stacked before the active index. | 116 // Amount to adjust the clip by when the tab is stacked before the active index. |
| 117 const int kStackedTabLeftClip = 20; | 117 const int kStackedTabLeftClip = 20; |
| 118 | 118 |
| 119 // Amount to adjust the clip by when the tab is stacked after the active index. | 119 // Amount to adjust the clip by when the tab is stacked after the active index. |
| 120 const int kStackedTabRightClip = 20; | 120 const int kStackedTabRightClip = 20; |
| 121 | 121 |
| 122 #if defined(OS_MACOSX) | 122 #if defined(OS_MACOSX) |
| 123 const int kNewTabButtonHorizontalOffset = -8; | |
| 124 const int kPinnedToNonPinnedOffset = 2; | 123 const int kPinnedToNonPinnedOffset = 2; |
| 125 #else | 124 #else |
| 126 const int kNewTabButtonHorizontalOffset = -11; | |
| 127 const int kPinnedToNonPinnedOffset = 3; | 125 const int kPinnedToNonPinnedOffset = 3; |
| 128 #endif | 126 #endif |
| 129 | 127 |
| 130 // Returns the width needed for the new tab button (and padding). | 128 // Returns the width needed for the new tab button (and padding). |
| 131 int GetNewTabButtonWidth() { | 129 int GetNewTabButtonWidth() { |
| 132 return TabStrip::kNewTabButtonAssetWidth + kNewTabButtonHorizontalOffset; | 130 return GetLayoutConstant(NEW_TAB_BUTTON_WIDTH) - |
| 131 GetLayoutConstant(TABSTRIP_NEW_TAB_BUTTON_OVERLAP); |
| 133 } | 132 } |
| 134 | 133 |
| 135 // Animation delegate used for any automatic tab movement. Hides the tab if it | 134 // Animation delegate used for any automatic tab movement. Hides the tab if it |
| 136 // is not fully visible within the tabstrip area, to prevent overflow clipping. | 135 // is not fully visible within the tabstrip area, to prevent overflow clipping. |
| 137 class TabAnimationDelegate : public gfx::AnimationDelegate { | 136 class TabAnimationDelegate : public gfx::AnimationDelegate { |
| 138 public: | 137 public: |
| 139 TabAnimationDelegate(TabStrip* tab_strip, Tab* tab); | 138 TabAnimationDelegate(TabStrip* tab_strip, Tab* tab); |
| 140 ~TabAnimationDelegate() override; | 139 ~TabAnimationDelegate() override; |
| 141 | 140 |
| 142 void AnimationProgressed(const gfx::Animation* animation) override; | 141 void AnimationProgressed(const gfx::Animation* animation) override; |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 529 void TabStrip::RemoveTabDelegate::AnimationCanceled( | 528 void TabStrip::RemoveTabDelegate::AnimationCanceled( |
| 530 const gfx::Animation* animation) { | 529 const gfx::Animation* animation) { |
| 531 AnimationEnded(animation); | 530 AnimationEnded(animation); |
| 532 } | 531 } |
| 533 | 532 |
| 534 /////////////////////////////////////////////////////////////////////////////// | 533 /////////////////////////////////////////////////////////////////////////////// |
| 535 // TabStrip, public: | 534 // TabStrip, public: |
| 536 | 535 |
| 537 // static | 536 // static |
| 538 const int TabStrip::kNewTabButtonVerticalOffset = 7; | 537 const int TabStrip::kNewTabButtonVerticalOffset = 7; |
| 539 const int TabStrip::kNewTabButtonAssetWidth = 34; | |
| 540 | 538 |
| 541 TabStrip::TabStrip(TabStripController* controller) | 539 TabStrip::TabStrip(TabStripController* controller) |
| 542 : controller_(controller), | 540 : controller_(controller), |
| 543 newtab_button_(NULL), | 541 newtab_button_(NULL), |
| 544 current_inactive_width_(Tab::GetStandardSize().width()), | 542 current_inactive_width_(Tab::GetStandardSize().width()), |
| 545 current_active_width_(Tab::GetStandardSize().width()), | 543 current_active_width_(Tab::GetStandardSize().width()), |
| 546 available_width_for_tabs_(-1), | 544 available_width_for_tabs_(-1), |
| 547 in_tab_close_(false), | 545 in_tab_close_(false), |
| 548 animation_container_(new gfx::AnimationContainer()), | 546 animation_container_(new gfx::AnimationContainer()), |
| 549 bounds_animator_(this), | 547 bounds_animator_(this), |
| (...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1506 } | 1504 } |
| 1507 | 1505 |
| 1508 /////////////////////////////////////////////////////////////////////////////// | 1506 /////////////////////////////////////////////////////////////////////////////// |
| 1509 // TabStrip, private: | 1507 // TabStrip, private: |
| 1510 | 1508 |
| 1511 void TabStrip::Init() { | 1509 void TabStrip::Init() { |
| 1512 set_id(VIEW_ID_TAB_STRIP); | 1510 set_id(VIEW_ID_TAB_STRIP); |
| 1513 // So we get enter/exit on children to switch stacked layout on and off. | 1511 // So we get enter/exit on children to switch stacked layout on and off. |
| 1514 set_notify_enter_exit_on_child(true); | 1512 set_notify_enter_exit_on_child(true); |
| 1515 newtab_button_bounds_.SetRect( | 1513 newtab_button_bounds_.SetRect( |
| 1516 0, 0, kNewTabButtonAssetWidth, | 1514 0, 0, GetLayoutConstant(NEW_TAB_BUTTON_WIDTH), |
| 1517 kNewTabButtonHeight + kNewTabButtonVerticalOffset); | 1515 kNewTabButtonHeight + kNewTabButtonVerticalOffset); |
| 1518 newtab_button_ = new NewTabButton(this, this); | 1516 newtab_button_ = new NewTabButton(this, this); |
| 1519 newtab_button_->SetTooltipText( | 1517 newtab_button_->SetTooltipText( |
| 1520 l10n_util::GetStringUTF16(IDS_TOOLTIP_NEW_TAB)); | 1518 l10n_util::GetStringUTF16(IDS_TOOLTIP_NEW_TAB)); |
| 1521 newtab_button_->SetAccessibleName( | 1519 newtab_button_->SetAccessibleName( |
| 1522 l10n_util::GetStringUTF16(IDS_ACCNAME_NEWTAB)); | 1520 l10n_util::GetStringUTF16(IDS_ACCNAME_NEWTAB)); |
| 1523 newtab_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT, | 1521 newtab_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT, |
| 1524 views::ImageButton::ALIGN_BOTTOM); | 1522 views::ImageButton::ALIGN_BOTTOM); |
| 1525 newtab_button_->SetEventTargeter( | 1523 newtab_button_->SetEventTargeter( |
| 1526 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(newtab_button_))); | 1524 scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(newtab_button_))); |
| (...skipping 783 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2310 const std::vector<gfx::Rect> tabs_bounds = | 2308 const std::vector<gfx::Rect> tabs_bounds = |
| 2311 CalculateBounds(GetTabSizeInfo(), GetPinnedTabCount(), tab_count(), | 2309 CalculateBounds(GetTabSizeInfo(), GetPinnedTabCount(), tab_count(), |
| 2312 controller_->GetActiveIndex(), available_width, | 2310 controller_->GetActiveIndex(), available_width, |
| 2313 ¤t_active_width_, ¤t_inactive_width_); | 2311 ¤t_active_width_, ¤t_inactive_width_); |
| 2314 DCHECK_EQ(static_cast<size_t>(tab_count()), tabs_bounds.size()); | 2312 DCHECK_EQ(static_cast<size_t>(tab_count()), tabs_bounds.size()); |
| 2315 | 2313 |
| 2316 for (size_t i = 0; i < tabs_bounds.size(); ++i) | 2314 for (size_t i = 0; i < tabs_bounds.size(); ++i) |
| 2317 tabs_.set_ideal_bounds(i, tabs_bounds[i]); | 2315 tabs_.set_ideal_bounds(i, tabs_bounds[i]); |
| 2318 } | 2316 } |
| 2319 | 2317 |
| 2320 const int new_tab_x = tabs_.ideal_bounds(tabs_.view_size() - 1).right() + | 2318 const int new_tab_x = tabs_.ideal_bounds(tabs_.view_size() - 1).right() - |
| 2321 kNewTabButtonHorizontalOffset; | 2319 GetLayoutConstant(TABSTRIP_NEW_TAB_BUTTON_OVERLAP); |
| 2322 newtab_button_bounds_.set_origin(gfx::Point(new_tab_x, 0)); | 2320 newtab_button_bounds_.set_origin(gfx::Point(new_tab_x, 0)); |
| 2323 } | 2321 } |
| 2324 | 2322 |
| 2325 int TabStrip::GenerateIdealBoundsForPinnedTabs(int* first_non_pinned_index) { | 2323 int TabStrip::GenerateIdealBoundsForPinnedTabs(int* first_non_pinned_index) { |
| 2326 const int num_pinned_tabs = GetPinnedTabCount(); | 2324 const int num_pinned_tabs = GetPinnedTabCount(); |
| 2327 | 2325 |
| 2328 if (first_non_pinned_index) | 2326 if (first_non_pinned_index) |
| 2329 *first_non_pinned_index = num_pinned_tabs; | 2327 *first_non_pinned_index = num_pinned_tabs; |
| 2330 | 2328 |
| 2331 if (num_pinned_tabs == 0) | 2329 if (num_pinned_tabs == 0) |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2377 gfx::Rect bounds = ideal_bounds(i); | 2375 gfx::Rect bounds = ideal_bounds(i); |
| 2378 bounds.set_x(bounds.x() - delta); | 2376 bounds.set_x(bounds.x() - delta); |
| 2379 tabs_.set_ideal_bounds(i, bounds); | 2377 tabs_.set_ideal_bounds(i, bounds); |
| 2380 } | 2378 } |
| 2381 | 2379 |
| 2382 // Don't just subtract |delta| from the New Tab x-coordinate, as we might have | 2380 // Don't just subtract |delta| from the New Tab x-coordinate, as we might have |
| 2383 // overflow tabs that will be able to animate into the strip, in which case | 2381 // overflow tabs that will be able to animate into the strip, in which case |
| 2384 // the new tab button should stay where it is. | 2382 // the new tab button should stay where it is. |
| 2385 newtab_button_bounds_.set_x(std::min( | 2383 newtab_button_bounds_.set_x(std::min( |
| 2386 width() - newtab_button_bounds_.width(), | 2384 width() - newtab_button_bounds_.width(), |
| 2387 ideal_bounds(tab_count() - 1).right() + kNewTabButtonHorizontalOffset)); | 2385 ideal_bounds(tab_count() - 1).right() - |
| 2386 GetLayoutConstant(TABSTRIP_NEW_TAB_BUTTON_OVERLAP))); |
| 2388 | 2387 |
| 2389 PrepareForAnimation(); | 2388 PrepareForAnimation(); |
| 2390 | 2389 |
| 2391 tab_closing->set_closing(true); | 2390 tab_closing->set_closing(true); |
| 2392 | 2391 |
| 2393 // We still need to paint the tab until we actually remove it. Put it in | 2392 // We still need to paint the tab until we actually remove it. Put it in |
| 2394 // tabs_closing_map_ so we can find it. | 2393 // tabs_closing_map_ so we can find it. |
| 2395 RemoveTabFromViewModel(model_index); | 2394 RemoveTabFromViewModel(model_index); |
| 2396 | 2395 |
| 2397 AnimateToIdealBounds(); | 2396 AnimateToIdealBounds(); |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2692 ConvertPointToViewAndGetEventHandler(this, newtab_button_, point); | 2691 ConvertPointToViewAndGetEventHandler(this, newtab_button_, point); |
| 2693 if (view) | 2692 if (view) |
| 2694 return view; | 2693 return view; |
| 2695 } | 2694 } |
| 2696 Tab* tab = FindTabForEvent(point); | 2695 Tab* tab = FindTabForEvent(point); |
| 2697 if (tab) | 2696 if (tab) |
| 2698 return ConvertPointToViewAndGetEventHandler(this, tab, point); | 2697 return ConvertPointToViewAndGetEventHandler(this, tab, point); |
| 2699 } | 2698 } |
| 2700 return this; | 2699 return this; |
| 2701 } | 2700 } |
| OLD | NEW |