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

Unified Diff: chrome/browser/ui/views/infobars/one_click_signin_infobar.cc

Issue 10911169: Setup field trial for one-click signin inforbar. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/infobars/one_click_signin_infobar.cc
diff --git a/chrome/browser/ui/views/infobars/one_click_signin_infobar.cc b/chrome/browser/ui/views/infobars/one_click_signin_infobar.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d96373fc436e7c73943cb89f0eded521c057ec13
--- /dev/null
+++ b/chrome/browser/ui/views/infobars/one_click_signin_infobar.cc
@@ -0,0 +1,147 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/infobars/one_click_signin_infobar.h"
+
+#include "chrome/browser/api/infobars/one_click_signin_infobar_delegate.h"
+#include "chrome/browser/defaults.h"
+#include "chrome/browser/infobars/infobar_tab_helper.h"
+#include "chrome/browser/ui/views/infobars/infobar_background.h"
+#include "third_party/skia/include/core/SkColor.h"
+#include "third_party/skia/include/core/SkPaint.h"
+#include "third_party/skia/include/core/SkRect.h"
+#include "third_party/skia/include/core/SkScalar.h"
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/skia_util.h"
+#include "ui/views/border.h"
+#include "ui/views/controls/button/custom_button.h"
+#include "ui/views/controls/button/text_button.h"
+
+namespace {
+
+// Preferred padding between text and edge.
+const int kPreferredPaddingHorizontal = 6;
+
+// A border used for infobar buttons using a custom colour.
+class InfoBarColoredButtonBorder : public views::Border {
+ public:
+ InfoBarColoredButtonBorder(SkColor background_color,
+ SkColor border_color);
+
+ private:
+ // A helper function to easily perform colour darkening from the
+ // constructor initializer list.
+ static SkColor DarkenColor(SkColor color);
+
+ // Border overrides:
+ virtual void Paint(const views::View& view,
+ gfx::Canvas* canvas) const OVERRIDE;
+ virtual void GetInsets(gfx::Insets* insets) const OVERRIDE;
+
+ virtual ~InfoBarColoredButtonBorder();
+
+ const SkColor background_color_;
+ const SkColor border_color_;
+ const SkColor border_color_hot_;
+
+ DISALLOW_COPY_AND_ASSIGN(InfoBarColoredButtonBorder);
+};
+
+InfoBarColoredButtonBorder::InfoBarColoredButtonBorder(
+ SkColor background_color,
+ SkColor border_color)
+ : background_color_(background_color),
+ border_color_(border_color),
+ border_color_hot_(DarkenColor(border_color_)) {
+}
+
+// static
+SkColor InfoBarColoredButtonBorder::DarkenColor(SkColor color) {
+ SkScalar hsv[3];
+ SkColorToHSV(color, hsv);
+ hsv[2] *= 0.8f;
+ return SkHSVToColor(255, hsv);
+}
+
+void InfoBarColoredButtonBorder::Paint(const views::View& view,
+ gfx::Canvas* canvas) const {
+ const views::CustomButton* button =
+ static_cast<const views::CustomButton*>(&view);
+ const views::CustomButton::ButtonState state = button->state();
+
+ const SkScalar kRadius = 2.0;
+
+ SkRect bounds(gfx::RectToSkRect(view.GetLocalBounds()));
+ bounds.inset(0.5, 0.5);
+
+ SkPaint paint;
+ paint.setAntiAlias(true);
+
+ paint.setStyle(SkPaint::kFill_Style);
+ paint.setColor(background_color_);
+ canvas->sk_canvas()->drawRoundRect(bounds, kRadius, kRadius, paint);
+
+ paint.setStyle(SkPaint::kStroke_Style);
+ paint.setColor(state == views::CustomButton::BS_NORMAL ?
+ border_color_ : border_color_hot_);
+ canvas->sk_canvas()->drawRoundRect(bounds, kRadius, kRadius, paint);
+}
+
+void InfoBarColoredButtonBorder::GetInsets(gfx::Insets* insets) const {
+ insets->Set(browser_defaults::kInfoBarBorderPaddingVertical,
+ kPreferredPaddingHorizontal,
+ browser_defaults::kInfoBarBorderPaddingVertical,
+ kPreferredPaddingHorizontal);
+}
+
+InfoBarColoredButtonBorder::~InfoBarColoredButtonBorder() {
+}
+
+} // namespace
+
+
+// OneClickSigninInfoBarDelegate ----------------------------------------------
+
+InfoBar* OneClickSigninInfoBarDelegate::CreateInfoBar(InfoBarService* owner) {
+ return new OneClickSigninInfoBar(static_cast<InfoBarTabHelper*>(owner), this);
+}
+
+
+// OneClickLoginInfoBar -------------------------------------------------------
+
+OneClickSigninInfoBar::OneClickSigninInfoBar(
+ InfoBarTabHelper* owner,
+ OneClickSigninInfoBarDelegate* delegate)
+ : ConfirmInfoBar(owner, delegate),
+ one_click_delegate_(delegate) {
+ CHECK(one_click_delegate_);
+}
+
+OneClickSigninInfoBar::~OneClickSigninInfoBar() {
+}
+
+void OneClickSigninInfoBar::ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) {
+ const bool fix_color = is_add && child == this && ok_button() == NULL;
+
+ ConfirmInfoBar::ViewHierarchyChanged(is_add, parent, child);
+
+ if (!fix_color || ok_button() == NULL)
+ return;
+
+ OneClickSigninInfoBarDelegate::AlternateColors alt_colors;
+ one_click_delegate_->GetAlternateColors(&alt_colors);
+ if (!alt_colors.enabled)
+ return;
+
+ set_background(new InfoBarBackground(alt_colors.infobar_top_color,
+ alt_colors.infobar_bottom_color));
+ ok_button()->set_border(new InfoBarColoredButtonBorder(
+ alt_colors.button_background_color,
+ alt_colors.button_border_color));
+ ok_button()->SetEnabledColor(alt_colors.button_text_color);
+ ok_button()->SetHighlightColor(alt_colors.button_text_color);
+ ok_button()->SetHoverColor(alt_colors.button_text_color);
+}

Powered by Google App Engine
This is Rietveld 408576698