| 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/resource/resource_bundle.h" | 21 #include "ui/base/resource/resource_bundle.h" |
| 22 #include "ui/base/scale.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 const int GetLeftPadding() { |
| 35 static const int kLeftPadding = 21; | 38 switch (ui::GetDisplayScale()) { |
| 36 static const int kTopPadding = 8; | 39 case ui::DS_ASH: |
| 37 static const int kRightPadding = 20; | 40 return 21; |
| 38 static const int kBottomPadding = 5; | 41 case ui::DS_METRO_100: |
| 39 #else | 42 case ui::DS_METRO_140: |
| 40 static const int kLeftPadding = 16; | 43 case ui::DS_METRO_180: |
| 41 static const int kTopPadding = 6; | 44 return 20; |
| 42 static const int kRightPadding = 15; | 45 default: |
| 43 static const int kBottomPadding = 5; | 46 return 16; |
| 44 #endif | 47 } |
| 48 } |
| 49 |
| 50 const int GetTopPadding() { |
| 51 switch (ui::GetDisplayScale()) { |
| 52 case ui::DS_ASH: |
| 53 return 8; |
| 54 case ui::DS_METRO_100: |
| 55 case ui::DS_METRO_140: |
| 56 case ui::DS_METRO_180: |
| 57 return 12; |
| 58 default: |
| 59 return 6; |
| 60 } |
| 61 } |
| 62 |
| 63 const int GetRightPadding() { |
| 64 switch (ui::GetDisplayScale()) { |
| 65 case ui::DS_ASH: |
| 66 return 20; |
| 67 case ui::DS_METRO_100: |
| 68 case ui::DS_METRO_140: |
| 69 case ui::DS_METRO_180: |
| 70 return 21; |
| 71 default: |
| 72 return 15; |
| 73 } |
| 74 } |
| 75 |
| 76 const int GetBottomPadding() { |
| 77 switch (ui::GetDisplayScale()) { |
| 78 case ui::DS_METRO_100: |
| 79 case ui::DS_METRO_140: |
| 80 case ui::DS_METRO_180: |
| 81 return 7; |
| 82 case ui::DS_ASH: |
| 83 default: |
| 84 return 5; |
| 85 } |
| 86 } |
| 45 | 87 |
| 46 // Height of the shadow at the top of the tab image assets. | 88 // Height of the shadow at the top of the tab image assets. |
| 47 #if defined(USE_ASH) | 89 #if defined(USE_ASH) |
| 48 static const int kDropShadowHeight = 4; | 90 static const int kDropShadowHeight = 4; |
| 49 #else | 91 #else |
| 50 static const int kDropShadowHeight = 2; | 92 static const int kDropShadowHeight = 2; |
| 51 #endif | 93 #endif |
| 52 static const int kToolbarOverlap = 1; | 94 static const int kToolbarOverlap = 1; |
| 53 static const int kFaviconTitleSpacing = 4; | 95 static const int kFaviconTitleSpacing = 4; |
| 54 // Additional vertical offset for title text relative to top of tab. | 96 // Additional vertical offset for title text relative to top of tab. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 83 | 125 |
| 84 // How opaque to make the hover state (out of 1). | 126 // How opaque to make the hover state (out of 1). |
| 85 static const double kHoverOpacity = 0.33; | 127 static const double kHoverOpacity = 0.33; |
| 86 | 128 |
| 87 // Opacity for non-active selected tabs. | 129 // Opacity for non-active selected tabs. |
| 88 static const double kSelectedTabOpacity = .45; | 130 static const double kSelectedTabOpacity = .45; |
| 89 | 131 |
| 90 // Selected (but not active) tabs have their throb value scaled down by this. | 132 // Selected (but not active) tabs have their throb value scaled down by this. |
| 91 static const double kSelectedTabThrobScale = .5; | 133 static const double kSelectedTabThrobScale = .5; |
| 92 | 134 |
| 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. | 135 // Durations for the various parts of the mini tab title animation. |
| 98 static const int kMiniTitleChangeAnimationDuration1MS = 1600; | 136 static const int kMiniTitleChangeAnimationDuration1MS = 1600; |
| 99 static const int kMiniTitleChangeAnimationStart1MS = 0; | 137 static const int kMiniTitleChangeAnimationStart1MS = 0; |
| 100 static const int kMiniTitleChangeAnimationEnd1MS = 1900; | 138 static const int kMiniTitleChangeAnimationEnd1MS = 1900; |
| 101 static const int kMiniTitleChangeAnimationDuration2MS = 0; | 139 static const int kMiniTitleChangeAnimationDuration2MS = 0; |
| 102 static const int kMiniTitleChangeAnimationDuration3MS = 550; | 140 static const int kMiniTitleChangeAnimationDuration3MS = 550; |
| 103 static const int kMiniTitleChangeAnimationStart3MS = 150; | 141 static const int kMiniTitleChangeAnimationStart3MS = 150; |
| 104 static const int kMiniTitleChangeAnimationEnd3MS = 800; | 142 static const int kMiniTitleChangeAnimationEnd3MS = 800; |
| 105 | 143 |
| 106 // Offset from the right edge for the start of the mini title change animation. | 144 // Offset from the right edge for the start of the mini title change animation. |
| 107 static const int kMiniTitleChangeInitialXOffset = 6; | 145 static const int kMiniTitleChangeInitialXOffset = 6; |
| 108 | 146 |
| 109 // Radius of the radial gradient used for mini title change animation. | 147 // Radius of the radial gradient used for mini title change animation. |
| 110 static const int kMiniTitleChangeGradientRadius = 20; | 148 static const int kMiniTitleChangeGradientRadius = 20; |
| 111 | 149 |
| 112 // Colors of the gradient used during the mini title change animation. | 150 // Colors of the gradient used during the mini title change animation. |
| 113 static const SkColor kMiniTitleChangeGradientColor1 = SK_ColorWHITE; | 151 static const SkColor kMiniTitleChangeGradientColor1 = SK_ColorWHITE; |
| 114 static const SkColor kMiniTitleChangeGradientColor2 = | 152 static const SkColor kMiniTitleChangeGradientColor2 = |
| 115 SkColorSetARGB(0, 255, 255, 255); | 153 SkColorSetARGB(0, 255, 255, 255); |
| 116 | 154 |
| 155 } // namespace |
| 156 |
| 157 Tab::TabImage Tab::tab_alpha_ = {0}; |
| 158 Tab::TabImage Tab::tab_active_ = {0}; |
| 159 Tab::TabImage Tab::tab_inactive_ = {0}; |
| 160 |
| 117 // static | 161 // static |
| 118 const char Tab::kViewClassName[] = "browser/tabs/Tab"; | 162 const char Tab::kViewClassName[] = "browser/tabs/Tab"; |
| 119 | 163 |
| 120 //////////////////////////////////////////////////////////////////////////////// | 164 //////////////////////////////////////////////////////////////////////////////// |
| 121 // Tab, public: | 165 // Tab, public: |
| 122 | 166 |
| 123 Tab::Tab(TabController* controller) | 167 Tab::Tab(TabController* controller) |
| 124 : BaseTab(controller), | 168 : BaseTab(controller), |
| 125 showing_icon_(false), | 169 showing_icon_(false), |
| 126 showing_close_button_(false), | 170 showing_close_button_(false), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 157 void Tab::StopMiniTabTitleAnimation() { | 201 void Tab::StopMiniTabTitleAnimation() { |
| 158 if (mini_title_animation_.get()) | 202 if (mini_title_animation_.get()) |
| 159 mini_title_animation_->Stop(); | 203 mini_title_animation_->Stop(); |
| 160 } | 204 } |
| 161 | 205 |
| 162 // static | 206 // static |
| 163 gfx::Size Tab::GetBasicMinimumUnselectedSize() { | 207 gfx::Size Tab::GetBasicMinimumUnselectedSize() { |
| 164 InitTabResources(); | 208 InitTabResources(); |
| 165 | 209 |
| 166 gfx::Size minimum_size; | 210 gfx::Size minimum_size; |
| 167 minimum_size.set_width(kLeftPadding + kRightPadding); | 211 minimum_size.set_width(GetLeftPadding() + GetRightPadding()); |
| 168 // Since we use bitmap images, the real minimum height of the image is | 212 // 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. | 213 // defined most accurately by the height of the end cap images. |
| 170 minimum_size.set_height(tab_active_.image_l->height()); | 214 minimum_size.set_height(tab_active_.image_l->height()); |
| 171 return minimum_size; | 215 return minimum_size; |
| 172 } | 216 } |
| 173 | 217 |
| 174 gfx::Size Tab::GetMinimumUnselectedSize() { | 218 gfx::Size Tab::GetMinimumUnselectedSize() { |
| 175 if (TouchModeSupport::IsTouchOptimized()) | 219 if (TouchModeSupport::IsTouchOptimized()) |
| 176 return GetTouchModeMinimumSize(); | 220 return GetTouchModeMinimumSize(); |
| 177 return GetBasicMinimumUnselectedSize(); | 221 return GetBasicMinimumUnselectedSize(); |
| 178 } | 222 } |
| 179 | 223 |
| 180 // static | 224 // static |
| 181 gfx::Size Tab::GetMinimumSelectedSize() { | 225 gfx::Size Tab::GetMinimumSelectedSize() { |
| 182 if (TouchModeSupport::IsTouchOptimized()) | 226 if (TouchModeSupport::IsTouchOptimized()) |
| 183 return GetTouchModeMinimumSize(); | 227 return GetTouchModeMinimumSize(); |
| 184 gfx::Size minimum_size = GetBasicMinimumUnselectedSize(); | 228 gfx::Size minimum_size = GetBasicMinimumUnselectedSize(); |
| 185 minimum_size.set_width(kLeftPadding + gfx::kFaviconSize + kRightPadding); | 229 minimum_size.set_width( |
| 230 GetLeftPadding() + gfx::kFaviconSize + GetRightPadding()); |
| 186 return minimum_size; | 231 return minimum_size; |
| 187 } | 232 } |
| 188 | 233 |
| 189 // static | 234 // static |
| 190 gfx::Size Tab::GetStandardSize() { | 235 gfx::Size Tab::GetStandardSize() { |
| 191 gfx::Size standard_size = GetBasicMinimumUnselectedSize(); | 236 gfx::Size standard_size = GetBasicMinimumUnselectedSize(); |
| 192 standard_size.set_width( | 237 standard_size.set_width( |
| 193 standard_size.width() + kFaviconTitleSpacing + kStandardTitleWidth); | 238 standard_size.width() + kFaviconTitleSpacing + kStandardTitleWidth); |
| 194 return standard_size; | 239 return standard_size; |
| 195 } | 240 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 close_button()->SetBackground(close_button_color_, | 309 close_button()->SetBackground(close_button_color_, |
| 265 rb.GetBitmapNamed(IDR_TAB_CLOSE), | 310 rb.GetBitmapNamed(IDR_TAB_CLOSE), |
| 266 rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK)); | 311 rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK)); |
| 267 } | 312 } |
| 268 } | 313 } |
| 269 | 314 |
| 270 void Tab::Layout() { | 315 void Tab::Layout() { |
| 271 gfx::Rect lb = GetContentsBounds(); | 316 gfx::Rect lb = GetContentsBounds(); |
| 272 if (lb.IsEmpty()) | 317 if (lb.IsEmpty()) |
| 273 return; | 318 return; |
| 274 lb.Inset(kLeftPadding, kTopPadding, kRightPadding, kBottomPadding); | 319 lb.Inset( |
| 320 GetLeftPadding(), GetTopPadding(), GetRightPadding(), GetBottomPadding()); |
| 275 | 321 |
| 276 // The height of the content of the Tab is the largest of the favicon, | 322 // The height of the content of the Tab is the largest of the favicon, |
| 277 // the title text and the close button graphic. | 323 // the title text and the close button graphic. |
| 278 int content_height = std::max(kTabIconSize, font_height()); | 324 int content_height = std::max(kTabIconSize, font_height()); |
| 279 gfx::Size close_button_size(close_button()->GetPreferredSize()); | 325 gfx::Size close_button_size(close_button()->GetPreferredSize()); |
| 280 content_height = std::max(content_height, close_button_size.height()); | 326 content_height = std::max(content_height, close_button_size.height()); |
| 281 | 327 |
| 282 // Size the Favicon. | 328 // Size the Favicon. |
| 283 showing_icon_ = ShouldShowIcon(); | 329 showing_icon_ = ShouldShowIcon(); |
| 284 if (showing_icon_) { | 330 if (showing_icon_) { |
| 285 // Use the size of the favicon as apps use a bigger favicon size. | 331 // Use the size of the favicon as apps use a bigger favicon size. |
| 286 int favicon_top = kTopPadding + content_height / 2 - kTabIconSize / 2; | 332 int favicon_top = GetTopPadding() + content_height / 2 - kTabIconSize / 2; |
| 287 int favicon_left = lb.x(); | 333 int favicon_left = lb.x(); |
| 288 favicon_bounds_.SetRect(favicon_left, favicon_top, | 334 favicon_bounds_.SetRect(favicon_left, favicon_top, |
| 289 kTabIconSize, kTabIconSize); | 335 kTabIconSize, kTabIconSize); |
| 290 if (data().mini && width() < kMiniTabRendererAsNormalTabWidth) { | 336 if (data().mini && width() < kMiniTabRendererAsNormalTabWidth) { |
| 291 // Adjust the location of the favicon when transitioning from a normal | 337 // Adjust the location of the favicon when transitioning from a normal |
| 292 // tab to a mini-tab. | 338 // tab to a mini-tab. |
| 293 int mini_delta = kMiniTabRendererAsNormalTabWidth - GetMiniWidth(); | 339 int mini_delta = kMiniTabRendererAsNormalTabWidth - GetMiniWidth(); |
| 294 int ideal_delta = width() - GetMiniWidth(); | 340 int ideal_delta = width() - GetMiniWidth(); |
| 295 if (ideal_delta < mini_delta) { | 341 if (ideal_delta < mini_delta) { |
| 296 int ideal_x = (GetMiniWidth() - kTabIconSize) / 2; | 342 int ideal_x = (GetMiniWidth() - kTabIconSize) / 2; |
| 297 int x = favicon_bounds_.x() + static_cast<int>( | 343 int x = favicon_bounds_.x() + static_cast<int>( |
| 298 (1 - static_cast<float>(ideal_delta) / | 344 (1 - static_cast<float>(ideal_delta) / |
| 299 static_cast<float>(mini_delta)) * | 345 static_cast<float>(mini_delta)) * |
| 300 (ideal_x - favicon_bounds_.x())); | 346 (ideal_x - favicon_bounds_.x())); |
| 301 favicon_bounds_.set_x(x); | 347 favicon_bounds_.set_x(x); |
| 302 } | 348 } |
| 303 } | 349 } |
| 304 } else { | 350 } else { |
| 305 favicon_bounds_.SetRect(lb.x(), lb.y(), 0, 0); | 351 favicon_bounds_.SetRect(lb.x(), lb.y(), 0, 0); |
| 306 } | 352 } |
| 307 | 353 |
| 308 // Size the Close button. | 354 // Size the Close button. |
| 309 showing_close_button_ = ShouldShowCloseBox(); | 355 showing_close_button_ = ShouldShowCloseBox(); |
| 310 if (showing_close_button_) { | 356 if (showing_close_button_) { |
| 311 int close_button_top = kTopPadding + kCloseButtonVertFuzz + | 357 int close_button_top = GetTopPadding() + kCloseButtonVertFuzz + |
| 312 (content_height - close_button_size.height()) / 2; | 358 (content_height - close_button_size.height()) / 2; |
| 313 // If the ratio of the close button size to tab width exceeds the maximum. | 359 // If the ratio of the close button size to tab width exceeds the maximum. |
| 314 close_button()->SetBounds(lb.width() + kCloseButtonHorzFuzz, | 360 close_button()->SetBounds(lb.width() + kCloseButtonHorzFuzz, |
| 315 close_button_top, close_button_size.width(), | 361 close_button_top, close_button_size.width(), |
| 316 close_button_size.height()); | 362 close_button_size.height()); |
| 317 close_button()->SetVisible(true); | 363 close_button()->SetVisible(true); |
| 318 } else { | 364 } else { |
| 319 close_button()->SetBounds(0, 0, 0, 0); | 365 close_button()->SetBounds(0, 0, 0, 0); |
| 320 close_button()->SetVisible(false); | 366 close_button()->SetVisible(false); |
| 321 } | 367 } |
| 322 | 368 |
| 323 int title_left = favicon_bounds_.right() + kFaviconTitleSpacing; | 369 int title_left = favicon_bounds_.right() + kFaviconTitleSpacing; |
| 324 int title_top = | 370 int title_top = GetTopPadding() + kTitleTextOffsetY + |
| 325 kTopPadding + kTitleTextOffsetY + (content_height - font_height()) / 2; | 371 (content_height - font_height()) / 2; |
| 326 // Size the Title text to fill the remaining space. | 372 // Size the Title text to fill the remaining space. |
| 327 if (!data().mini || width() >= kMiniTabRendererAsNormalTabWidth) { | 373 if (!data().mini || width() >= kMiniTabRendererAsNormalTabWidth) { |
| 328 // If the user has big fonts, the title will appear rendered too far down | 374 // 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 | 375 // on the y-axis if we use the regular top padding, so we need to adjust it |
| 330 // so that the text appears centered. | 376 // so that the text appears centered. |
| 331 gfx::Size minimum_size = GetMinimumUnselectedSize(); | 377 gfx::Size minimum_size = GetMinimumUnselectedSize(); |
| 332 int text_height = title_top + font_height() + kBottomPadding; | 378 int text_height = title_top + font_height() + GetBottomPadding(); |
| 333 if (text_height > minimum_size.height()) | 379 if (text_height > minimum_size.height()) |
| 334 title_top -= (text_height - minimum_size.height()) / 2; | 380 title_top -= (text_height - minimum_size.height()) / 2; |
| 335 | 381 |
| 336 int title_width; | 382 int title_width; |
| 337 if (close_button()->visible()) { | 383 if (close_button()->visible()) { |
| 338 title_width = std::max(close_button()->x() - | 384 title_width = std::max(close_button()->x() - |
| 339 kTitleCloseButtonSpacing - title_left, 0); | 385 kTitleCloseButtonSpacing - title_left, 0); |
| 340 } else { | 386 } else { |
| 341 title_width = std::max(lb.width() - title_left, 0); | 387 title_width = std::max(lb.width() - title_left, 0); |
| 342 } | 388 } |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 // Now draw the highlights/shadows around the tab edge. | 619 // Now draw the highlights/shadows around the tab edge. |
| 574 canvas->DrawBitmapInt(*tab_image->image_l, 0, 0); | 620 canvas->DrawBitmapInt(*tab_image->image_l, 0, 0); |
| 575 canvas->TileImageInt(*tab_image->image_c, tab_image->l_width, 0, | 621 canvas->TileImageInt(*tab_image->image_c, tab_image->l_width, 0, |
| 576 width() - tab_image->l_width - tab_image->r_width, height()); | 622 width() - tab_image->l_width - tab_image->r_width, height()); |
| 577 canvas->DrawBitmapInt(*tab_image->image_r, width() - tab_image->r_width, 0); | 623 canvas->DrawBitmapInt(*tab_image->image_r, width() - tab_image->r_width, 0); |
| 578 } | 624 } |
| 579 | 625 |
| 580 int Tab::IconCapacity() const { | 626 int Tab::IconCapacity() const { |
| 581 if (height() < GetMinimumUnselectedSize().height()) | 627 if (height() < GetMinimumUnselectedSize().height()) |
| 582 return 0; | 628 return 0; |
| 583 return (width() - kLeftPadding - kRightPadding) / kTabIconSize; | 629 return (width() - GetLeftPadding() - GetRightPadding()) / kTabIconSize; |
| 584 } | 630 } |
| 585 | 631 |
| 586 bool Tab::ShouldShowIcon() const { | 632 bool Tab::ShouldShowIcon() const { |
| 587 if (data().mini && height() >= GetMinimumUnselectedSize().height()) | 633 if (data().mini && height() >= GetMinimumUnselectedSize().height()) |
| 588 return true; | 634 return true; |
| 589 if (!data().show_icon) { | 635 if (!data().show_icon) { |
| 590 return false; | 636 return false; |
| 591 } else if (IsActive()) { | 637 } else if (IsActive()) { |
| 592 // The active tab clips favicon before close button. | 638 // The active tab clips favicon before close button. |
| 593 return IconCapacity() >= 2; | 639 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); | 691 tab_active_.image_r = rb.GetBitmapNamed(IDR_TAB_ACTIVE_RIGHT); |
| 646 tab_active_.l_width = tab_active_.image_l->width(); | 692 tab_active_.l_width = tab_active_.image_l->width(); |
| 647 tab_active_.r_width = tab_active_.image_r->width(); | 693 tab_active_.r_width = tab_active_.image_r->width(); |
| 648 | 694 |
| 649 tab_inactive_.image_l = rb.GetBitmapNamed(IDR_TAB_INACTIVE_LEFT); | 695 tab_inactive_.image_l = rb.GetBitmapNamed(IDR_TAB_INACTIVE_LEFT); |
| 650 tab_inactive_.image_c = rb.GetBitmapNamed(IDR_TAB_INACTIVE_CENTER); | 696 tab_inactive_.image_c = rb.GetBitmapNamed(IDR_TAB_INACTIVE_CENTER); |
| 651 tab_inactive_.image_r = rb.GetBitmapNamed(IDR_TAB_INACTIVE_RIGHT); | 697 tab_inactive_.image_r = rb.GetBitmapNamed(IDR_TAB_INACTIVE_RIGHT); |
| 652 tab_inactive_.l_width = tab_inactive_.image_l->width(); | 698 tab_inactive_.l_width = tab_inactive_.image_l->width(); |
| 653 tab_inactive_.r_width = tab_inactive_.image_r->width(); | 699 tab_inactive_.r_width = tab_inactive_.image_r->width(); |
| 654 } | 700 } |
| OLD | NEW |