This source file includes following definitions.
- Paint
- GetInsets
- GetMinimumSize
- browser_view_
- OnMousePressed
- UpdateLabelStyle
- SetLabelOnRight
#include "chrome/browser/ui/views/avatar_label.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/themes/theme_properties.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/theme_provider.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/color_utils.h"
#include "ui/views/painter.h"
namespace {
class AvatarLabelBorder : public views::Border {
public:
explicit AvatarLabelBorder(bool label_on_right);
virtual void Paint(const views::View& view, gfx::Canvas* canvas) OVERRIDE;
virtual gfx::Insets GetInsets() const OVERRIDE;
virtual gfx::Size GetMinimumSize() const OVERRIDE;
private:
scoped_ptr<views::Painter> painter_;
gfx::Insets insets_;
DISALLOW_COPY_AND_ASSIGN(AvatarLabelBorder);
};
AvatarLabelBorder::AvatarLabelBorder(bool label_on_right) {
const int kHorizontalInsetRight = label_on_right ? 43 : 10;
const int kHorizontalInsetLeft = label_on_right ? 10 : 43;
const int kVerticalInsetTop = 2;
const int kVerticalInsetBottom = 3;
const int difference = std::max<int>(0, 13 - gfx::FontList().GetFontSize());
const int addToTop = difference / 2;
const int addToBottom = difference - addToTop;
insets_ = gfx::Insets(kVerticalInsetTop + addToTop,
kHorizontalInsetLeft,
kVerticalInsetBottom + addToBottom,
kHorizontalInsetRight);
const int kImages[] = IMAGE_GRID(IDR_MANAGED_USER_LABEL);
painter_.reset(views::Painter::CreateImageGridPainter(kImages));
}
void AvatarLabelBorder::Paint(const views::View& view, gfx::Canvas* canvas) {
painter_->Paint(canvas, view.size());
gfx::Rect rect(1, 1, view.size().width() - 2, view.size().height() - 2);
SkPaint paint;
int kRadius = 2;
SkColor background_color = view.GetThemeProvider()->GetColor(
ThemeProperties::COLOR_MANAGED_USER_LABEL_BACKGROUND);
paint.setStyle(SkPaint::kFill_Style);
SkAlpha kAlphaForBlending = 230;
paint.setColor(color_utils::AlphaBlend(
background_color, SK_ColorBLACK, kAlphaForBlending));
canvas->DrawRoundRect(rect, kRadius, paint);
paint.setColor(background_color);
rect = gfx::Rect(2, 2, view.size().width() - 4, view.size().height() - 4);
canvas->DrawRoundRect(rect, kRadius, paint);
}
gfx::Insets AvatarLabelBorder::GetInsets() const {
return insets_;
}
gfx::Size AvatarLabelBorder::GetMinimumSize() const {
gfx::Size size(4, 4);
size.SetToMax(painter_->GetMinimumSize());
return size;
}
}
AvatarLabel::AvatarLabel(BrowserView* browser_view)
: LabelButton(NULL,
l10n_util::GetStringUTF16(IDS_MANAGED_USER_AVATAR_LABEL)),
browser_view_(browser_view) {
SetLabelOnRight(false);
UpdateLabelStyle();
}
AvatarLabel::~AvatarLabel() {}
bool AvatarLabel::OnMousePressed(const ui::MouseEvent& event) {
if (!LabelButton::OnMousePressed(event))
return false;
browser_view_->ShowAvatarBubbleFromAvatarButton(
BrowserWindow::AVATAR_BUBBLE_MODE_DEFAULT);
return true;
}
void AvatarLabel::UpdateLabelStyle() {
if (!browser_view_)
return;
SkColor color_label = browser_view_->frame()->GetThemeProvider()->GetColor(
ThemeProperties::COLOR_MANAGED_USER_LABEL);
for (size_t state = 0; state < STATE_COUNT; ++state)
SetTextColor(static_cast<ButtonState>(state), color_label);
SchedulePaint();
}
void AvatarLabel::SetLabelOnRight(bool label_on_right) {
SetBorder(scoped_ptr<views::Border>(new AvatarLabelBorder(label_on_right)));
}