summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/drop_shadow_label.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos/drop_shadow_label.cc')
-rw-r--r--chrome/browser/chromeos/drop_shadow_label.cc79
1 files changed, 79 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/drop_shadow_label.cc b/chrome/browser/chromeos/drop_shadow_label.cc
new file mode 100644
index 0000000..5c5fa30
--- /dev/null
+++ b/chrome/browser/chromeos/drop_shadow_label.cc
@@ -0,0 +1,79 @@
+// 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 "gfx/canvas.h"
+#include "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(text, font(), color,
+ text_bounds.x() + i, text_bounds.y(),
+ text_bounds.width(), text_bounds.height(), flags);
+ canvas->DrawStringInt(text, font(), color,
+ text_bounds.x() + i, text_bounds.y() + i,
+ text_bounds.width(), text_bounds.height(), flags);
+ canvas->DrawStringInt(text, font(), color,
+ text_bounds.x(), text_bounds.y() + i,
+ text_bounds.width(), text_bounds.height(), flags);
+ }
+ }
+
+ canvas->DrawStringInt(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