OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "ui/app_list/cocoa/apps_grid_view_item.h" | 5 #import "ui/app_list/cocoa/apps_grid_view_item.h" |
6 | 6 |
7 #include "base/mac/foundation_util.h" | 7 #include "base/mac/foundation_util.h" |
8 #include "base/memory/scoped_nsobject.h" | 8 #include "base/memory/scoped_nsobject.h" |
9 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
10 #include "skia/ext/skia_utils_mac.h" | 10 #include "skia/ext/skia_utils_mac.h" |
11 #include "ui/app_list/app_list_constants.h" | 11 #include "ui/app_list/app_list_constants.h" |
12 #include "ui/app_list/app_list_item_model.h" | 12 #include "ui/app_list/app_list_item_model.h" |
13 #include "ui/app_list/app_list_item_model_observer.h" | 13 #include "ui/app_list/app_list_item_model_observer.h" |
14 #include "ui/base/resource/resource_bundle.h" | 14 #include "ui/base/resource/resource_bundle.h" |
15 #include "ui/gfx/image/image_skia_util_mac.h" | 15 #include "ui/gfx/image/image_skia_util_mac.h" |
16 #include "ui/gfx/font.h" | 16 #include "ui/gfx/font.h" |
17 #include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" | |
17 | 18 |
18 namespace { | 19 namespace { |
19 | 20 |
20 // Padding from the top of the tile to the top of the app icon. | 21 // Padding from the top of the tile to the top of the app icon. |
21 const CGFloat kTileTopPadding = 10; | 22 const CGFloat kTileTopPadding = 10; |
22 | 23 |
23 } // namespace | 24 } // namespace |
24 | 25 |
25 namespace app_list { | 26 namespace app_list { |
26 | 27 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
83 @private | 84 @private |
84 BOOL selected_; | 85 BOOL selected_; |
85 } | 86 } |
86 | 87 |
87 - (NSButton*)button; | 88 - (NSButton*)button; |
88 | 89 |
89 - (void)setSelected:(BOOL)flag; | 90 - (void)setSelected:(BOOL)flag; |
90 | 91 |
91 @end | 92 @end |
92 | 93 |
94 @interface AppsGridItemButtonCell : NSButtonCell { | |
95 @private | |
96 BOOL hasShadow_; | |
97 } | |
98 | |
99 @property(assign, nonatomic) BOOL hasShadow; | |
100 | |
101 @end | |
102 | |
103 @interface AppsGridItemButton : NSButton; | |
104 @end | |
105 | |
93 @implementation AppsGridItemBackgroundView | 106 @implementation AppsGridItemBackgroundView |
94 | 107 |
95 - (NSButton*)button { | 108 - (NSButton*)button { |
96 return base::mac::ObjCCastStrict<NSButton>([[self subviews] objectAtIndex:0]); | 109 return base::mac::ObjCCastStrict<NSButton>([[self subviews] objectAtIndex:0]); |
97 } | 110 } |
98 | 111 |
99 - (void)setSelected:(BOOL)flag { | 112 - (void)setSelected:(BOOL)flag { |
100 if (selected_ == flag) | 113 if (selected_ == flag) |
101 return; | 114 return; |
102 | 115 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
142 @interface AppsGridViewItem () | 155 @interface AppsGridViewItem () |
143 | 156 |
144 - (AppsGridItemBackgroundView*)itemBackgroundView; | 157 - (AppsGridItemBackgroundView*)itemBackgroundView; |
145 | 158 |
146 @end | 159 @end |
147 | 160 |
148 @implementation AppsGridViewItem | 161 @implementation AppsGridViewItem |
149 | 162 |
150 - (id)initWithSize:(NSSize)tileSize { | 163 - (id)initWithSize:(NSSize)tileSize { |
151 if ((self = [super init])) { | 164 if ((self = [super init])) { |
152 scoped_nsobject<NSButton> prototypeButton( | 165 scoped_nsobject<AppsGridItemButton> prototypeButton( |
153 [[NSButton alloc] initWithFrame:NSMakeRect( | 166 [[AppsGridItemButton alloc] initWithFrame:NSMakeRect( |
154 0, 0, tileSize.width, tileSize.height - kTileTopPadding)]); | 167 0, 0, tileSize.width, tileSize.height - kTileTopPadding)]); |
155 | 168 |
156 // This NSButton style always positions the icon at the very top of the | 169 // This NSButton style always positions the icon at the very top of the |
157 // button frame. AppsGridViewItem uses an enclosing view so that it is | 170 // button frame. AppsGridViewItem uses an enclosing view so that it is |
158 // visually correct. | 171 // visually correct. |
159 [prototypeButton setImagePosition:NSImageAbove]; | 172 [prototypeButton setImagePosition:NSImageAbove]; |
160 [prototypeButton setButtonType:NSMomentaryChangeButton]; | 173 [prototypeButton setButtonType:NSMomentaryChangeButton]; |
161 [prototypeButton setBordered:NO]; | 174 [prototypeButton setBordered:NO]; |
162 | 175 |
163 [[prototypeButton cell] | 176 [[prototypeButton cell] |
(...skipping 11 matching lines...) Expand all Loading... | |
175 | 188 |
176 - (void)setModel:(app_list::AppListItemModel*)itemModel { | 189 - (void)setModel:(app_list::AppListItemModel*)itemModel { |
177 if (!itemModel) { | 190 if (!itemModel) { |
178 observerBridge_.reset(); | 191 observerBridge_.reset(); |
179 return; | 192 return; |
180 } | 193 } |
181 | 194 |
182 NSButton* button = [self button]; | 195 NSButton* button = [self button]; |
183 [button setTitle:base::SysUTF8ToNSString(itemModel->title())]; | 196 [button setTitle:base::SysUTF8ToNSString(itemModel->title())]; |
184 [button setImage:gfx::NSImageFromImageSkia(itemModel->icon())]; | 197 [button setImage:gfx::NSImageFromImageSkia(itemModel->icon())]; |
198 [[button cell] setHasShadow:itemModel->has_shadow()]; | |
185 observerBridge_.reset(new app_list::ItemModelObserverBridge(self, itemModel)); | 199 observerBridge_.reset(new app_list::ItemModelObserverBridge(self, itemModel)); |
186 | 200 |
187 if (trackingArea_.get()) | 201 if (trackingArea_.get()) |
188 [[self view] removeTrackingArea:trackingArea_.get()]; | 202 [[self view] removeTrackingArea:trackingArea_.get()]; |
189 | 203 |
190 trackingArea_.reset( | 204 trackingArea_.reset( |
191 [[CrTrackingArea alloc] initWithRect:NSZeroRect | 205 [[CrTrackingArea alloc] initWithRect:NSZeroRect |
192 options:NSTrackingInVisibleRect | | 206 options:NSTrackingInVisibleRect | |
193 NSTrackingMouseEnteredAndExited | | 207 NSTrackingMouseEnteredAndExited | |
194 NSTrackingActiveInKeyWindow | 208 NSTrackingActiveInKeyWindow |
(...skipping 23 matching lines...) Expand all Loading... | |
218 - (void)mouseExited:(NSEvent*)theEvent { | 232 - (void)mouseExited:(NSEvent*)theEvent { |
219 [self setSelected:NO]; | 233 [self setSelected:NO]; |
220 } | 234 } |
221 | 235 |
222 - (void)setSelected:(BOOL)flag { | 236 - (void)setSelected:(BOOL)flag { |
223 [[self itemBackgroundView] setSelected:flag]; | 237 [[self itemBackgroundView] setSelected:flag]; |
224 [super setSelected:flag]; | 238 [super setSelected:flag]; |
225 } | 239 } |
226 | 240 |
227 @end | 241 @end |
242 | |
243 @implementation AppsGridItemButton | |
244 | |
245 + (Class)cellClass { | |
246 return [AppsGridItemButtonCell class]; | |
247 } | |
248 | |
249 @end | |
250 | |
251 @implementation AppsGridItemButtonCell | |
252 | |
253 @synthesize hasShadow = hasShadow_; | |
254 | |
255 - (void)drawImage:(NSImage*)image | |
256 withFrame:(NSRect)frame | |
257 inView:(NSView*)controlView { | |
258 if (!hasShadow_) { | |
259 [super drawImage:image | |
260 withFrame:frame | |
261 inView:controlView]; | |
262 return; | |
263 } | |
264 | |
265 scoped_nsobject<NSShadow> shadow([[NSShadow alloc] init]); | |
266 gfx::ScopedNSGraphicsContextSaveGState context; | |
267 [shadow setShadowOffset:NSMakeSize(0, -2)]; | |
268 [shadow setShadowBlurRadius:2.0]; | |
269 [shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.14]]; | |
tapted
2013/05/17 14:50:39
note: source for these numbers https://code.google
sail
2013/05/17 17:41:33
A more direct way to do this is [NSColor colorWith
tapted
2013/05/17 23:39:30
Done.
| |
270 [shadow set]; | |
271 | |
272 [super drawImage:image | |
273 withFrame:frame | |
274 inView:controlView]; | |
275 } | |
276 | |
277 @end | |
OLD | NEW |