summaryrefslogtreecommitdiffstats
path: root/chrome/common/resource_bundle.h
diff options
context:
space:
mode:
authorinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
committerinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 23:55:29 +0000
commit09911bf300f1a419907a9412154760efd0b7abc3 (patch)
treef131325fb4e2ad12c6d3504ab75b16dd92facfed /chrome/common/resource_bundle.h
parent586acc5fe142f498261f52c66862fa417c3d52d2 (diff)
downloadchromium_src-09911bf300f1a419907a9412154760efd0b7abc3.zip
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.gz
chromium_src-09911bf300f1a419907a9412154760efd0b7abc3.tar.bz2
Add chrome to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/resource_bundle.h')
-rw-r--r--chrome/common/resource_bundle.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/chrome/common/resource_bundle.h b/chrome/common/resource_bundle.h
new file mode 100644
index 0000000..7d2b9d9
--- /dev/null
+++ b/chrome/common/resource_bundle.h
@@ -0,0 +1,183 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_COMMON_RESOURCE_BUNDLE_H__
+#define CHROME_COMMON_RESOURCE_BUNDLE_H__
+
+#include <windows.h>
+#include <map>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/lock.h"
+#include "base/scoped_ptr.h"
+#include "chrome/common/ref_counted_util.h"
+
+class ChromeFont;
+class SkBitmap;
+class StringPiece;
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// ResourceBundle class
+//
+// ResourceBundle is a central facility to load images and other resources.
+//
+// Every resource is loaded only once
+//
+////////////////////////////////////////////////////////////////////////////////
+class ResourceBundle {
+ public:
+ // An enumeration of the various font styles used throughout Chrome.
+ // The following holds true for the font sizes:
+ // Small <= Base <= Medium <= MediumBold <= Large.
+ enum FontStyle {
+ SmallFont,
+ BaseFont,
+ MediumFont,
+ // NOTE: depending upon the locale, this may *not* result in a bold
+ // font.
+ MediumBoldFont,
+ LargeFont,
+ WebFont
+ };
+
+ // Initialize the ResrouceBundle for this process.
+ static void InitSharedInstance(const std::wstring& pref_locale);
+
+ // Delete the ResourceBundle for this process if it exists.
+ static void CleanupSharedInstance();
+
+ // Return the global resource loader instance;
+ static ResourceBundle& GetSharedInstance();
+
+ // Load the dll that contains theme resources if present.
+ void LoadThemeResources();
+
+ // Gets the bitmap with the specified resource_id, first by looking into the
+ // theme dll, than in the current dll. Returns a pointer to a shared instance
+ // of the SkBitmap in the given out parameter. This shared bitmap is owned by
+ // the resource bundle and should not be freed.
+ //
+ // The bitmap is assumed to exist. This function will log in release, and
+ // assert in debug mode if it does not. On failure, this will return a
+ // pointer to a shared empty placeholder bitmap so it will be visible what
+ // is missing.
+ SkBitmap* GetBitmapNamed(int resource_id);
+
+ // Loads the raw bytes of an image resource into |bytes|,
+ // without doing any processing or interpretation of
+ // the resource. Returns whether we successfully read the resource.
+ bool LoadImageResourceBytes(int resource_id,
+ std::vector<unsigned char>* bytes);
+
+ // Loads the raw bytes of a data resource into |bytes|,
+ // without doing any processing or interpretation of
+ // the resource. Returns whether we successfully read the resource.
+ bool LoadDataResourceBytes(int resource_id,
+ std::vector<unsigned char>* bytes);
+
+ // Loads and returns an icon from the theme dll.
+ HICON LoadThemeIcon(int icon_id);
+
+ // Return the contents of a file in a string given the resource id.
+ // This will copy the data from the resource and return it as a string.
+ std::string GetDataResource(int resource_id);
+
+ // Like GetDataResource(), but avoids copying the resource. Instead, it
+ // returns a StringPiece which points into the actual resource in the image.
+ StringPiece GetRawDataResource(int resource_id);
+
+ // Loads and returns the global accelerators.
+ HACCEL GetGlobalAccelerators();
+
+ // Loads and returns a cursor from the app module.
+ HCURSOR LoadCursor(int cursor_id);
+
+ // Get a localized string given a message id. Returns an empty
+ // string if the message_id is not found.
+ std::wstring GetLocalizedString(int message_id);
+
+ // Returns the font for the specified style.
+ ChromeFont GetFont(FontStyle style);
+
+ // Creates and returns a new SkBitmap given the dll to look in and the
+ // resource id. It's up to the caller to free the returned bitmap when
+ // done.
+ static SkBitmap* LoadBitmap(HINSTANCE dll_inst, int resource_id);
+
+ private:
+ ResourceBundle();
+ ~ResourceBundle();
+
+ // Try to load the locale specific strings from an external DLL.
+ void LoadLocaleResources(const std::wstring& pref_locale);
+
+ void LoadFontsIfNecessary();
+
+ // Returns the full pathname of the locale dll to load. May return an empty
+ // string if no locale dlls are found.
+ std::wstring GetLocaleDllPath(const std::wstring& pref_locale);
+
+ // Loads the raw bytes of a resource from |module| into |bytes|,
+ // without doing any processing or interpretation of
+ // the resource. Returns whether we successfully read the resource.
+ bool LoadModuleResourceBytes(HINSTANCE module,
+ int resource_id,
+ std::vector<unsigned char>* bytes);
+
+ // Class level lock. Used to protect internal data structures that may be
+ // accessed from other threads (e.g., skia_images_).
+ Lock lock_;
+
+ std::wstring theme_path_;
+
+ // Handle to dlls
+ HINSTANCE locale_resources_dll_;
+ HINSTANCE theme_dll_;
+
+ // Cached images. The ResourceBundle caches all retrieved bitmaps and keeps
+ // ownership of the pointers.
+ typedef std::map<int, SkBitmap*> SkImageMap;
+ SkImageMap skia_images_;
+
+ // The various fonts used. Cached to avoid repeated GDI creation/destruction.
+ scoped_ptr<ChromeFont> base_font_;
+ scoped_ptr<ChromeFont> small_font_;
+ scoped_ptr<ChromeFont> medium_font_;
+ scoped_ptr<ChromeFont> medium_bold_font_;
+ scoped_ptr<ChromeFont> large_font_;
+ scoped_ptr<ChromeFont> web_font_;
+
+ static ResourceBundle *g_shared_instance_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(ResourceBundle);
+};
+
+#endif // CHROME_COMMON_RESOURCE_BUNDLE_H__