1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
//
// 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
NSPoint backgroundImagePhase_; // 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;
// the phase of the background image
- (NSPoint)backgroundImagePhase;
// set the phase of the background image
- (void)setBackgroundImagePhase:(NSPoint)phase;
// 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;
@end
// Convenience categories for NSWindow and NSView to access the current theme
// Default implementation polls the window delegate
@interface NSWindow (GTMTheme)
- (GTMTheme *)gtm_theme;
@end
@interface NSView (GTMTheme)
- (GTMTheme *)gtm_theme;
@end
@protocol GTMThemeDelegate
- (GTMTheme *)gtm_themeForWindow:(NSWindow *)window;
@end
#endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
|