summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DEPS2
-rw-r--r--chrome/browser/cocoa/GTMTheme.h124
-rw-r--r--chrome/browser/cocoa/GTMTheme.m510
-rw-r--r--chrome/browser/cocoa/autocomplete_text_field_cell.mm2
-rw-r--r--chrome/browser/cocoa/background_gradient_view.h2
-rw-r--r--chrome/browser/cocoa/bookmark_bar_toolbar_view.mm2
-rw-r--r--chrome/browser/cocoa/bookmark_bar_view.mm2
-rw-r--r--chrome/browser/cocoa/bookmark_button_cell.mm2
-rw-r--r--chrome/browser/cocoa/browser_frame_view.mm2
-rw-r--r--chrome/browser/cocoa/browser_theme_provider_init.h2
-rw-r--r--chrome/browser/cocoa/browser_window_controller.h2
-rw-r--r--chrome/browser/cocoa/bubble_view.mm2
-rw-r--r--chrome/browser/cocoa/download_item_cell.mm2
-rw-r--r--chrome/browser/cocoa/download_item_controller.mm2
-rw-r--r--chrome/browser/cocoa/download_shelf_view.mm2
-rw-r--r--chrome/browser/cocoa/floating_bar_backing_view.mm2
-rw-r--r--chrome/browser/cocoa/gradient_button_cell.mm2
-rw-r--r--chrome/browser/cocoa/info_bubble_view.mm2
-rw-r--r--chrome/browser/cocoa/infobar_gradient_view.mm2
-rw-r--r--chrome/browser/cocoa/status_bubble_mac.mm2
-rw-r--r--chrome/browser/cocoa/status_bubble_mac_unittest.mm2
-rw-r--r--chrome/browser/cocoa/styled_text_field_cell.mm2
-rw-r--r--chrome/browser/cocoa/tab_controller.mm2
-rwxr-xr-xchrome/chrome_browser.gypi4
24 files changed, 657 insertions, 23 deletions
diff --git a/DEPS b/DEPS
index 099cd55..d19f0e0 100644
--- a/DEPS
+++ b/DEPS
@@ -150,7 +150,7 @@ deps_os = {
"/trunk/deps/reference_builds/chrome_mac@35421",
"src/third_party/GTM":
- "http://google-toolbox-for-mac.googlecode.com/svn/trunk@293",
+ "http://google-toolbox-for-mac.googlecode.com/svn/trunk@297",
"src/third_party/pdfsqueeze":
"http://pdfsqueeze.googlecode.com/svn/trunk@2",
"src/third_party/lighttpd":
diff --git a/chrome/browser/cocoa/GTMTheme.h b/chrome/browser/cocoa/GTMTheme.h
new file mode 100644
index 0000000..3399fbf
--- /dev/null
+++ b/chrome/browser/cocoa/GTMTheme.h
@@ -0,0 +1,124 @@
+// 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.
+
+// Derived from the GTMTheme in Google Toolbox for Mac. This file should
+// go away: http://crbug.com/35554
+
+#import "GTMDefines.h"
+#import <AppKit/AppKit.h>
+
+// Sent whenever the theme changes. Object => GTMTheme that changed
+GTM_EXTERN NSString *const kGTMThemeDidChangeNotification;
+
+// Key for user defaults defining background color
+GTM_EXTERN NSString *const kGTMThemeBackgroundColorKey;
+
+enum {
+ GTMThemeStyleTabBarSelected,
+ GTMThemeStyleTabBarDeselected,
+ GTMThemeStyleWindow,
+ GTMThemeStyleToolBar,
+ GTMThemeStyleToolBarButton,
+ GTMThemeStyleToolBarButtonPressed,
+ GTMThemeStyleBookmarksBarButton,
+};
+typedef NSUInteger GTMThemeStyle;
+
+enum {
+ GTMThemeStateInactiveWindow = 0,
+ GTMThemeStateActiveWindow = 1 << 0
+};
+typedef NSUInteger GTMThemeState;
+
+// GTMTheme provides a range of values for procedural drawing of UI elements
+// based on interpolation of a single background color
+
+@interface GTMTheme : NSObject {
+ @private
+ NSColor *backgroundColor_; // bound to user defaults
+ NSImage *backgroundImage_; // bound to user defaults
+ NSMutableDictionary *values_; // cached values
+}
+
+// Access the global theme. By default this is bound to user defaults
++ (GTMTheme *)defaultTheme;
++ (void)setDefaultTheme:(GTMTheme *)theme;
+
+// Bind this theme to user defaults
+- (void)bindToUserDefaults;
+
+// returns base theme color
+- (NSColor *)backgroundColor;
+
+// sets the base theme color
+- (void)setBackgroundColor:(NSColor *)value;
+
+// base background image
+- (NSImage *)backgroundImage;
+
+// set base background image
+- (void)setBackgroundImage:(NSImage *)value;
+
+// NSImage pattern background
+- (NSImage *)backgroundImageForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// NSColor of the above image, if present, else gradientForStyle
+- (NSColor *)backgroundPatternColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// NSGradient for specific usage
+- (NSGradient *)gradientForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// Outline color for stroke
+- (NSColor *)strokeColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// Text color
+- (NSColor *)textColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// Base background color (a plain (non pattern/gradient) NSColor)
+- (NSColor *)backgroundColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// Indicates whether luminance is dark or light
+- (BOOL)styleIsDark:(GTMThemeStyle)style state:(GTMThemeState)state;
+
+// Background style for this style and state
+- (NSBackgroundStyle)interiorBackgroundStyleForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+- (NSColor *)iconColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// Manually set a theme value
+- (void)setValue:(id)value
+ forAttribute:(NSString *)attribute
+ style:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+
+// Manually extract a theme value
+- (id)valueForAttribute:(NSString *)attribute
+ style:(GTMThemeStyle)style
+ state:(GTMThemeState)state;
+@end
+
+// Convenience categories for NSWindow and NSView to access the current theme
+// Default implementation polls the window delegate
+@interface NSWindow (GTMTheme)
+- (GTMTheme *)gtm_theme;
+- (NSPoint)gtm_themePatternPhase;
+@end
+
+@interface NSView (GTMTheme)
+- (GTMTheme *)gtm_theme;
+- (NSPoint)gtm_themePatternPhase;
+@end
+
+@protocol GTMThemeDelegate
+- (GTMTheme *)gtm_themeForWindow:(NSWindow *)window;
+- (NSPoint)gtm_themePatternPhaseForWindow:(NSWindow *)window;
+@end
diff --git a/chrome/browser/cocoa/GTMTheme.m b/chrome/browser/cocoa/GTMTheme.m
new file mode 100644
index 0000000..c3062812
--- /dev/null
+++ b/chrome/browser/cocoa/GTMTheme.m
@@ -0,0 +1,510 @@
+// 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.
+
+// Derived from the GTMTheme in Google Toolbox for Mac. This file should
+// go away: http://crbug.com/35554
+
+#import "chrome/browser/cocoa/GTMTheme.h"
+#import "third_party/GTM/AppKit/GTMNSColor+Luminance.h"
+#import <QuartzCore/QuartzCore.h>
+
+static GTMTheme *gGTMDefaultTheme = nil;
+NSString *const kGTMThemeDidChangeNotification =
+ @"GTMThemeDidChangeNotification";
+NSString *const kGTMThemeBackgroundColorKey = @"GTMThemeBackgroundColor";
+
+@interface GTMTheme ()
+- (void)sendChangeNotification;
+@end
+
+@implementation NSWindow (GTMTheme)
+- (id<GTMThemeDelegate>)gtm_themeDelegate {
+ id delegate = nil;
+ id tempDelegate = [self delegate];
+ if ([tempDelegate conformsToProtocol:@protocol(GTMThemeDelegate)]) {
+ delegate = tempDelegate;
+ }
+ if (!delegate) {
+ tempDelegate = [self windowController];
+ if ([tempDelegate conformsToProtocol:@protocol(GTMThemeDelegate)]) {
+ delegate = tempDelegate;
+ }
+ }
+ return delegate;
+}
+
+- (GTMTheme *)gtm_theme {
+ GTMTheme *theme = nil;
+ id<GTMThemeDelegate>delegate = [self gtm_themeDelegate];
+ if (delegate) {
+ theme = [delegate gtm_themeForWindow:self];
+ }
+ return theme;
+}
+
+- (NSPoint)gtm_themePatternPhase {
+ NSPoint phase = NSZeroPoint;
+ id<GTMThemeDelegate>delegate = [self gtm_themeDelegate];
+ if (delegate) {
+ phase = [delegate gtm_themePatternPhaseForWindow:self];
+ }
+ return phase;
+}
+@end
+
+@implementation NSView (GTMTheme)
+- (GTMTheme *)gtm_theme {
+ return [[self window] gtm_theme];
+}
+
+- (NSPoint)gtm_themePatternPhase {
+ return [[self window] gtm_themePatternPhase];
+}
+@end
+
+@implementation GTMTheme
+
++ (void)setDefaultTheme:(GTMTheme *)theme {
+ if (gGTMDefaultTheme != theme) {
+ [gGTMDefaultTheme release];
+ gGTMDefaultTheme = [theme retain];
+ [gGTMDefaultTheme sendChangeNotification];
+ }
+}
+
++ (GTMTheme *)defaultTheme {
+ @synchronized (self) {
+ if (!gGTMDefaultTheme) {
+ gGTMDefaultTheme = [[self alloc] init];
+ [gGTMDefaultTheme bindToUserDefaults];
+ }
+ }
+ return gGTMDefaultTheme;
+}
+
+- (void)bindToUserDefaults {
+ NSUserDefaultsController * controller =
+ [NSUserDefaultsController sharedUserDefaultsController];
+ [self bind:@"backgroundColor"
+ toObject:controller
+ withKeyPath:@"values.GTMThemeBackgroundColor"
+ options:[NSDictionary dictionaryWithObjectsAndKeys:
+ NSUnarchiveFromDataTransformerName,
+ NSValueTransformerNameBindingOption,
+ nil]];
+
+ [self bind:@"backgroundImage"
+ toObject:controller
+ withKeyPath:@"values.GTMThemeBackgroundImageData"
+ options:[NSDictionary dictionaryWithObjectsAndKeys:
+ NSUnarchiveFromDataTransformerName,
+ NSValueTransformerNameBindingOption,
+ nil]];
+}
+
+- (id)init {
+ self = [super init];
+ if (self != nil) {
+ values_ = [[NSMutableDictionary alloc] init];
+ }
+ return self;
+}
+
+- (void)finalize {
+ [self unbind:@"backgroundColor"];
+ [self unbind:@"backgroundImage"];
+ [super finalize];
+}
+
+- (void)dealloc {
+ [self unbind:@"backgroundColor"];
+ [self unbind:@"backgroundImage"];
+ [values_ release];
+ [super dealloc];
+}
+
+- (void)sendChangeNotification {
+ NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
+ [nc postNotificationName:kGTMThemeDidChangeNotification
+ object:self];
+}
+
+- (id)keyForSelector:(SEL)selector
+ style:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ return [NSString stringWithFormat:@"%p.%d.%d", selector, style, state];
+}
+
+- (id)valueForSelector:(SEL)selector
+ style:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ id value = [values_ objectForKey:
+ [self keyForSelector:selector style:style state:state]];
+ return value;
+}
+
+- (void)cacheValue:(id)value
+ forSelector:(SEL)selector
+ style:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ id key = [self keyForSelector:selector style:style state:state];
+ if (key && value) [values_ setObject:value forKey:key];
+}
+
+- (void)setValue:(id)value
+ forAttribute:(NSString *)attribute
+ style:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSString *selectorString = [NSString stringWithFormat:@"%@ForStyle:state:",
+ attribute];
+ [self cacheValue:value
+ forSelector:NSSelectorFromString(selectorString)
+ style:style
+ state:state];
+}
+
+- (id)valueForAttribute:(NSString *)attribute
+ style:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSString *selectorString = [NSString stringWithFormat:@"%@ForStyle:state:",
+ attribute];
+ id key = [self keyForSelector:NSSelectorFromString(selectorString)
+ style:style
+ state:state];
+ return [values_ objectForKey:key];
+}
+
+- (void)setBackgroundColor:(NSColor *)value {
+ if (backgroundColor_ != value) {
+ [backgroundColor_ release];
+ backgroundColor_ = [value retain];
+ }
+}
+- (NSColor *)backgroundColor {
+ // For nil, we return a color that works with a normal textured window
+ if (!backgroundColor_)
+ return [NSColor colorWithCalibratedWhite:0.5 alpha:1.0];
+ return backgroundColor_;
+}
+
+- (void)setBackgroundImage:(NSImage *)value {
+ if (backgroundImage_ != value) {
+ [backgroundImage_ release];
+ backgroundImage_ = [value retain];
+ }
+}
+
+- (NSImage *)backgroundImage {
+ return backgroundImage_;
+}
+
+- (NSImage *)backgroundImageForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ id value = [self valueForSelector:_cmd style:style state:state];
+ if (value) return value;
+
+ if (style == GTMThemeStyleWindow) {
+ NSColor *color = nil;
+ if (!state) {
+ // TODO(alcor): dim images when disabled
+ color = [NSColor colorWithPatternImage:backgroundImage_];
+ // TODO(alcor): |color| is never used!
+
+ if ((state & GTMThemeStateActiveWindow) != GTMThemeStateActiveWindow) {
+ // TODO(alcor): this recursive call will also return nil since when you
+ // ask for the active style, it never returns anything.
+ NSImage *image =
+ [self backgroundImageForStyle:style
+ state:GTMThemeStateActiveWindow];
+ NSBitmapImageRep *rep = (NSBitmapImageRep *)[image
+ bestRepresentationForDevice:nil];
+ if ([rep respondsToSelector:@selector(CGImage)]) {
+ CIImage *ciimage = [CIImage imageWithCGImage:[rep CGImage]];
+ CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"
+ keysAndValues:
+ @"inputSaturation",
+ [NSNumber numberWithFloat:0.8f],
+ @"inputBrightness",
+ [NSNumber numberWithFloat:0.2f],
+ @"inputContrast",
+ [NSNumber numberWithFloat:0.8f],
+ @"inputImage",
+ ciimage,
+ nil];
+
+ ciimage = [filter valueForKey:@"outputImage"];
+
+ value = [[[NSImage alloc] init] autorelease];
+ [value addRepresentation:[NSCIImageRep imageRepWithCIImage:ciimage]];
+ }
+ }
+ }
+ }
+
+ [self cacheValue:value forSelector:_cmd style:style state:state];
+ return value;
+}
+
+- (NSBackgroundStyle)interiorBackgroundStyleForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ id value = [self valueForSelector:_cmd style:style state:state];
+ if (value) return [value intValue];
+
+ NSGradient *gradient = [self gradientForStyle:style state:state];
+ NSColor *color = [gradient interpolatedColorAtLocation:0.5];
+ BOOL dark = [color gtm_isDarkColor];
+ value = [NSNumber numberWithInt: dark ? NSBackgroundStyleLowered
+ : NSBackgroundStyleRaised];
+ [self cacheValue:value forSelector:_cmd style:style state:state];
+ return [value intValue];
+}
+
+- (BOOL)styleIsDark:(GTMThemeStyle)style state:(GTMThemeState)state {
+ id value = [self valueForSelector:_cmd style:style state:state];
+ if (value) return [value boolValue];
+
+ if (style == GTMThemeStyleToolBarButtonPressed) {
+ value = [NSNumber numberWithBool:YES];
+ } else {
+ value = [NSNumber numberWithBool:[[self backgroundColor] gtm_isDarkColor]];
+ }
+ [self cacheValue:value forSelector:_cmd style:style state:state];
+ return [value boolValue];
+}
+
+- (NSColor *)backgroundPatternColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSColor *color = [self valueForSelector:_cmd style:style state:state];
+ if (color) return color;
+
+ NSImage *image = [self backgroundImageForStyle:style state:state];
+ if (!image && backgroundColor_) {
+ NSGradient *gradient = [self gradientForStyle:style state:state];
+ if (gradient) {
+ // create a gradient image for the background
+ CGRect r = CGRectZero;
+ // TODO(alcor): figure out a better way to get an image that is the right
+ // size.
+ r.size = CGSizeMake(4, 36);
+ size_t bytesPerRow = 4 * r.size.width;
+
+ CGColorSpaceRef space
+ = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
+ CGContextRef context
+ = CGBitmapContextCreate(NULL,
+ r.size.width,
+ r.size.height,
+ 8,
+ bytesPerRow,
+ space,
+ kCGImageAlphaPremultipliedFirst);
+ CGColorSpaceRelease(space);
+ NSGraphicsContext *nsContext =
+ [NSGraphicsContext graphicsContextWithGraphicsPort:context flipped:YES];
+ [NSGraphicsContext saveGraphicsState];
+ [NSGraphicsContext setCurrentContext:nsContext];
+ [gradient drawInRect:NSMakeRect(0, 0, r.size.width, r.size.height)
+ angle:270];
+ [NSGraphicsContext restoreGraphicsState];
+
+ CGImageRef cgImage = CGBitmapContextCreateImage(context);
+ CGContextRelease(context);
+ NSBitmapImageRep *rep = nil;
+ if (cgImage) {
+ rep = [[[NSBitmapImageRep alloc] initWithCGImage:cgImage]
+ autorelease];
+ CGImageRelease(cgImage);
+ }
+
+ image = [[[NSImage alloc] initWithSize:NSSizeFromCGSize(r.size)]
+ autorelease];
+ [image addRepresentation:rep];
+ }
+ }
+ if (image)
+ color = [NSColor colorWithPatternImage:image];
+ [self cacheValue:color forSelector:_cmd style:style state:state];
+ return color;
+}
+
+- (NSGradient *)gradientForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSGradient *gradient = [self valueForSelector:_cmd style:style state:state];
+ if (gradient) return gradient;
+
+ BOOL useDarkColors = backgroundImage_ != nil || style == GTMThemeStyleWindow;
+
+ NSUInteger uses[4];
+ if (useDarkColors) {
+ uses[0] = GTMColorationBaseHighlight;
+ uses[1] = GTMColorationBaseMidtone;
+ uses[2] = GTMColorationBaseShadow;
+ uses[3] = GTMColorationBasePenumbra;
+ } else {
+ uses[0] = GTMColorationLightHighlight;
+ uses[1] = GTMColorationLightMidtone;
+ uses[2] = GTMColorationLightShadow;
+ uses[3] = GTMColorationLightPenumbra;
+ }
+ NSColor *backgroundColor = [self backgroundColor];
+
+ BOOL active =
+ (state & GTMThemeStateActiveWindow) == GTMThemeStateActiveWindow;
+ switch (style) {
+ case GTMThemeStyleTabBarDeselected: {
+ NSColor *startColor = [backgroundColor gtm_colorAdjustedFor:uses[2]
+ faded:!active];
+ NSColor *endColor = [backgroundColor gtm_colorAdjustedFor:uses[3]
+ faded:!active];
+
+ gradient = [[[NSGradient alloc] initWithStartingColor:startColor
+ endingColor:endColor]
+ autorelease];
+ break;
+ }
+ case GTMThemeStyleTabBarSelected: {
+ NSColor *startColor = [backgroundColor gtm_colorAdjustedFor:uses[0]
+ faded:!active];
+ NSColor *endColor = [backgroundColor gtm_colorAdjustedFor:uses[1]
+ faded:!active];
+ gradient = [[[NSGradient alloc] initWithStartingColor:startColor
+ endingColor:endColor]
+ autorelease];
+ break;
+ }
+ case GTMThemeStyleWindow: {
+ CGFloat luminance = [backgroundColor gtm_luminance];
+
+ // Adjust luminance so it never hits black
+ if (luminance < 0.5) {
+ CGFloat adjustment = (0.5 - luminance) / 1.5;
+ backgroundColor
+ = [backgroundColor gtm_colorByAdjustingLuminance:adjustment];
+ }
+ NSColor *startColor = [backgroundColor gtm_colorAdjustedFor:uses[1]
+ faded:!active];
+ NSColor *endColor = [backgroundColor gtm_colorAdjustedFor:uses[2]
+ faded:!active];
+
+
+ if (!active) {
+ startColor = [startColor gtm_colorByAdjustingLuminance:0.1
+ saturation:0.5];
+ endColor = [endColor gtm_colorByAdjustingLuminance:0.1
+ saturation:0.5];
+
+ }
+ gradient = [[[NSGradient alloc] initWithStartingColor:startColor
+ endingColor:endColor]
+ autorelease];
+ break;
+ }
+ case GTMThemeStyleToolBar:
+ case GTMThemeStyleToolBarButton: {
+ NSColor *startColor = [backgroundColor gtm_colorAdjustedFor:uses[0]
+ faded:!active];
+ NSColor *midColor = [backgroundColor gtm_colorAdjustedFor:uses[1]
+ faded:!active];
+ NSColor *endColor = [backgroundColor gtm_colorAdjustedFor:uses[2]
+ faded:!active];
+ NSColor *glowColor = [backgroundColor gtm_colorAdjustedFor:uses[3]
+ faded:!active];
+
+ gradient = [[[NSGradient alloc] initWithColorsAndLocations:
+ startColor, 0.0,
+ midColor, 0.25,
+ endColor, 0.5,
+ glowColor, 0.75,
+ nil] autorelease];
+ break;
+ }
+ case GTMThemeStyleToolBarButtonPressed: {
+ NSColor *startColor = [backgroundColor
+ gtm_colorAdjustedFor:GTMColorationBaseShadow
+ faded:!active];
+ NSColor *endColor = [backgroundColor
+ gtm_colorAdjustedFor:GTMColorationBaseMidtone
+ faded:!active];
+ gradient = [[[NSGradient alloc] initWithStartingColor:startColor
+ endingColor:endColor]
+ autorelease];
+ break;
+ }
+ default:
+ _GTMDevLog(@"Unexpected style: %d", style);
+ break;
+ }
+
+ [self cacheValue:gradient forSelector:_cmd style:style state:state];
+ return gradient;
+}
+
+- (NSColor *)strokeColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSColor *color = [self valueForSelector:_cmd style:style state:state];
+ if (color) return color;
+ NSColor *backgroundColor = [self backgroundColor];
+ BOOL active = (state & GTMThemeStateActiveWindow)
+ == GTMThemeStateActiveWindow;
+ switch (style) {
+ case GTMThemeStyleToolBarButton:
+ color = [[backgroundColor gtm_colorAdjustedFor:GTMColorationDarkShadow
+ faded:!active]
+ colorWithAlphaComponent:0.3];
+ break;
+ case GTMThemeStyleToolBar:
+ default:
+ color = [[self backgroundColor]
+ gtm_colorAdjustedFor:GTMColorationBaseShadow
+ faded:!active];
+ break;
+ }
+
+ [self cacheValue:color forSelector:_cmd style:style state:state];
+ return color;
+}
+
+- (NSColor *)iconColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSColor *color = [self valueForSelector:_cmd style:style state:state];
+ if (color) return color;
+
+ if ([self styleIsDark:style state:state]) {
+ color = [NSColor whiteColor];
+ } else {
+ color = [NSColor blackColor];
+ }
+
+ [self cacheValue:color forSelector:_cmd style:style state:state];
+ return color;
+}
+
+- (NSColor *)textColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSColor *color = [self valueForSelector:_cmd style:style state:state];
+ if (color) return color;
+
+ if ([self styleIsDark:style state:state]) {
+ color = [NSColor whiteColor];
+ } else {
+ color = [NSColor blackColor];
+ }
+
+ [self cacheValue:color forSelector:_cmd style:style state:state];
+ return color;
+}
+
+- (NSColor *)backgroundColorForStyle:(GTMThemeStyle)style
+ state:(GTMThemeState)state {
+ NSColor *color = [self valueForSelector:_cmd style:style state:state];
+ if (color) return color;
+
+ // TODO(alcor): calculate this based off base background color
+ // Generally this will be set by a theme provider
+ color = [self backgroundColor];
+
+ [self cacheValue:color forSelector:_cmd style:style state:state];
+ return color;
+}
+@end
diff --git a/chrome/browser/cocoa/autocomplete_text_field_cell.mm b/chrome/browser/cocoa/autocomplete_text_field_cell.mm
index e737025..8558b80 100644
--- a/chrome/browser/cocoa/autocomplete_text_field_cell.mm
+++ b/chrome/browser/cocoa/autocomplete_text_field_cell.mm
@@ -7,7 +7,7 @@
#include "app/gfx/font.h"
#include "app/resource_bundle.h"
#include "base/logging.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
namespace {
diff --git a/chrome/browser/cocoa/background_gradient_view.h b/chrome/browser/cocoa/background_gradient_view.h
index 547a08d..177967d 100644
--- a/chrome/browser/cocoa/background_gradient_view.h
+++ b/chrome/browser/cocoa/background_gradient_view.h
@@ -6,7 +6,7 @@
#define CHROME_BROWSER_COCOA_BACKGROUND_GRADIENT_VIEW_H_
#import <Cocoa/Cocoa.h>
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
// A custom view that draws a 'standard' background gradient.
// Base class for other Chromium views.
diff --git a/chrome/browser/cocoa/bookmark_bar_toolbar_view.mm b/chrome/browser/cocoa/bookmark_bar_toolbar_view.mm
index b665a29..39efab9 100644
--- a/chrome/browser/cocoa/bookmark_bar_toolbar_view.mm
+++ b/chrome/browser/cocoa/bookmark_bar_toolbar_view.mm
@@ -11,8 +11,8 @@
#import "chrome/browser/cocoa/browser_window_controller.h"
#import "chrome/browser/cocoa/bookmark_bar_constants.h"
#import "chrome/browser/cocoa/bookmark_bar_controller.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#include "chrome/browser/ntp_background_util.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
const CGFloat kBorderRadius = 3.0;
diff --git a/chrome/browser/cocoa/bookmark_bar_view.mm b/chrome/browser/cocoa/bookmark_bar_view.mm
index fd7bbe8..ae8ca8c 100644
--- a/chrome/browser/cocoa/bookmark_bar_view.mm
+++ b/chrome/browser/cocoa/bookmark_bar_view.mm
@@ -6,7 +6,7 @@
#import "chrome/browser/cocoa/bookmark_bar_controller.h"
#import "chrome/browser/cocoa/bookmark_button.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "third_party/mozilla/include/NSPasteboard+Utils.h"
@interface BookmarkBarView (Private)
diff --git a/chrome/browser/cocoa/bookmark_button_cell.mm b/chrome/browser/cocoa/bookmark_button_cell.mm
index cd8e5a8..884a00a 100644
--- a/chrome/browser/cocoa/bookmark_button_cell.mm
+++ b/chrome/browser/cocoa/bookmark_button_cell.mm
@@ -5,7 +5,7 @@
#include "base/logging.h"
#import "chrome/browser/cocoa/bookmark_button_cell.h"
#import "chrome/browser/cocoa/bookmark_menu.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
@implementation BookmarkButtonCell
diff --git a/chrome/browser/cocoa/browser_frame_view.mm b/chrome/browser/cocoa/browser_frame_view.mm
index 528b2f5..c4bcf53 100644
--- a/chrome/browser/cocoa/browser_frame_view.mm
+++ b/chrome/browser/cocoa/browser_frame_view.mm
@@ -10,7 +10,7 @@
#include "base/logging.h"
#include "base/scoped_nsautorelease_pool.h"
#import "chrome/browser/cocoa/chrome_browser_window.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
@interface NSView (Swizzles)
- (void)drawRectOriginal:(NSRect)rect;
diff --git a/chrome/browser/cocoa/browser_theme_provider_init.h b/chrome/browser/cocoa/browser_theme_provider_init.h
index 0959e9c..aeb6466 100644
--- a/chrome/browser/cocoa/browser_theme_provider_init.h
+++ b/chrome/browser/cocoa/browser_theme_provider_init.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_COCOA_BROWSER_THEME_PROVIDER_INIT_H_
#define CHROME_BROWSER_COCOA_BROWSER_THEME_PROVIDER_INIT_H_
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
class BrowserThemeProvider;
diff --git a/chrome/browser/cocoa/browser_window_controller.h b/chrome/browser/cocoa/browser_window_controller.h
index ad38462..3021770 100644
--- a/chrome/browser/cocoa/browser_window_controller.h
+++ b/chrome/browser/cocoa/browser_window_controller.h
@@ -19,9 +19,9 @@
#import "chrome/browser/cocoa/bookmark_bubble_controller.h"
#import "chrome/browser/cocoa/browser_command_executor.h"
#import "chrome/browser/cocoa/url_drop_target.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "chrome/browser/cocoa/view_resizer.h"
#include "chrome/browser/sync/sync_ui_util.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
class Browser;
diff --git a/chrome/browser/cocoa/bubble_view.mm b/chrome/browser/cocoa/bubble_view.mm
index f590113..515b9a5 100644
--- a/chrome/browser/cocoa/bubble_view.mm
+++ b/chrome/browser/cocoa/bubble_view.mm
@@ -4,9 +4,9 @@
#import "chrome/browser/cocoa/bubble_view.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "third_party/GTM/AppKit/GTMNSBezierPath+RoundRect.h"
#import "third_party/GTM/AppKit/GTMNSColor+Luminance.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
// The roundedness of the edges of our bubble.
const int kBubbleCornerRadius = 4.0f;
diff --git a/chrome/browser/cocoa/download_item_cell.mm b/chrome/browser/cocoa/download_item_cell.mm
index 95657ca..f434e5e 100644
--- a/chrome/browser/cocoa/download_item_cell.mm
+++ b/chrome/browser/cocoa/download_item_cell.mm
@@ -13,9 +13,9 @@
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/download/download_util.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "third_party/GTM/AppKit/GTMNSAnimation+Duration.h"
#import "third_party/GTM/AppKit/GTMNSColor+Luminance.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
namespace {
diff --git a/chrome/browser/cocoa/download_item_controller.mm b/chrome/browser/cocoa/download_item_controller.mm
index 85258fd..ec6fe8e 100644
--- a/chrome/browser/cocoa/download_item_controller.mm
+++ b/chrome/browser/cocoa/download_item_controller.mm
@@ -13,13 +13,13 @@
#import "chrome/browser/cocoa/download_item_cell.h"
#include "chrome/browser/cocoa/download_item_mac.h"
#import "chrome/browser/cocoa/download_shelf_controller.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "chrome/browser/cocoa/ui_localizer.h"
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_shelf.h"
#include "chrome/browser/download/download_util.h"
#include "grit/generated_resources.h"
#include "grit/theme_resources.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
#include "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h"
static const int kTextWidth = 140; // Pixels
diff --git a/chrome/browser/cocoa/download_shelf_view.mm b/chrome/browser/cocoa/download_shelf_view.mm
index 1dcc562..15a13a2 100644
--- a/chrome/browser/cocoa/download_shelf_view.mm
+++ b/chrome/browser/cocoa/download_shelf_view.mm
@@ -5,7 +5,7 @@
#import "chrome/browser/cocoa/download_shelf_view.h"
#include "base/scoped_nsobject.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
@implementation DownloadShelfView
diff --git a/chrome/browser/cocoa/floating_bar_backing_view.mm b/chrome/browser/cocoa/floating_bar_backing_view.mm
index b4f7054..1c9757f 100644
--- a/chrome/browser/cocoa/floating_bar_backing_view.mm
+++ b/chrome/browser/cocoa/floating_bar_backing_view.mm
@@ -3,7 +3,7 @@
// found in the LICENSE file.
#include "chrome/browser/cocoa/floating_bar_backing_view.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
@implementation FloatingBarBackingView
diff --git a/chrome/browser/cocoa/gradient_button_cell.mm b/chrome/browser/cocoa/gradient_button_cell.mm
index 43b865f..0ad0bab 100644
--- a/chrome/browser/cocoa/gradient_button_cell.mm
+++ b/chrome/browser/cocoa/gradient_button_cell.mm
@@ -5,7 +5,7 @@
#include "base/logging.h"
#import "base/scoped_nsobject.h"
#include "chrome/browser/cocoa/gradient_button_cell.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "third_party/GTM/AppKit/GTMNSColor+Luminance.h"
@interface GradientButtonCell (Private)
diff --git a/chrome/browser/cocoa/info_bubble_view.mm b/chrome/browser/cocoa/info_bubble_view.mm
index 4db4ab8..12d9293 100644
--- a/chrome/browser/cocoa/info_bubble_view.mm
+++ b/chrome/browser/cocoa/info_bubble_view.mm
@@ -5,7 +5,7 @@
#import "chrome/browser/cocoa/info_bubble_view.h"
#include "base/logging.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
// TODO(andybons): confirm constants with UI dudes.
extern const CGFloat kBubbleArrowHeight = 8.0;
diff --git a/chrome/browser/cocoa/infobar_gradient_view.mm b/chrome/browser/cocoa/infobar_gradient_view.mm
index a5422c5..cba6574 100644
--- a/chrome/browser/cocoa/infobar_gradient_view.mm
+++ b/chrome/browser/cocoa/infobar_gradient_view.mm
@@ -3,7 +3,7 @@
// found in the LICENSE file.
#include "chrome/browser/cocoa/infobar_gradient_view.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
const double kBackgroundColorTop[3] =
{255.0 / 255.0, 242.0 / 255.0, 183.0 / 255.0};
diff --git a/chrome/browser/cocoa/status_bubble_mac.mm b/chrome/browser/cocoa/status_bubble_mac.mm
index c511253..c9cecfb 100644
--- a/chrome/browser/cocoa/status_bubble_mac.mm
+++ b/chrome/browser/cocoa/status_bubble_mac.mm
@@ -13,11 +13,11 @@
#include "base/string_util.h"
#include "base/sys_string_conversions.h"
#import "chrome/browser/cocoa/bubble_view.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#include "googleurl/src/gurl.h"
#import "third_party/GTM/AppKit/GTMNSAnimation+Duration.h"
#import "third_party/GTM/AppKit/GTMNSBezierPath+RoundRect.h"
#import "third_party/GTM/AppKit/GTMNSColor+Luminance.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
namespace {
diff --git a/chrome/browser/cocoa/status_bubble_mac_unittest.mm b/chrome/browser/cocoa/status_bubble_mac_unittest.mm
index f05b79f..0d0fbb9 100644
--- a/chrome/browser/cocoa/status_bubble_mac_unittest.mm
+++ b/chrome/browser/cocoa/status_bubble_mac_unittest.mm
@@ -9,11 +9,11 @@
#import "chrome/browser/cocoa/bubble_view.h"
#import "chrome/browser/cocoa/browser_test_helper.h"
#import "chrome/browser/cocoa/cocoa_test_helper.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "chrome/browser/cocoa/status_bubble_mac.h"
#include "googleurl/src/gurl.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
@interface StatusBubbleMacTestWindowDelegate : NSObject <GTMThemeDelegate>
@end
diff --git a/chrome/browser/cocoa/styled_text_field_cell.mm b/chrome/browser/cocoa/styled_text_field_cell.mm
index 60418d9..e0134fa 100644
--- a/chrome/browser/cocoa/styled_text_field_cell.mm
+++ b/chrome/browser/cocoa/styled_text_field_cell.mm
@@ -7,7 +7,7 @@
#include "app/gfx/font.h"
#include "app/resource_bundle.h"
#include "base/logging.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
@implementation StyledTextFieldCell
diff --git a/chrome/browser/cocoa/tab_controller.mm b/chrome/browser/cocoa/tab_controller.mm
index c9469e0..47360f0 100644
--- a/chrome/browser/cocoa/tab_controller.mm
+++ b/chrome/browser/cocoa/tab_controller.mm
@@ -4,12 +4,12 @@
#include "app/l10n_util_mac.h"
#include "base/mac_util.h"
+#import "chrome/browser/cocoa/GTMTheme.h"
#import "chrome/browser/cocoa/menu_controller.h"
#import "chrome/browser/cocoa/tab_controller.h"
#import "chrome/browser/cocoa/tab_controller_target.h"
#import "chrome/browser/cocoa/tab_view.h"
#include "grit/generated_resources.h"
-#import "third_party/GTM/AppKit/GTMTheme.h"
@implementation TabController
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 54fa4fe9..a927299 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -316,7 +316,7 @@
'browser/chromeos/login/login_manager_view.cc',
'browser/chromeos/login/login_manager_view.h',
'browser/chromeos/login/login_wizard_view.cc',
- 'browser/chromeos/login/login_wizard_view.h',
+ 'browser/chromeos/login/login_wizard_view.h',
'browser/chromeos/login/network_selection_view.cc',
'browser/chromeos/login/network_selection_view.h',
'browser/chromeos/login/rounded_rect_painter.cc',
@@ -547,6 +547,7 @@
'browser/cocoa/fullscreen_window.mm',
'browser/cocoa/gradient_button_cell.h',
'browser/cocoa/gradient_button_cell.mm',
+ 'browser/cocoa/GTMTheme.m',
'browser/cocoa/history_menu_bridge.h',
'browser/cocoa/history_menu_bridge.mm',
'browser/cocoa/history_menu_cocoa_controller.h',
@@ -2257,7 +2258,6 @@
'../third_party/GTM/AppKit/GTMIBArray.m',
'../third_party/GTM/AppKit/GTMNSBezierPath+RoundRect.m',
'../third_party/GTM/AppKit/GTMNSColor+Luminance.m',
- '../third_party/GTM/AppKit/GTMTheme.m',
'../third_party/GTM/AppKit/GTMUILocalizer.h',
'../third_party/GTM/AppKit/GTMUILocalizer.m',
'../third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h',