diff options
-rw-r--r-- | AppKit/GTMTheme.h | 139 | ||||
-rw-r--r-- | AppKit/GTMTheme.m | 521 | ||||
-rw-r--r-- | AppKit/GTMThemeTest.m | 72 | ||||
-rw-r--r-- | GTM.xcodeproj/project.pbxproj | 12 | ||||
-rw-r--r-- | ReleaseNotes.txt | 3 |
5 files changed, 3 insertions, 744 deletions
diff --git a/AppKit/GTMTheme.h b/AppKit/GTMTheme.h deleted file mode 100644 index a7b0958..0000000 --- a/AppKit/GTMTheme.h +++ /dev/null @@ -1,139 +0,0 @@ -// -// GTMTheme.h -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import "GTMDefines.h" -#import <AppKit/AppKit.h> - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - -// 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 - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 diff --git a/AppKit/GTMTheme.m b/AppKit/GTMTheme.m deleted file mode 100644 index f1c3ecd..0000000 --- a/AppKit/GTMTheme.m +++ /dev/null @@ -1,521 +0,0 @@ -// -// GTMTheme.m -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - -#import "GTMTheme.h" -#import "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) { - if (!state) { - // TODO(alcor): dim images when disabled - - 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 - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 diff --git a/AppKit/GTMThemeTest.m b/AppKit/GTMThemeTest.m deleted file mode 100644 index 0f5c996..0000000 --- a/AppKit/GTMThemeTest.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// GTMThemeTest.m -// -// Copyright 2009 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not -// use this file except in compliance with the License. You may obtain a copy -// of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -// License for the specific language governing permissions and limitations under -// the License. -// - -#import <Cocoa/Cocoa.h> - -#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 - -#import "GTMSenTestCase.h" -#import "GTMTheme.h" - -@interface GTMThemeTest : GTMTestCase -@end - -@implementation GTMThemeTest - -- (void)testTheming { - GTMTheme *theme = [GTMTheme defaultTheme]; - - // When there are no values, use window default colors - STAssertEqualObjects([theme backgroundColor], - [NSColor colorWithCalibratedWhite:0.5 alpha:1.0], nil); - STAssertNil([theme backgroundImageForStyle:GTMThemeStyleWindow - state:GTMThemeStateActiveWindow], - nil); - STAssertNil([theme backgroundImage], nil); - - NSColor *color = [NSColor redColor]; - NSData *colorData = [NSArchiver archivedDataWithRootObject:color]; - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - [defaults setObject:colorData forKey:kGTMThemeBackgroundColorKey]; - - STAssertNotNil([theme textColorForStyle:GTMThemeStyleToolBar - state:GTMThemeStateActiveWindow], nil); - STAssertNotNil([theme backgroundColorForStyle:GTMThemeStyleToolBar - state:GTMThemeStateActiveWindow], nil); - STAssertNotNil([theme backgroundPatternColorForStyle:GTMThemeStyleToolBar - state:GTMThemeStateActiveWindow], nil); - STAssertNotNil([theme strokeColorForStyle:GTMThemeStyleToolBar - state:GTMThemeStateActiveWindow], nil); - STAssertNotNil([theme gradientForStyle:GTMThemeStyleToolBar - state:GTMThemeStateActiveWindow], nil); - - STAssertEqualObjects([theme backgroundColor], color, nil); - - NSBackgroundStyle style - = [theme interiorBackgroundStyleForStyle:GTMThemeStyleToolBar - state:GTMThemeStateActiveWindow]; - // TODO(alcor): add more of these cases once the constants are more concrete - STAssertEquals(style, (NSBackgroundStyle)NSBackgroundStyleRaised, nil); - - [[NSUserDefaults standardUserDefaults] removeObjectForKey: - @"GTMThemeBackgroundColor"]; -} - -@end - -#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 diff --git a/GTM.xcodeproj/project.pbxproj b/GTM.xcodeproj/project.pbxproj index 68c453d..b8c34fa 100644 --- a/GTM.xcodeproj/project.pbxproj +++ b/GTM.xcodeproj/project.pbxproj @@ -70,8 +70,6 @@ 7F4C015F1055AD4200F88238 /* GTMUILocalizerWindow1State_10_4.gtmUTState in Resources */ = {isa = PBXBuildFile; fileRef = 7F4C015E1055AD4200F88238 /* GTMUILocalizerWindow1State_10_4.gtmUTState */; }; 7F511DF90F4B0378009F41B6 /* GTMNSColor+Luminance.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F511DF30F4B0378009F41B6 /* GTMNSColor+Luminance.h */; settings = {ATTRIBUTES = (Public, ); }; }; 7F511DFA0F4B0378009F41B6 /* GTMNSColor+Luminance.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F511DF40F4B0378009F41B6 /* GTMNSColor+Luminance.m */; }; - 7F511DFC0F4B0378009F41B6 /* GTMTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F511DF60F4B0378009F41B6 /* GTMTheme.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F511DFE0F4B0378009F41B6 /* GTMTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F511DF80F4B0378009F41B6 /* GTMTheme.m */; }; 7F6840D2105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7F6840D1105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib */; }; 7F97DB31104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCellTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F97DB2F104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCellTest.m */; }; 7F97DB32104EBCA0004DDDEE /* GTMFadeTruncatingTextFieldCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F97DB2D104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -199,7 +197,6 @@ 8BAA9EFA0F7C2AB500DF4F12 /* GTMNSColor+LuminanceTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F511DF50F4B0378009F41B6 /* GTMNSColor+LuminanceTest.m */; }; 8BAA9EFB0F7C2AB500DF4F12 /* GTMNSImage+ScalingTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F3EB3930E5E0A2100A7A75E /* GTMNSImage+ScalingTest.m */; }; 8BAA9EFC0F7C2AB500DF4F12 /* GTMNSWorkspace+RunningTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BA01B5F0F144BE500926923 /* GTMNSWorkspace+RunningTest.m */; }; - 8BAA9EFD0F7C2AB500DF4F12 /* GTMThemeTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F511DF70F4B0378009F41B6 /* GTMThemeTest.m */; }; 8BC045C20DAE899100C2D1CA /* GTMGeometryUtilsTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F48FE2800D198D0E009257D2 /* GTMGeometryUtilsTest.m */; }; 8BC046B90DAE8C4B00C2D1CA /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BC046B80DAE8C4B00C2D1CA /* ApplicationServices.framework */; }; 8BC04CD80DB003D800C2D1CA /* GTMMethodCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B6F31F40DA3489B0052CA40 /* GTMMethodCheck.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -493,9 +490,6 @@ 7F511DF30F4B0378009F41B6 /* GTMNSColor+Luminance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSColor+Luminance.h"; sourceTree = "<group>"; }; 7F511DF40F4B0378009F41B6 /* GTMNSColor+Luminance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSColor+Luminance.m"; sourceTree = "<group>"; }; 7F511DF50F4B0378009F41B6 /* GTMNSColor+LuminanceTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSColor+LuminanceTest.m"; sourceTree = "<group>"; }; - 7F511DF60F4B0378009F41B6 /* GTMTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMTheme.h; sourceTree = "<group>"; }; - 7F511DF70F4B0378009F41B6 /* GTMThemeTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMThemeTest.m; sourceTree = "<group>"; }; - 7F511DF80F4B0378009F41B6 /* GTMTheme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMTheme.m; sourceTree = "<group>"; }; 7F6840D1105375A70057F4FA /* GTMUILocalizerTestWindow_10_4.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GTMUILocalizerTestWindow_10_4.xib; sourceTree = "<group>"; }; 7F97DB2D104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMFadeTruncatingTextFieldCell.h; sourceTree = "<group>"; }; 7F97DB2E104EBC8D004DDDEE /* GTMFadeTruncatingTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMFadeTruncatingTextFieldCell.m; sourceTree = "<group>"; }; @@ -1156,9 +1150,6 @@ 8BA01B5B0F144BD800926923 /* GTMNSWorkspace+Running.m */, 8BA01B5C0F144BD800926923 /* GTMNSWorkspace+Running.h */, 8BA01B5F0F144BE500926923 /* GTMNSWorkspace+RunningTest.m */, - 7F511DF60F4B0378009F41B6 /* GTMTheme.h */, - 7F511DF80F4B0378009F41B6 /* GTMTheme.m */, - 7F511DF70F4B0378009F41B6 /* GTMThemeTest.m */, F47F1C740D490E5C00925B8F /* GTMShading.h */, 8B4099490F93C5CC00DF540E /* GTMUILocalizer.h */, 8B40994A0F93C5CC00DF540E /* GTMUILocalizer.m */, @@ -1468,7 +1459,6 @@ 8B6C15930F356E6400E51E5D /* GTMNSObject+KeyValueObserving.h in Headers */, 1012DF560F4252BD004794DB /* GTMAbstractDOListener.h in Headers */, 7F511DF90F4B0378009F41B6 /* GTMNSColor+Luminance.h in Headers */, - 7F511DFC0F4B0378009F41B6 /* GTMTheme.h in Headers */, 10998E920F4B5952007F179D /* GTMTransientRootProxy.h in Headers */, 10998EF50F4B5D1A007F179D /* GTMTransientRootPortProxy.h in Headers */, 8B40994B0F93C5CC00DF540E /* GTMUILocalizer.h in Headers */, @@ -2032,7 +2022,6 @@ 8B6C15940F356E6400E51E5D /* GTMNSObject+KeyValueObserving.m in Sources */, 1012DF570F4252BD004794DB /* GTMAbstractDOListener.m in Sources */, 7F511DFA0F4B0378009F41B6 /* GTMNSColor+Luminance.m in Sources */, - 7F511DFE0F4B0378009F41B6 /* GTMTheme.m in Sources */, 10998E8F0F4B593E007F179D /* GTMTransientRootProxy.m in Sources */, 10998EF40F4B5D1A007F179D /* GTMTransientRootPortProxy.m in Sources */, 8B40994C0F93C5CC00DF540E /* GTMUILocalizer.m in Sources */, @@ -2074,7 +2063,6 @@ 8BAA9EFA0F7C2AB500DF4F12 /* GTMNSColor+LuminanceTest.m in Sources */, 8BAA9EFB0F7C2AB500DF4F12 /* GTMNSImage+ScalingTest.m in Sources */, 8BAA9EFC0F7C2AB500DF4F12 /* GTMNSWorkspace+RunningTest.m in Sources */, - 8BAA9EFD0F7C2AB500DF4F12 /* GTMThemeTest.m in Sources */, 8B409BC60F94405A00DF540E /* GTMUILocalizerTest.m in Sources */, 8207B89D0FEA7AA6008A527B /* GTMWindowSheetControllerTest.m in Sources */, F42E2C69102B1261004DF054 /* GTMUILocalizerAndLayoutTweakerTest.m in Sources */, diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 4f0b6b8..06a8c1d 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -396,6 +396,9 @@ Changes since 1.5.1 - Added GTM_NSSTRINGIFY_MACRO for turning other macros into NSStrings. +- Removed GTMTheme because it wasn't generic enough for inclusion in GTM, and + was never fully implemented + Release 1.5.1 Changes since 1.5.0 |