summaryrefslogtreecommitdiffstats
path: root/chromium/ui/views/border.cc
diff options
context:
space:
mode:
authorZeno Albisser <zeno.albisser@digia.com>2013-08-15 21:46:11 +0200
committerZeno Albisser <zeno.albisser@digia.com>2013-08-15 21:46:11 +0200
commit679147eead574d186ebf3069647b4c23e8ccace6 (patch)
treefc247a0ac8ff119f7c8550879ebb6d3dd8d1ff69 /chromium/ui/views/border.cc
Initial import.
Diffstat (limited to 'chromium/ui/views/border.cc')
-rw-r--r--chromium/ui/views/border.cc154
1 files changed, 154 insertions, 0 deletions
diff --git a/chromium/ui/views/border.cc b/chromium/ui/views/border.cc
new file mode 100644
index 00000000000..5de602fd50b
--- /dev/null
+++ b/chromium/ui/views/border.cc
@@ -0,0 +1,154 @@
+// 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 "ui/views/border.h"
+
+#include "base/logging.h"
+#include "base/memory/scoped_ptr.h"
+#include "ui/gfx/canvas.h"
+#include "ui/views/painter.h"
+
+namespace views {
+
+namespace {
+
+// A simple border with different thicknesses on each side and single color.
+class SidedSolidBorder : public Border {
+ public:
+ SidedSolidBorder(int top, int left, int bottom, int right, SkColor color);
+
+ // Overridden from Border:
+ virtual void Paint(const View& view, gfx::Canvas* canvas) OVERRIDE;
+ virtual gfx::Insets GetInsets() const OVERRIDE;
+
+ private:
+ const SkColor color_;
+ const gfx::Insets insets_;
+
+ DISALLOW_COPY_AND_ASSIGN(SidedSolidBorder);
+};
+
+SidedSolidBorder::SidedSolidBorder(int top,
+ int left,
+ int bottom,
+ int right,
+ SkColor color)
+ : color_(color),
+ insets_(top, left, bottom, right) {
+}
+
+void SidedSolidBorder::Paint(const View& view, gfx::Canvas* canvas) {
+ // Top border.
+ canvas->FillRect(gfx::Rect(0, 0, view.width(), insets_.top()), color_);
+ // Left border.
+ canvas->FillRect(gfx::Rect(0, 0, insets_.left(), view.height()), color_);
+ // Bottom border.
+ canvas->FillRect(gfx::Rect(0, view.height() - insets_.bottom(), view.width(),
+ insets_.bottom()), color_);
+ // Right border.
+ canvas->FillRect(gfx::Rect(view.width() - insets_.right(), 0, insets_.right(),
+ view.height()), color_);
+}
+
+gfx::Insets SidedSolidBorder::GetInsets() const {
+ return insets_;
+}
+
+// A variation of SidedSolidBorder, where each side has the same thickness.
+class SolidBorder : public SidedSolidBorder {
+ public:
+ SolidBorder(int thickness, SkColor color)
+ : SidedSolidBorder(thickness, thickness, thickness, thickness, color) {
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(SolidBorder);
+};
+
+class EmptyBorder : public Border {
+ public:
+ EmptyBorder(int top, int left, int bottom, int right)
+ : insets_(top, left, bottom, right) {}
+
+ // Overridden from Border:
+ virtual void Paint(const View& view, gfx::Canvas* canvas) OVERRIDE {}
+
+ virtual gfx::Insets GetInsets() const OVERRIDE {
+ return insets_;
+ }
+
+ private:
+ const gfx::Insets insets_;
+
+ DISALLOW_COPY_AND_ASSIGN(EmptyBorder);
+};
+
+class BorderPainter : public Border {
+ public:
+ explicit BorderPainter(Painter* painter, const gfx::Insets& insets)
+ : painter_(painter),
+ insets_(insets) {
+ DCHECK(painter);
+ }
+
+ virtual ~BorderPainter() {}
+
+ // Overridden from Border:
+ virtual void Paint(const View& view, gfx::Canvas* canvas) OVERRIDE {
+ Painter::PaintPainterAt(canvas, painter_.get(), view.GetLocalBounds());
+ }
+
+ virtual gfx::Insets GetInsets() const OVERRIDE {
+ return insets_;
+ }
+
+ private:
+ scoped_ptr<Painter> painter_;
+ const gfx::Insets insets_;
+
+ DISALLOW_COPY_AND_ASSIGN(BorderPainter);
+};
+
+} // namespace
+
+Border::Border() {
+}
+
+Border::~Border() {
+}
+
+// static
+Border* Border::CreateSolidBorder(int thickness, SkColor color) {
+ return new SolidBorder(thickness, color);
+}
+
+// static
+Border* Border::CreateEmptyBorder(int top, int left, int bottom, int right) {
+ return new EmptyBorder(top, left, bottom, right);
+}
+
+// static
+Border* Border::CreateSolidSidedBorder(int top,
+ int left,
+ int bottom,
+ int right,
+ SkColor color) {
+ return new SidedSolidBorder(top, left, bottom, right, color);
+}
+
+// static
+Border* Border::CreateBorderPainter(Painter* painter,
+ const gfx::Insets& insets) {
+ return new BorderPainter(painter, insets);
+}
+
+TextButtonBorder* Border::AsTextButtonBorder() {
+ return NULL;
+}
+
+const TextButtonBorder* Border::AsTextButtonBorder() const {
+ return NULL;
+}
+
+} // namespace views