| 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" |
| (...skipping 1207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1218 // should be at the top of the tab. Otherwise, we assume that the background | 1218 // should be at the top of the tab. Otherwise, we assume that the background |
| 1219 // image is a composited foreground + frame image. | 1219 // image is a composited foreground + frame image. |
| 1220 const int y_offset = GetThemeProvider()->HasCustomImage(tab_id) ? | 1220 const int y_offset = GetThemeProvider()->HasCustomImage(tab_id) ? |
| 1221 0 : background_offset_.y(); | 1221 0 : background_offset_.y(); |
| 1222 | 1222 |
| 1223 const gfx::Insets tab_insets(GetLayoutInsets(TAB)); | 1223 const gfx::Insets tab_insets(GetLayoutInsets(TAB)); |
| 1224 // Don't draw over the toolbar, but do include the 1 px divider stroke at the | 1224 // Don't draw over the toolbar, but do include the 1 px divider stroke at the |
| 1225 // bottom. | 1225 // bottom. |
| 1226 const int toolbar_overlap = tab_insets.bottom() - 1; | 1226 const int toolbar_overlap = tab_insets.bottom() - 1; |
| 1227 | 1227 |
| 1228 const SkScalar radius = SkFloatToScalar(width() / 3.f); |
| 1229 const bool draw_hover = hover_controller_.ShouldDraw() && radius > 0; |
| 1230 SkPoint hover_location(PointToSkPoint(hover_controller_.location())); |
| 1231 const SkAlpha hover_alpha = hover_controller_.GetAlpha(); |
| 1232 |
| 1228 // Draw everything to a temporary canvas so we can extract an image for use in | 1233 // Draw everything to a temporary canvas so we can extract an image for use in |
| 1229 // masking the hover glow. | 1234 // masking the hover glow. |
| 1230 gfx::Canvas background_canvas(size(), canvas->image_scale(), false); | 1235 gfx::Canvas background_canvas(size(), canvas->image_scale(), false); |
| 1231 | 1236 |
| 1232 // Draw left edge. | 1237 // Draw left edge. |
| 1233 gfx::ImageSkia tab_l = gfx::ImageSkiaOperations::CreateTiledImage( | 1238 gfx::ImageSkia tab_l = gfx::ImageSkiaOperations::CreateTiledImage( |
| 1234 *tab_background, x_offset, y_offset, mask_images_.l_width, height()); | 1239 *tab_background, x_offset, y_offset, mask_images_.l_width, height()); |
| 1235 gfx::ImageSkia theme_l = | 1240 gfx::ImageSkia theme_l = |
| 1236 gfx::ImageSkiaOperations::CreateMaskedImage(tab_l, *mask_images_.image_l); | 1241 gfx::ImageSkiaOperations::CreateMaskedImage(tab_l, *mask_images_.image_l); |
| 1237 background_canvas.DrawImageInt( | 1242 background_canvas.DrawImageInt( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1253 // it by incrementing by the top padding, since it's a simple rectangle. | 1258 // it by incrementing by the top padding, since it's a simple rectangle. |
| 1254 background_canvas.TileImageInt( | 1259 background_canvas.TileImageInt( |
| 1255 *tab_background, x_offset + mask_images_.l_width, | 1260 *tab_background, x_offset + mask_images_.l_width, |
| 1256 y_offset + tab_insets.top(), mask_images_.l_width, tab_insets.top(), | 1261 y_offset + tab_insets.top(), mask_images_.l_width, tab_insets.top(), |
| 1257 width() - mask_images_.l_width - mask_images_.r_width, | 1262 width() - mask_images_.l_width - mask_images_.r_width, |
| 1258 height() - tab_insets.top() - toolbar_overlap); | 1263 height() - tab_insets.top() - toolbar_overlap); |
| 1259 | 1264 |
| 1260 gfx::ImageSkia background_image(background_canvas.ExtractImageRep()); | 1265 gfx::ImageSkia background_image(background_canvas.ExtractImageRep()); |
| 1261 canvas->DrawImageInt(background_image, 0, 0); | 1266 canvas->DrawImageInt(background_image, 0, 0); |
| 1262 | 1267 |
| 1263 if (!GetThemeProvider()->HasCustomImage(tab_id) && | 1268 if (draw_hover) { |
| 1264 hover_controller_.ShouldDraw()) | 1269 gfx::Canvas hover_canvas(size(), canvas->image_scale(), false); |
| 1265 hover_controller_.Draw(canvas, background_image); | 1270 DrawHighlight(&hover_canvas, hover_location, radius, hover_alpha); |
| 1271 gfx::ImageSkia result = gfx::ImageSkiaOperations::CreateMaskedImage( |
| 1272 gfx::ImageSkia(hover_canvas.ExtractImageRep()), background_image); |
| 1273 canvas->DrawImageInt(result, 0, 0); |
| 1274 } |
| 1266 | 1275 |
| 1267 // Now draw the stroke, highlights, and shadows around the tab edge. | 1276 // Now draw the stroke, highlights, and shadows around the tab edge. |
| 1268 TabImages* stroke_images = &inactive_images_; | 1277 TabImages* stroke_images = &inactive_images_; |
| 1269 canvas->DrawImageInt(*stroke_images->image_l, 0, 0); | 1278 canvas->DrawImageInt(*stroke_images->image_l, 0, 0); |
| 1270 canvas->TileImageInt( | 1279 canvas->TileImageInt( |
| 1271 *stroke_images->image_c, stroke_images->l_width, 0, | 1280 *stroke_images->image_c, stroke_images->l_width, 0, |
| 1272 width() - stroke_images->l_width - stroke_images->r_width, height()); | 1281 width() - stroke_images->l_width - stroke_images->r_width, height()); |
| 1273 canvas->DrawImageInt(*stroke_images->image_r, | 1282 canvas->DrawImageInt(*stroke_images->image_r, |
| 1274 width() - stroke_images->r_width, 0); | 1283 width() - stroke_images->r_width, 0); |
| 1275 } | 1284 } |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1582 const gfx::ImageSkia& image) { | 1591 const gfx::ImageSkia& image) { |
| 1583 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE); | 1592 DCHECK_NE(scale_factor, ui::SCALE_FACTOR_NONE); |
| 1584 ImageCacheEntry entry; | 1593 ImageCacheEntry entry; |
| 1585 entry.resource_id = resource_id; | 1594 entry.resource_id = resource_id; |
| 1586 entry.scale_factor = scale_factor; | 1595 entry.scale_factor = scale_factor; |
| 1587 entry.image = image; | 1596 entry.image = image; |
| 1588 image_cache_->push_front(entry); | 1597 image_cache_->push_front(entry); |
| 1589 if (image_cache_->size() > kMaxImageCacheSize) | 1598 if (image_cache_->size() > kMaxImageCacheSize) |
| 1590 image_cache_->pop_back(); | 1599 image_cache_->pop_back(); |
| 1591 } | 1600 } |
| OLD | NEW |