| 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/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/debug/alias.h" | 10 #include "base/debug/alias.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "chrome/browser/defaults.h" | 12 #include "chrome/browser/defaults.h" |
| 13 #include "chrome/browser/themes/theme_properties.h" | 13 #include "chrome/browser/themes/theme_properties.h" |
| 14 #include "chrome/browser/ui/browser.h" | 14 #include "chrome/browser/ui/browser.h" |
| 15 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" | 15 #include "chrome/browser/ui/tab_contents/core_tab_helper.h" |
| 16 #include "chrome/browser/ui/tabs/tab_resources.h" | 16 #include "chrome/browser/ui/tabs/tab_resources.h" |
| 17 #include "chrome/browser/ui/view_ids.h" | 17 #include "chrome/browser/ui/view_ids.h" |
| 18 #include "chrome/browser/ui/views/tabs/tab_controller.h" | 18 #include "chrome/browser/ui/views/tabs/tab_controller.h" |
| 19 #include "chrome/browser/ui/views/tabs/tab_paint_util.h" |
| 19 #include "chrome/browser/ui/views/theme_image_mapper.h" | 20 #include "chrome/browser/ui/views/theme_image_mapper.h" |
| 20 #include "chrome/browser/ui/views/touch_uma/touch_uma.h" | 21 #include "chrome/browser/ui/views/touch_uma/touch_uma.h" |
| 21 #include "chrome/common/chrome_switches.h" | 22 #include "chrome/common/chrome_switches.h" |
| 22 #include "grit/generated_resources.h" | 23 #include "grit/generated_resources.h" |
| 23 #include "grit/theme_resources.h" | 24 #include "grit/theme_resources.h" |
| 24 #include "grit/ui_resources.h" | 25 #include "grit/ui_resources.h" |
| 25 #include "third_party/skia/include/effects/SkGradientShader.h" | 26 #include "third_party/skia/include/effects/SkGradientShader.h" |
| 26 #include "ui/base/accessibility/accessible_view_state.h" | 27 #include "ui/base/accessibility/accessible_view_state.h" |
| 27 #include "ui/base/animation/animation_container.h" | 28 #include "ui/base/animation/animation_container.h" |
| 28 #include "ui/base/animation/multi_animation.h" | 29 #include "ui/base/animation/multi_animation.h" |
| (...skipping 1196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1225 // And then the gradient on top of that. | 1226 // And then the gradient on top of that. |
| 1226 if (animation->current_part_index() == 2) { | 1227 if (animation->current_part_index() == 2) { |
| 1227 uint8 alpha = animation->CurrentValueBetween(255, 0); | 1228 uint8 alpha = animation->CurrentValueBetween(255, 0); |
| 1228 canvas->DrawImageInt(hover_image, 0, 0, alpha); | 1229 canvas->DrawImageInt(hover_image, 0, 0, alpha); |
| 1229 } else { | 1230 } else { |
| 1230 canvas->DrawImageInt(hover_image, 0, 0); | 1231 canvas->DrawImageInt(hover_image, 0, 0); |
| 1231 } | 1232 } |
| 1232 } | 1233 } |
| 1233 | 1234 |
| 1234 void Tab::PaintInactiveTabBackground(gfx::Canvas* canvas) { | 1235 void Tab::PaintInactiveTabBackground(gfx::Canvas* canvas) { |
| 1235 int tab_id; | 1236 int background_id; |
| 1236 int frame_id; | 1237 int background_overlay_id; |
| 1237 views::Widget* widget = GetWidget(); | 1238 views::Widget* widget = GetWidget(); |
| 1238 GetTabIdAndFrameId(widget, &tab_id, &frame_id); | 1239 GetInactiveBackgroundIdAndOverlayId(widget, &background_id, |
| 1240 &background_overlay_id); |
| 1239 | 1241 |
| 1240 // Explicitly map the id so we cache correctly. | 1242 // Explicitly map the id so we cache correctly. |
| 1241 const chrome::HostDesktopType host_desktop_type = GetHostDesktopType(this); | 1243 const chrome::HostDesktopType host_desktop_type = GetHostDesktopType(this); |
| 1242 tab_id = chrome::MapThemeImage(host_desktop_type, tab_id); | 1244 background_id = chrome::MapThemeImage(host_desktop_type, background_id); |
| 1243 | 1245 |
| 1244 // HasCustomImage() is only true if the theme provides the image. However, | 1246 // HasCustomImage() is only true if the theme provides the image. However, |
| 1245 // even if the theme does not provide a tab background, the theme machinery | 1247 // even if the theme does not provide a tab background, the theme machinery |
| 1246 // will make one if given a frame image. | 1248 // will make one if given a frame image. |
| 1247 ui::ThemeProvider* theme_provider = GetThemeProvider(); | 1249 ui::ThemeProvider* theme_provider = GetThemeProvider(); |
| 1248 const bool theme_provided_image = theme_provider->HasCustomImage(tab_id) || | 1250 const bool theme_provided_image = |
| 1249 (frame_id != 0 && theme_provider->HasCustomImage(frame_id)); | 1251 theme_provider->HasCustomImage(IDR_THEME_FRAME) || |
| 1252 theme_provider->HasCustomImage(background_id) || |
| 1253 theme_provider->HasCustomImage(background_overlay_id); |
| 1250 | 1254 |
| 1251 const bool can_cache = !theme_provided_image && | 1255 const bool can_cache = !theme_provided_image && |
| 1252 !hover_controller_.ShouldDraw(); | 1256 !hover_controller_.ShouldDraw(); |
| 1253 | 1257 |
| 1254 if (can_cache) { | 1258 if (can_cache) { |
| 1259 // The default theme does not provide background overlay images. |
| 1255 gfx::ImageSkia cached_image( | 1260 gfx::ImageSkia cached_image( |
| 1256 GetCachedImage(tab_id, size(), canvas->scale_factor())); | 1261 GetCachedImage(background_id, size(), canvas->scale_factor())); |
| 1257 if (cached_image.width() == 0) { | 1262 if (cached_image.width() == 0) { |
| 1258 gfx::Canvas tmp_canvas(size(), canvas->scale_factor(), false); | 1263 gfx::Canvas tmp_canvas(size(), canvas->scale_factor(), false); |
| 1259 PaintInactiveTabBackgroundUsingResourceId(&tmp_canvas, tab_id); | 1264 PaintInactiveTabBackgroundUsingResourceIds(&tmp_canvas, background_id, |
| 1265 background_overlay_id); |
| 1260 cached_image = gfx::ImageSkia(tmp_canvas.ExtractImageRep()); | 1266 cached_image = gfx::ImageSkia(tmp_canvas.ExtractImageRep()); |
| 1261 SetCachedImage(tab_id, canvas->scale_factor(), cached_image); | 1267 SetCachedImage(background_id, canvas->scale_factor(), cached_image); |
| 1262 } | 1268 } |
| 1263 canvas->DrawImageInt(cached_image, 0, 0); | 1269 canvas->DrawImageInt(cached_image, 0, 0); |
| 1264 } else { | 1270 } else { |
| 1265 PaintInactiveTabBackgroundUsingResourceId(canvas, tab_id); | 1271 PaintInactiveTabBackgroundUsingResourceIds(canvas, background_id, |
| 1272 background_overlay_id); |
| 1266 } | 1273 } |
| 1267 } | 1274 } |
| 1268 | 1275 |
| 1269 void Tab::PaintInactiveTabBackgroundUsingResourceId(gfx::Canvas* canvas, | 1276 void Tab::PaintInactiveTabBackgroundUsingResourceIds( |
| 1270 int tab_id) { | 1277 gfx::Canvas* canvas, |
| 1278 int background_id, |
| 1279 int background_overlay_id) { |
| 1271 // WARNING: the inactive tab background may be cached. If you change what it | 1280 // WARNING: the inactive tab background may be cached. If you change what it |
| 1272 // is drawn from you may need to update whether it can be cached. | 1281 // is drawn from you may need to update whether it can be cached. |
| 1273 | 1282 |
| 1274 // The tab image needs to be lined up with the background image | 1283 // The tab image needs to be lined up with the background image |
| 1275 // so that it feels partially transparent. These offsets represent the tab | 1284 // so that it feels partially transparent. This offset represents the tab |
| 1276 // position within the frame background image. | 1285 // position within the frame background image. |
| 1277 int offset = GetMirroredX() + background_offset_.x(); | 1286 int offset = GetMirroredX() + background_offset_.x(); |
| 1278 | 1287 |
| 1279 gfx::ImageSkia* tab_bg = GetThemeProvider()->GetImageSkiaNamed(tab_id); | 1288 ui::ThemeProvider* tp = GetThemeProvider(); |
| 1280 | |
| 1281 TabImage* tab_image = &tab_active_; | 1289 TabImage* tab_image = &tab_active_; |
| 1282 TabImage* tab_inactive_image = &tab_inactive_; | 1290 TabImage* tab_inactive_image = &tab_inactive_; |
| 1283 TabImage* alpha = &tab_alpha_; | 1291 TabImage* alpha = &tab_alpha_; |
| 1284 | 1292 |
| 1285 // If the theme is providing a custom background image, then its top edge | |
| 1286 // should be at the top of the tab. Otherwise, we assume that the background | |
| 1287 // image is a composited foreground + frame image. | |
| 1288 int bg_offset_y = GetThemeProvider()->HasCustomImage(tab_id) ? | |
| 1289 0 : background_offset_.y(); | |
| 1290 | |
| 1291 // We need a gfx::Canvas object to be able to extract the image from. | 1293 // We need a gfx::Canvas object to be able to extract the image from. |
| 1292 // We draw everything to this canvas and then output it to the canvas | 1294 // We draw everything to this canvas and then output it to the canvas |
| 1293 // parameter in addition to using it to mask the hover glow if needed. | 1295 // parameter in addition to using it to mask the hover glow if needed. |
| 1294 gfx::Canvas background_canvas(size(), canvas->scale_factor(), false); | 1296 gfx::Canvas background_canvas(size(), canvas->scale_factor(), false); |
| 1295 | 1297 |
| 1296 // Draw left edge. Don't draw over the toolbar, as we're not the foreground | 1298 // Draw left edge. Don't draw over the toolbar, as we're not the foreground |
| 1297 // tab. | 1299 // tab. |
| 1298 gfx::ImageSkia tab_l = gfx::ImageSkiaOperations::CreateTiledImage( | 1300 gfx::ImageSkia tab_l = TabPaintUtil::CreateTiledInactiveBackground(tp, |
| 1299 *tab_bg, offset, bg_offset_y, tab_image->l_width, height()); | 1301 background_id, background_overlay_id, background_offset_.y(), offset, 0, |
| 1302 tab_image->l_width, height()); |
| 1300 gfx::ImageSkia theme_l = | 1303 gfx::ImageSkia theme_l = |
| 1301 gfx::ImageSkiaOperations::CreateMaskedImage(tab_l, *alpha->image_l); | 1304 gfx::ImageSkiaOperations::CreateMaskedImage(tab_l, *alpha->image_l); |
| 1302 background_canvas.DrawImageInt(theme_l, | 1305 background_canvas.DrawImageInt(theme_l, |
| 1303 0, 0, theme_l.width(), theme_l.height() - kToolbarOverlap, | 1306 0, 0, theme_l.width(), theme_l.height() - kToolbarOverlap, |
| 1304 0, 0, theme_l.width(), theme_l.height() - kToolbarOverlap, | 1307 0, 0, theme_l.width(), theme_l.height() - kToolbarOverlap, |
| 1305 false); | 1308 false); |
| 1306 | 1309 |
| 1307 // Draw right edge. Again, don't draw over the toolbar. | 1310 // Draw right edge. Again, don't draw over the toolbar. |
| 1308 gfx::ImageSkia tab_r = gfx::ImageSkiaOperations::CreateTiledImage(*tab_bg, | 1311 gfx::ImageSkia tab_r = TabPaintUtil::CreateTiledInactiveBackground(tp, |
| 1309 offset + width() - tab_image->r_width, bg_offset_y, | 1312 background_id, background_overlay_id, background_offset_.y(), |
| 1310 tab_image->r_width, height()); | 1313 offset + width() - tab_image->r_width, 0, tab_image->r_width, height()); |
| 1311 gfx::ImageSkia theme_r = | 1314 gfx::ImageSkia theme_r = |
| 1312 gfx::ImageSkiaOperations::CreateMaskedImage(tab_r, *alpha->image_r); | 1315 gfx::ImageSkiaOperations::CreateMaskedImage(tab_r, *alpha->image_r); |
| 1313 background_canvas.DrawImageInt(theme_r, | 1316 background_canvas.DrawImageInt(theme_r, |
| 1314 0, 0, theme_r.width(), theme_r.height() - kToolbarOverlap, | 1317 0, 0, theme_r.width(), theme_r.height() - kToolbarOverlap, |
| 1315 width() - theme_r.width(), 0, theme_r.width(), | 1318 width() - theme_r.width(), 0, theme_r.width(), |
| 1316 theme_r.height() - kToolbarOverlap, false); | 1319 theme_r.height() - kToolbarOverlap, false); |
| 1317 | 1320 |
| 1318 // Draw center. Instead of masking out the top portion we simply skip over | 1321 // Draw center. Instead of masking out the top portion we simply skip over |
| 1319 // it by incrementing by GetDropShadowHeight(), since it's a simple | 1322 // it by incrementing by drop_shadow_height(), since it's a simple |
| 1320 // rectangle. And again, don't draw over the toolbar. | 1323 // rectangle. And again, don't draw over the toolbar. |
| 1321 background_canvas.TileImageInt(*tab_bg, | 1324 gfx::ImageSkia tab_c = TabPaintUtil::CreateTiledInactiveBackground(tp, |
| 1322 offset + tab_image->l_width, | 1325 background_id, |
| 1323 bg_offset_y + drop_shadow_height(), | 1326 background_overlay_id, |
| 1324 tab_image->l_width, | 1327 background_offset_.y(), |
| 1325 drop_shadow_height(), | 1328 offset + tab_image->l_width, |
| 1326 width() - tab_image->l_width - tab_image->r_width, | 1329 drop_shadow_height(), |
| 1327 height() - drop_shadow_height() - kToolbarOverlap); | 1330 width() - tab_image->l_width - tab_image->r_width, |
| 1331 height() - drop_shadow_height() - kToolbarOverlap); |
| 1332 background_canvas.DrawImageInt(tab_c, tab_image->l_width, |
| 1333 drop_shadow_height()); |
| 1328 | 1334 |
| 1329 canvas->DrawImageInt( | 1335 canvas->DrawImageInt( |
| 1330 gfx::ImageSkia(background_canvas.ExtractImageRep()), 0, 0); | 1336 gfx::ImageSkia(background_canvas.ExtractImageRep()), 0, 0); |
| 1331 | 1337 |
| 1332 if (!GetThemeProvider()->HasCustomImage(tab_id) && | 1338 if (!tp->HasCustomImage(background_overlay_id) && |
| 1333 hover_controller_.ShouldDraw()) { | 1339 hover_controller_.ShouldDraw()) { |
| 1334 hover_controller_.Draw(canvas, gfx::ImageSkia( | 1340 hover_controller_.Draw(canvas, gfx::ImageSkia( |
| 1335 background_canvas.ExtractImageRep())); | 1341 background_canvas.ExtractImageRep())); |
| 1336 } | 1342 } |
| 1337 | 1343 |
| 1338 // Now draw the highlights/shadows around the tab edge. | 1344 // Now draw the highlights/shadows around the tab edge. |
| 1339 canvas->DrawImageInt(*tab_inactive_image->image_l, 0, 0); | 1345 canvas->DrawImageInt(*tab_inactive_image->image_l, 0, 0); |
| 1340 canvas->TileImageInt(*tab_inactive_image->image_c, | 1346 canvas->TileImageInt(*tab_inactive_image->image_c, |
| 1341 tab_inactive_image->l_width, 0, | 1347 tab_inactive_image->l_width, 0, |
| 1342 width() - tab_inactive_image->l_width - | 1348 width() - tab_inactive_image->l_width - |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1489 gfx::ImageSkia projection_glow( | 1495 gfx::ImageSkia projection_glow( |
| 1490 *tp->GetImageSkiaNamed(IDR_TAB_CAPTURE_GLOW)); | 1496 *tp->GetImageSkiaNamed(IDR_TAB_CAPTURE_GLOW)); |
| 1491 DrawIconCenter(canvas, projection_glow, 0, projection_glow.width(), | 1497 DrawIconCenter(canvas, projection_glow, 0, projection_glow.width(), |
| 1492 projection_glow.height(), glow_bounds, false, paint); | 1498 projection_glow.height(), glow_bounds, false, paint); |
| 1493 } else if (data().capture_state == TabRendererData::CAPTURE_STATE_RECORDING) { | 1499 } else if (data().capture_state == TabRendererData::CAPTURE_STATE_RECORDING) { |
| 1494 // If recording, fade the recording icon on top of the favicon with a mask | 1500 // If recording, fade the recording icon on top of the favicon with a mask |
| 1495 // around/behind it. | 1501 // around/behind it. |
| 1496 gfx::ImageSkia recording_dot(*tp->GetImageSkiaNamed(IDR_TAB_RECORDING)); | 1502 gfx::ImageSkia recording_dot(*tp->GetImageSkiaNamed(IDR_TAB_RECORDING)); |
| 1497 gfx::ImageSkia recording_dot_mask( | 1503 gfx::ImageSkia recording_dot_mask( |
| 1498 *tp->GetImageSkiaNamed(IDR_TAB_RECORDING_MASK)); | 1504 *tp->GetImageSkiaNamed(IDR_TAB_RECORDING_MASK)); |
| 1499 gfx::ImageSkia tab_background; | |
| 1500 if (IsActive()) { | |
| 1501 tab_background = *tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR); | |
| 1502 } else { | |
| 1503 int tab_id; | |
| 1504 int frame_id_dummy; | |
| 1505 views::Widget* widget = GetWidget(); | |
| 1506 GetTabIdAndFrameId(widget, &tab_id, &frame_id_dummy); | |
| 1507 tab_background = *tp->GetImageSkiaNamed(tab_id); | |
| 1508 } | |
| 1509 | 1505 |
| 1510 // This is the offset from the favicon bottom right corner for the mask, | 1506 // This is the offset from the favicon bottom right corner for the mask, |
| 1511 // given that the recording dot is drawn in the bottom right corner. | 1507 // given that the recording dot is drawn in the bottom right corner. |
| 1512 int mask_offset_from_right = recording_dot.width() + | 1508 int mask_offset_from_right = recording_dot.width() + |
| 1513 (recording_dot_mask.width() - recording_dot.width()) / 2; | 1509 (recording_dot_mask.width() - recording_dot.width()) / 2; |
| 1514 int mask_offset_from_bottom = recording_dot.height() + | 1510 int mask_offset_from_bottom = recording_dot.height() + |
| 1515 (recording_dot_mask.height() - recording_dot.height()) / 2; | 1511 (recording_dot_mask.height() - recording_dot.height()) / 2; |
| 1516 | 1512 |
| 1517 int mask_dst_x = bounds.x() + bounds.width() - mask_offset_from_right; | 1513 int mask_dst_x = bounds.x() + bounds.width() - mask_offset_from_right; |
| 1518 int mask_dst_y = bounds.y() + bounds.height() - mask_offset_from_bottom; | 1514 int mask_dst_y = bounds.y() + bounds.height() - mask_offset_from_bottom; |
| 1519 | 1515 |
| 1520 // Crop the background image at the correct position and create a mask | 1516 // Crop the background image at the correct position and create a mask |
| 1521 // from the background. | 1517 // from the background. |
| 1522 int offset_x = GetMirroredX() + background_offset_.x() + mask_dst_x; | 1518 int offset_x = GetMirroredX() + background_offset_.x() + mask_dst_x; |
| 1523 int offset_y = mask_dst_y; | 1519 int offset_y = mask_dst_y; |
| 1524 gfx::ImageSkia tab_background_cropped = | 1520 gfx::ImageSkia tab_background_cropped; |
| 1525 gfx::ImageSkiaOperations::CreateTiledImage( | 1521 if (IsActive()) { |
| 1526 tab_background, offset_x, offset_y, | 1522 gfx::ImageSkia tab_background = *tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR); |
| 1527 recording_dot_mask.width(), recording_dot_mask.height()); | 1523 tab_background_cropped = gfx::ImageSkiaOperations::CreateTiledImage( |
| 1524 tab_background, offset_x, offset_y, |
| 1525 recording_dot_mask.width(), recording_dot_mask.height()); |
| 1526 } else { |
| 1527 int background_id; |
| 1528 int background_overlay_id; |
| 1529 views::Widget* widget = GetWidget(); |
| 1530 GetInactiveBackgroundIdAndOverlayId(widget, &background_id, |
| 1531 &background_overlay_id); |
| 1532 |
| 1533 tab_background_cropped = TabPaintUtil::CreateTiledInactiveBackground(tp, |
| 1534 background_id, background_overlay_id, background_offset_.y(), |
| 1535 offset_x, offset_y, recording_dot_mask.width(), |
| 1536 recording_dot_mask.height()); |
| 1537 } |
| 1528 gfx::ImageSkia recording_dot_mask_with_bg = | 1538 gfx::ImageSkia recording_dot_mask_with_bg = |
| 1529 gfx::ImageSkiaOperations::CreateMaskedImage(tab_background_cropped, | 1539 gfx::ImageSkiaOperations::CreateMaskedImage(tab_background_cropped, |
| 1530 recording_dot_mask); | 1540 recording_dot_mask); |
| 1531 | 1541 |
| 1532 // Draw the mask. | 1542 // Draw the mask. |
| 1533 DrawIconAtLocation(canvas, recording_dot_mask_with_bg, 0, | 1543 DrawIconAtLocation(canvas, recording_dot_mask_with_bg, 0, |
| 1534 mask_dst_x, mask_dst_y, | 1544 mask_dst_x, mask_dst_y, |
| 1535 recording_dot_mask.width(), | 1545 recording_dot_mask.width(), |
| 1536 recording_dot_mask.height(), | 1546 recording_dot_mask.height(), |
| 1537 false, SkPaint()); | 1547 false, SkPaint()); |
| 1538 | 1548 |
| 1539 // Potentially draw an alpha of the active bg image. | 1549 // Potentially draw an alpha of the active bg image. |
| 1540 double throb_value = GetThrobValue(); | 1550 double throb_value = GetThrobValue(); |
| 1541 if (!IsActive() && throb_value > 0) { | 1551 if (!IsActive() && throb_value > 0) { |
| 1542 tab_background = *tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR); | 1552 gfx::ImageSkia tab_background = |
| 1553 *tp->GetImageSkiaNamed(IDR_THEME_TOOLBAR); |
| 1543 tab_background_cropped = gfx::ImageSkiaOperations::CreateTiledImage( | 1554 tab_background_cropped = gfx::ImageSkiaOperations::CreateTiledImage( |
| 1544 tab_background, offset_x, offset_y, | 1555 tab_background, offset_x, offset_y, |
| 1545 recording_dot_mask.width(), recording_dot_mask.height()); | 1556 recording_dot_mask.width(), recording_dot_mask.height()); |
| 1546 recording_dot_mask_with_bg = gfx::ImageSkiaOperations::CreateMaskedImage( | 1557 recording_dot_mask_with_bg = gfx::ImageSkiaOperations::CreateMaskedImage( |
| 1547 tab_background_cropped, recording_dot_mask); | 1558 tab_background_cropped, recording_dot_mask); |
| 1548 | 1559 |
| 1549 canvas->SaveLayerAlpha(static_cast<int>(throb_value * 0xff), | 1560 canvas->SaveLayerAlpha(static_cast<int>(throb_value * 0xff), |
| 1550 GetLocalBounds()); | 1561 GetLocalBounds()); |
| 1551 DrawIconAtLocation(canvas, recording_dot_mask_with_bg, 0, | 1562 DrawIconAtLocation(canvas, recording_dot_mask_with_bg, 0, |
| 1552 mask_dst_x, mask_dst_y, | 1563 mask_dst_x, mask_dst_y, |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1737 // The main bar is as wide as the normal tab's horizontal top line. | 1748 // The main bar is as wide as the normal tab's horizontal top line. |
| 1738 // This top line of the tab extends a few pixels left and right of the | 1749 // This top line of the tab extends a few pixels left and right of the |
| 1739 // center image due to pixels in the rounded corner images. | 1750 // center image due to pixels in the rounded corner images. |
| 1740 const int kBarPadding = 1; | 1751 const int kBarPadding = 1; |
| 1741 int main_bar_left = tab_active_.l_width - kBarPadding; | 1752 int main_bar_left = tab_active_.l_width - kBarPadding; |
| 1742 int main_bar_right = width() - tab_active_.r_width + kBarPadding; | 1753 int main_bar_right = width() - tab_active_.r_width + kBarPadding; |
| 1743 return gfx::Rect( | 1754 return gfx::Rect( |
| 1744 main_bar_left, 0, main_bar_right - main_bar_left, kImmersiveBarHeight); | 1755 main_bar_left, 0, main_bar_right - main_bar_left, kImmersiveBarHeight); |
| 1745 } | 1756 } |
| 1746 | 1757 |
| 1747 void Tab::GetTabIdAndFrameId(views::Widget* widget, | 1758 void Tab::GetInactiveBackgroundIdAndOverlayId( |
| 1748 int* tab_id, | 1759 views::Widget* widget, |
| 1749 int* frame_id) const { | 1760 int* background_id, |
| 1761 int* background_overlay_id) const { |
| 1750 if (widget && widget->GetTopLevelWidget()->ShouldUseNativeFrame()) { | 1762 if (widget && widget->GetTopLevelWidget()->ShouldUseNativeFrame()) { |
| 1751 *tab_id = IDR_THEME_TAB_BACKGROUND_V; | 1763 *background_id = IDR_THEME_TAB_BACKGROUND_V; |
| 1752 *frame_id = 0; | 1764 *background_overlay_id = IDR_THEME_TAB_BACKGROUND_V_OVERLAY; |
| 1753 } else if (data().incognito) { | 1765 } else if (data().incognito) { |
| 1754 *tab_id = IDR_THEME_TAB_BACKGROUND_INCOGNITO; | 1766 *background_id = IDR_THEME_TAB_BACKGROUND_INCOGNITO; |
| 1755 *frame_id = IDR_THEME_FRAME_INCOGNITO; | 1767 *background_overlay_id = IDR_THEME_TAB_BACKGROUND_INCOGNITO_OVERLAY; |
| 1756 #if defined(OS_WIN) | 1768 #if defined(OS_WIN) |
| 1757 } else if (win8::IsSingleWindowMetroMode()) { | 1769 } else if (win8::IsSingleWindowMetroMode()) { |
| 1758 *tab_id = IDR_THEME_TAB_BACKGROUND_V; | 1770 *background_id = IDR_THEME_TAB_BACKGROUND_V; |
| 1759 *frame_id = 0; | 1771 *background_overlay_id = IDR_THEME_TAB_BACKGROUND_V_OVERLAY; |
| 1760 #endif | 1772 #endif |
| 1761 } else { | 1773 } else { |
| 1762 *tab_id = IDR_THEME_TAB_BACKGROUND; | 1774 *background_id = IDR_THEME_TAB_BACKGROUND; |
| 1763 *frame_id = IDR_THEME_FRAME; | 1775 *background_overlay_id = IDR_THEME_TAB_BACKGROUND_OVERLAY; |
| 1764 } | 1776 } |
| 1765 } | 1777 } |
| 1766 | 1778 |
| 1767 //////////////////////////////////////////////////////////////////////////////// | 1779 //////////////////////////////////////////////////////////////////////////////// |
| 1768 // Tab, private static: | 1780 // Tab, private static: |
| 1769 | 1781 |
| 1770 // static | 1782 // static |
| 1771 void Tab::InitTabResources() { | 1783 void Tab::InitTabResources() { |
| 1772 static bool initialized = false; | 1784 static bool initialized = false; |
| 1773 if (initialized) | 1785 if (initialized) |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1826 const gfx::ImageSkia& image) { | 1838 const gfx::ImageSkia& image) { |
| 1827 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE); | 1839 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE); |
| 1828 ImageCacheEntry entry; | 1840 ImageCacheEntry entry; |
| 1829 entry.resource_id = resource_id; | 1841 entry.resource_id = resource_id; |
| 1830 entry.scale_factor = scale_factor; | 1842 entry.scale_factor = scale_factor; |
| 1831 entry.image = image; | 1843 entry.image = image; |
| 1832 image_cache_->push_front(entry); | 1844 image_cache_->push_front(entry); |
| 1833 if (image_cache_->size() > kMaxImageCacheSize) | 1845 if (image_cache_->size() > kMaxImageCacheSize) |
| 1834 image_cache_->pop_back(); | 1846 image_cache_->pop_back(); |
| 1835 } | 1847 } |
| OLD | NEW |