Index: chrome/browser/ui/views/infobars/infobar_view.cc |
=================================================================== |
--- chrome/browser/ui/views/infobars/infobar_view.cc (revision 75777) |
+++ chrome/browser/ui/views/infobars/infobar_view.cc (working copy) |
@@ -7,6 +7,7 @@ |
#include "base/message_loop.h" |
#include "base/utf_string_conversions.h" |
#include "chrome/browser/ui/views/infobars/infobar_background.h" |
+#include "chrome/browser/ui/views/infobars/infobar_button_border.h" |
#include "chrome/browser/ui/views/infobars/infobar_container.h" |
#include "chrome/browser/tab_contents/infobar_delegate.h" |
#include "grit/generated_resources.h" |
@@ -17,12 +18,20 @@ |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/gfx/canvas_skia_paint.h" |
#include "views/controls/button/image_button.h" |
+#include "views/controls/button/menu_button.h" |
+#include "views/controls/button/text_button.h" |
#include "views/controls/image_view.h" |
#include "views/controls/label.h" |
+#include "views/controls/link.h" |
#include "views/focus/external_focus_tracker.h" |
#include "views/widget/widget.h" |
#if defined(OS_WIN) |
+#include <shellapi.h> |
+ |
+#include "base/win/win_util.h" |
+#include "base/win/windows_version.h" |
+#include "ui/gfx/icon_util.h" |
#include "ui/base/win/hwnd_util.h" |
#endif |
@@ -158,6 +167,80 @@ |
InfoBarView::~InfoBarView() { |
} |
+// static |
+views::Label* InfoBarView::CreateLabel(const string16& text) { |
+ views::Label* label = new views::Label(UTF16ToWideHack(text), |
+ ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::MediumFont)); |
+ label->SetColor(SK_ColorBLACK); |
+ label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
+ return label; |
+} |
+ |
+// static |
+views::Link* InfoBarView::CreateLink(const string16& text, |
+ views::LinkController* controller, |
+ const SkColor& background_color) { |
+ views::Link* link = new views::Link; |
+ link->SetText(UTF16ToWideHack(text)); |
+ link->SetFont( |
+ ResourceBundle::GetSharedInstance().GetFont(ResourceBundle::MediumFont)); |
+ link->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
+ link->SetController(controller); |
+ link->MakeReadableOverBackgroundColor(background_color); |
+ return link; |
+} |
+ |
+// static |
+views::MenuButton* InfoBarView::CreateMenuButton( |
+ const string16& text, |
+ bool normal_has_border, |
+ views::ViewMenuDelegate* menu_delegate) { |
+ views::MenuButton* menu_button = |
+ new views::MenuButton(NULL, UTF16ToWideHack(text), menu_delegate, true); |
+ menu_button->set_border(new InfoBarButtonBorder); |
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
+ menu_button->set_menu_marker( |
+ rb.GetBitmapNamed(IDR_INFOBARBUTTON_MENU_DROPARROW)); |
+ if (normal_has_border) { |
+ menu_button->SetNormalHasBorder(true); |
+ menu_button->SetAnimationDuration(0); |
+ } |
+ menu_button->SetEnabledColor(SK_ColorBLACK); |
+ menu_button->SetHighlightColor(SK_ColorBLACK); |
+ menu_button->SetHoverColor(SK_ColorBLACK); |
+ menu_button->SetFont(rb.GetFont(ResourceBundle::MediumFont)); |
+ return menu_button; |
+} |
+ |
+// static |
+views::TextButton* InfoBarView::CreateTextButton( |
+ views::ButtonListener* listener, |
+ const string16& text, |
+ bool needs_elevation) { |
+ views::TextButton* text_button = |
+ new views::TextButton(listener, UTF16ToWideHack(text)); |
+ text_button->set_border(new InfoBarButtonBorder); |
+ text_button->SetNormalHasBorder(true); |
+ text_button->SetAnimationDuration(0); |
+ text_button->SetEnabledColor(SK_ColorBLACK); |
+ text_button->SetHighlightColor(SK_ColorBLACK); |
+ text_button->SetHoverColor(SK_ColorBLACK); |
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
+ text_button->SetFont(rb.GetFont(ResourceBundle::MediumFont)); |
+#if defined(OS_WIN) |
+ if (needs_elevation && |
+ (base::win::GetVersion() >= base::win::VERSION_VISTA) && |
+ base::win::UserAccountControlIsEnabled()) { |
+ SHSTOCKICONINFO icon_info = { sizeof SHSTOCKICONINFO }; |
+ SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGSI_SMALLICON, &icon_info); |
+ text_button->SetIcon(*IconUtil::CreateSkBitmapFromHICON(icon_info.hIcon, |
+ gfx::Size(GetSystemMetrics(SM_CXSMICON), |
+ GetSystemMetrics(SM_CYSMICON)))); |
+ } |
+#endif |
+ return text_button; |
+} |
+ |
void InfoBarView::Layout() { |
gfx::Size button_size = close_button_->GetPreferredSize(); |
close_button_->SetBounds(width() - kHorizontalPadding - button_size.width(), |