// 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