// Copyright (c) 2009 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/ntp_background_util.h" #include "base/logging.h" #include "chrome/browser/themes/browser_theme_provider.h" #include "grit/theme_resources.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/canvas.h" #include "ui/gfx/rect.h" #include "ui/gfx/skia_util.h" namespace { void PaintThemeBackground( gfx::Canvas* canvas, SkBitmap* ntp_background, int tiling, int alignment, const gfx::Rect& area, int tab_contents_height) { int x_pos = 0; int y_pos = 0; int width = area.width() + ntp_background->width(); int height = area.height() + ntp_background->height(); if (alignment & BrowserThemeProvider::ALIGN_BOTTOM) y_pos += area.height() + tab_contents_height - ntp_background->height(); if (alignment & BrowserThemeProvider::ALIGN_RIGHT) { x_pos += area.width() - ntp_background->width(); } else if (alignment & BrowserThemeProvider::ALIGN_LEFT) { // no op } else { // ALIGN_CENTER x_pos += area.width() / 2 - ntp_background->width() / 2; } if (tiling != BrowserThemeProvider::REPEAT && tiling != BrowserThemeProvider::REPEAT_X) { width = ntp_background->width(); } else if (x_pos > 0) { x_pos = x_pos % ntp_background->width() - ntp_background->width(); } if (tiling != BrowserThemeProvider::REPEAT && tiling != BrowserThemeProvider::REPEAT_Y) { height = ntp_background->height(); } else if (y_pos > 0) { y_pos = y_pos % ntp_background->height() - ntp_background->height(); } x_pos += area.x(); y_pos += area.y(); canvas->TileImageInt(*ntp_background, x_pos, y_pos, width, height); } } // namespace // static void NtpBackgroundUtil::PaintBackgroundDetachedMode( ui::ThemeProvider* tp, gfx::Canvas* canvas, const gfx::Rect& area, int tab_contents_height) { // Draw the background to match the new tab page. canvas->FillRectInt(tp->GetColor(BrowserThemeProvider::COLOR_NTP_BACKGROUND), area.x(), area.y(), area.width(), area.height()); if (tp->HasCustomImage(IDR_THEME_NTP_BACKGROUND)) { int tiling = BrowserThemeProvider::NO_REPEAT; tp->GetDisplayProperty(BrowserThemeProvider::NTP_BACKGROUND_TILING, &tiling); int alignment; if (tp->GetDisplayProperty(BrowserThemeProvider::NTP_BACKGROUND_ALIGNMENT, &alignment)) { SkBitmap* ntp_background = tp->GetBitmapNamed(IDR_THEME_NTP_BACKGROUND); PaintThemeBackground( canvas, ntp_background, tiling, alignment, area, tab_contents_height); } } }