diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-08 00:34:05 +0000 |
commit | 2362e4fe2905ab75d3230ebc3e307ae53e2b8362 (patch) | |
tree | e6d88357a2021811e0e354f618247217be8bb3da /views/background.cc | |
parent | db23ac3e713dc17509b2b15d3ee634968da45715 (diff) | |
download | chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.zip chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.gz chromium_src-2362e4fe2905ab75d3230ebc3e307ae53e2b8362.tar.bz2 |
Move src/chrome/views to src/views. RS=darin http://crbug.com/11387
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15604 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/background.cc')
-rw-r--r-- | views/background.cc | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/views/background.cc b/views/background.cc new file mode 100644 index 0000000..f2bd176 --- /dev/null +++ b/views/background.cc @@ -0,0 +1,113 @@ +// Copyright (c) 2006-2008 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 "views/background.h" + +#include "app/gfx/chrome_canvas.h" +#include "base/logging.h" +#include "skia/ext/skia_utils_win.h" +#include "skia/include/SkPaint.h" +#include "views/painter.h" +#include "views/view.h" + +namespace views { + +// SolidBackground is a trivial Background implementation that fills the +// background in a solid color. +class SolidBackground : public Background { + public: + explicit SolidBackground(const SkColor& color) : + color_(color) { + SetNativeControlColor(color_); + } + + void Paint(ChromeCanvas* canvas, View* view) const { + // Fill the background. Note that we don't constrain to the bounds as + // canvas is already clipped for us. + canvas->drawColor(color_); + } + + private: + const SkColor color_; + + DISALLOW_EVIL_CONSTRUCTORS(SolidBackground); +}; + +class BackgroundPainter : public Background { + public: + BackgroundPainter(bool owns_painter, Painter* painter) + : owns_painter_(owns_painter), painter_(painter) { + DCHECK(painter); + } + + virtual ~BackgroundPainter() { + if (owns_painter_) + delete painter_; + } + + + void Paint(ChromeCanvas* canvas, View* view) const { + Painter::PaintPainterAt(0, 0, view->width(), view->height(), canvas, + painter_); + } + + private: + bool owns_painter_; + Painter* painter_; + + DISALLOW_EVIL_CONSTRUCTORS(BackgroundPainter); +}; + +Background::Background() +#if defined(OS_WIN) + : native_control_brush_(NULL) +#endif +{ +} + +Background::~Background() { +#if defined(OS_WIN) + DeleteObject(native_control_brush_); +#endif +} + +void Background::SetNativeControlColor(SkColor color) { +#if defined(OS_WIN) + DeleteObject(native_control_brush_); + native_control_brush_ = CreateSolidBrush(skia::SkColorToCOLORREF(color)); +#endif +} + +//static +Background* Background::CreateSolidBackground(const SkColor& color) { + return new SolidBackground(color); +} + +//static +Background* Background::CreateStandardPanelBackground() { + return CreateVerticalGradientBackground(SkColorSetRGB(246, 250, 255), + SkColorSetRGB(219, 235, 255)); +} + +//static +Background* Background::CreateVerticalGradientBackground( + const SkColor& color1, const SkColor& color2) { + Background *background = + CreateBackgroundPainter(true, Painter::CreateVerticalGradient(color1, + color2)); + background->SetNativeControlColor( // 50% blend of colors 1 & 2 + SkColorSetRGB((SkColorGetR(color1) + SkColorGetR(color2)) / 2, + (SkColorGetG(color1) + SkColorGetG(color2)) / 2, + (SkColorGetB(color1) + SkColorGetB(color2)) / 2)); + + return background; +} + +//static +Background* Background::CreateBackgroundPainter(bool owns_painter, + Painter* painter) { + return new BackgroundPainter(owns_painter, painter); +} + +} // namespace views |