[428] | 1 | //
|
---|
| 2 | // ICeCoffEEMenuOutlineView.m
|
---|
| 3 | // ICeCoffEE
|
---|
| 4 | //
|
---|
| 5 | // Created by Nicholas Riley on 3/2/08.
|
---|
| 6 | // Copyright 2008 Nicholas Riley. All rights reserved.
|
---|
| 7 | //
|
---|
| 8 |
|
---|
| 9 | #import "ICeCoffEEMenuOutlineView.h"
|
---|
| 10 | #import <Carbon/Carbon.h>
|
---|
| 11 |
|
---|
| 12 | @implementation ICeCoffEEMenuOutlineView
|
---|
| 13 |
|
---|
| 14 | - (void)highlightSelectionInClipRect:(NSRect)clipRect;
|
---|
| 15 | {
|
---|
| 16 | NSRange rows = [self rowsInRect: clipRect];
|
---|
| 17 | unsigned maxRow = NSMaxRange(rows);
|
---|
| 18 |
|
---|
| 19 | HIThemeMenuItemDrawInfo drawInfo = {0, kThemeMenuItemHierBackground | kThemeMenuItemPopUpBackground, kThemeMenuSelected};
|
---|
| 20 | if ([[self window] firstResponder] != self || [NSApp keyWindow] != [self window]) {
|
---|
| 21 | NSLog(@"firstResponder %@ key %@ main %@ this %@", [[self window] firstResponder], [NSApp keyWindow], [NSApp mainWindow], [self window]);
|
---|
| 22 | [super highlightSelectionInClipRect: clipRect];
|
---|
| 23 | return;
|
---|
| 24 | }
|
---|
| 25 |
|
---|
| 26 | for (unsigned row = rows.location ; row < maxRow ; ++row) {
|
---|
| 27 | if (![self isRowSelected: row])
|
---|
| 28 | continue;
|
---|
| 29 |
|
---|
| 30 | NSRect rowRect = [self rectOfRow: row];
|
---|
| 31 | rowRect.size.height += 2;
|
---|
| 32 | if (NSIntersectsRect(rowRect, clipRect)) {
|
---|
| 33 | OSStatus err = HIThemeDrawMenuItem((HIRect *)&clipRect,
|
---|
| 34 | (HIRect *)&rowRect,
|
---|
| 35 | &drawInfo,
|
---|
| 36 | (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort],
|
---|
| 37 | kHIThemeOrientationInverted,
|
---|
| 38 | (HIRect *)&rowRect);
|
---|
| 39 | if (err != noErr) {
|
---|
| 40 | [super highlightSelectionInClipRect: clipRect];
|
---|
| 41 | return;
|
---|
| 42 | }
|
---|
| 43 | }
|
---|
| 44 | }
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | @end
|
---|