1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/ntp_background_util.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/core/SkBitmap.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/canvas.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h"
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/skia_util.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PaintThemeBackground(
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    gfx::Canvas* canvas, SkBitmap* ntp_background, int tiling, int alignment,
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const gfx::Rect& area, int tab_contents_height) {
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int x_pos = 0;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int y_pos = 0;
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int width = area.width() + ntp_background->width();
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int height = area.height() + ntp_background->height();
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (alignment & ThemeService::ALIGN_BOTTOM)
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    y_pos += area.height() + tab_contents_height - ntp_background->height();
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (alignment & ThemeService::ALIGN_RIGHT) {
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    x_pos += area.width() - ntp_background->width();
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  } else if (alignment & ThemeService::ALIGN_LEFT) {
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // no op
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {  // ALIGN_CENTER
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    x_pos += area.width() / 2 - ntp_background->width() / 2;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (tiling != ThemeService::REPEAT &&
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      tiling != ThemeService::REPEAT_X) {
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    width = ntp_background->width();
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else if (x_pos > 0) {
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    x_pos = x_pos % ntp_background->width() - ntp_background->width();
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (tiling != ThemeService::REPEAT &&
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      tiling != ThemeService::REPEAT_Y) {
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    height = ntp_background->height();
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else if (y_pos > 0) {
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    y_pos = y_pos % ntp_background->height() - ntp_background->height();
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  x_pos += area.x();
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  y_pos += area.y();
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  canvas->TileImageInt(*ntp_background, x_pos, y_pos, width, height);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid NtpBackgroundUtil::PaintBackgroundDetachedMode(
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ui::ThemeProvider* tp, gfx::Canvas* canvas, const gfx::Rect& area,
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int tab_contents_height) {
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Draw the background to match the new tab page.
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  canvas->FillRectInt(tp->GetColor(ThemeService::COLOR_NTP_BACKGROUND),
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      area.x(), area.y(), area.width(), area.height());
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (tp->HasCustomImage(IDR_THEME_NTP_BACKGROUND)) {
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    int tiling = ThemeService::NO_REPEAT;
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    tp->GetDisplayProperty(ThemeService::NTP_BACKGROUND_TILING,
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           &tiling);
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int alignment;
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (tp->GetDisplayProperty(ThemeService::NTP_BACKGROUND_ALIGNMENT,
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        &alignment)) {
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      SkBitmap* ntp_background = tp->GetBitmapNamed(IDR_THEME_NTP_BACKGROUND);
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      PaintThemeBackground(
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          canvas, ntp_background, tiling, alignment, area, tab_contents_height);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
80