Index: chrome/browser/ui/views/tabs/tab_strip.cc |
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc |
index 65125eed3a695c4834137ce120c052ad30d4ea1e..3bf454de2dc09e695926fe145a66c4780feac385 100644 |
--- a/chrome/browser/ui/views/tabs/tab_strip.cc |
+++ b/chrome/browser/ui/views/tabs/tab_strip.cc |
@@ -75,31 +75,34 @@ using ui::DropTargetEvent; |
namespace { |
-static const int kTabStripAnimationVSlop = 40; |
+const int kNewTabButtonHeight = 18; |
+ |
+const int kTabStripAnimationVSlop = 40; |
+ |
// Inactive tabs in a native frame are slightly transparent. |
-static const uint8_t kGlassFrameInactiveTabAlpha = 200; |
+const uint8_t kGlassFrameInactiveTabAlpha = 200; |
// If there are multiple tabs selected then make non-selected inactive tabs |
// even more transparent. |
-static const int kGlassFrameInactiveTabAlphaMultiSelection = 150; |
+const uint8_t kGlassFrameInactiveTabAlphaMultiSelection = 150; |
// Alpha applied to all elements save the selected tabs. |
-static const uint8_t kInactiveTabAndNewTabButtonAlphaAsh = 230; |
-static const uint8_t kInactiveTabAndNewTabButtonAlpha = 255; |
+const uint8_t kInactiveTabAndNewTabButtonAlphaAsh = 230; |
+const uint8_t kInactiveTabAndNewTabButtonAlpha = 255; |
// Inverse ratio of the width of a tab edge to the width of the tab. When |
// hovering over the left or right edge of a tab, the drop indicator will |
// point between tabs. |
-static const int kTabEdgeRatioInverse = 4; |
+const int kTabEdgeRatioInverse = 4; |
// Size of the drop indicator. |
-static int drop_indicator_width; |
-static int drop_indicator_height; |
+int drop_indicator_width; |
+int drop_indicator_height; |
// Max number of stacked tabs. |
-static const int kMaxStackedCount = 4; |
+const int kMaxStackedCount = 4; |
// Padding between stacked tabs. |
-static const int kStackedPadding = 6; |
+const int kStackedPadding = 6; |
// See UpdateLayoutTypeFromMouseEvent() for a description of these. |
#if !defined(USE_ASH) |
@@ -117,19 +120,16 @@ const int kStackedTabLeftClip = 20; |
const int kStackedTabRightClip = 20; |
#if defined(OS_MACOSX) |
+const int kNewTabButtonHorizontalOffset = -8; |
const int kPinnedToNonPinnedOffset = 2; |
#else |
+const int kNewTabButtonHorizontalOffset = -11; |
const int kPinnedToNonPinnedOffset = 3; |
#endif |
-base::string16 GetClipboardText() { |
- if (!ui::Clipboard::IsSupportedClipboardType(ui::CLIPBOARD_TYPE_SELECTION)) |
- return base::string16(); |
- ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); |
- CHECK(clipboard); |
- base::string16 clipboard_text; |
- clipboard->ReadText(ui::CLIPBOARD_TYPE_SELECTION, &clipboard_text); |
- return clipboard_text; |
+// Returns the width needed for the new tab button (and padding). |
+int GetNewTabButtonWidth() { |
+ return TabStrip::kNewTabButtonAssetWidth + kNewTabButtonHorizontalOffset; |
} |
// Animation delegate used for any automatic tab movement. Hides the tab if it |
@@ -345,33 +345,32 @@ void NewTabButton::OnGestureEvent(ui::GestureEvent* event) { |
bool NewTabButton::GetHitTestMask(gfx::Path* mask) const { |
DCHECK(mask); |
- // When the button is sized to the top of the tab strip, we want the hit |
- // test mask to be defined as the complete (rectangular) bounds of the |
- // button. |
if (tab_strip_->SizeTabButtonToTopOfTabStrip()) { |
+ // When the button is sized to the top of the tab strip, we want the hit |
+ // test mask to be defined as the complete (rectangular) bounds of the |
+ // button. |
gfx::Rect button_bounds(GetContentsBounds()); |
button_bounds.set_x(GetMirroredXForRect(button_bounds)); |
mask->addRect(RectToSkRect(button_bounds)); |
- return true; |
+ } else { |
+ SkScalar w = SkIntToScalar(width()); |
+ SkScalar v_offset = SkIntToScalar(TabStrip::kNewTabButtonVerticalOffset); |
+ |
+ // These values are defined by the shape of the new tab image. Should that |
+ // image ever change, these values will need to be updated. They're so |
+ // custom it's not really worth defining constants for. |
+ // These values are correct for regular and USE_ASH versions of the image. |
+ mask->moveTo(0, v_offset + 1); |
+ mask->lineTo(w - 7, v_offset + 1); |
+ mask->lineTo(w - 4, v_offset + 4); |
+ mask->lineTo(w, v_offset + 16); |
+ mask->lineTo(w - 1, v_offset + 17); |
+ mask->lineTo(7, v_offset + 17); |
+ mask->lineTo(4, v_offset + 13); |
+ mask->lineTo(0, v_offset + 1); |
+ mask->close(); |
} |
- SkScalar w = SkIntToScalar(width()); |
- SkScalar v_offset = SkIntToScalar(TabStrip::kNewTabButtonVerticalOffset); |
- |
- // These values are defined by the shape of the new tab image. Should that |
- // image ever change, these values will need to be updated. They're so |
- // custom it's not really worth defining constants for. |
- // These values are correct for regular and USE_ASH versions of the image. |
- mask->moveTo(0, v_offset + 1); |
- mask->lineTo(w - 7, v_offset + 1); |
- mask->lineTo(w - 4, v_offset + 4); |
- mask->lineTo(w, v_offset + 16); |
- mask->lineTo(w - 1, v_offset + 17); |
- mask->lineTo(7, v_offset + 17); |
- mask->lineTo(4, v_offset + 13); |
- mask->lineTo(0, v_offset + 1); |
- mask->close(); |
- |
return true; |
} |
@@ -536,15 +535,8 @@ void TabStrip::RemoveTabDelegate::AnimationCanceled( |
// TabStrip, public: |
// static |
-const char TabStrip::kViewClassName[] = "TabStrip"; |
const int TabStrip::kNewTabButtonVerticalOffset = 7; |
const int TabStrip::kNewTabButtonAssetWidth = 34; |
-const int TabStrip::kNewTabButtonAssetHeight = 18; |
-#if defined(OS_MACOSX) |
-const int TabStrip::kNewTabButtonHorizontalOffset = -8; |
-#else |
-const int TabStrip::kNewTabButtonHorizontalOffset = -11; |
-#endif |
TabStrip::TabStrip(TabStripController* controller) |
: controller_(controller), |
@@ -767,7 +759,7 @@ bool TabStrip::ShouldTabBeVisible(const Tab* tab) const { |
// to "pop in" when the button disappears. |
// TODO: Probably doesn't work for RTL |
int right_edge = tab->bounds().right(); |
- const int visible_width = tab->dragging() ? width() : tab_area_width(); |
+ const int visible_width = tab->dragging() ? width() : GetTabAreaWidth(); |
if (right_edge > visible_width) |
return false; |
@@ -797,7 +789,7 @@ bool TabStrip::ShouldTabBeVisible(const Tab* tab) const { |
// We need to check what would happen if the active tab were to move to this |
// tab or before. |
return (right_edge + current_active_width_ - current_inactive_width_) <= |
- tab_area_width(); |
+ GetTabAreaWidth(); |
} |
void TabStrip::PrepareForCloseAt(int model_index, CloseTabSource source) { |
@@ -1376,6 +1368,7 @@ void TabStrip::PaintChildren(const ui::PaintContext& context) { |
} |
const char* TabStrip::GetClassName() const { |
+ static const char kViewClassName[] = "TabStrip"; |
return kViewClassName; |
} |
@@ -1408,7 +1401,7 @@ gfx::Size TabStrip::GetPreferredSize() const { |
needed_tab_width = std::min( |
std::max(needed_tab_width, min_selected_width), largest_min_tab_width); |
} |
- return gfx::Size(needed_tab_width + new_tab_button_width(), |
+ return gfx::Size(needed_tab_width + GetNewTabButtonWidth(), |
immersive_style_ ? Tab::GetImmersiveHeight() |
: Tab::GetMinimumInactiveSize().height()); |
} |
@@ -1519,11 +1512,9 @@ void TabStrip::Init() { |
set_id(VIEW_ID_TAB_STRIP); |
// So we get enter/exit on children to switch stacked layout on and off. |
set_notify_enter_exit_on_child(true); |
- newtab_button_bounds_.SetRect(0, |
- 0, |
- kNewTabButtonAssetWidth, |
- kNewTabButtonAssetHeight + |
- kNewTabButtonVerticalOffset); |
+ newtab_button_bounds_.SetRect( |
+ 0, 0, kNewTabButtonAssetWidth, |
+ kNewTabButtonHeight + kNewTabButtonVerticalOffset); |
newtab_button_ = new NewTabButton(this, this); |
newtab_button_->SetTooltipText( |
l10n_util::GetStringUTF16(IDS_TOOLTIP_NEW_TAB)); |
@@ -1639,7 +1630,7 @@ void TabStrip::DoLayout() { |
SwapLayoutIfNecessary(); |
if (touch_layout_) |
- touch_layout_->SetWidth(tab_area_width()); |
+ touch_layout_->SetWidth(GetTabAreaWidth()); |
GenerateIdealBounds(); |
@@ -1727,7 +1718,7 @@ void TabStrip::StackDraggedTabs(int delta) { |
} else { |
// Drag the tabs to the right, stacking tabs after the active tab. |
const int last_tab_width = ideal_bounds(tab_count() - 1).width(); |
- const int last_tab_x = tab_area_width() - last_tab_width; |
+ const int last_tab_x = GetTabAreaWidth() - last_tab_width; |
if (active_index == tab_count() - 1 && |
ideal_bounds(tab_count() - 1).x() == last_tab_x) |
return; |
@@ -2314,7 +2305,7 @@ void TabStrip::GenerateIdealBounds() { |
if (!touch_layout_) { |
const int available_width = (available_width_for_tabs_ < 0) |
- ? tab_area_width() |
+ ? GetTabAreaWidth() |
: available_width_for_tabs_; |
const std::vector<gfx::Rect> tabs_bounds = |
CalculateBounds(GetTabSizeInfo(), GetPinnedTabCount(), tab_count(), |
@@ -2351,6 +2342,10 @@ int TabStrip::GenerateIdealBoundsForPinnedTabs(int* first_non_pinned_index) { |
GetLayoutConstant(TABSTRIP_TAB_OVERLAP); |
} |
+int TabStrip::GetTabAreaWidth() const { |
+ return width() - GetNewTabButtonWidth(); |
+} |
+ |
void TabStrip::StartResizeLayoutAnimation() { |
PrepareForAnimation(); |
GenerateIdealBounds(); |
@@ -2500,7 +2495,7 @@ void TabStrip::SwapLayoutIfNecessary() { |
kStackedPadding, |
kMaxStackedCount, |
&tabs_)); |
- touch_layout_->SetWidth(tab_area_width()); |
+ touch_layout_->SetWidth(GetTabAreaWidth()); |
// This has to be after SetWidth() as SetWidth() is going to reset the |
// bounds of the pinned tabs (since StackedTabStripLayout doesn't yet know |
// how many pinned tabs there are). |
@@ -2529,7 +2524,7 @@ bool TabStrip::NeedsTouchLayout() const { |
return false; |
const int overlap = GetLayoutConstant(TABSTRIP_TAB_OVERLAP); |
return (Tab::GetTouchWidth() * normal_count - overlap * (normal_count - 1)) > |
- tab_area_width() - GetStartXForNormalTabs(); |
+ GetTabAreaWidth() - GetStartXForNormalTabs(); |
} |
void TabStrip::SetResetToShrinkOnExit(bool value) { |
@@ -2558,9 +2553,15 @@ void TabStrip::ButtonPressed(views::Button* sender, const ui::Event& event) { |
if (event.IsMouseEvent()) { |
const ui::MouseEvent& mouse = static_cast<const ui::MouseEvent&>(event); |
if (mouse.IsOnlyMiddleMouseButton()) { |
- base::string16 clipboard_text = GetClipboardText(); |
- if (!clipboard_text.empty()) |
- controller()->CreateNewTabWithLocation(clipboard_text); |
+ if (ui::Clipboard::IsSupportedClipboardType( |
+ ui::CLIPBOARD_TYPE_SELECTION)) { |
+ ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); |
+ CHECK(clipboard); |
+ base::string16 clipboard_text; |
+ clipboard->ReadText(ui::CLIPBOARD_TYPE_SELECTION, &clipboard_text); |
+ if (!clipboard_text.empty()) |
+ controller()->CreateNewTabWithLocation(clipboard_text); |
+ } |
return; |
} |
} |