summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_theme_provider_mac.mm
diff options
context:
space:
mode:
authoravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-22 18:34:10 +0000
committeravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-22 18:34:10 +0000
commit1279d5f395182c6fa783da0d85216777d931af6b (patch)
tree65eac9c68a5896e0fb3b39bc62344d8a8fb6b03d /chrome/browser/browser_theme_provider_mac.mm
parent3e3f0eb47762a85110fb11b850df776b59073f8d (diff)
downloadchromium_src-1279d5f395182c6fa783da0d85216777d931af6b.zip
chromium_src-1279d5f395182c6fa783da0d85216777d931af6b.tar.gz
chromium_src-1279d5f395182c6fa783da0d85216777d931af6b.tar.bz2
Theme image support for the Mac.
BUG=none TEST=none Review URL: http://codereview.chromium.org/140007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18925 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_theme_provider_mac.mm')
-rw-r--r--chrome/browser/browser_theme_provider_mac.mm50
1 files changed, 50 insertions, 0 deletions
diff --git a/chrome/browser/browser_theme_provider_mac.mm b/chrome/browser/browser_theme_provider_mac.mm
new file mode 100644
index 0000000..a1709f9
--- /dev/null
+++ b/chrome/browser/browser_theme_provider_mac.mm
@@ -0,0 +1,50 @@
+// 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/browser_theme_provider.h"
+
+#import <Cocoa/Cocoa.h>
+
+#include "base/logging.h"
+
+NSImage* BrowserThemeProvider::GetNSImageNamed(int id) {
+ DCHECK(CalledOnValidThread());
+
+ // Check to see if we already have the image in the cache.
+ NSImageMap::const_iterator found = nsimage_cache_.find(id);
+ if (found != nsimage_cache_.end())
+ return found->second;
+
+ // Why do we load the file directly into the image rather than doing the whole
+ // SkBitmap > native conversion that others do? Going direct means:
+ // - we use the color profiles and other embedded info in the image file
+ // - we don't fall back to the default resources which we don't use on the Mac
+ std::vector<unsigned char> raw_data;
+ if (ReadThemeFileData(id, &raw_data)) {
+ NSData* ns_data = [NSData dataWithBytes:&raw_data.front()
+ length:raw_data.size()];
+ if (ns_data) {
+ NSImage* nsimage = [[NSImage alloc] initWithData:ns_data];
+
+ // We loaded successfully. Cache the image.
+ if (nsimage) {
+ nsimage_cache_[id] = nsimage;
+ return nsimage;
+ }
+ }
+ }
+
+ return nil;
+}
+
+void BrowserThemeProvider::FreePlatformImages() {
+ DCHECK(CalledOnValidThread());
+
+ // Free images.
+ for (NSImageMap::iterator i = nsimage_cache_.begin();
+ i != nsimage_cache_.end(); i++) {
+ [i->second release];
+ }
+ nsimage_cache_.clear();
+}