blob: 575486cb321f69ea6e6f5975f79c5b7d7f6bf3db [file] [log] [blame]
// Copyright (c) 2010 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/chromeos/drop_shadow_label.h"
#include "base/utf_string_conversions.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/color_utils.h"
using views::Label;
namespace chromeos {
static const int kDefaultDropShadowSize = 2;
// Default color is black.
static const SkColor kDefaultColor = 0x000000;
static const float kShadowOpacity = 0.2;
DropShadowLabel::DropShadowLabel() : Label() {
Init();
}
void DropShadowLabel::Init() {
drop_shadow_size_ = kDefaultDropShadowSize;
}
void DropShadowLabel::SetDropShadowSize(int drop_shadow_size) {
if (drop_shadow_size != drop_shadow_size_) {
drop_shadow_size_ = drop_shadow_size;
invalidate_text_size();
SchedulePaint();
}
}
void DropShadowLabel::PaintText(gfx::Canvas* canvas,
const std::wstring& text,
const gfx::Rect& text_bounds,
int flags) {
if (drop_shadow_size_ > 0) {
SkColor color = SkColorSetARGB(kShadowOpacity * SkColorGetA(GetColor()),
SkColorGetR(kDefaultColor),
SkColorGetG(kDefaultColor),
SkColorGetB(kDefaultColor));
for (int i = 0; i < drop_shadow_size_; i++) {
canvas->DrawStringInt(WideToUTF16Hack(text), font(), color,
text_bounds.x() + i, text_bounds.y(),
text_bounds.width(), text_bounds.height(), flags);
canvas->DrawStringInt(WideToUTF16Hack(text), font(), color,
text_bounds.x() + i, text_bounds.y() + i,
text_bounds.width(), text_bounds.height(), flags);
canvas->DrawStringInt(WideToUTF16Hack(text), font(), color,
text_bounds.x(), text_bounds.y() + i,
text_bounds.width(), text_bounds.height(), flags);
}
}
canvas->DrawStringInt(WideToUTF16Hack(text), font(), GetColor(),
text_bounds.x(), text_bounds.y(),
text_bounds.width(), text_bounds.height(), flags);
if (HasFocus() || paint_as_focused()) {
gfx::Rect focus_bounds = text_bounds;
focus_bounds.Inset(-Label::kFocusBorderPadding,
-Label::kFocusBorderPadding);
canvas->DrawFocusRect(focus_bounds.x(), focus_bounds.y(),
focus_bounds.width(), focus_bounds.height());
}
}
gfx::Size DropShadowLabel::GetTextSize() const {
gfx::Size text_size = Label::GetTextSize();
text_size.SetSize(text_size.width() + drop_shadow_size_,
text_size.height() + drop_shadow_size_);
return text_size;
}
} // namespace chromeos