Skip to content

Commit

Permalink
Added a number of customization options to the main menubar.
Browse files Browse the repository at this point in the history
Reviewed by me.
  • Loading branch information
Francisco Ryan Tolmasky I committed Nov 6, 2008
1 parent 6cff27c commit edd49f2
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 25 deletions.
88 changes: 80 additions & 8 deletions AppKit/CPMenu.j
Expand Up @@ -25,7 +25,6 @@
@import <Foundation/CPNotificationCenter.j>
@import <Foundation/CPString.j>

@import "_CPImageAndTitleView.j"
@import "CPApplication.j"
@import "CPClipView.j"
@import "CPMenuItem.j"
Expand All @@ -46,6 +45,7 @@ var _CPMenuBarVisible = NO,
_CPMenuBarTitle = @"",
_CPMenuBarIconImage = nil,
_CPMenuBarIconImageAlphaValue = 1.0,
_CPMenuBarAttributes = nil,
_CPMenuBarSharedWindow = nil;

/*! @class CPMenu
Expand Down Expand Up @@ -93,6 +93,10 @@ var _CPMenuBarVisible = NO,
[_CPMenuBarSharedWindow setIconImage:_CPMenuBarIconImage];
[_CPMenuBarSharedWindow setIconImageAlphaValue:_CPMenuBarIconImageAlphaValue];

[_CPMenuBarSharedWindow setColor:[_CPMenuBarAttributes objectForKey:@"CPMenuBarBackgroundColor"]];
[_CPMenuBarSharedWindow setTextColor:[_CPMenuBarAttributes objectForKey:@"CPMenuBarTextColor"]];
[_CPMenuBarSharedWindow setTitleColor:[_CPMenuBarAttributes objectForKey:@"CPMenuBarTitleColor"]];

[_CPMenuBarSharedWindow orderFront:self];
}
else
Expand Down Expand Up @@ -126,6 +130,41 @@ var _CPMenuBarVisible = NO,
return _CPMenuBarImage;
}

+ (void)setMenuBarAttributes:(CPDictionary)attributes
{
if (_CPMenuBarAttributes == attributes)
return;

_CPMenuBarAttributes = [attributes copy];

var textColor = [attributes objectForKey:@"CPMenuBarTextColor"],
titleColor = [attributes objectForKey:@"CPMenuBarTitleColor"];

if (!textColor && titleColor)
[_CPMenuBarAttributes setObject:titleColor forKey:@"CPMenuBarTextColor"];

else if (textColor && !titleColor)
[_CPMenuBarAttributes setObject:textColor forKey:@"CPMenuBarTitleColor"];

else if (!textColor && !titleColor)
{
[_CPMenuBarAttributes setObject:[CPColor blackColor] forKey:@"CPMenuBarTextColor"];
[_CPMenuBarAttributes setObject:[CPColor blackColor] forKey:@"CPMenuBarTitleColor"];
}

if (_CPMenuBarSharedWindow)
{
[_CPMenuBarSharedWindow setColor:[_CPMenuBarAttributes objectForKey:@"CPMenuBarBackgroundColor"]];
[_CPMenuBarSharedWindow setTextColor:[_CPMenuBarAttributes objectForKey:@"CPMenuBarTextColor"]];
[_CPMenuBarSharedWindow setTitleColor:[_CPMenuBarAttributes objectForKey:@"CPMenuBarTitleColor"]];
}
}

+ (CPDictionary)menuBarAttributes
{
return _CPMenuBarAttributes;
}

+ (void)_setMenuBarIconImageAlphaValue:(float)anAlphaValue
{
_CPMenuBarIconImageAlphaValue = anAlphaValue;
Expand Down Expand Up @@ -1312,6 +1351,9 @@ var _CPMenuBarWindowBackgroundColor = nil,

CPImageView _iconImageView;
CPTextField _titleField;

CPColor _textColor;
CPColor _titleColor;
}

+ (void)initialize
Expand All @@ -1321,8 +1363,6 @@ var _CPMenuBarWindowBackgroundColor = nil,

var bundle = [CPBundle bundleForClass:self];

_CPMenuBarWindowBackgroundColor = [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:[bundle pathForResource:@"_CPMenuBarWindow/_CPMenuBarWindowBackground.png"] size:CGSizeMake(1.0, 18.0)]];

_CPMenuBarWindowFont = [CPFont systemFontOfSize:11.0];
}

Expand All @@ -1340,7 +1380,6 @@ var _CPMenuBarWindowBackgroundColor = nil,

var contentView = [self contentView];

[contentView setBackgroundColor:_CPMenuBarWindowBackgroundColor];
[contentView setAutoresizesSubviews:NO];

[self setBecomesKeyOnlyIfNeeded:YES];
Expand All @@ -1350,11 +1389,9 @@ var _CPMenuBarWindowBackgroundColor = nil,

[contentView addSubview:_iconImageView];

_titleField = [[_CPImageAndTitleView alloc] initWithFrame:CGRectMakeZero()];
_titleField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()];

[_titleField setFont:[CPFont boldSystemFontOfSize:12.0]];

[_titleField setImagePosition:CPImageLeft];
[_titleField setAlignment:CPCenterTextAlignment];

[contentView addSubview:_titleField];
Expand All @@ -1376,7 +1413,7 @@ var _CPMenuBarWindowBackgroundColor = nil,
document.title = bundleName;
#endif

[_titleField setTitle:aTitle];
[_titleField setStringValue:aTitle];
[_titleField sizeToFit];

[self tile];
Expand All @@ -1395,6 +1432,39 @@ var _CPMenuBarWindowBackgroundColor = nil,
[_iconImageView setAlphaValue:anAlphaValue];
}

- (void)setColor:(CPColor)aColor
{
if (!aColor)
{
if (!_CPMenuBarWindowBackgroundColor)
_CPMenuBarWindowBackgroundColor = [CPColor colorWithPatternImage:[[CPImage alloc] initWithContentsOfFile:[[CPBundle bundleForClass:[_CPMenuBarWindow class]] pathForResource:@"_CPMenuBarWindow/_CPMenuBarWindowBackground.png"] size:CGSizeMake(1.0, 18.0)]];

[[self contentView] setBackgroundColor:_CPMenuBarWindowBackgroundColor];
}
else
[[self contentView] setBackgroundColor:aColor];
}

- (void)setTextColor:(CPColor)aColor
{
if (_textColor == aColor)
return;

_textColor = aColor;

[_menuItemViews makeObjectsPerformSelector:@selector(setTextColor:) withObject:_textColor];
}

- (void)setTitleColor:(CPColor)aColor
{
if (_titleColor == aColor)
return;

_titleColor = aColor;

[_titleField setTextColor:aColor ? aColor : [CPColor blackColor]];
}

- (void)setMenu:(CPMenu)aMenu
{
if (_menu == aMenu)
Expand Down Expand Up @@ -1465,6 +1535,7 @@ var _CPMenuBarWindowBackgroundColor = nil,
[menuItemView setShowsStateColumn:NO];
[menuItemView setBelongsToMenuBar:YES];
[menuItemView setFont:_CPMenuBarWindowFont];
[menuItemView setTextColor:_textColor];
[menuItemView setHidden:[item isHidden]];

[menuItemView synchronizeWithMenuItem];
Expand Down Expand Up @@ -1497,6 +1568,7 @@ var _CPMenuBarWindowBackgroundColor = nil,
[menuItemView setShowsStateColumn:NO];
[menuItemView setBelongsToMenuBar:YES];
[menuItemView setFont:_CPMenuBarWindowFont];
[menuItemView setTextColor:_textColor];
[menuItemView setHidden:[menuItem isHidden]];

[menuItemView synchronizeWithMenuItem];
Expand Down
84 changes: 67 additions & 17 deletions AppKit/CPMenuItem.j
Expand Up @@ -843,6 +843,7 @@ var _CPMenuItemSelectionColor = nil,
CPMenuItem _menuItem;

CPFont _font;
CPColor _textColor;

CGSize _minSize;
BOOL _isDirty;
Expand All @@ -851,7 +852,7 @@ var _CPMenuItemSelectionColor = nil,

CPImageView _stateView;
_CPImageAndTitleView _imageAndTitleView;
CPImageView _submenuImageView;
CPView _submenuView;
}

+ (void)initialize
Expand Down Expand Up @@ -923,8 +924,8 @@ var _CPMenuItemSelectionColor = nil,
[_stateView removeFromSuperview];
_stateView = nil;

[_submenuImageView removeFromSuperview];
_submenuImageView = nil;
[_submenuView removeFromSuperview];
_submenuView = nil;

_minSize = [view frame].size;

Expand Down Expand Up @@ -985,11 +986,11 @@ var _CPMenuItemSelectionColor = nil,

if (!font)
font = _font;

[_imageAndTitleView setFont:font];
[_imageAndTitleView setImage:[_menuItem image]];
[_imageAndTitleView setTitle:[_menuItem title]];
[_imageAndTitleView setTextColor:[_menuItem isEnabled] ? [CPColor blackColor] : [CPColor darkGrayColor]];
[_imageAndTitleView setTextColor:[self textColor]];
[_imageAndTitleView setFrameOrigin:CGPointMake(x, 0.0)];

[_imageAndTitleView sizeToFit];
Expand All @@ -1001,24 +1002,24 @@ var _CPMenuItemSelectionColor = nil,
// Submenu Arrow
if ([_menuItem hasSubmenu])
{
if (!_submenuImageView)
if (!_submenuView)
{
_submenuImageView = [[CPImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 10.0, 10.0)];
_submenuView = [[_CPMenuItemArrowView alloc] initWithFrame:CGRectMake(0.0, 0.0, 10.0, 10.0)];

[self addSubview:_submenuImageView];
[self addSubview:_submenuView];
}

if (_belongsToMenuBar && !_CPMenuItemViewMenuBarArrowImage)
_CPMenuItemViewMenuBarArrowImage = [[CPImage alloc] initWithContentsOfFile:[[CPBundle bundleForClass:[_CPMenuItemView class]] pathForResource:@"_CPMenuItemView/_CPMenuItemViewMenuBarArrow.png"] size:CGSizeMake(10.0, 10.0)];

[_submenuImageView setHidden:NO];
[_submenuImageView setImage:_belongsToMenuBar ? _CPMenuItemViewMenuBarArrowImage : nil];
[_submenuImageView setFrameOrigin:CGPointMake(x, (CGRectGetHeight(frame) - 10.0) / 2.0)];
[_submenuView setHidden:NO];
[_submenuView setColor:_belongsToMenuBar ? [self textColor] : nil];
[_submenuView setFrameOrigin:CGPointMake(x, (CGRectGetHeight(frame) - 10.0) / 2.0)];

x += 10.0;
}
else
[_submenuImageView setHidden:YES];
[_submenuView setHidden:YES];

_minSize = CGSizeMake(x + (_belongsToMenuBar ? 0.0 : RIGHT_MARGIN), CGRectGetHeight(frame));

Expand Down Expand Up @@ -1052,7 +1053,7 @@ var _CPMenuItemSelectionColor = nil,

else
{
[_imageAndTitleView setTextColor:shouldHighlight ? [CPColor whiteColor] : [CPColor blackColor]];
[_imageAndTitleView setTextColor:shouldHighlight ? [CPColor whiteColor] : [self textColor]];

if (shouldHighlight)
[self setBackgroundColor:_CPMenuItemSelectionColor];
Expand Down Expand Up @@ -1083,12 +1084,12 @@ var _CPMenuItemSelectionColor = nil,
_CPMenuItemViewMenuBarArrowActivatedImage = [[CPImage alloc] initWithContentsOfFile:[[CPBundle bundleForClass:[_CPMenuItemView class]] pathForResource:@"_CPMenuItemView/_CPMenuItemViewMenuBarArrowActivated.png"] size:CGSizeMake(10.0, 10.0)];

[_imageAndTitleView setTextColor:[CPColor whiteColor]];
[_submenuImageView setImage:_CPMenuItemViewMenuBarArrowActivatedImage];
[_submenuView setColor:[CPColor whiteColor]];
}
else
{
[_imageAndTitleView setTextColor:[CPColor blackColor]];
[_submenuImageView setImage:_CPMenuItemViewMenuBarArrowImage];
[_imageAndTitleView setTextColor:[self textColor]];
[_submenuView setColor:[self textColor]];
}
}

Expand All @@ -1097,7 +1098,7 @@ var _CPMenuItemSelectionColor = nil,
if (![_menuItem hasSubmenu])
return NO;

return CGRectContainsPoint([_submenuImageView frame], [self convertPoint:[anEvent locationInWindow] fromView:nil]);
return CGRectContainsPoint([_submenuView frame], [self convertPoint:[anEvent locationInWindow] fromView:nil]);
}

- (BOOL)isHidden
Expand All @@ -1120,5 +1121,54 @@ var _CPMenuItemSelectionColor = nil,
[self setDirty];
}

- (void)setTextColor:(CPColor)aColor
{
if (_textColor == aColor)
return;

_textColor = aColor;

[_imageAndTitleView setTextColor:[self textColor]];
[_submenuView setColor:[self textColor]];
}

- (CPColor)textColor
{
return [_menuItem isEnabled] ? (_textColor ? _textColor : [CPColor blackColor]) : [CPColor darkGrayColor];
}

@end

@implementation _CPMenuItemArrowView : CPView
{
CPColor _color;
}

- (void)setColor:(CPColor)aColor
{
if (_color == aColor)
return;

_color = aColor;

[self setNeedsDisplay:YES];
}

- (void)drawRect:(CGRect)aRect
{
var context = [[CPGraphicsContext currentContext] graphicsPort];

CGContextBeginPath(context);

CGContextMoveToPoint(context, 1.0, 4.0);
CGContextAddLineToPoint(context, 9.0, 4.0);
CGContextAddLineToPoint(context, 5.0, 8.0);
CGContextAddLineToPoint(context, 1.0, 4.0);

CGContextClosePath(context);

CGContextSetFillColor(context, _color);
CGContextFillPath(context);
}

@end
Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions AppKit/_CPImageAndTitleView.j
Expand Up @@ -238,6 +238,7 @@
[_titleField setAlignment:_alignment];
[_titleField setTextColor:_textColor];
[_titleField setHidden:_imagePosition == CPImageOnly];
[_titleField setHitTests:NO];

[self addSubview:_titleField];
}
Expand Down

0 comments on commit edd49f2

Please sign in to comment.