OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/sad_tab_view.h" | 5 #include "chrome/browser/ui/views/sad_tab_view.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "chrome/browser/google/google_util.h" | 10 #include "chrome/browser/google/google_util.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "third_party/skia/include/effects/SkGradientShader.h" | 21 #include "third_party/skia/include/effects/SkGradientShader.h" |
22 | 22 |
23 static const int kSadTabOffset = -64; | 23 static const int kSadTabOffset = -64; |
24 static const int kIconTitleSpacing = 20; | 24 static const int kIconTitleSpacing = 20; |
25 static const int kTitleMessageSpacing = 15; | 25 static const int kTitleMessageSpacing = 15; |
26 static const int kMessageBottomMargin = 20; | 26 static const int kMessageBottomMargin = 20; |
27 static const float kMessageSize = 0.65f; | 27 static const float kMessageSize = 0.65f; |
28 static const SkColor kTitleColor = SK_ColorWHITE; | 28 static const SkColor kTitleColor = SK_ColorWHITE; |
29 static const SkColor kMessageColor = SK_ColorWHITE; | 29 static const SkColor kMessageColor = SK_ColorWHITE; |
30 static const SkColor kLinkColor = SK_ColorWHITE; | 30 static const SkColor kLinkColor = SK_ColorWHITE; |
31 static const SkColor kBackgroundColor = SkColorSetRGB(35, 48, 64); | 31 static const SkColor kCrashBackgroundColor = SkColorSetRGB(35, 48, 64); |
32 static const SkColor kBackgroundEndColor = SkColorSetRGB(35, 48, 64); | 32 static const SkColor kCrashBackgroundEndColor = SkColorSetRGB(35, 48, 64); |
| 33 // TODO(gspencer): update these colors when the UI team has picked |
| 34 // official versions. See http://crosbug.com/10711. |
| 35 static const SkColor kKillBackgroundColor = SkColorSetRGB(57, 48, 88); |
| 36 static const SkColor kKillBackgroundEndColor = SkColorSetRGB(57, 48, 88); |
33 | 37 |
34 // Font size correction. | 38 // Font size correction. |
35 #if defined(CROS_FONTS_USING_BCI) | 39 #if defined(CROS_FONTS_USING_BCI) |
36 static const int kTitleFontSizeDelta = 1; | 40 static const int kTitleFontSizeDelta = 1; |
37 static const int kMessageFontSizeDelta = 0; | 41 static const int kMessageFontSizeDelta = 0; |
38 #else | 42 #else |
39 static const int kTitleFontSizeDelta = 2; | 43 static const int kTitleFontSizeDelta = 2; |
40 static const int kMessageFontSizeDelta = 1; | 44 static const int kMessageFontSizeDelta = 1; |
41 #endif | 45 #endif |
42 | 46 |
43 // static | 47 // static |
44 SkBitmap* SadTabView::sad_tab_bitmap_ = NULL; | 48 SkBitmap* SadTabView::sad_tab_bitmap_ = NULL; |
45 gfx::Font* SadTabView::title_font_ = NULL; | 49 gfx::Font* SadTabView::title_font_ = NULL; |
46 gfx::Font* SadTabView::message_font_ = NULL; | 50 gfx::Font* SadTabView::message_font_ = NULL; |
47 std::wstring SadTabView::title_; | 51 std::wstring SadTabView::title_; |
48 std::wstring SadTabView::message_; | 52 std::wstring SadTabView::message_; |
49 int SadTabView::title_width_; | 53 int SadTabView::title_width_; |
50 | 54 |
51 SadTabView::SadTabView(TabContents* tab_contents) | 55 SadTabView::SadTabView(TabContents* tab_contents, Kind kind) |
52 : tab_contents_(tab_contents), | 56 : tab_contents_(tab_contents), |
53 learn_more_link_(NULL) { | 57 learn_more_link_(NULL), |
| 58 kind_(kind) { |
54 DCHECK(tab_contents); | 59 DCHECK(tab_contents); |
55 | 60 |
56 InitClass(); | 61 InitClass(kind); |
57 | 62 |
58 if (tab_contents != NULL) { | 63 if (tab_contents != NULL) { |
59 learn_more_link_ = | 64 learn_more_link_ = |
60 new views::Link(UTF16ToWide(l10n_util::GetStringUTF16(IDS_LEARN_MORE))); | 65 new views::Link(UTF16ToWide(l10n_util::GetStringUTF16(IDS_LEARN_MORE))); |
61 learn_more_link_->SetFont(*message_font_); | 66 learn_more_link_->SetFont(*message_font_); |
62 learn_more_link_->SetNormalColor(kLinkColor); | 67 learn_more_link_->SetNormalColor(kLinkColor); |
63 learn_more_link_->SetController(this); | 68 learn_more_link_->SetController(this); |
64 AddChildView(learn_more_link_); | 69 AddChildView(learn_more_link_); |
65 } | 70 } |
66 } | 71 } |
67 | 72 |
68 void SadTabView::Paint(gfx::Canvas* canvas) { | 73 void SadTabView::Paint(gfx::Canvas* canvas) { |
69 SkPaint paint; | 74 SkPaint paint; |
70 SkSafeUnref(paint.setShader(gfx::CreateGradientShader(0, height(), | 75 SkSafeUnref(paint.setShader( |
71 kBackgroundColor, | 76 gfx::CreateGradientShader( |
72 kBackgroundEndColor))); | 77 0, |
| 78 height(), |
| 79 kind_ == CRASHED ? kCrashBackgroundColor : kKillBackgroundColor, |
| 80 kind_ == CRASHED ? |
| 81 kCrashBackgroundEndColor : kKillBackgroundEndColor))); |
73 paint.setStyle(SkPaint::kFill_Style); | 82 paint.setStyle(SkPaint::kFill_Style); |
74 canvas->AsCanvasSkia()->drawRectCoords( | 83 canvas->AsCanvasSkia()->drawRectCoords( |
75 0, 0, SkIntToScalar(width()), SkIntToScalar(height()), paint); | 84 0, 0, SkIntToScalar(width()), SkIntToScalar(height()), paint); |
76 | 85 |
77 canvas->DrawBitmapInt(*sad_tab_bitmap_, icon_bounds_.x(), icon_bounds_.y()); | 86 canvas->DrawBitmapInt(*sad_tab_bitmap_, icon_bounds_.x(), icon_bounds_.y()); |
78 | 87 |
79 canvas->DrawStringInt(WideToUTF16Hack(title_), *title_font_, kTitleColor, | 88 canvas->DrawStringInt(WideToUTF16Hack(title_), *title_font_, kTitleColor, |
80 title_bounds_.x(), title_bounds_.y(), | 89 title_bounds_.x(), title_bounds_.y(), |
81 title_bounds_.width(), title_bounds_.height(), | 90 title_bounds_.width(), title_bounds_.height(), |
82 gfx::Canvas::TEXT_ALIGN_CENTER); | 91 gfx::Canvas::TEXT_ALIGN_CENTER); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 gfx::Insets insets = learn_more_link_->GetInsets(); | 126 gfx::Insets insets = learn_more_link_->GetInsets(); |
118 link_bounds_.SetRect((width() - sz.width()) / 2, | 127 link_bounds_.SetRect((width() - sz.width()) / 2, |
119 message_bounds_.bottom() + kTitleMessageSpacing - | 128 message_bounds_.bottom() + kTitleMessageSpacing - |
120 insets.top(), sz.width(), sz.height()); | 129 insets.top(), sz.width(), sz.height()); |
121 } | 130 } |
122 } | 131 } |
123 | 132 |
124 void SadTabView::LinkActivated(views::Link* source, int event_flags) { | 133 void SadTabView::LinkActivated(views::Link* source, int event_flags) { |
125 if (tab_contents_ != NULL && source == learn_more_link_) { | 134 if (tab_contents_ != NULL && source == learn_more_link_) { |
126 GURL help_url = | 135 GURL help_url = |
127 google_util::AppendGoogleLocaleParam(GURL(chrome::kCrashReasonURL)); | 136 google_util::AppendGoogleLocaleParam(GURL(kind_ == CRASHED ? |
| 137 chrome::kCrashReasonURL : |
| 138 chrome::kKillReasonURL)); |
128 WindowOpenDisposition disposition(CURRENT_TAB); | 139 WindowOpenDisposition disposition(CURRENT_TAB); |
129 #if defined(OS_CHROMEOS) | 140 #if defined(OS_CHROMEOS) |
130 if (tab_contents_->delegate() && | 141 if (tab_contents_->delegate() && |
131 tab_contents_->delegate()->IsPopup(tab_contents_)) { | 142 tab_contents_->delegate()->IsPopup(tab_contents_)) { |
132 // Popup windows are generally too small to effectively show help, | 143 // Popup windows are generally too small to effectively show help, |
133 // so open the help content in a new foregreound tab. | 144 // so open the help content in a new foregreound tab. |
134 disposition = NEW_FOREGROUND_TAB; | 145 disposition = NEW_FOREGROUND_TAB; |
135 } | 146 } |
136 #endif | 147 #endif |
137 tab_contents_->OpenURL(help_url, GURL(), disposition, PageTransition::LINK); | 148 tab_contents_->OpenURL(help_url, GURL(), disposition, PageTransition::LINK); |
138 } | 149 } |
139 } | 150 } |
140 | 151 |
141 // static | 152 // static |
142 void SadTabView::InitClass() { | 153 void SadTabView::InitClass(Kind kind) { |
143 static bool initialized = false; | 154 static bool initialized = false; |
144 if (!initialized) { | 155 if (!initialized) { |
145 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 156 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
146 title_font_ = new gfx::Font( | 157 title_font_ = new gfx::Font( |
147 rb.GetFont(ResourceBundle::BaseFont).DeriveFont(kTitleFontSizeDelta, | 158 rb.GetFont(ResourceBundle::BaseFont).DeriveFont(kTitleFontSizeDelta, |
148 gfx::Font::BOLD)); | 159 gfx::Font::BOLD)); |
149 message_font_ = new gfx::Font( | 160 message_font_ = new gfx::Font( |
150 rb.GetFont(ResourceBundle::BaseFont).DeriveFont(kMessageFontSizeDelta)); | 161 rb.GetFont(ResourceBundle::BaseFont).DeriveFont(kMessageFontSizeDelta)); |
151 sad_tab_bitmap_ = rb.GetBitmapNamed(IDR_SAD_TAB); | 162 sad_tab_bitmap_ = rb.GetBitmapNamed( |
| 163 kind == CRASHED ? IDR_SAD_TAB : IDR_KILLED_TAB); |
152 | 164 |
153 title_ = UTF16ToWide(l10n_util::GetStringUTF16(IDS_SAD_TAB_TITLE)); | 165 title_ = UTF16ToWide(l10n_util::GetStringUTF16( |
| 166 kind == CRASHED ? IDS_SAD_TAB_TITLE : IDS_KILLED_TAB_TITLE)); |
154 title_width_ = title_font_->GetStringWidth(WideToUTF16Hack(title_)); | 167 title_width_ = title_font_->GetStringWidth(WideToUTF16Hack(title_)); |
155 message_ = UTF16ToWide(l10n_util::GetStringUTF16(IDS_SAD_TAB_MESSAGE)); | 168 message_ = UTF16ToWide(l10n_util::GetStringUTF16( |
| 169 kind == CRASHED ? IDS_SAD_TAB_MESSAGE : IDS_KILLED_TAB_MESSAGE)); |
156 | 170 |
157 initialized = true; | 171 initialized = true; |
158 } | 172 } |
159 } | 173 } |
OLD | NEW |