| Index: app/resource_bundle.cc
|
| ===================================================================
|
| --- app/resource_bundle.cc (revision 72000)
|
| +++ app/resource_bundle.cc (working copy)
|
| @@ -1,265 +0,0 @@
|
| -// 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 "app/resource_bundle.h"
|
| -
|
| -#include "app/data_pack.h"
|
| -#include "base/lock.h"
|
| -#include "base/logging.h"
|
| -#include "base/stl_util-inl.h"
|
| -#include "base/string_piece.h"
|
| -#include "build/build_config.h"
|
| -#include "gfx/codec/png_codec.h"
|
| -#include "gfx/font.h"
|
| -#include "third_party/skia/include/core/SkBitmap.h"
|
| -
|
| -namespace {
|
| -
|
| -// Font sizes relative to base font.
|
| -#if defined(OS_CHROMEOS) && defined(CROS_FONTS_USING_BCI)
|
| -const int kSmallFontSizeDelta = -3;
|
| -const int kMediumFontSizeDelta = 2;
|
| -const int kLargeFontSizeDelta = 7;
|
| -#else
|
| -const int kSmallFontSizeDelta = -2;
|
| -const int kMediumFontSizeDelta = 3;
|
| -const int kLargeFontSizeDelta = 8;
|
| -#endif
|
| -
|
| -} // namespace
|
| -
|
| -ResourceBundle* ResourceBundle::g_shared_instance_ = NULL;
|
| -
|
| -/* static */
|
| -// TODO(glen): Finish moving these into theme provider (dialogs still
|
| -// depend on these colors).
|
| -const SkColor ResourceBundle::frame_color =
|
| - SkColorSetRGB(66, 116, 201);
|
| -const SkColor ResourceBundle::frame_color_inactive =
|
| - SkColorSetRGB(161, 182, 228);
|
| -const SkColor ResourceBundle::frame_color_app_panel =
|
| - SK_ColorWHITE;
|
| -const SkColor ResourceBundle::frame_color_app_panel_inactive =
|
| - SK_ColorWHITE;
|
| -const SkColor ResourceBundle::frame_color_incognito =
|
| - SkColorSetRGB(83, 106, 139);
|
| -const SkColor ResourceBundle::frame_color_incognito_inactive =
|
| - SkColorSetRGB(126, 139, 156);
|
| -const SkColor ResourceBundle::toolbar_color =
|
| - SkColorSetRGB(210, 225, 246);
|
| -const SkColor ResourceBundle::toolbar_separator_color =
|
| - SkColorSetRGB(182, 186, 192);
|
| -
|
| -/* static */
|
| -std::string ResourceBundle::InitSharedInstance(
|
| - const std::string& pref_locale) {
|
| - DCHECK(g_shared_instance_ == NULL) << "ResourceBundle initialized twice";
|
| - g_shared_instance_ = new ResourceBundle();
|
| -
|
| - g_shared_instance_->LoadCommonResources();
|
| - return g_shared_instance_->LoadLocaleResources(pref_locale);
|
| -}
|
| -
|
| -/* static */
|
| -std::string ResourceBundle::ReloadSharedInstance(
|
| - const std::string& pref_locale) {
|
| - DCHECK(g_shared_instance_ != NULL) << "ResourceBundle not initialized";
|
| -
|
| - g_shared_instance_->UnloadLocaleResources();
|
| - return g_shared_instance_->LoadLocaleResources(pref_locale);
|
| -}
|
| -
|
| -/* static */
|
| -void ResourceBundle::AddDataPackToSharedInstance(const FilePath& path) {
|
| - DCHECK(g_shared_instance_ != NULL) << "ResourceBundle not initialized";
|
| - g_shared_instance_->data_packs_.push_back(new LoadedDataPack(path));
|
| -}
|
| -
|
| -/* static */
|
| -void ResourceBundle::CleanupSharedInstance() {
|
| - if (g_shared_instance_) {
|
| - delete g_shared_instance_;
|
| - g_shared_instance_ = NULL;
|
| - }
|
| -}
|
| -
|
| -/* static */
|
| -ResourceBundle& ResourceBundle::GetSharedInstance() {
|
| - // Must call InitSharedInstance before this function.
|
| - CHECK(g_shared_instance_ != NULL);
|
| - return *g_shared_instance_;
|
| -}
|
| -
|
| -SkBitmap* ResourceBundle::GetBitmapNamed(int resource_id) {
|
| - // Check to see if we already have the Skia image in the cache.
|
| - {
|
| - AutoLock lock_scope(*lock_);
|
| - SkImageMap::const_iterator found = skia_images_.find(resource_id);
|
| - if (found != skia_images_.end())
|
| - return found->second;
|
| - }
|
| -
|
| - scoped_ptr<SkBitmap> bitmap;
|
| -
|
| - bitmap.reset(LoadBitmap(resources_data_, resource_id));
|
| -
|
| - if (bitmap.get()) {
|
| - // We loaded successfully. Cache the Skia version of the bitmap.
|
| - AutoLock lock_scope(*lock_);
|
| -
|
| - // Another thread raced us, and has already cached the skia image.
|
| - if (skia_images_.count(resource_id))
|
| - return skia_images_[resource_id];
|
| -
|
| - skia_images_[resource_id] = bitmap.get();
|
| - return bitmap.release();
|
| - }
|
| -
|
| - // We failed to retrieve the bitmap, show a debugging red square.
|
| - {
|
| - LOG(WARNING) << "Unable to load bitmap with id " << resource_id;
|
| - NOTREACHED(); // Want to assert in debug mode.
|
| -
|
| - AutoLock lock_scope(*lock_); // Guard empty_bitmap initialization.
|
| -
|
| - static SkBitmap* empty_bitmap = NULL;
|
| - if (!empty_bitmap) {
|
| - // The placeholder bitmap is bright red so people notice the problem.
|
| - // This bitmap will be leaked, but this code should never be hit.
|
| - empty_bitmap = new SkBitmap();
|
| - empty_bitmap->setConfig(SkBitmap::kARGB_8888_Config, 32, 32);
|
| - empty_bitmap->allocPixels();
|
| - empty_bitmap->eraseARGB(255, 255, 0, 0);
|
| - }
|
| - return empty_bitmap;
|
| - }
|
| -}
|
| -
|
| -RefCountedStaticMemory* ResourceBundle::LoadDataResourceBytes(
|
| - int resource_id) const {
|
| - RefCountedStaticMemory* bytes =
|
| - LoadResourceBytes(resources_data_, resource_id);
|
| -
|
| - // Check all our additional data packs for the resources if it wasn't loaded
|
| - // from our main source.
|
| - for (std::vector<LoadedDataPack*>::const_iterator it = data_packs_.begin();
|
| - !bytes && it != data_packs_.end(); ++it) {
|
| - bytes = (*it)->GetStaticMemory(resource_id);
|
| - }
|
| -
|
| - return bytes;
|
| -}
|
| -
|
| -const gfx::Font& ResourceBundle::GetFont(FontStyle style) {
|
| - LoadFontsIfNecessary();
|
| - switch (style) {
|
| - case BoldFont:
|
| - return *bold_font_;
|
| - case SmallFont:
|
| - return *small_font_;
|
| - case MediumFont:
|
| - return *medium_font_;
|
| - case MediumBoldFont:
|
| - return *medium_bold_font_;
|
| - case LargeFont:
|
| - return *large_font_;
|
| - default:
|
| - return *base_font_;
|
| - }
|
| -}
|
| -
|
| -gfx::NativeImage ResourceBundle::GetNativeImageNamed(int resource_id) {
|
| - ResourceBundle& rb = ResourceBundle::GetSharedInstance();
|
| -#if defined(OS_MACOSX)
|
| - return rb.GetNSImageNamed(resource_id);
|
| -#elif defined(USE_X11) && !defined(TOOLKIT_VIEWS)
|
| - return rb.GetPixbufNamed(resource_id);
|
| -#else
|
| - return rb.GetBitmapNamed(resource_id);
|
| -#endif
|
| -}
|
| -
|
| -ResourceBundle::ResourceBundle()
|
| - : lock_(new Lock),
|
| - resources_data_(NULL),
|
| - locale_resources_data_(NULL) {
|
| -}
|
| -
|
| -void ResourceBundle::FreeImages() {
|
| - STLDeleteContainerPairSecondPointers(skia_images_.begin(),
|
| - skia_images_.end());
|
| - skia_images_.clear();
|
| -}
|
| -
|
| -void ResourceBundle::LoadFontsIfNecessary() {
|
| - AutoLock lock_scope(*lock_);
|
| - if (!base_font_.get()) {
|
| - base_font_.reset(new gfx::Font());
|
| -
|
| - bold_font_.reset(new gfx::Font());
|
| - *bold_font_ =
|
| - base_font_->DeriveFont(0, base_font_->GetStyle() | gfx::Font::BOLD);
|
| -
|
| - small_font_.reset(new gfx::Font());
|
| - *small_font_ = base_font_->DeriveFont(kSmallFontSizeDelta);
|
| -
|
| - medium_font_.reset(new gfx::Font());
|
| - *medium_font_ = base_font_->DeriveFont(kMediumFontSizeDelta);
|
| -
|
| - medium_bold_font_.reset(new gfx::Font());
|
| - *medium_bold_font_ =
|
| - base_font_->DeriveFont(kMediumFontSizeDelta,
|
| - base_font_->GetStyle() | gfx::Font::BOLD);
|
| -
|
| - large_font_.reset(new gfx::Font());
|
| - *large_font_ = base_font_->DeriveFont(kLargeFontSizeDelta);
|
| - }
|
| -}
|
| -
|
| -/* static */
|
| -SkBitmap* ResourceBundle::LoadBitmap(DataHandle data_handle, int resource_id) {
|
| - scoped_refptr<RefCountedMemory> memory(
|
| - LoadResourceBytes(data_handle, resource_id));
|
| - if (!memory)
|
| - return NULL;
|
| -
|
| - SkBitmap bitmap;
|
| - if (!gfx::PNGCodec::Decode(memory->front(), memory->size(), &bitmap)) {
|
| - NOTREACHED() << "Unable to decode theme image resource " << resource_id;
|
| - return NULL;
|
| - }
|
| -
|
| - return new SkBitmap(bitmap);
|
| -}
|
| -
|
| -
|
| -// LoadedDataPack -------------------------------------------------------------
|
| -
|
| -ResourceBundle::LoadedDataPack::LoadedDataPack(const FilePath& path)
|
| - : path_(path) {
|
| - // Always preload the data packs so we can maintain constness.
|
| - Load();
|
| -}
|
| -
|
| -ResourceBundle::LoadedDataPack::~LoadedDataPack() {
|
| -}
|
| -
|
| -void ResourceBundle::LoadedDataPack::Load() {
|
| - DCHECK(!data_pack_.get());
|
| - data_pack_.reset(new app::DataPack);
|
| - bool success = data_pack_->Load(path_);
|
| - LOG_IF(ERROR, !success) << "Failed to load " << path_.value()
|
| - << "\nYou will not be able to use the Bookmarks Manager or "
|
| - << "about:net-internals.";
|
| -}
|
| -
|
| -bool ResourceBundle::LoadedDataPack::GetStringPiece(
|
| - int resource_id, base::StringPiece* data) const {
|
| - return data_pack_->GetStringPiece(static_cast<uint32>(resource_id), data);
|
| -}
|
| -
|
| -RefCountedStaticMemory* ResourceBundle::LoadedDataPack::GetStaticMemory(
|
| - int resource_id) const {
|
| - return data_pack_->GetStaticMemory(resource_id);
|
| -}
|
|
|