mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-11-15 11:13:50 +00:00
A number of improvements to theming and bug fixes.
Reviewed by me.
This commit is contained in:
1 parent
689dd72363
commit
44d837c1eb
13 files changed
+140
-89
No files matched your search
+10
-21
@@ -618,10 +618,10 @@ var _CPMenuBarVisible = NO,
|
||||
|
||||
if (!aFont)
|
||||
aFont = [CPFont systemFontOfSize:12.0];
|
||||
|
||||
|
||||
var theWindow = [aView window],
|
||||
menuWindow = [_CPMenuWindow menuWindowWithMenu:aMenu font:aFont];
|
||||
|
||||
|
||||
[menuWindow setDelegate:self];
|
||||
[menuWindow setBackgroundStyle:isForMenuBar ? _CPMenuWindowMenuBarBackgroundStyle : _CPMenuWindowPopUpBackgroundStyle];
|
||||
|
||||
@@ -633,28 +633,17 @@ var _CPMenuBarVisible = NO,
|
||||
|
||||
+ (void)_menuWindowDidFinishTracking:(_CPMenuWindow)aMenuWindow highlightedItem:(CPMenuItem)aMenuItem
|
||||
{
|
||||
var menu = [aMenuWindow menu];
|
||||
|
||||
[_CPMenuWindow poolMenuWindow:aMenuWindow];
|
||||
|
||||
// var index = [self indexOfItem:aMenuItem];
|
||||
|
||||
// if (index == CPNotFound)
|
||||
// return;
|
||||
|
||||
var target = nil,
|
||||
action = [aMenuItem action];
|
||||
|
||||
if (!action)
|
||||
{
|
||||
// target = [self target];
|
||||
// action = [self action];
|
||||
}
|
||||
|
||||
// FIXME: If [selectedItem target] == nil do we use our own target?
|
||||
else
|
||||
target = [aMenuItem target];
|
||||
|
||||
if([aMenuItem isEnabled])
|
||||
[CPApp sendAction:action to:target from:nil];
|
||||
[CPApp sendAction:[aMenuItem action] to:[aMenuItem target] from:aMenuItem];
|
||||
|
||||
var delegate = [menu delegate];
|
||||
|
||||
if ([delegate respondsToSelector:@selector(menuDidClose:)])
|
||||
[delegate menuDidClose:menu];
|
||||
}
|
||||
|
||||
// Managing Display of State Column
|
||||
|
||||
+3
-2
@@ -878,7 +878,8 @@ var _CPMenuItemSelectionColor = nil,
|
||||
if (self != [_CPMenuItemView class])
|
||||
return;
|
||||
|
||||
_CPMenuItemSelectionColor = [CPColor colorWithCalibratedRed:81.0 / 255.0 green:83.0 / 255.0 blue:109.0 / 255.0 alpha:1.0];
|
||||
_CPMenuItemSelectionColor = [CPColor colorWithCalibratedRed:95.0 / 255.0 green:131.0 / 255.0 blue:185.0 / 255.0 alpha:1.0];
|
||||
_CPMenuItemTextShadowColor = [CPColor colorWithCalibratedRed:26.0 / 255.0 green: 73.0 / 255.0 blue:109.0 / 255.0 alpha:1.0]
|
||||
|
||||
var bundle = [CPBundle bundleForClass:self];
|
||||
|
||||
@@ -1173,7 +1174,7 @@ var _CPMenuItemSelectionColor = nil,
|
||||
|
||||
- (CPColor)textColor
|
||||
{
|
||||
return [_menuItem isEnabled] ? (_textColor ? _textColor : [CPColor blackColor]) : [CPColor darkGrayColor];
|
||||
return [_menuItem isEnabled] ? (_textColor ? _textColor : [CPColor colorWithCalibratedRed:70.0 / 255.0 green:69.0 / 255.0 blue:69.0 / 255.0 alpha:1.0]) : [CPColor darkGrayColor];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
+14
-14
@@ -592,6 +592,15 @@ var CPPopUpButtonArrowsImage = nil;
|
||||
if (items.length > 0)
|
||||
[items[1] setHidden:NO];
|
||||
}
|
||||
|
||||
var item = [_menu itemArray][index],
|
||||
action = [item action];
|
||||
|
||||
if (!action || (action === @selector(_popUpItemAction:)))
|
||||
{
|
||||
[item setTarget:self];
|
||||
[item setAction:@selector(_popUpItemAction:)];
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -685,21 +694,12 @@ var CPPopUpButtonArrowsImage = nil;
|
||||
|
||||
[self selectItemAtIndex:index];
|
||||
|
||||
var selectedItem = [self selectedItem],
|
||||
target = nil,
|
||||
action = [selectedItem action];
|
||||
|
||||
if (!action)
|
||||
{
|
||||
target = [self target];
|
||||
action = [self action];
|
||||
}
|
||||
|
||||
// FIXME: If [selectedItem target] == nil do we use our own target?
|
||||
else
|
||||
target = [selectedItem target];
|
||||
[CPApp sendAction:[aMenuItem action] to:[aMenuItem target] from:aMenuItem];
|
||||
}
|
||||
|
||||
[self sendAction:action to:target];
|
||||
- (void)_popUpItemAction:(id)aSender
|
||||
{
|
||||
[self sendAction:[self action] to:[self target]];
|
||||
}
|
||||
|
||||
- (CGRect)contentRectForBounds:(CGRect)bounds
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
|
||||
@import <Foundation/CPString.j>
|
||||
|
||||
#include "CoreGraphics/CGGeometry.h"
|
||||
#include "Platform/Platform.h"
|
||||
|
||||
|
||||
var CPStringReferenceElement = nil,
|
||||
CPStringDefaultFont = nil;
|
||||
@@ -43,6 +46,7 @@ var CPStringReferenceElement = nil,
|
||||
|
||||
- (CGSize)sizeWithFont:(CPFont)aFont inWidth:(float)aWidth
|
||||
{
|
||||
#if PLATFORM(DOM)
|
||||
if (!CPStringReferenceElement)
|
||||
{
|
||||
CPStringReferenceElement = document.createElement("span");
|
||||
@@ -104,6 +108,8 @@ var CPStringReferenceElement = nil,
|
||||
CPStringReferenceElement.textContent = self;
|
||||
|
||||
return CGSizeMake(CPStringReferenceElement.clientWidth, CPStringReferenceElement.clientHeight);
|
||||
#endif
|
||||
return _CGSizeMakeZero();
|
||||
}
|
||||
|
||||
@end
|
||||
+64
-7
@@ -123,7 +123,7 @@ var BIT_COUNT = [ 0 /*0000*/, 1 /*0001*/, 1 /*0010*/, 2 /*0011*/, 1 /*0100*/,
|
||||
_values[aState] = aValue;
|
||||
}
|
||||
|
||||
else if (isSingularObject)
|
||||
else if (_isSingularObject)
|
||||
_values = aValue;
|
||||
|
||||
else
|
||||
@@ -133,12 +133,22 @@ var BIT_COUNT = [ 0 /*0000*/, 1 /*0001*/, 1 /*0010*/, 2 /*0011*/, 1 /*0100*/,
|
||||
- (id)valueForControlState:(CPControlState)aState
|
||||
{
|
||||
if (_isSingularObject)
|
||||
return _values || [_valueFromTheme valueForControlState:aState] || _defaultValue;
|
||||
|
||||
{
|
||||
var value = _values;
|
||||
|
||||
if (value === undefined || value === nil)
|
||||
value = [_valueFromTheme valueForControlState:aState];
|
||||
|
||||
if (value === undefined || value === nil)
|
||||
value = _defaultValue;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
var value = _values[aState];
|
||||
|
||||
// If we don't have a value, and we have a non-normal state...
|
||||
if (value === undefined && aState > 0)
|
||||
if ((value === undefined || value === nil) && aState > 0)
|
||||
{
|
||||
// If this is a composite state, find the closest partial subset match.
|
||||
if (!(aState & (aState - 1)))
|
||||
@@ -165,11 +175,17 @@ var BIT_COUNT = [ 0 /*0000*/, 1 /*0001*/, 1 /*0010*/, 2 /*0011*/, 1 /*0100*/,
|
||||
}
|
||||
|
||||
// Still don't have a value? OK, let's use the normal value.
|
||||
if (value === undefined)
|
||||
if (value === undefined || value === nil)
|
||||
value = _values[CPControlStateNormal];
|
||||
}
|
||||
|
||||
return value || [_valueFromTheme valueForControlState:aState] || _defaultValue;
|
||||
|
||||
if (value === undefined || value === nil)
|
||||
value = [_valueFromTheme valueForControlState:aState];
|
||||
|
||||
if (value === undefined || value === nil)
|
||||
value = _defaultValue;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
- (id)initWithCoder:(CPCoder)aCoder
|
||||
@@ -271,3 +287,44 @@ function CPThemedValueDecode(aCoder, aKey, aDefaultValue, anIdentifier, aTheme,
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
function CPThemedValueEncode2(aCoder, aThemedValue)
|
||||
{
|
||||
if (aThemedValue._isSingularObject)
|
||||
{
|
||||
var actualValue = aThemedValue._values;
|
||||
|
||||
if (aThemedValue._values)
|
||||
[aCoder encodeObject:actualValue forKey:"$a" + [aThemedValue identifier]];
|
||||
}
|
||||
else
|
||||
[aCoder encodeObject:aThemedValue forKey:"$a" + [aThemedValue identifier]];
|
||||
}
|
||||
|
||||
function CPThemedValueDecode2(aCoder, anAttributeName, aDefaultValue, aTheme, aClass)
|
||||
{
|
||||
var key = "$a" + anAttributeName;
|
||||
|
||||
if (![aCoder containsValueForKey:key])
|
||||
return CPThemedValueMake(aDefaultValue, anAttributeName, aTheme, aClass);
|
||||
|
||||
var value = [aCoder decodeObjectForKey:key];
|
||||
|
||||
if (![value isKindOfClass:[CPThemedValue class]])
|
||||
{
|
||||
var themedValue = CPThemedValueMake(aDefaultValue, anAttributeName, aTheme, aClass);
|
||||
|
||||
[themedValue setValue:value];
|
||||
|
||||
value = themedValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
[value setDefaultValue:aDefaultValue];
|
||||
[value setTheme:aTheme];
|
||||
[value setIdentifier:anAttributeName];
|
||||
[value setThemedClass:aClass];
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
@@ -172,6 +172,7 @@ CPWindowBelow = 2;
|
||||
CPWindowWillCloseNotification = @"CPWindowWillCloseNotification";
|
||||
CPWindowDidBecomeMainNotification = @"CPWindowDidBecomeMainNotification";
|
||||
CPWindowDidResignMainNotification = @"CPWindowDidResignMainNotification";
|
||||
CPWindowDidMoveNotification = @"CPWindowDidMoveNotification";
|
||||
|
||||
|
||||
var SHADOW_MARGIN_LEFT = 20.0,
|
||||
@@ -508,6 +509,8 @@ CPTexturedBackgroundWindowMask
|
||||
#if PLATFORM(DOM)
|
||||
CPDOMDisplayServerSetStyleLeftTop(_DOMElement, NULL, origin.x, origin.y);
|
||||
#endif
|
||||
|
||||
[[CPNotificationCenter defaultCenter] postNotificationName:CPWindowDidMoveNotification object:self];
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -830,6 +833,8 @@ CPTexturedBackgroundWindowMask
|
||||
*/
|
||||
- (void)setDelegate:(id)aDelegate
|
||||
{
|
||||
// FIXME: Unregister for notifications!
|
||||
|
||||
_delegate = aDelegate;
|
||||
|
||||
_delegateRespondsToWindowWillReturnUndoManagerSelector = [_delegate respondsToSelector:@selector(windowWillReturnUndoManager:)];
|
||||
@@ -849,6 +854,13 @@ CPTexturedBackgroundWindowMask
|
||||
selector:@selector(windowDidResignMain:)
|
||||
name:CPWindowDidResignMainNotification
|
||||
object:self];
|
||||
|
||||
if ([_delegate respondsToSelector:@selector(windowDidMove:)])
|
||||
[defaultCenter
|
||||
addObserver:_delegate
|
||||
selector:@selector(windowDidMove:)
|
||||
name:CPWindowDidMoveNotification
|
||||
object:self];
|
||||
}
|
||||
|
||||
/*!
|
||||
|
||||
@@ -127,7 +127,8 @@ var HUD_TITLEBAR_HEIGHT = 26.0;
|
||||
[_titleField setHitTests:NO];
|
||||
[_titleField setFont:[CPFont systemFontOfSize:11.0]];
|
||||
[_titleField setTextColor:[CPColor whiteColor]];
|
||||
[_titleField setTextShadow:[CPShadow shadowWithOffset:CPSizeMake(0.0, 1.0) blurRadius:2.0 color:[CPColor blackColor]]];
|
||||
[_titleField setTextShadowColor:[CPColor blackColor]];
|
||||
[_titleField setTextShadowOffset:CGSizeMake(0.0, 1.0)];
|
||||
[_titleField setAutoresizingMask:CPViewWidthSizable];
|
||||
|
||||
// FIXME: Make this to CPLineBreakByTruncatingMiddle once it's implemented.
|
||||
|
||||
+8
-3
@@ -66,7 +66,7 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
|
||||
}
|
||||
|
||||
- (BOOL)instantiateCibWithExternalNameTable:(CPDictionary)anExternalNameTable
|
||||
{
|
||||
{
|
||||
var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:_bundle],
|
||||
objectData = [unarchiver decodeObjectForKey:CPCibObjectDataKey];
|
||||
|
||||
@@ -84,10 +84,13 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
|
||||
[CPApp setMainMenu:menu];
|
||||
[CPMenu setMenuBarVisible:YES];
|
||||
}
|
||||
|
||||
|
||||
if (topLevelObjects)
|
||||
[topLevelObjects addObjectsFromArray:[objectData topLevelObjects]];
|
||||
|
||||
|
||||
// Display Visible Windows.
|
||||
[[objectData visibleWindows] makeObjectsPerformSelector:@selector(makeKeyAndOrderFront:) withObject:self];
|
||||
|
||||
/*
|
||||
// [objectData establishConnectionsWithOwner:owner topLevelObjects:topLevelObjects];
|
||||
// [objectData cibInstantiateWithOwner:owner topLevelObjects:topLevelObjects];
|
||||
@@ -135,6 +138,8 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey";
|
||||
// Display visible windows.
|
||||
|
||||
return YES;*/
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)instantiateCibWithOwner:(id)anOwner topLevelObjects:(CPArray)topLevelObjects
|
||||
|
||||
@@ -89,6 +89,11 @@
|
||||
return _namesKeys[index];
|
||||
}
|
||||
|
||||
- (CPSet)visibleWindows
|
||||
{
|
||||
return _visibleWindows;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey",
|
||||
@@ -151,7 +156,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey
|
||||
|
||||
_fileOwner = [aCoder decodeObjectForKey:_CPCibObjectDataFileOwnerKey];
|
||||
|
||||
// CPSet _visibleWindows;
|
||||
_visibleWindows = [aCoder decodeObjectForKey:_CPCibObjectDataVisibleWindowsKey];
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -186,7 +191,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey
|
||||
[aCoder encodeObject:_fileOwner forKey:_CPCibObjectDataFileOwnerKey];
|
||||
// CPCustomObject _fileOwner;
|
||||
|
||||
// CPSet _visibleWindows;
|
||||
[aCoder encodeObject:_visibleWindows forKey:_CPCibObjectDataVisibleWindowsKey];
|
||||
}
|
||||
|
||||
- (void)establishConnectionsWithExternalNameTable:(CPDictionary)anExternalNameTable
|
||||
|
||||
@@ -160,7 +160,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
_verticalAlignment = anAlignment;
|
||||
_flags |= _CPImageAndTextViewVerticalAlignmentChangedFlag;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (unsigned)verticalAlignment
|
||||
@@ -176,7 +176,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
_lineBreakMode = aLineBreakMode;
|
||||
_flags |= _CPImageAndTextViewLineBreakModeChangedFlag;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CPLineBreakMode)lineBreakMode
|
||||
@@ -192,7 +192,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
_imagePosition = anImagePosition;
|
||||
_flags |= _CPImageAndTextViewImagePositionChangedFlag;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CPCellImagePosition)imagePosition
|
||||
@@ -208,7 +208,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
_imageScaling = anImageScaling;
|
||||
_flags |= _CPImageAndTextViewImageScalingChangedFlag;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (void)imageScaling
|
||||
@@ -242,7 +242,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
_flags |= _CPImageAndTextViewFontChangedFlag;
|
||||
_textSize = NULL;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CPFont)font
|
||||
@@ -258,7 +258,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
_textShadowColor = aColor;
|
||||
_flags |= _CPImageAndTextViewTextShadowColorChangedFlag;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CPColor)textShadowColor
|
||||
@@ -273,7 +273,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
|
||||
_textShadowOffset = _CGSizeMakeCopy(anOffset);
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CGSize)textShadowOffset
|
||||
@@ -289,7 +289,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
_image = anImage;
|
||||
_flags |= _CPImageAndTextViewImageChangedFlag;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CPImage)image
|
||||
@@ -307,7 +307,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
|
||||
_textSize = NULL;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
|
||||
- (CPString)text
|
||||
@@ -315,7 +315,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
return _text;
|
||||
}
|
||||
|
||||
- (void)drawRect:(CGRect)aRect
|
||||
- (void)layoutSubviews
|
||||
{
|
||||
#if PLATFORM(DOM)
|
||||
var needsDOMTextElement = _imagePosition !== CPImageOnly && ([_text length] > 0),
|
||||
@@ -677,7 +677,7 @@ var HORIZONTAL_MARGIN = 3.0,
|
||||
{
|
||||
if (!_textSize)
|
||||
_textSize = [_text sizeWithFont:_font ? _font : [CPFont systemFontOfSize:12.0]];
|
||||
|
||||
|
||||
if (_imagePosition === CPImageLeft || _imagePosition === CPImageRight)
|
||||
{
|
||||
size.width += _textSize.width + HORIZONTAL_MARGIN;
|
||||
|
||||
@@ -36,24 +36,6 @@
|
||||
{
|
||||
[self sendActionOn:CPLeftMouseUpMask];
|
||||
|
||||
// Shoudl we stub this out?
|
||||
|
||||
var theme = nil,
|
||||
theClass = [self class];
|
||||
|
||||
_alignment = CPThemedValueMake(CPLeftTextAlignment, "alignment", theme, theClass);
|
||||
_verticalAlignment = CPThemedValueMake(CPTopVerticalTextAlignment, "vertical-alignment", theme, theClass);
|
||||
|
||||
_lineBreakMode = CPThemedValueMake(CPLineBreakByClipping, "line-break-mode", theme, theClass);
|
||||
_textColor = CPThemedValueMake([CPColor blackColor], "text-color", theme, theClass);
|
||||
_font = CPThemedValueMake([CPFont systemFontOfSize:12.0], "font", theme, theClass);
|
||||
|
||||
_textShadowColor = CPThemedValueMake(nil, @"text-shadow-color", theme, theClass);
|
||||
_textShadowOffset = CPThemedValueMake(CGSizeMake(0.0, 0.0), "text-shadow-offset", theme, theClass);
|
||||
|
||||
_imagePosition = CPThemedValueMake(CPImageLeft, @"image-position", theme, theClass);
|
||||
_imageScaling = CPThemedValueMake(CPScaleToFit, "image-scaling", theme, theClass);
|
||||
|
||||
var cell = [aCoder decodeObjectForKey:@"NSCell"];
|
||||
|
||||
[self setObjectValue:[cell objectValue]];
|
||||
|
||||
@@ -38,16 +38,6 @@
|
||||
_minValue = [cell minValue];
|
||||
_maxValue = [cell maxValue];
|
||||
_altIncrementValue = [cell altIncrementValue];
|
||||
|
||||
var theme = nil,
|
||||
theClass = [self class];
|
||||
|
||||
_knobColor = CPThemedValueMake(nil, "knob-color", theme, theClass);
|
||||
_knobSize = CPThemedValueMake(CGSizeMakeZero(), "knob-size", theme, theClass);
|
||||
|
||||
_trackWidth = CPThemedValueMake(0.0, "track-width", theme, theClass);
|
||||
_horizontalTrackColor = CPThemedValueMake(nil, "horizontal-track-color", theme, theClass);
|
||||
_verticalTrackColor = CPThemedValueMake(nil, "vertical-track-color", theme, theClass);
|
||||
}
|
||||
|
||||
return self;
|
||||
|
||||
@@ -92,6 +92,9 @@
|
||||
[subview setFrameOrigin:CGPointMake(CGRectGetMinX(frame), height - CGRectGetMaxY(frame))];
|
||||
}
|
||||
}
|
||||
|
||||
_themedAttributes = {};
|
||||
[self _loadThemedAttributes];
|
||||
}
|
||||
|
||||
return self;
|
||||
|
||||
Reference in new issue
Block a user