Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: chrome/browser/views/tabs/tab_renderer.cc

Issue 155882: Make the tab close button color match the tab text.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/views/tabs/tab_renderer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/views/tabs/tab_renderer.h" 5 #include "chrome/browser/views/tabs/tab_renderer.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "app/gfx/canvas.h" 9 #include "app/gfx/canvas.h"
10 #include "app/gfx/font.h" 10 #include "app/gfx/font.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 // How long the pulse throb takes. 47 // How long the pulse throb takes.
48 static const int kPulseDurationMs = 200; 48 static const int kPulseDurationMs = 200;
49 49
50 // How opaque to make the hover state (out of 1). 50 // How opaque to make the hover state (out of 1).
51 static const double kHoverOpacity = 0.33; 51 static const double kHoverOpacity = 0.33;
52 52
53 // TODO(beng): (Cleanup) This stuff should move onto the class. 53 // TODO(beng): (Cleanup) This stuff should move onto the class.
54 static gfx::Font* title_font = NULL; 54 static gfx::Font* title_font = NULL;
55 static int title_font_height = 0; 55 static int title_font_height = 0;
56 static SkBitmap* close_button_n = NULL; 56 static SkBitmap* close_button_n = NULL;
57 static SkBitmap* close_button_m = NULL;
57 static SkBitmap* close_button_h = NULL; 58 static SkBitmap* close_button_h = NULL;
58 static SkBitmap* close_button_p = NULL; 59 static SkBitmap* close_button_p = NULL;
59 static int close_button_height = 0; 60 static int close_button_height = 0;
60 static int close_button_width = 0; 61 static int close_button_width = 0;
61 62
62 static SkBitmap* waiting_animation_frames = NULL; 63 static SkBitmap* waiting_animation_frames = NULL;
63 static SkBitmap* loading_animation_frames = NULL; 64 static SkBitmap* loading_animation_frames = NULL;
64 static SkBitmap* crashed_fav_icon = NULL; 65 static SkBitmap* crashed_fav_icon = NULL;
65 static int loading_animation_frame_count = 0; 66 static int loading_animation_frame_count = 0;
66 static int waiting_animation_frame_count = 0; 67 static int waiting_animation_frame_count = 0;
67 static int waiting_to_loading_frame_count_ratio = 0; 68 static int waiting_to_loading_frame_count_ratio = 0;
68 69
69 TabRenderer::TabImage TabRenderer::tab_alpha = {0}; 70 TabRenderer::TabImage TabRenderer::tab_alpha = {0};
70 TabRenderer::TabImage TabRenderer::tab_active = {0}; 71 TabRenderer::TabImage TabRenderer::tab_active = {0};
71 TabRenderer::TabImage TabRenderer::tab_inactive = {0}; 72 TabRenderer::TabImage TabRenderer::tab_inactive = {0};
72 73
73 namespace { 74 namespace {
74 75
75 void InitResources() { 76 void InitResources() {
76 static bool initialized = false; 77 static bool initialized = false;
77 if (!initialized) { 78 if (!initialized) {
78 // TODO(glen): Allow theming of these. 79 // TODO(glen): Allow theming of these.
79 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 80 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
80 title_font = new gfx::Font(rb.GetFont(ResourceBundle::BaseFont)); 81 title_font = new gfx::Font(rb.GetFont(ResourceBundle::BaseFont));
81 title_font_height = title_font->height(); 82 title_font_height = title_font->height();
82 83
83 close_button_n = rb.GetBitmapNamed(IDR_TAB_CLOSE); 84 close_button_n = rb.GetBitmapNamed(IDR_TAB_CLOSE);
85 close_button_m = rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK);
84 close_button_h = rb.GetBitmapNamed(IDR_TAB_CLOSE_H); 86 close_button_h = rb.GetBitmapNamed(IDR_TAB_CLOSE_H);
85 close_button_p = rb.GetBitmapNamed(IDR_TAB_CLOSE_P); 87 close_button_p = rb.GetBitmapNamed(IDR_TAB_CLOSE_P);
86 close_button_width = close_button_n->width(); 88 close_button_width = close_button_n->width();
87 close_button_height = close_button_n->height(); 89 close_button_height = close_button_n->height();
88 90
89 TabRenderer::LoadTabImages(); 91 TabRenderer::LoadTabImages();
90 92
91 // The loading animation image is a strip of states. Each state must be 93 // The loading animation image is a strip of states. Each state must be
92 // square, so the height must divide the width evenly. 94 // square, so the height must divide the width evenly.
93 loading_animation_frames = rb.GetBitmapNamed(IDR_THROBBER); 95 loading_animation_frames = rb.GetBitmapNamed(IDR_THROBBER);
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 227
226 //////////////////////////////////////////////////////////////////////////////// 228 ////////////////////////////////////////////////////////////////////////////////
227 // TabRenderer, public: 229 // TabRenderer, public:
228 230
229 TabRenderer::TabRenderer() 231 TabRenderer::TabRenderer()
230 : animation_state_(ANIMATION_NONE), 232 : animation_state_(ANIMATION_NONE),
231 animation_frame_(0), 233 animation_frame_(0),
232 showing_icon_(false), 234 showing_icon_(false),
233 showing_close_button_(false), 235 showing_close_button_(false),
234 fav_icon_hiding_offset_(0), 236 fav_icon_hiding_offset_(0),
237 close_button_color_(NULL),
235 crash_animation_(NULL), 238 crash_animation_(NULL),
236 should_display_crashed_favicon_(false), 239 should_display_crashed_favicon_(false),
237 theme_provider_(NULL) { 240 theme_provider_(NULL) {
238 InitResources(); 241 InitResources();
239 242
240 // Add the Close Button. 243 // Add the Close Button.
241 close_button_ = new TabCloseButton(this); 244 close_button_ = new TabCloseButton(this);
242 close_button_->SetImage(views::CustomButton::BS_NORMAL, close_button_n); 245 close_button_->SetImage(views::CustomButton::BS_NORMAL, close_button_n);
243 close_button_->SetImage(views::CustomButton::BS_HOT, close_button_h); 246 close_button_->SetImage(views::CustomButton::BS_HOT, close_button_h);
244 close_button_->SetImage(views::CustomButton::BS_PUSHED, close_button_p); 247 close_button_->SetImage(views::CustomButton::BS_PUSHED, close_button_p);
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
474 // Size the Close button. 477 // Size the Close button.
475 showing_close_button_ = ShouldShowCloseBox(); 478 showing_close_button_ = ShouldShowCloseBox();
476 if (showing_close_button_) { 479 if (showing_close_button_) {
477 int close_button_top = 480 int close_button_top =
478 kTopPadding + kCloseButtonVertFuzz + 481 kTopPadding + kCloseButtonVertFuzz +
479 (content_height - close_button_height) / 2; 482 (content_height - close_button_height) / 2;
480 // If the ratio of the close button size to tab width exceeds the maximum. 483 // If the ratio of the close button size to tab width exceeds the maximum.
481 close_button_->SetBounds(lb.width() + kCloseButtonHorzFuzz, 484 close_button_->SetBounds(lb.width() + kCloseButtonHorzFuzz,
482 close_button_top, close_button_width, 485 close_button_top, close_button_width,
483 close_button_height); 486 close_button_height);
487
488 // If the close button color has changed, generate a new one.
489 SkColor tab_text_color =
490 GetThemeProvider()->GetColor(BrowserThemeProvider::COLOR_TAB_TEXT);
491 if (!close_button_color_ || tab_text_color != close_button_color_) {
492 close_button_color_ = tab_text_color;
493 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
494 close_button_->SetBackground(close_button_color_,
495 rb.GetBitmapNamed(IDR_TAB_CLOSE),
496 rb.GetBitmapNamed(IDR_TAB_CLOSE_MASK));
497 }
498
484 close_button_->SetVisible(true); 499 close_button_->SetVisible(true);
485 } else { 500 } else {
486 close_button_->SetBounds(0, 0, 0, 0); 501 close_button_->SetBounds(0, 0, 0, 0);
487 close_button_->SetVisible(false); 502 close_button_->SetVisible(false);
488 } 503 }
489 504
490 // Size the Title text to fill the remaining space. 505 // Size the Title text to fill the remaining space.
491 int title_left = favicon_bounds_.right() + kFavIconTitleSpacing; 506 int title_left = favicon_bounds_.right() + kFavIconTitleSpacing;
492 int title_top = kTopPadding + (content_height - title_font_height) / 2; 507 int title_top = kTopPadding + (content_height - title_font_height) / 2;
493 508
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 tab_inactive.image_l = rb.GetBitmapNamed(IDR_TAB_INACTIVE_LEFT); 810 tab_inactive.image_l = rb.GetBitmapNamed(IDR_TAB_INACTIVE_LEFT);
796 tab_inactive.image_c = rb.GetBitmapNamed(IDR_TAB_INACTIVE_CENTER); 811 tab_inactive.image_c = rb.GetBitmapNamed(IDR_TAB_INACTIVE_CENTER);
797 tab_inactive.image_r = rb.GetBitmapNamed(IDR_TAB_INACTIVE_RIGHT); 812 tab_inactive.image_r = rb.GetBitmapNamed(IDR_TAB_INACTIVE_RIGHT);
798 813
799 tab_inactive.l_width = tab_inactive.image_l->width(); 814 tab_inactive.l_width = tab_inactive.image_l->width();
800 tab_inactive.r_width = tab_inactive.image_r->width(); 815 tab_inactive.r_width = tab_inactive.image_r->width();
801 816
802 loading_animation_frames = rb.GetBitmapNamed(IDR_THROBBER); 817 loading_animation_frames = rb.GetBitmapNamed(IDR_THROBBER);
803 waiting_animation_frames = rb.GetBitmapNamed(IDR_THROBBER_WAITING); 818 waiting_animation_frames = rb.GetBitmapNamed(IDR_THROBBER_WAITING);
804 } 819 }
OLDNEW
« no previous file with comments | « chrome/browser/views/tabs/tab_renderer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698