diff --git a/ChangeLog b/ChangeLog index 1227bee0d..de9817b99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2013-10-15 Eric Wasylishen + + * Source/NSButtonCell.m: + * Source/NSMenuItemCell.m: Make a shared -themeControlState in + NSButtonCell and eliminate duplicated code. + * Source/NSPopUpButtonCell.m: Add private declaration for + -[NSButtonCell themeControlState] + 2013-10-15 Eric Wasylishen * ColorPickers/GSColorSliderCell.m (-drawBarInside:flipped:): diff --git a/Source/NSButtonCell.m b/Source/NSButtonCell.m index ec57dbdda..725a6ff52 100644 --- a/Source/NSButtonCell.m +++ b/Source/NSButtonCell.m @@ -933,7 +933,7 @@ typedef struct _GSButtonCellFlags ASSIGN(_backgroundColor, color); } -- (void) drawBezelWithFrame: (NSRect)cellFrame inView: (NSView *)controlView +- (GSThemeControlState) themeControlState { unsigned mask; GSThemeControlState buttonState = GSThemeNormalState; @@ -976,7 +976,8 @@ typedef struct _GSButtonCellFlags first responder state. Note that GSThemeDisabledState doesn't have a first responder variant, currently. */ if (_cell.shows_first_responder - && [[controlView window] firstResponder] == controlView) + && [[[self controlView] window] firstResponder] == [self controlView] + && [self controlView] != nil) { if (buttonState == GSThemeSelectedState) buttonState = GSThemeSelectedFirstResponderState; @@ -986,6 +987,13 @@ typedef struct _GSButtonCellFlags buttonState = GSThemeFirstResponderState; } + return buttonState; +} + +- (void) drawBezelWithFrame: (NSRect)cellFrame inView: (NSView *)controlView +{ + GSThemeControlState buttonState = [self themeControlState]; + [[GSTheme theme] drawButton: cellFrame in: self view: controlView diff --git a/Source/NSMenuItemCell.m b/Source/NSMenuItemCell.m index bd4692747..0df4fa2ed 100644 --- a/Source/NSMenuItemCell.m +++ b/Source/NSMenuItemCell.m @@ -54,6 +54,10 @@ static NSString *alternateKeyString = @"+"; static NSString *shiftKeyString = @"/"; static NSString *commandKeyString = @"#"; +@interface NSMenuItemCell (Private) +- (GSThemeControlState) themeControlState; +@end + @implementation NSMenuItemCell + (void) initialize @@ -666,43 +670,6 @@ static NSString *commandKeyString = @"#"; } } -- (GSThemeControlState) themeControlState -{ - unsigned mask; - GSThemeControlState state = GSThemeNormalState; - - // set the mask - if (_cell.is_highlighted) - { - mask = _highlightsByMask; - if (_cell.state) - { - mask &= ~_showAltStateMask; - } - } - else if (_cell.state) - mask = _showAltStateMask; - else - mask = NSNoCellMask; - - /* Determine the background color. - We draw when there is a border or when highlightsByMask - is NSChangeBackgroundCellMask or NSChangeGrayCellMask, - as required by our nextstep-like look and feel. */ - if (mask & (NSChangeGrayCellMask | NSChangeBackgroundCellMask)) - { - state = GSThemeHighlightedState; - } - - /* Pushed in buttons contents are displaced to the bottom right 1px. */ - if (mask & NSPushInCellMask) - { - state = GSThemeSelectedState; - } - - return state; -} - // // Drawing. // diff --git a/Source/NSPopUpButtonCell.m b/Source/NSPopUpButtonCell.m index e55720abd..637996e45 100644 --- a/Source/NSPopUpButtonCell.m +++ b/Source/NSPopUpButtonCell.m @@ -48,7 +48,7 @@ * and so on. */ static NSImage *_pbc_image[5]; -@interface NSMenuItemCell (Private) +@interface NSButtonCell (Private) - (GSThemeControlState) themeControlState; @end