| 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.h" | 5 #include "chrome/browser/ui/views/tabs/tab.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "chrome/browser/defaults.h" | 10 #include "chrome/browser/defaults.h" |
| 11 #include "chrome/browser/themes/theme_service.h" | 11 #include "chrome/browser/themes/theme_service.h" |
| 12 #include "chrome/browser/ui/tabs/tab_resources.h" | 12 #include "chrome/browser/ui/tabs/tab_resources.h" |
| 13 #include "chrome/browser/ui/views/tabs/tab_controller.h" | 13 #include "chrome/browser/ui/views/tabs/tab_controller.h" |
| 14 #include "grit/generated_resources.h" | 14 #include "grit/generated_resources.h" |
| 15 #include "grit/theme_resources.h" | 15 #include "grit/theme_resources.h" |
| 16 #include "grit/theme_resources_standard.h" | 16 #include "grit/theme_resources_standard.h" |
| 17 #include "grit/ui_resources.h" | 17 #include "grit/ui_resources.h" |
| 18 #include "third_party/skia/include/effects/SkGradientShader.h" | 18 #include "third_party/skia/include/effects/SkGradientShader.h" |
| 19 #include "ui/base/animation/multi_animation.h" | 19 #include "ui/base/animation/multi_animation.h" |
| 20 #include "ui/base/animation/throb_animation.h" | 20 #include "ui/base/animation/throb_animation.h" |
| 21 #include "ui/base/layout.h" |
| 21 #include "ui/base/resource/resource_bundle.h" | 22 #include "ui/base/resource/resource_bundle.h" |
| 22 #include "ui/base/touch/touch_mode_support.h" | 23 #include "ui/base/touch/touch_mode_support.h" |
| 23 #include "ui/gfx/canvas.h" | 24 #include "ui/gfx/canvas.h" |
| 24 #include "ui/gfx/favicon_size.h" | 25 #include "ui/gfx/favicon_size.h" |
| 25 #include "ui/gfx/font.h" | 26 #include "ui/gfx/font.h" |
| 26 #include "ui/gfx/path.h" | 27 #include "ui/gfx/path.h" |
| 27 #include "ui/gfx/skbitmap_operations.h" | 28 #include "ui/gfx/skbitmap_operations.h" |
| 28 #include "ui/views/controls/button/image_button.h" | 29 #include "ui/views/controls/button/image_button.h" |
| 29 #include "ui/views/widget/tooltip_manager.h" | 30 #include "ui/views/widget/tooltip_manager.h" |
| 30 #include "ui/views/widget/widget.h" | 31 #include "ui/views/widget/widget.h" |
| 31 #include "ui/views/window/non_client_view.h" | 32 #include "ui/views/window/non_client_view.h" |
| 32 | 33 |
| 34 namespace { |
| 35 |
| 33 // Padding around the "content" of a tab, occupied by the tab border graphics. | 36 // Padding around the "content" of a tab, occupied by the tab border graphics. |
| 34 #if defined(USE_ASH) | 37 |
| 35 static const int kLeftPadding = 21; | 38 const int GetLeftPadding() { |
| 36 static const int kTopPadding = 8; | 39 static int value = -1; |
| 37 static const int kRightPadding = 20; | 40 if (value == -1) { |
| 38 static const int kBottomPadding = 5; | 41 switch (ui::GetDisplayLayout()) { |
| 39 #else | 42 case ui::LAYOUT_ASH: |
| 40 static const int kLeftPadding = 16; | 43 value = 21; |
| 41 static const int kTopPadding = 6; | 44 break; |
| 42 static const int kRightPadding = 15; | 45 case ui::LAYOUT_METRO: |
| 43 static const int kBottomPadding = 5; | 46 value = 20; |
| 44 #endif | 47 break; |
| 48 default: |
| 49 value = 16; |
| 50 } |
| 51 } |
| 52 return value; |
| 53 } |
| 54 |
| 55 const int GetTopPadding() { |
| 56 static int value = -1; |
| 57 if (value == -1) { |
| 58 switch (ui::GetDisplayLayout()) { |
| 59 case ui::LAYOUT_ASH: |
| 60 value = 8; |
| 61 break; |
| 62 case ui::LAYOUT_METRO: |
| 63 value = 12; |
| 64 break; |
| 65 default: |
| 66 value = 6; |
| 67 } |
| 68 } |
| 69 return value; |
| 70 } |
| 71 |
| 72 const int GetRightPadding() { |
| 73 static int value = -1; |
| 74 if (value == -1) { |
| 75 switch (ui::GetDisplayLayout()) { |
| 76 case ui::LAYOUT_ASH: |
| 77 value = 20; |
| 78 break; |
| 79 case ui::LAYOUT_METRO: |
| 80 value = 21; |
| 81 break; |
| 82 default: |
| 83 value = 15; |
| 84 } |
| 85 } |
| 86 return value; |
| 87 } |
| 88 |
| 89 const int GetBottomPadding() { |
| 90 static int value = -1; |
| 91 if (value == -1) { |
| 92 switch (ui::GetDisplayLayout()) { |
| 93 case ui::LAYOUT_METRO: |
| 94 value = 7; |
| 95 break; |
| 96 case ui::LAYOUT_ASH: |
| 97 default: |
| 98 value = 5; |
| 99 } |
| 100 } |
| 101 return value; |
| 102 } |
| 45 | 103 |
| 46 // Height of the shadow at the top of the tab image assets. | 104 // Height of the shadow at the top of the tab image assets. |
| 47 #if defined(USE_ASH) | 105 #if defined(USE_ASH) |
| 48 static const int kDropShadowHeight = 4; | 106 static const int kDropShadowHeight = 4; |
| 49 #else | 107 #else |
| 50 static const int kDropShadowHeight = 2; | 108 static const int kDropShadowHeight = 2; |
| 51 #endif | 109 #endif |
| 52 static const int kToolbarOverlap = 1; | 110 static const int kToolbarOverlap = 1; |
| 53 static const int kFaviconTitleSpacing = 4; | 111 static const int kFaviconTitleSpacing = 4; |
| 54 // Additional vertical offset for title text relative to top of tab. | 112 // Additional vertical offset for title text relative to top of tab. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 83 | 141 |
| 84 // How opaque to make the hover state (out of 1). | 142 // How opaque to make the hover state (out of 1). |
| 85 static const double kHoverOpacity = 0.33; | 143 static const double kHoverOpacity = 0.33; |
| 86 | 144 |
| 87 // Opacity for non-active selected tabs. | 145 // Opacity for non-active selected tabs. |
| 88 static const double kSelectedTabOpacity = .45; | 146 static const double kSelectedTabOpacity = .45; |
| 89 | 147 |
| 90 // Selected (but not active) tabs have their throb value scaled down by this. | 148 // Selected (but not active) tabs have their throb value scaled down by this. |
| 91 static const double kSelectedTabThrobScale = .5; | 149 static const double kSelectedTabThrobScale = .5; |
| 92 | 150 |
| 93 Tab::TabImage Tab::tab_alpha_ = {0}; | |
| 94 Tab::TabImage Tab::tab_active_ = {0}; | |
| 95 Tab::TabImage Tab::tab_inactive_ = {0}; | |
| 96 | |
| 97 // Durations for the various parts of the mini tab title animation. | 151 // Durations for the various parts of the mini tab title animation. |
| 98 static const int kMiniTitleChangeAnimationDuration1MS = 1600; | 152 static const int kMiniTitleChangeAnimationDuration1MS = 1600; |
| 99 static const int kMiniTitleChangeAnimationStart1MS = 0; | 153 static const int kMiniTitleChangeAnimationStart1MS = 0; |
| 100 static const int kMiniTitleChangeAnimationEnd1MS = 1900; | 154 static const int kMiniTitleChangeAnimationEnd1MS = 1900; |
| 101 static const int kMiniTitleChangeAnimationDuration2MS = 0; | 155 static const int kMiniTitleChangeAnimationDuration2MS = 0; |
| 102 static const int kMiniTitleChangeAnimationDuration3MS = 550; | 156 static const int kMiniTitleChangeAnimationDuration3MS = 550; |
| 103 static const int kMiniTitleChangeAnimationStart3MS = 150; | 157 static const int kMiniTitleChangeAnimationStart3MS = 150; |
| 104 static const int kMiniTitleChangeAnimationEnd3MS = 800; | 158 static const int kMiniTitleChangeAnimationEnd3MS = 800; |
| 105 | 159 |
| 106 // Offset from the right edge for the start of the mini title change animation. | 160 // Offset from the right edge for the start of the mini title change animation. |
| 107 static const int kMiniTitleChangeInitialXOffset = 6; | 161 static const int kMiniTitleChangeInitialXOffset = 6; |
| 108 | 162 |
| 109 // Radius of the radial gradient used for mini title change animation. | 163 // Radius of the radial gradient used for mini title change animation. |
| 110 static const int kMiniTitleChangeGradientRadius = 20; | 164 static const int kMiniTitleChangeGradientRadius = 20; |
| 111 | 165 |
| 112 // Colors of the gradient used during the mini title change animation. | 166 // Colors of the gradient used during the mini title change animation. |
| 113 static const SkColor kMiniTitleChangeGradientColor1 = SK_ColorWHITE; | 167 static const SkColor kMiniTitleChangeGradientColor1 = SK_ColorWHITE; |
| 114 static const SkColor kMiniTitleChangeGradientColor2 = | 168 static const SkColor kMiniTitleChangeGradientColor2 = |
| 115 SkColorSetARGB(0, 255, 255, 255); | 169 SkColorSetARGB(0, 255, 255, 255); |
| 116 | 170 |
| 171 } // namespace |
| 172 |
| 173 Tab::TabImage Tab::tab_alpha_ = {0}; |
| 174 Tab::TabImage Tab::tab_active_ = {0}; |
| 175 Tab::TabImage Tab::tab_inactive_ = {0}; |
| 176 |
| 117 // static | 177 // static |
| 118 const char Tab::kViewClassName[] = "browser/tabs/Tab"; | 178 const char Tab::kViewClassName[] = "browser/tabs/Tab"; |
| 119 | 179 |
| 120 //////////////////////////////////////////////////////////////////////////////// | 180 //////////////////////////////////////////////////////////////////////////////// |
| 121 // Tab, public: | 181 // Tab, public: |
| 122 | 182 |
| 123 Tab::Tab(TabController* controller) | 183 Tab::Tab(TabController* controller) |
| 124 : BaseTab(controller), | 184 : BaseTab(controller), |
| 125 showing_icon_(false), | 185 showing_icon_(false), |
| 126 showing_close_button_(false), | 186 showing_close_button_(false), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 157 void Tab::StopMiniTabTitleAnimation() { | 217 void Tab::StopMiniTabTitleAnimation() { |
| 158 if (mini_title_animation_.get()) | 218 if (mini_title_animation_.get()) |
| 159 mini_title_animation_->Stop(); | 219 mini_title_animation_->Stop(); |
| 160 } | 220 } |
| 161 | 221 |
| 162 // static | 222 // static |
| 163 gfx::Size Tab::GetBasicMinimumUnselectedSize() { | 223 gfx::Size Tab::GetBasicMinimumUnselectedSize() { |
| 164 InitTabResources(); | 224 InitTabResources(); |
| 165 | 225 |
| 166 gfx::Size minimum_size; | 226 gfx::Size minimum_size; |
| 167 minimum_size.set_width(kLeftPadding + kRightPadding); | 227 minimum_size.set_width(GetLeftPadding() + GetRightPadding()); |
| 168 // Since we use bitmap images, the real minimum height of the image is | 228 // Since we use bitmap images, the real minimum height of the image is |
| 169 // defined most accurately by the height of the end cap images. | 229 // defined most accurately by the height of the end cap images. |
| 170 minimum_size.set_height(tab_active_.image_l->height()); | 230 minimum_size.set_height(tab_active_.image_l->height()); |
| 171 return minimum_size; | 231 return minimum_size; |
| 172 } | 232 } |
| 173 | 233 |
| 174 gfx::Size Tab::GetMinimumUnselectedSize() { | 234 gfx::Size Tab::GetMinimumUnselectedSize() { |
| 175 if (TouchModeSupport::IsTouchOptimized()) | 235 if (TouchModeSupport::IsTouchOptimized()) |
| 176 return GetTouchModeMinimumSize(); | 236 return GetTouchModeMinimumSize(); |
| 177 return GetBasicMinimumUnselectedSize(); | 237 return GetBasicMinimumUnselectedSize(); |
| 178 } | 238 } |
| 179 | 239 |
| 180 // static | 240 // static |
| 181 gfx::Size Tab::GetMinimumSelectedSize() { | 241 gfx::Size Tab::GetMinimumSelectedSize() { |
| 182 if (TouchModeSupport::IsTouchOptimized()) | 242 if (TouchModeSupport::IsTouchOptimized()) |
| 183 return GetTouchModeMinimumSize(); | 243 return GetTouchModeMinimumSize(); |
| 184 gfx::Size minimum_size = GetBasicMinimumUnselectedSize(); | 244 gfx::Size minimum_size = GetBasicMinimumUnselectedSize(); |
| 185 minimum_size.set_width(kLeftPadding + gfx::kFaviconSize + kRightPadding); | 245 minimum_size.set_width( |
| 246 GetLeftPadding() + gfx::kFaviconSize + GetRightPadding()); |
| 186 return minimum_size; | 247 return minimum_size; |
| 187 } | 248 } |
| 188 | 249 |
| 189 // static | 250 // static |
| 190 gfx::Size Tab::GetStandardSize() { | 251 gfx::Size Tab::GetStandardSize() { |
| 191 gfx::Size standard_size = GetBasicMinimumUnselectedSize(); | 252 gfx::Size standard_size = GetBasicMinimumUnselectedSize(); |
| 192 standard_size.set_width( | 253 standard_size.set_width( |
| 193 standard_size.width() + kFaviconTitleSpacing + kStandardTitleWidth); | 254 standard_size.width() + kFaviconTitleSpacing + kStandardTitleWidth); |
| 194 return standard_size; | 255 return standard_size; |
| 195 } | 256 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 close_button()->SetBackground(close_button_color_, | 325 close_button()->SetBackground(close_button_color_, |
| 265 rb.GetBitmapNamed(IDR_TAB_CLOSE), | 326 rb.GetBitmapNamed(IDR_TAB_CLOSE), |
| 266 rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK)); | 327 rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK)); |
| 267 } | 328 } |
| 268 } | 329 } |
| 269 | 330 |
| 270 void Tab::Layout() { | 331 void Tab::Layout() { |
| 271 gfx::Rect lb = GetContentsBounds(); | 332 gfx::Rect lb = GetContentsBounds(); |
| 272 if (lb.IsEmpty()) | 333 if (lb.IsEmpty()) |
| 273 return; | 334 return; |
| 274 lb.Inset(kLeftPadding, kTopPadding, kRightPadding, kBottomPadding); | 335 lb.Inset( |
| 336 GetLeftPadding(), GetTopPadding(), GetRightPadding(), GetBottomPadding()); |
| 275 | 337 |
| 276 // The height of the content of the Tab is the largest of the favicon, | 338 // The height of the content of the Tab is the largest of the favicon, |
| 277 // the title text and the close button graphic. | 339 // the title text and the close button graphic. |
| 278 int content_height = std::max(kTabIconSize, font_height()); | 340 int content_height = std::max(kTabIconSize, font_height()); |
| 279 gfx::Size close_button_size(close_button()->GetPreferredSize()); | 341 gfx::Size close_button_size(close_button()->GetPreferredSize()); |
| 280 content_height = std::max(content_height, close_button_size.height()); | 342 content_height = std::max(content_height, close_button_size.height()); |
| 281 | 343 |
| 282 // Size the Favicon. | 344 // Size the Favicon. |
| 283 showing_icon_ = ShouldShowIcon(); | 345 showing_icon_ = ShouldShowIcon(); |
| 284 if (showing_icon_) { | 346 if (showing_icon_) { |
| 285 // Use the size of the favicon as apps use a bigger favicon size. | 347 // Use the size of the favicon as apps use a bigger favicon size. |
| 286 int favicon_top = kTopPadding + content_height / 2 - kTabIconSize / 2; | 348 int favicon_top = GetTopPadding() + content_height / 2 - kTabIconSize / 2; |
| 287 int favicon_left = lb.x(); | 349 int favicon_left = lb.x(); |
| 288 favicon_bounds_.SetRect(favicon_left, favicon_top, | 350 favicon_bounds_.SetRect(favicon_left, favicon_top, |
| 289 kTabIconSize, kTabIconSize); | 351 kTabIconSize, kTabIconSize); |
| 290 if (data().mini && width() < kMiniTabRendererAsNormalTabWidth) { | 352 if (data().mini && width() < kMiniTabRendererAsNormalTabWidth) { |
| 291 // Adjust the location of the favicon when transitioning from a normal | 353 // Adjust the location of the favicon when transitioning from a normal |
| 292 // tab to a mini-tab. | 354 // tab to a mini-tab. |
| 293 int mini_delta = kMiniTabRendererAsNormalTabWidth - GetMiniWidth(); | 355 int mini_delta = kMiniTabRendererAsNormalTabWidth - GetMiniWidth(); |
| 294 int ideal_delta = width() - GetMiniWidth(); | 356 int ideal_delta = width() - GetMiniWidth(); |
| 295 if (ideal_delta < mini_delta) { | 357 if (ideal_delta < mini_delta) { |
| 296 int ideal_x = (GetMiniWidth() - kTabIconSize) / 2; | 358 int ideal_x = (GetMiniWidth() - kTabIconSize) / 2; |
| 297 int x = favicon_bounds_.x() + static_cast<int>( | 359 int x = favicon_bounds_.x() + static_cast<int>( |
| 298 (1 - static_cast<float>(ideal_delta) / | 360 (1 - static_cast<float>(ideal_delta) / |
| 299 static_cast<float>(mini_delta)) * | 361 static_cast<float>(mini_delta)) * |
| 300 (ideal_x - favicon_bounds_.x())); | 362 (ideal_x - favicon_bounds_.x())); |
| 301 favicon_bounds_.set_x(x); | 363 favicon_bounds_.set_x(x); |
| 302 } | 364 } |
| 303 } | 365 } |
| 304 } else { | 366 } else { |
| 305 favicon_bounds_.SetRect(lb.x(), lb.y(), 0, 0); | 367 favicon_bounds_.SetRect(lb.x(), lb.y(), 0, 0); |
| 306 } | 368 } |
| 307 | 369 |
| 308 // Size the Close button. | 370 // Size the Close button. |
| 309 showing_close_button_ = ShouldShowCloseBox(); | 371 showing_close_button_ = ShouldShowCloseBox(); |
| 310 if (showing_close_button_) { | 372 if (showing_close_button_) { |
| 311 int close_button_top = kTopPadding + kCloseButtonVertFuzz + | 373 int close_button_top = GetTopPadding() + kCloseButtonVertFuzz + |
| 312 (content_height - close_button_size.height()) / 2; | 374 (content_height - close_button_size.height()) / 2; |
| 313 // If the ratio of the close button size to tab width exceeds the maximum. | 375 // If the ratio of the close button size to tab width exceeds the maximum. |
| 314 close_button()->SetBounds(lb.width() + kCloseButtonHorzFuzz, | 376 close_button()->SetBounds(lb.width() + kCloseButtonHorzFuzz, |
| 315 close_button_top, close_button_size.width(), | 377 close_button_top, close_button_size.width(), |
| 316 close_button_size.height()); | 378 close_button_size.height()); |
| 317 close_button()->SetVisible(true); | 379 close_button()->SetVisible(true); |
| 318 } else { | 380 } else { |
| 319 close_button()->SetBounds(0, 0, 0, 0); | 381 close_button()->SetBounds(0, 0, 0, 0); |
| 320 close_button()->SetVisible(false); | 382 close_button()->SetVisible(false); |
| 321 } | 383 } |
| 322 | 384 |
| 323 int title_left = favicon_bounds_.right() + kFaviconTitleSpacing; | 385 int title_left = favicon_bounds_.right() + kFaviconTitleSpacing; |
| 324 int title_top = | 386 int title_top = GetTopPadding() + kTitleTextOffsetY + |
| 325 kTopPadding + kTitleTextOffsetY + (content_height - font_height()) / 2; | 387 (content_height - font_height()) / 2; |
| 326 // Size the Title text to fill the remaining space. | 388 // Size the Title text to fill the remaining space. |
| 327 if (!data().mini || width() >= kMiniTabRendererAsNormalTabWidth) { | 389 if (!data().mini || width() >= kMiniTabRendererAsNormalTabWidth) { |
| 328 // If the user has big fonts, the title will appear rendered too far down | 390 // If the user has big fonts, the title will appear rendered too far down |
| 329 // on the y-axis if we use the regular top padding, so we need to adjust it | 391 // on the y-axis if we use the regular top padding, so we need to adjust it |
| 330 // so that the text appears centered. | 392 // so that the text appears centered. |
| 331 gfx::Size minimum_size = GetMinimumUnselectedSize(); | 393 gfx::Size minimum_size = GetMinimumUnselectedSize(); |
| 332 int text_height = title_top + font_height() + kBottomPadding; | 394 int text_height = title_top + font_height() + GetBottomPadding(); |
| 333 if (text_height > minimum_size.height()) | 395 if (text_height > minimum_size.height()) |
| 334 title_top -= (text_height - minimum_size.height()) / 2; | 396 title_top -= (text_height - minimum_size.height()) / 2; |
| 335 | 397 |
| 336 int title_width; | 398 int title_width; |
| 337 if (close_button()->visible()) { | 399 if (close_button()->visible()) { |
| 338 title_width = std::max(close_button()->x() - | 400 title_width = std::max(close_button()->x() - |
| 339 kTitleCloseButtonSpacing - title_left, 0); | 401 kTitleCloseButtonSpacing - title_left, 0); |
| 340 } else { | 402 } else { |
| 341 title_width = std::max(lb.width() - title_left, 0); | 403 title_width = std::max(lb.width() - title_left, 0); |
| 342 } | 404 } |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 // Now draw the highlights/shadows around the tab edge. | 635 // Now draw the highlights/shadows around the tab edge. |
| 574 canvas->DrawBitmapInt(*tab_image->image_l, 0, 0); | 636 canvas->DrawBitmapInt(*tab_image->image_l, 0, 0); |
| 575 canvas->TileImageInt(*tab_image->image_c, tab_image->l_width, 0, | 637 canvas->TileImageInt(*tab_image->image_c, tab_image->l_width, 0, |
| 576 width() - tab_image->l_width - tab_image->r_width, height()); | 638 width() - tab_image->l_width - tab_image->r_width, height()); |
| 577 canvas->DrawBitmapInt(*tab_image->image_r, width() - tab_image->r_width, 0); | 639 canvas->DrawBitmapInt(*tab_image->image_r, width() - tab_image->r_width, 0); |
| 578 } | 640 } |
| 579 | 641 |
| 580 int Tab::IconCapacity() const { | 642 int Tab::IconCapacity() const { |
| 581 if (height() < GetMinimumUnselectedSize().height()) | 643 if (height() < GetMinimumUnselectedSize().height()) |
| 582 return 0; | 644 return 0; |
| 583 return (width() - kLeftPadding - kRightPadding) / kTabIconSize; | 645 return (width() - GetLeftPadding() - GetRightPadding()) / kTabIconSize; |
| 584 } | 646 } |
| 585 | 647 |
| 586 bool Tab::ShouldShowIcon() const { | 648 bool Tab::ShouldShowIcon() const { |
| 587 if (data().mini && height() >= GetMinimumUnselectedSize().height()) | 649 if (data().mini && height() >= GetMinimumUnselectedSize().height()) |
| 588 return true; | 650 return true; |
| 589 if (!data().show_icon) { | 651 if (!data().show_icon) { |
| 590 return false; | 652 return false; |
| 591 } else if (IsActive()) { | 653 } else if (IsActive()) { |
| 592 // The active tab clips favicon before close button. | 654 // The active tab clips favicon before close button. |
| 593 return IconCapacity() >= 2; | 655 return IconCapacity() >= 2; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 tab_active_.image_r = rb.GetBitmapNamed(IDR_TAB_ACTIVE_RIGHT); | 707 tab_active_.image_r = rb.GetBitmapNamed(IDR_TAB_ACTIVE_RIGHT); |
| 646 tab_active_.l_width = tab_active_.image_l->width(); | 708 tab_active_.l_width = tab_active_.image_l->width(); |
| 647 tab_active_.r_width = tab_active_.image_r->width(); | 709 tab_active_.r_width = tab_active_.image_r->width(); |
| 648 | 710 |
| 649 tab_inactive_.image_l = rb.GetBitmapNamed(IDR_TAB_INACTIVE_LEFT); | 711 tab_inactive_.image_l = rb.GetBitmapNamed(IDR_TAB_INACTIVE_LEFT); |
| 650 tab_inactive_.image_c = rb.GetBitmapNamed(IDR_TAB_INACTIVE_CENTER); | 712 tab_inactive_.image_c = rb.GetBitmapNamed(IDR_TAB_INACTIVE_CENTER); |
| 651 tab_inactive_.image_r = rb.GetBitmapNamed(IDR_TAB_INACTIVE_RIGHT); | 713 tab_inactive_.image_r = rb.GetBitmapNamed(IDR_TAB_INACTIVE_RIGHT); |
| 652 tab_inactive_.l_width = tab_inactive_.image_l->width(); | 714 tab_inactive_.l_width = tab_inactive_.image_l->width(); |
| 653 tab_inactive_.r_width = tab_inactive_.image_r->width(); | 715 tab_inactive_.r_width = tab_inactive_.image_r->width(); |
| 654 } | 716 } |
| OLD | NEW |