summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_theme_provider_mac.mm
diff options
context:
space:
mode:
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();
+}