From 2664e30a8b60af05330009d6005dff3edcd1b7ef Mon Sep 17 00:00:00 2001 From: Francisco Tolmasky Date: Sun, 8 Mar 2009 20:40:11 -0700 Subject: [PATCH 1/9] A number of changes. Reviewed by me. --- AppKit/CPPopUpButton.j | 10 +- AppKit/CPScroller.j | 191 +++++------ AppKit/CPThemedAttribute.j | 97 +++--- AppKit/Cib/CPCib.j | 48 --- AppKit/Cib/_CPCibObjectData.j | 59 +++- Foundation/CPKeyedArchiver.j | 4 +- Objective-J/evaluate.js | 19 +- Tools/blend/BlendKit/BKShowcaseController.j | 120 +++++++ Tools/blend/BlendKit/BKUtilities.j | 145 +++++++++ Tools/blend/BlendKit/BlendKit.j | 3 + Tools/blend/BlendKit/BlendKit.steam | 42 +++ Tools/blend/BlendKit/Info.plist | 14 + Tools/blend/BlendKit/build.xml | 33 ++ Tools/blend/Tool/blend | 57 ++++ Tools/blend/Tool/blend.steam | 46 +++ Tools/blend/Tool/build.xml | 23 ++ Tools/blend/Tool/main.j | 301 ++++++++++++++++++ Tools/blend/build.xml | 28 ++ Tools/steam/Project.js | 124 -------- .../Templates/ThemeDescriptor/Info.plist | 12 + .../ThemeDescriptor/ThemeDescriptors.j | 33 ++ .../ThemeDescriptor/index-debug.html | 36 +++ .../Templates/ThemeDescriptor/index.html | 37 +++ Tools/steam/Templates/ThemeDescriptor/main.j | 19 ++ 24 files changed, 1143 insertions(+), 358 deletions(-) create mode 100644 Tools/blend/BlendKit/BKShowcaseController.j create mode 100644 Tools/blend/BlendKit/BKUtilities.j create mode 100644 Tools/blend/BlendKit/BlendKit.j create mode 100644 Tools/blend/BlendKit/BlendKit.steam create mode 100644 Tools/blend/BlendKit/Info.plist create mode 100644 Tools/blend/BlendKit/build.xml create mode 100755 Tools/blend/Tool/blend create mode 100644 Tools/blend/Tool/blend.steam create mode 100644 Tools/blend/Tool/build.xml create mode 100644 Tools/blend/Tool/main.j create mode 100644 Tools/blend/build.xml create mode 100644 Tools/steam/Templates/ThemeDescriptor/Info.plist create mode 100644 Tools/steam/Templates/ThemeDescriptor/ThemeDescriptors.j create mode 100644 Tools/steam/Templates/ThemeDescriptor/index-debug.html create mode 100644 Tools/steam/Templates/ThemeDescriptor/index.html create mode 100755 Tools/steam/Templates/ThemeDescriptor/main.j diff --git a/AppKit/CPPopUpButton.j b/AppKit/CPPopUpButton.j index a2049230b..80d463868 100644 --- a/AppKit/CPPopUpButton.j +++ b/AppKit/CPPopUpButton.j @@ -95,7 +95,7 @@ CPPopUpButtonStatePullsDown = 1 << 12; var items = [_menu itemArray]; - if (items.length <= 0) + if ([items count] <= 0) return; [items[0] setHidden:[self pullsDown]]; @@ -493,14 +493,14 @@ CPPopUpButtonStatePullsDown = 1 << 12; */ - (void)setTitle:(CPString)aTitle { - if ([self title] == aTitle) + if ([self title] === aTitle) return; if ([self pullsDown]) { var items = [_menu itemArray]; - if (items.length <= 0) + if ([items count] <= 0) [self addItemWithTitle:aTitle]; else @@ -548,7 +548,7 @@ CPPopUpButtonStatePullsDown = 1 << 12; { var items = [_menu itemArray]; - if (items.length > 0) + if ([items count] > 0) item = items[0]; } else @@ -717,7 +717,7 @@ var CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey", { // Nothing is currently selected _selectedIndex = -1; - + [self setMenu:[aCoder decodeObjectForKey:CPPopUpButtonMenuKey]]; [self selectItemAtIndex:[aCoder decodeObjectForKey:CPPopUpButtonSelectedIndexKey]]; } diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 8ac1a42ce..cecfec70d 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -45,7 +45,15 @@ CPAllScrollerParts = 2; */ -var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScrollerIncrementLine, CPScrollerKnob]; +var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScrollerIncrementLine, CPScrollerKnob], + NAMES_FOR_PARTS = {}, + PARTS_FOR_NAMES = {}; + +NAMES_FOR_PARTS[CPScrollerDecrementLine] = @"decrement-line"; +NAMES_FOR_PARTS[CPScrollerIncrementLine] = @"increment-line"; +NAMES_FOR_PARTS[CPScrollerKnobSlot] = @"knob-slot"; +NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; + @implementation CPScroller : CPControl { @@ -53,7 +61,7 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller CPUsableScrollerParts _usableParts; CPArray _partRects; - BOOL _isVertical; + BOOL _isVertical @accessors(readonly, getter=isVertical); float _knobProportion; CPScrollerPart _hitPart; @@ -61,32 +69,21 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller CPScrollerPart _trackingPart; float _trackingFloatValue; CGPoint _trackingStartPoint; - - CPView _knobView; - CPView _knobSlotView; - - CPView _decrementArrowView; - CPView _incrementArrowView; } + (id)themedAttributes { return [CPDictionary dictionaryWithObjects:[ _CGInsetMakeZero(), - nil, nil, nil, nil, - nil, nil, nil, nil, - _CGSizeMakeZero(), _CGSizeMakeZero(), _CGSizeMakeZero(), + nil, nil, nil, nil, _CGSizeMakeZero(), _CGSizeMakeZero(), _CGSizeMakeZero()] forKeys:[ @"track-overlap-inset", - @"horizontal-" + CPScrollerKnobSlot + "-color", - @"horizontal-" + CPScrollerDecrementLine + "-color", - @"horizontal-" + CPScrollerIncrementLine + "-color", - @"horizontal-" + CPScrollerKnob + "-color", - @"vertical-" + CPScrollerKnobSlot + "-color", - @"vertical-" + CPScrollerDecrementLine + "-color", - @"vertical-" + CPScrollerIncrementLine + "-color", - @"vertical-" + CPScrollerKnob + "-color", - @"horizontal-decrement-line-size", @"horizontal-increment-line-size", @"horizontal-minimum-knob-size", - @"vertical-decrement-line-size", @"vertical-increment-line-size", @"vertical-minimum-knob-size"]]; + @"knob-slot-color", + @"decrement-line-color", + @"increment-line-color", + @"knob-color", + @"decrement-line-size", + @"increment-line-size", + @"minimum-knob-size"]]; } @@ -104,24 +101,13 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller [self setFloatValue:0.0 knobProportion:1.0]; _hitPart = CPScrollerNoPart; + + [self _recalculateIsVertical]; } return self; } -- (BOOL)isVertical -{ - if (_isVertical === nil) - { - var bounds = [self bounds], - width = _CGRectGetWidth(bounds), - height = _CGRectGetHeight(bounds); - - _isVertical = width < height ? 1 : (width > height ? 0 : -1); - } - - return _isVertical; -} // Determining CPScroller Size /*! Returns the CPScroller's width for a CPRegularControlSize. @@ -195,64 +181,14 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller return _knobProportion; } -- (void)setColor:(CPColor)aColor forHorizontalPart:(CPScrollerPart)aScrollerPart inControlState:(CPControlState)aControlState -{ - [self setValue:aColor forThemedAttributeName:"horizontal-" + aScrollerPart + "-color" inControlState:aControlState]; -} - -- (CPColor)colorForHorizontalPart:(CPScrollerPart)aScrollerPart inControlState:(CPControlState)aControlState -{ - return [self valueForThemedAttributeName:"horizontal-" + aScrollerPart + "-color" inControlState:aControlState]; -} - -- (void)setColor:(CPColor)aColor forHorizontalPart:(CPScrollerPart)aScrollerPart -{ - [self setValue:aColor forThemedAttributeName:"horizontal-" + aScrollerPart + "-color"]; -} - -- (id)colorForHorizontalPart:(CPScrollerPart)aScrollerPart -{ - return [self valueForThemedAttributeName:"horizontal-" + aScrollerPart + "-color" inControlState:aControlState]; -} - -- (id)currentColorForHorizontalPart:(CPScrollerPart)aScrollerPart +- (id)currentValueForThemedAttributeName:(CPString)anAttributeName { var controlState = _controlState; - if (_hitPart !== aScrollerPart) + if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) controlState &= ~CPControlStateHighlighted; - return [self valueForThemedAttributeName:"horizontal-" + aScrollerPart + "-color" inControlState:controlState]; -} - -- (void)setColor:(CPColor)aColor forVerticalPart:(CPScrollerPart)aScrollerPart inControlState:(CPControlState)aControlState -{ - [self setValue:aColor forThemedAttributeName:"vertical-" + aScrollerPart + "-color" inControlState:aControlState]; -} - -- (CPColor)colorForVerticalPart:(CPScrollerPart)aScrollerPart inControlState:(CPControlState)aControlState -{ - return [self valueForThemedAttributeName:"vertical-" + aScrollerPart + "-color" inControlState:aControlState]; -} - -- (void)setColor:(CPColor)aColor forVerticalPart:(CPScrollerPart)aScrollerPart -{ - [self setValue:aColor forThemedAttributeName:"vertical-" + aScrollerPart + "-color"]; -} - -- (id)colorForVerticalPart:(CPScrollerPart)aScrollerPart -{ - return [self valueForThemedAttributeName:"vertical-" + aScrollerPart + "-color" inControlState:aControlState]; -} - -- (id)currentColorForVerticalPart:(CPScrollerPart)aScrollerPart -{ - var controlState = _controlState; - - if (_hitPart !== aScrollerPart) - controlState &= ~CPControlStateHighlighted; - - return [self valueForThemedAttributeName:"vertical-" + aScrollerPart + "-color" inControlState:controlState]; + return [self valueForThemedAttributeName:anAttributeName inControlState:controlState]; } // Calculating Layout @@ -325,40 +261,21 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller // At this point we know we're going to need arrows. _usableParts = CPAllScrollerParts; - var isHorizontal = ![self isVertical], - trackOverlapInset = [self currentValueForThemedAttributeName:@"track-overlap-inset"], + var trackOverlapInset = [self currentValueForThemedAttributeName:@"track-overlap-inset"], width = _CGRectGetWidth(bounds), height = _CGRectGetHeight(bounds); - if (isHorizontal) + if ([self isVertical]) { - var decrementLineSize = [self currentValueForThemedAttributeName:"horizontal-decrement-line-size"], - incrementLineSize = [self currentValueForThemedAttributeName:"horizontal-increment-line-size"], - effectiveDecrementLineWidth = decrementLineSize.width - trackOverlapInset.left, - effectiveIncrementLineWidth = incrementLineSize.width - trackOverlapInset.right; - slotWidth = width - effectiveDecrementLineWidth - effectiveIncrementLineWidth, - minimumKnobSize = [self currentValueForThemedAttributeName:"horizontal-minimum-knob-size"], - knobWidth = MAX(minimumKnobSize.width, (slotWidth * _knobProportion)), - knobLocation = effectiveDecrementLineWidth + (slotWidth - knobWidth) * [self floatValue]; - - _partRects[CPScrollerDecrementPage] = _CGRectMake(effectiveDecrementLineWidth, 0.0, knobLocation - effectiveDecrementLineWidth, height); - _partRects[CPScrollerKnob] = _CGRectMake(knobLocation, 0.0, knobWidth, minimumKnobSize.height); - _partRects[CPScrollerIncrementPage] = _CGRectMake(knobLocation + knobWidth, 0.0, width - (knobLocation + knobWidth) - effectiveIncrementLineWidth, height); - _partRects[CPScrollerKnobSlot] = _CGRectMake(effectiveDecrementLineWidth, 0.0, slotWidth, height); - _partRects[CPScrollerDecrementLine] = _CGRectMake(0.0, 0.0, decrementLineSize.width, decrementLineSize.height); - _partRects[CPScrollerIncrementLine] = _CGRectMake(width - incrementLineSize.width, 0.0, incrementLineSize.width, incrementLineSize.height); - } - else - { - var decrementLineSize = [self currentValueForThemedAttributeName:"vertical-decrement-line-size"], - incrementLineSize = [self currentValueForThemedAttributeName:"vertical-decrement-line-size"], + var decrementLineSize = [self currentValueForThemedAttributeName:"decrement-line-size"], + incrementLineSize = [self currentValueForThemedAttributeName:"increment-line-size"], effectiveDecrementLineHeight = decrementLineSize.height - trackOverlapInset.top, effectiveIncrementLineHeight = incrementLineSize.height - trackOverlapInset.bottom, slotHeight = height - effectiveDecrementLineHeight - effectiveIncrementLineHeight, - minimumKnobSize = [self currentValueForThemedAttributeName:"vertical-minimum-knob-size"], + minimumKnobSize = [self currentValueForThemedAttributeName:"minimum-knob-size"], knobHeight = MAX(minimumKnobSize.height, (slotHeight * _knobProportion)), knobLocation = effectiveDecrementLineHeight + (slotHeight - knobHeight) * [self floatValue]; - + _partRects[CPScrollerDecrementPage] = _CGRectMake(0.0, effectiveDecrementLineHeight, width, knobLocation - effectiveDecrementLineHeight); _partRects[CPScrollerKnob] = _CGRectMake((width - minimumKnobSize.width) / 2.0, knobLocation, minimumKnobSize.width, knobHeight); _partRects[CPScrollerIncrementPage] = _CGRectMake(0.0, knobLocation + knobHeight, width, height - (knobLocation + knobHeight) - effectiveIncrementLineHeight); @@ -366,6 +283,25 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller _partRects[CPScrollerDecrementLine] = _CGRectMake(0.0, 0.0, decrementLineSize.width, decrementLineSize.height); _partRects[CPScrollerIncrementLine] = _CGRectMake(0.0, height - incrementLineSize.height, incrementLineSize.width, incrementLineSize.height); } + + else + { + var decrementLineSize = [self currentValueForThemedAttributeName:"decrement-line-size"], + incrementLineSize = [self currentValueForThemedAttributeName:"increment-line-size"], + effectiveDecrementLineWidth = decrementLineSize.width - trackOverlapInset.left, + effectiveIncrementLineWidth = incrementLineSize.width - trackOverlapInset.right; + slotWidth = width - effectiveDecrementLineWidth - effectiveIncrementLineWidth, + minimumKnobSize = [self currentValueForThemedAttributeName:"minimum-knob-size"], + knobWidth = MAX(minimumKnobSize.width, (slotWidth * _knobProportion)), + knobLocation = effectiveDecrementLineWidth + (slotWidth - knobWidth) * [self floatValue]; + + _partRects[CPScrollerDecrementPage] = _CGRectMake(effectiveDecrementLineWidth, 0.0, knobLocation - effectiveDecrementLineWidth, height); + _partRects[CPScrollerKnob] = _CGRectMake(knobLocation, 0.0, knobWidth, minimumKnobSize.height); + _partRects[CPScrollerIncrementPage] = _CGRectMake(knobLocation + knobWidth, 0.0, width - (knobLocation + knobWidth) - effectiveIncrementLineWidth, height); + _partRects[CPScrollerKnobSlot] = _CGRectMake(effectiveDecrementLineWidth, 0.0, slotWidth, height); + _partRects[CPScrollerDecrementLine] = _CGRectMake(0.0, 0.0, decrementLineSize.width, decrementLineSize.height); + _partRects[CPScrollerIncrementLine] = _CGRectMake(width - incrementLineSize.width, 0.0, incrementLineSize.width, incrementLineSize.height); + } } /*! @@ -429,9 +365,8 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller [self checkSpaceForParts]; var index = 0, - count = PARTS_ARRANGEMENT.length, - selector = [self isVertical] ? @selector(currentColorForVerticalPart:) : @selector(currentColorForHorizontalPart:); - + count = PARTS_ARRANGEMENT.length; + for (; index < count; ++index) { var part = PARTS_ARRANGEMENT[index]; @@ -442,7 +377,7 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller view = [self layoutEphemeralSubviewNamed:part positioned:CPWindowAbove relativeToEphemeralSubviewNamed:PARTS_ARRANGEMENT[index - 1]]; if (view) - [view setBackgroundColor:objj_msgSend(self, selector, part)]; + [view setBackgroundColor:[self currentValueForThemedAttributeName:NAMES_FOR_PARTS[part] + "-color"]]; } } @@ -589,12 +524,27 @@ var PARTS_ARRANGEMENT = [CPScrollerKnobSlot, CPScrollerDecrementLine, CPScroller } +- (void)_recalculateIsVertical +{ + // Recalculate isVertical. + var bounds = [self bounds], + width = _CGRectGetWidth(bounds), + height = _CGRectGetHeight(bounds); + + _isVertical = width < height ? 1 : (width > height ? 0 : -1); + + if (_isVertical === 1) + _controlState |= CPControlStateVertical; + else if (_isVertical === 0) + _controlState &= ~CPControlStateVertical; +} + - (void)setFrameSize:(CGSize)aSize { [super setFrameSize:aSize]; - - _isVertical = nil; - + + [self _recalculateIsVertical]; + [self checkSpaceForParts]; [self setNeedsLayout]; } @@ -639,7 +589,8 @@ var CPScrollerControlSizeKey = "CPScrollerControlSize", _partRects = []; _hitPart = CPScrollerNoPart; - + + [self _recalculateIsVertical]; // [self checkSpaceForParts]; // [self setNeedsLayout]; } diff --git a/AppKit/CPThemedAttribute.j b/AppKit/CPThemedAttribute.j index 24d2bf9d8..9ab810f76 100644 --- a/AppKit/CPThemedAttribute.j +++ b/AppKit/CPThemedAttribute.j @@ -32,6 +32,8 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 { BOOL _isSingularObject; + JSObject _cache; + CPString _name; id _defaultValue; @@ -45,21 +47,23 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (id)initWithName:(CPString)aName defaultValue:(id)aDefaultValue theme:(CPTheme)aTheme class:(Class)aClass { self = [super init]; - + if (self) { + _cache = {}; + _name = aName; - + _defaultValue = aDefaultValue; - + _theme = aTheme; _themedClass = aClass; - + _isSingularObject = YES; _values = nil; _valueFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; } - + return self; } @@ -75,6 +79,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (void)setDefaultValue:(id)aValue { + _cache = {}; _defaultValue = aValue; } @@ -83,6 +88,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 if (_theme === aTheme) return; + _cache = {}; _theme = aTheme; _valueFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; } @@ -98,6 +104,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (void)setValue:(id)aValue { + _cache = {}; _isSingularObject = YES; _values = aValue; } @@ -109,6 +116,8 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (void)setValue:(id)aValue forControlState:(CPControlState)aState { + _cache = {}; + if (aState !== CPControlStateNormal) { if (_isSingularObject) @@ -135,54 +144,52 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (id)valueForControlState:(CPControlState)aState { + var value = _cache[aState]; + + if (value !== undefined && value !== nil) + return value; + if (_isSingularObject) - { 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 || value === nil) && aState > 0) + else { - // If this is a composite state, find the closest partial subset match. - if (aState & (aState - 1)) + var value = _values[aState]; + + // If we don't have a value, and we have a non-normal state... + if ((value === undefined || value === nil) && aState > 0) { - var highestBitCount = 0; - - for (state in _values) - { - if (!_values.hasOwnProperty(state)) - continue; - - // state is a string! - state = Number(state); - - // A & B = A iff A < B - if ((state & aState) === state) + // If this is a composite state, find the closest partial subset match. + if (aState & (aState - 1)) + { + var highestBitCount = 0; + + for (state in _values) { - var bitCount = (state < BIT_COUNT.length) ? BIT_COUNT[state] : bit_count(state); - - if (bitCount > highestBitCount) + if (!_values.hasOwnProperty(state)) + continue; + + // state is a string! + state = Number(state); + + // A & B = A iff A < B + if ((state & aState) === state) { - highestBitCount = bitCount; - value = _values[state]; + var bitCount = (state < BIT_COUNT.length) ? BIT_COUNT[state] : bit_count(state); + + if (bitCount > highestBitCount) + { + highestBitCount = bitCount; + value = _values[state]; + } } } } - } - // Still don't have a value? OK, let's use the normal value. - if (value === undefined || value === nil) - value = _values[CPControlStateNormal]; + // Still don't have a value? OK, let's use the normal value. + if (value === undefined || value === nil) + value = _values[CPControlStateNormal]; + } } if (value === undefined || value === nil) @@ -191,6 +198,8 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 if (value === undefined || value === nil) value = _defaultValue; + _cache[aState] = value; + return value; } @@ -234,6 +243,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 if (self) { + _cache = {}; _isSingularObject = [aCoder containsValueForKey:@"value"]; if (_isSingularObject) @@ -311,7 +321,7 @@ function CPThemedAttributeDecode(aCoder, anAttributeName, aDefaultValue, aTheme, var attribute = [aCoder decodeObjectForKey:key]; - if (![attribute isKindOfClass:[CPThemedAttribute class]]) + if (!attribute.isa || ![attribute isKindOfClass:[CPThemedAttribute class]]) { var themedAttribute = CPThemedAttributeMake(anAttributeName, aDefaultValue, aTheme, aClass); @@ -319,6 +329,7 @@ function CPThemedAttributeDecode(aCoder, anAttributeName, aDefaultValue, aTheme, attribute = themedAttribute; } + else { [attribute setName:anAttributeName]; diff --git a/AppKit/Cib/CPCib.j b/AppKit/Cib/CPCib.j index 995bcac14..cae1ced63 100644 --- a/AppKit/Cib/CPCib.j +++ b/AppKit/Cib/CPCib.j @@ -103,54 +103,6 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; // Display Visible Windows. [objectData displayVisibleWindows]; - /* -// [objectData establishConnectionsWithOwner:owner topLevelObjects:topLevelObjects]; -// [objectData cibInstantiateWithOwner:owner topLevelObjects:topLevelObjects]; -// alert([objectData description]); -// alert([unarchiver._archive description]); - - NSMutableArray *t; - NSEnumerator *e; - id o; - id owner; - id rootObject; -#if 0 - NSLog(@"instantiateCibWithExternalNameTable=%@", table); -#endif - if(![decoded isKindOfClass:[NSIBObjectData class]]) - return NO; - owner=[table objectForKey:NSCibOwner]; - rootObject=[decoded rootObject]; -#if 0 - NSLog(@"establishConnections"); -#endif - [decoded establishConnectionsWithExternalNameTable:table]; -#if 0 - NSLog(@"awakeFromCib %d objects", [decodedObjects count]); -#endif -#if 0 - NSLog(@"objects 2=%@", decodedObjects); -#endif - - // FIXME: shouldn't be accessing private variables. - var objects = unarchiver._objects, - count = [objects count]; - - // The order in which objects receive the awakeFromCib message is not guaranteed. - while (count--) - { - var object = objects[count]; - - if ([object respondsToSelector:@selector(awakeFromCib)]) - [object awakeFromCib]; - } - -// if ([owner respondsToSelector:@selector(awakeFromCib)]) -// [owner awakeFromCib]; - // Display visible windows. - - return YES;*/ - return YES; } diff --git a/AppKit/Cib/_CPCibObjectData.j b/AppKit/Cib/_CPCibObjectData.j index 9fc5620c2..b56a33527 100644 --- a/AppKit/Cib/_CPCibObjectData.j +++ b/AppKit/Cib/_CPCibObjectData.j @@ -61,6 +61,43 @@ JSObject _replacementObjects; } +- (id)init +{ + self = [super init]; + + if (self) + { + _namesKeys = []; + _namesValues = []; + + //CPArray _accessibilityConnectors; + //CPArray _accessibilityOidsKeys; + //CPArray _accessibilityOidsValues; + + _classesKeys = []; + _classesValues = []; + + _connections = []; + //id _fontManager; + + _framework = @""; + + _nextOid = []; + + _objectsKeys = []; + _objectsValues = []; + + _oidKeys = []; + _oidValues = []; + + _fileOwner = nil; + + _visibleWindows = [CPSet set]; + } + + return self; +} + - (CPMenu)mainMenu { var index = [_namesValues indexOfObjectIdenticalTo:"MainMenu"]; @@ -114,7 +151,7 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey - (id)initWithCoder:(CPCoder)aCoder { self = [super init]; - + if (self) { _replacementObjects = {}; @@ -131,22 +168,22 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey _connections = [aCoder decodeObjectForKey:_CPCibObjectDataConnectionsKey]; //id _fontManager; - + _framework = [aCoder decodeObjectForKey:_CPCibObjectDataFrameworkKey]; - + _nextOid = [aCoder decodeIntForKey:_CPCibObjectDataNextOidKey]; - + _objectsKeys = [aCoder decodeObjectForKey:_CPCibObjectDataObjectsKeysKey]; _objectsValues = [aCoder decodeObjectForKey:_CPCibObjectDataObjectsValuesKey]; - + _oidKeys = [aCoder decodeObjectForKey:_CPCibObjectDataOidKeysKey]; _oidValues = [aCoder decodeObjectForKey:_CPCibObjectDataOidValuesKey]; _fileOwner = [aCoder decodeObjectForKey:_CPCibObjectDataFileOwnerKey]; - + _visibleWindows = [aCoder decodeObjectForKey:_CPCibObjectDataVisibleWindowsKey]; } - + return self; } @@ -154,16 +191,16 @@ var _CPCibObjectDataNamesKeysKey = @"_CPCibObjectDataNamesKeysKey { [aCoder encodeObject:_namesKeys forKey:_CPCibObjectDataNamesKeysKey]; [aCoder encodeObject:_namesValues forKey:_CPCibObjectDataNamesValuesKey]; - + //CPArray _accessibilityConnectors; //CPArray _accessibilityOidsKeys; //CPArray _accessibilityOidsValues; - + [aCoder encodeObject:_classesKeys forKey:_CPCibObjectDataClassesKeysKey]; [aCoder encodeObject:_classesValues forKey:_CPCibObjectDataClassesValuesKey]; - + [aCoder encodeObject:_connections forKey:_CPCibObjectDataConnectionsKey]; - + //id _fontManager; [aCoder encodeObject:_framework forKey:_CPCibObjectDataFrameworkKey]; diff --git a/Foundation/CPKeyedArchiver.j b/Foundation/CPKeyedArchiver.j index 28b7db48f..f95df0d2d 100644 --- a/Foundation/CPKeyedArchiver.j +++ b/Foundation/CPKeyedArchiver.j @@ -205,8 +205,8 @@ var _CPKeyedArchiverStringClass = Nil, // We call willEncodeObject previously. _plistObject = _plistObjects[[_UIDs objectForKey:[object hash]]]; - [object encodeWithCoder:self]; - + [object encodeWithCoder:self]; + if (_delegate && _delegateSelectors & _CPKeyedArchiverDidEncodeObjectSelector) [_delegate archiver:self didEncodeObject:object]; } diff --git a/Objective-J/evaluate.js b/Objective-J/evaluate.js index 72fd1ddf1..a6ed69846 100644 --- a/Objective-J/evaluate.js +++ b/Objective-J/evaluate.js @@ -239,12 +239,21 @@ function fragment_evaluate_file(aFragment) return requiresSleep; } -function objj_import(aPath, isLocal, didCompleteCallback) +function objj_import(/*String | Array*/ pathOrPaths, /*BOOL*/ isLocal, /*Function*/ didCompleteCallback) { - var context = new objj_context(); - + var context = new objj_context(), + paths = pathOrPaths; + + if (typeof paths === "string") + paths = [paths]; + + var index = 0, + count = paths.length; + + for (; index < count; ++index) + context.pushFragment(fragment_create_file(paths[index], new objj_bundle(""), isLocal, NULL)); + context.didCompleteCallback = didCompleteCallback; - context.pushFragment(fragment_create_file(aPath, new objj_bundle(""), isLocal, NULL)); - + context.evaluate(); } diff --git a/Tools/blend/BlendKit/BKShowcaseController.j b/Tools/blend/BlendKit/BKShowcaseController.j new file mode 100644 index 000000000..885417f3e --- /dev/null +++ b/Tools/blend/BlendKit/BKShowcaseController.j @@ -0,0 +1,120 @@ + +@import +@import + +@import "BKUtilities.j" + + +@implementation BKShowcaseController : CPObject +{ +} + +- (void)applicationDidFinishLaunching:(CPNotification)aNotification +{ + var theWindow = [[CPWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:CPBorderlessBridgeWindowMask], + contentView = [theWindow contentView], + bounds = [contentView bounds], + themeDescriptorClasses = BKThemeDescriptorClasses(); + + var tabView = [[CPTabView alloc] initWithFrame:bounds]; + + [tabView setAutoresizingMask:CPViewWidthSizable | CPViewHeightSizable]; + + [contentView addSubview:tabView]; + + var count = [themeDescriptorClasses count]; + + while (count--) + { + var theClass = themeDescriptorClasses[count], + item = [[CPTabViewItem alloc] initWithIdentifier:[theClass themeName]], + templates = BKThemeObjectTemplatesForClass(theClass), + templatesCount = [templates count], + viewTemplates = [], + itemSize = CGSizeMake(0.0, 0.0); + + while (templatesCount--) + { + var template = templates[templatesCount], + object = [template valueForKey:@"themedObject"]; + + if ([object isKindOfClass:[CPView class]]) + { + var size = [object frame].size, + labelWidth = [[template valueForKey:@"label"] sizeWithFont:[CPFont boldSystemFontOfSize:12.0]].width + 20.0; + + if (size.width > itemSize.width) + itemSize.width = size.width; + + if (labelWidth > itemSize.width) + itemSize.width = labelWidth; + + if (size.height > itemSize.height) + itemSize.height = size.height; + + [viewTemplates addObject:template]; + } + } + + itemSize.height += 30; + + var collectionView = [[CPCollectionView alloc] initWithFrame:CGRectMakeZero()], + collectionViewItem = [[CPCollectionViewItem alloc] init]; + + [collectionViewItem setView:[[BKShowcaseCell alloc] init]]; + + [collectionView setItemPrototype:collectionViewItem]; + [collectionView setMinItemSize:itemSize]; + [collectionView setMaxItemSize:itemSize]; + [collectionView setVerticalMargin:5.0]; + [collectionView setContent:viewTemplates]; + + [item setLabel:[theClass themeName]]; + [item setView:collectionView]; + + [tabView addTabViewItem:item]; + } + + [theWindow orderFront:self]; +} + +@end + + +@implementation BKShowcaseCell : CPView +{ + CPView _view; + CPTextField _label; +} + +- (void)setRepresentedObject:(id)anObject +{ + if (!_label) + { + _label = [[CPTextField alloc] initWithFrame:CGRectMakeZero()]; + + [_label setAlignment:CPCenterTextAlignment]; + [_label setAutoresizingMask:CPViewMinYMargin | CPViewWidthSizable]; + [_label setFont:[CPFont boldSystemFontOfSize:12.0]]; + + [self addSubview:_label]; + } + + [_label setStringValue:[anObject valueForKey:@"label"]]; + [_label sizeToFit]; + + [_label setFrame:CGRectMake(0.0, CGRectGetHeight([self bounds]) - CGRectGetHeight([_label frame]), + CGRectGetWidth([self bounds]), CGRectGetHeight([_label frame]))]; + + if (_view) + [_view removeFromSuperview]; + + _view = [anObject valueForKey:@"themedObject"]; + + [_view setAutoresizingMask:CPViewMinXMargin | CPViewMaxXMargin | CPViewMinYMargin | CPViewMaxYMargin]; + [_view setFrameOrigin:CGPointMake((CGRectGetWidth([self bounds]) - CGRectGetWidth([_view frame])) / 2.0, (CGRectGetMinY([_label frame]) - CGRectGetHeight([_view frame])) / 2.0)]; + + [self addSubview:_view]; +} + +@end diff --git a/Tools/blend/BlendKit/BKUtilities.j b/Tools/blend/BlendKit/BKUtilities.j new file mode 100644 index 000000000..bda6e696a --- /dev/null +++ b/Tools/blend/BlendKit/BKUtilities.j @@ -0,0 +1,145 @@ + +@implementation AKThemeTemplate : CPObject +{ + CPString _name; + CPString _description; +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super init]; + + if (self) + { + _name = [aCoder decodeObjectForKey:@"AKThemeTemplateName"]; + _description = [aCoder decodeObjectForKey:@"AKThemeTemplateDescription"]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_name forKey:@"AKThemeTemplateName"]; + [aCoder encodeObject:_description forKey:@"AKThemeTemplateDescription"]; +} + +@end + +@implementation AKThemeObjectTemplate : CPView +{ + CPString _label; + id _themedObject; +} + +- (id)initWithCoder:(CPCoder)aCoder +{ + self = [super init]; + + if (self) + { + _label = [aCoder decodeObjectForKey:@"AKThemeObjectTemplateLabel"]; + _themedObject = [aCoder decodeObjectForKey:@"AKThemeObjectTemplateThemedObject"]; + } + + return self; +} + +- (void)encodeWithCoder:(CPCoder)aCoder +{ + [aCoder encodeObject:_label forKey:@"AKThemeObjectTemplateLabel"]; + [aCoder encodeObject:_themedObject forKey:@"AKThemeObjectTemplateThemedObject"]; +} + +@end + +function BKThemeDescriptorClasses() +{ + // Grab Theme Descriptor Classes. + var themeDescriptorClasses = []; + + for (candidate in window) + { + var theClass = objj_getClass(candidate), + theClassName = class_getName(theClass), + index = theClassName.indexOf("ThemeDescriptor"); + + if ((index >= 0) && (index === theClassName.length - "ThemeDescriptor".length)) + themeDescriptorClasses.push(theClass); + } + + return themeDescriptorClasses; +} + +function BKThemeObjectTemplatesForClass(aClass) +{ + var templates = [], + methods = class_copyMethodList(aClass.isa), + count = [methods count]; + + while (count--) + { + var method = methods[count], + selector = method_getName(method); + + if (selector.indexOf("themed") === 0) + { + var impl = method_getImplementation(method), + object = impl(aClass, selector); + + if (object) + { + var template = [[AKThemeObjectTemplate alloc] init]; + + [template setValue:object forKey:@"themedObject"]; + [template setValue:BKLabelFromIdentifier(selector) forKey:@"label"]; + + [templates addObject:template]; + } + } + } + + return templates; +} + +function BKLabelFromIdentifier(anIdentifier) +{ + var string = anIdentifier.substr("themed".length); + index = 0, + count = string.length, + label = "", + lastCapital = null, + isLeadingCapital = YES; + + for (; index < count; ++index) + { + var character = string.charAt(index), + isCapital = /^[A-Z]/.test(character); + + if (isCapital) + { + if (!isLeadingCapital) + { + if (lastCapital === null) + label += ' ' + character.toLowerCase(); + else + label += character; + } + + lastCapital = character; + } + else + { + if (isLeadingCapital && lastCapital !== null) + label += lastCapital; + + label += character; + + lastCapital = null; + isLeadingCapital = NO; + } + } + + return label; +} + diff --git a/Tools/blend/BlendKit/BlendKit.j b/Tools/blend/BlendKit/BlendKit.j new file mode 100644 index 000000000..09821ddd7 --- /dev/null +++ b/Tools/blend/BlendKit/BlendKit.j @@ -0,0 +1,3 @@ + +@import "BKShowcaseController.j" +@import "BKUtilities.j" diff --git a/Tools/blend/BlendKit/BlendKit.steam b/Tools/blend/BlendKit/BlendKit.steam new file mode 100644 index 000000000..75d93232e --- /dev/null +++ b/Tools/blend/BlendKit/BlendKit.steam @@ -0,0 +1,42 @@ + + + + + Name + BlendKit + Targets + + + Name + BlendKit + + + Configurations + + + Name + Debug + Flags + -DDEBUG -DPLATFORM_DOM -g + + + Name + Release + Flags + -DPLATFORM_DOM -O + + + Name + Debug-Rhino + Flags + -DDEBUG -g + + + Name + Release-Rhino + Flags + -O + + + + diff --git a/Tools/blend/BlendKit/Info.plist b/Tools/blend/BlendKit/Info.plist new file mode 100644 index 000000000..898e2e6c0 --- /dev/null +++ b/Tools/blend/BlendKit/Info.plist @@ -0,0 +1,14 @@ + + + + + CPBundleIdentifier + com.280n.BlendKit + CPBundleInfoDictionaryVersion + 6.0 + CPBundleName + BlendKit + CPBundlePackageType + FMWK + + diff --git a/Tools/blend/BlendKit/build.xml b/Tools/blend/BlendKit/build.xml new file mode 100644 index 000000000..67c5ff641 --- /dev/null +++ b/Tools/blend/BlendKit/build.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/blend/Tool/blend b/Tools/blend/Tool/blend new file mode 100755 index 000000000..7d3ae9cac --- /dev/null +++ b/Tools/blend/Tool/blend @@ -0,0 +1,57 @@ +#!/bin/sh +# +# blend +# blend +# +# Created by Francisco Tolmasky. +# Copyright 2008, 280 North, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# + +# if OBJJ_HOME isn't set, try to determine it +if [ -z $OBJJ_HOME ]; then + # get path of the executable + SELF_PATH=$(cd -P -- "$(dirname -- "$0")" && pwd -P) && SELF_PATH=$SELF_PATH/$(basename -- "$0") + + # resolve symlinks + if [ -h $SELF_PATH ]; then + SELF_PATH=`readlink $SELF_PATH` + fi + + # get second ancestor directory + SELF_DIR=`dirname $SELF_PATH` + export OBJJ_HOME=`dirname $SELF_DIR` + + # check to ensure it exists, print message + if [ -d $OBJJ_HOME ]; then + echo "OBJJ_HOME not set, defaulting to $OBJJ_HOME" 1>&2 + else + echo "OBJJ_HOME not set, default at $OBJJ_HOME doesn't exist, exiting" 1>&2 + exit 2 + fi +fi + +OBJJ_LIB="$OBJJ_HOME/lib" + +BLEND="$OBJJ_LIB/blend/main.j" + +# convert paths for Cygwin +if [[ `uname` == CYGWIN* ]]; then + OBJJ_HOME=`cygpath -w "$OBJJ_HOME"` + BAKE=`cygpath -w "$BLEND"` +fi + +objj $BLEND $@ diff --git a/Tools/blend/Tool/blend.steam b/Tools/blend/Tool/blend.steam new file mode 100644 index 000000000..b4287d226 --- /dev/null +++ b/Tools/blend/Tool/blend.steam @@ -0,0 +1,46 @@ + + + + + Name + blend + Targets + + + Name + blend + Excluded + + BlendKit + + + + Configurations + + + Name + Debug + Flags + -DDEBUG -DPLATFORM_DOM -g + + + Name + Release + Flags + -DPLATFORM_DOM -O + + + Name + Debug-Rhino + Flags + -DDEBUG -g + + + Name + Release-Rhino + Flags + -O + + + + diff --git a/Tools/blend/Tool/build.xml b/Tools/blend/Tool/build.xml new file mode 100644 index 000000000..a3773f38b --- /dev/null +++ b/Tools/blend/Tool/build.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/blend/Tool/main.j b/Tools/blend/Tool/main.j new file mode 100644 index 000000000..e59d6eb7a --- /dev/null +++ b/Tools/blend/Tool/main.j @@ -0,0 +1,301 @@ + +@import +@import +@import +@import +@import + +importClass(java.io.File); +importClass(java.io.FileOutputStream); +importClass(java.io.BufferedWriter); +importClass(java.io.OutputStreamWriter); + + +function main() +{ + var index = 0, + count = arguments.length, + + outputFilePath = "", + descriptorFiles = [], + resourcesPath = nil, + cibFiles = []; + + for (; index < count; ++index) + { + var argument = String(arguments[index]); + + switch (argument) + { + case "-c": + case "--cib": cibFiles.push(String(arguments[++index])); + break; + + case "-d": + case "-descriptor": descriptorFiles.push(String(arguments[++index])); + break; + + case "-o": outputFilePath = String(arguments[++index]); + break; + + case "-R": resourcesPath = String(arguments[++index]); + break; + + default: jExtensionIndex = argument.indexOf(".j"); + + if ((jExtensionIndex > 0) && (jExtensionIndex === argument.length - ".j".length)) + descriptorFiles.push(argument); + else + cibFiles.push(argument); + } + } + + if (descriptorFiles.length === 0) + return buildBlendFromCibFiles(cibFiles); + + objj_import(descriptorFiles, YES, function() + { + var themeDescriptorClasses = BKThemeDescriptorClasses(), + count = [themeDescriptorClasses count]; + + while (count--) + { + var theClass = themeDescriptorClasses[count], + themeTemplate = [[AKThemeTemplate alloc] init]; + + [themeTemplate setValue:[theClass themeName] forKey:@"name"]; + + var objectTemplates = BKThemeObjectTemplatesForClass(theClass); + data = cibDataFromTopLevelObjects(objectTemplates.concat([themeTemplate])), + temporaryCibFile = File.createTempFile("temp", ".cib"), + temporaryCibFilePath = temporaryCibFile.getAbsolutePath(), + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(temporaryCibFilePath), "UTF-8")); + + writer.write([data string]); + writer.close(); + + cibFiles.push(temporaryCibFilePath); + } + + buildBlendFromCibFiles(cibFiles, outputFilePath, resourcesPath); + }); +} + +function cibDataFromTopLevelObjects(objects) +{ + var data = [CPData data], + archiver = [[CPKeyedArchiver alloc] initForWritingWithMutableData:data], + objectData = [[_CPCibObjectData alloc] init]; + + objectData._fileOwner = [_CPCibCustomObject new]; + objectData._fileOwner._className = @"CPObject"; + + var index = 0, + count = objects.length; + + for (; index < count; ++index) + { + objectData._objectsValues[index] = objectData._fileOwner; + objectData._objectsKeys[index] = objects[index]; + } + + [archiver encodeObject:objectData forKey:@"CPCibObjectDataKey"]; + + [archiver finishEncoding]; + + return data; +} + +function getDirectory(aPath) +{ + return (aPath).substr(0, (aPath).lastIndexOf('/') + 1) +} + +function buildBlendFromCibFiles(cibFiles, outputFilePath, resourcesPath) +{ + var resourcesFile = nil, + resourcesBundle = new objj_bundle(); + + if (resourcesPath) + { + resourcesFile = new File(resourcesPath); + resourcesBundle.path = getDirectory(resourcesFile.getCanonicalPath()) + "/Info.plist"; + } + + var count = cibFiles.length, + replacedFiles = [], + staticContent = @""; + + while (count--) + { + var theme = themeFromCibFile(new File(cibFiles[count]), resourcesBundle), + + // Archive our theme. + filePath = [theme name] + ".keyedtheme", + fileContents = [[CPKeyedArchiver archivedDataWithRootObject:theme] string]; + + replacedFiles.push(filePath); + + staticContent += MARKER_PATH + ';' + filePath.length + ';' + filePath + MARKER_TEXT + ';' + fileContents.length + ';' + fileContents; + } + + staticContent = "@STATIC;1.0;" + staticContent; + + var infoDictionary = [CPDictionary dictionary]; + staticContentName = "Aristo";//getFileNameWithoutExtension(project.activeTarget().name()); + + [infoDictionary setObject:@"Yikes." forKey:@"CPBundleName"]; + [infoDictionary setObject:@"Yikes." forKey:@"CPBundleIdentifier"]; + [infoDictionary setObject:replacedFiles forKey:@"CPBundleReplacedFiles"]; + [infoDictionary setObject:staticContentName forKey:@"CPBundleExecutable"]; + + var outputFile = new File(outputFilePath).getCanonicalFile(); + + outputFile.mkdirs(); + + var writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFilePath + "/Info.plist"), "UTF-8")); + + writer.write(CPPropertyListCreate280NorthData(infoDictionary).string); + + writer.close(); + + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFilePath + '/' + staticContentName), "UTF-8")); + + writer.write(staticContent); + + writer.close(); + + if (resourcesPath) + rsync(new File(resourcesPath), new File(outputFilePath)); +} + +function themeFromCibFile(aFile, resourcesBundle) +{ + var cib = [[CPCib alloc] initWithCibNamed:aFile.getCanonicalPath() bundle:resourcesBundle],//WithContentsOfURL:aFile.getCanonicalPath()], + topLevelObjects = []; + + [cib instantiateCibWithExternalNameTable:[CPDictionary dictionaryWithObject:topLevelObjects forKey:CPCibTopLevelObjects]]; + + var count = topLevelObjects.length, + theme = nil, + templates = []; + + while (count--) + { + var object = topLevelObjects[count]; + + templates = templates.concat([object blendThemeObjectTemplates]); + + if ([object isKindOfClass:[AKThemeTemplate class]]) + theme = [[CPTheme alloc] initWithName:[object valueForKey:@"name"]]; + } + + [templates makeObjectsPerformSelector:@selector(blendAddThemedObjectAttributesToTheme:) withObject:theme]; + + return theme; +} + +function rsync(srcFile, dstFile) +{ + var src, dst; + + if (String(java.lang.System.getenv("OS")).indexOf("Windows") < 0) + { + src = srcFile.getAbsolutePath(); + dst = dstFile.getAbsolutePath(); + } + else + { + src = exec(["cygpath", "-u", srcFile.getAbsolutePath() + '/']); + dst = exec(["cygpath", "-u", dstFile.getAbsolutePath() + "/Resources"]); + } + + if (srcFile.exists()) + exec(["rsync", "-avz", src, dst]); +} + +function exec(/*Array*/ command, /*Boolean*/ showOutput) +{ + var line = "", + output = "", + + process = Packages.java.lang.Runtime.getRuntime().exec(command),//jsArrayToJavaArray(command)); + reader = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(process.getInputStream())); + + while (line = reader.readLine()) + { + if (showOutput) + System.out.println(line); + + output += line + '\n'; + } + + reader = new Packages.java.io.BufferedReader(new Packages.java.io.InputStreamReader(process.getErrorStream())); + + while (line = reader.readLine()) + System.out.println(line); + + try + { + if (process.waitFor() != 0) + System.err.println("exit value = " + process.exitValue()); + } + catch (anException) + { + System.err.println(anException); + } + + return output; +} + +@implementation CPObject (BlendAdditions) + +- (CPArray)blendThemeObjectTemplates +{ + var theClass = [self class]; + + if ([theClass isKindOfClass:[AKThemeObjectTemplate class]]) + return [self]; + + if ([theClass isKindOfClass:[CPView class]]) + { + var templates = [], + subviews = [self subviews], + count = [subviews count]; + + while (count--) + templates = templates.concat([subviews[count] blendThemeObjectTemplates]); + + return templates; + } + + return []; +} + +@end + +@implementation AKThemeObjectTemplate (BlendAdditions) + +- (void)blendAddThemedObjectAttributesToTheme:(CPTheme)aTheme +{ + var themedObject = [self valueForKey:@"themedObject"]; + + if (!themedObject) + { + var subviews = [self subviews]; + + if ([subviews count] > 0) + themedObject = subviews[0]; + } + + if (themedObject) + { + print(" Recording theme for " + [themedObject className] + "."); + + [aTheme takeThemeFromObject:themedObject]; + } +} + +@end + +main.apply(main, args); diff --git a/Tools/blend/build.xml b/Tools/blend/build.xml new file mode 100644 index 000000000..903d5a94a --- /dev/null +++ b/Tools/blend/build.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tools/steam/Project.js b/Tools/steam/Project.js index 718d69835..3e48b401c 100644 --- a/Tools/steam/Project.js +++ b/Tools/steam/Project.js @@ -224,136 +224,12 @@ Project.prototype.activeFlags = function() return this.activeTarget().flags().concat(this.activeConfiguration().flags()); } -Project.prototype.buildTheme = function() -{ - var project = this/*, - frameworks = NULL; - - // FIXME: OBJJ_INCLUDE_PATHS ENV VAR? - if (true) - { - OBJJ_INCLUDE_PATHS = [System.getenv("STEAM_BUILD") + "/Release-Rhino/", System.getenv("STEAM_BUILD") + "/Release/"]; - frameworks = [System.getenv("STEAM_BUILD") + "/Release/Foundation", System.getenv("STEAM_BUILD") + "/Release-Rhino/AppKit"]; - } - else - { - OBJJ_INCLUDE_PATHS = [OBJJ_HOME + "/lib/Frameworks-Rhino"]; - frameworks = [OBJJ_HOME + "/lib/Frameworks-Rhino/Foundation", OBJJ_HOME + "/lib/Frameworks-Rhino/AppKit"]; - } - - // Load ALL of Foundation and AppKit, be nice to people. - loadFrameworks(frameworks, function()*/ - - // FIXME: This should be stubbed out. It is also in objj.js - var OBJJ_LIB = OBJJ_HOME + "/lib/"; - - var defaultFrameworks = OBJJ_LIB + "/Frameworks-Rhino"; - - OBJJ_INCLUDE_PATHS = [defaultFrameworks]; - - var OBJJ_INCLUDE_PATHS_STRING = getenv("OBJJ_INCLUDE_PATHS"); - - if (OBJJ_INCLUDE_PATHS_STRING) - { - OBJJ_INCLUDE_PATHS = OBJJ_INCLUDE_PATHS_STRING.split(":"); - OBJJ_INCLUDE_PATHS.push(defaultFrameworks); - } - - var activeConfigurationName = this.activeConfiguration().name(); - - OBJJ_INCLUDE_PATHS = [System.getenv("STEAM_BUILD") + "/" + activeConfigurationName + "-Rhino/", System.getenv("STEAM_BUILD") + "/" + activeConfigurationName + "/"]; - - // Load ALL of Foundation and AppKit, be nice to people. - loadFrameworks([System.getenv("STEAM_BUILD") + "/" + activeConfigurationName + "/Foundation", System.getenv("STEAM_BUILD") + "/" + activeConfigurationName + "-Rhino/AppKit"], function() - { - // Get .j files - var jFiles = getFiles(project._root, "j", project.activeTarget().exclusions().concat([new File("Frameworks/")])); - - // Load 'em - importFiles(jFiles, function() - { - // Grab the application delegate. - var applicationDelegateClassName = dictionary_getValue(project._infoDictionary, "CPApplicationDelegateClass"), - applicationDelegate = objj_msgSend(objj_msgSend(objj_getClass(applicationDelegateClassName), "alloc"), "init"), - - // Grab all the themes we plan to make. - themeNames = objj_msgSend(applicationDelegate, "themeNames"), - - themeIndex = 0, - themeCount = themeNames.length, - - replacedFiles = [], - - staticContent = ""; - - for (; themeIndex < themeCount; ++themeIndex) - { - themeName = themeNames[themeIndex]; - - java.lang.System.out.println("Building " + themeName + " Theme."); - - var views = objj_msgSend(applicationDelegate, "viewsFor" + themeName + "Theme"), - viewIndex = 0, - viewCount = views.length, - theme = objj_msgSend(objj_msgSend(CPTheme, "alloc"), "initWithName:", themeName); - - if (!viewCount) - java.lang.System.out.println("There are no themed views in the " + themeName + " Theme."); - - // Loop through each "themed" view, and take it's themed properties. - for (; viewIndex < viewCount; ++viewIndex) - { - var view = views[viewIndex]; - - java.lang.System.out.println(" Recording theme for " + objj_msgSend(views[viewIndex], "className") + "."); - - objj_msgSend(theme, "takeThemeFromObject:", view); - } - - // Archive our theme. - var filePath = themeName + ".keyedtheme"; - fileContents = objj_msgSend(objj_msgSend(CPKeyedArchiver, "archivedDataWithRootObject:", theme), "string"); - - replacedFiles.push(filePath); - - staticContent += MARKER_PATH + ';' + filePath.length + ';' + filePath + MARKER_TEXT + ';' + fileContents.length + ';' + fileContents; - } - - staticContent = "@STATIC;1.0;" + staticContent; - - var staticContentName = getFileNameWithoutExtension(project.activeTarget().name()); - - dictionary_setValue(project._infoDictionary, "CPBundleReplacedFiles", replacedFiles); - dictionary_setValue(project._infoDictionary, "CPBundleExecutable", staticContentName); - - var writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(project.buildProducts().getCanonicalPath() + "/Info.plist"), "UTF-8")); - - writer.write(CPPropertyListCreate280NorthData(project._infoDictionary).string); - - writer.close(); - - writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(project.buildProducts().getCanonicalPath() + "/" + staticContentName), "UTF-8")); - - writer.write(staticContent); - - writer.close(); - }); - }); - - serviceTimeouts(); - - this.copyResources(); -} - Project.prototype.build = function() { java.lang.System.out.println("Building Target \"" + this.activeTarget().name() + "\" of Project \"" + this.name() + "\" with Configuration \"" + this.activeConfiguration().name() + "\"."); - if (this.activeTarget().type() === "280N.theme") - return this.buildTheme(); - var jFiles = getFiles(this._root, "j", this._activeTarget.exclusions()), replacedFiles = []; hasModifiedJFiles = false; diff --git a/Tools/steam/Templates/ThemeDescriptor/Info.plist b/Tools/steam/Templates/ThemeDescriptor/Info.plist new file mode 100644 index 000000000..f09701c61 --- /dev/null +++ b/Tools/steam/Templates/ThemeDescriptor/Info.plist @@ -0,0 +1,12 @@ + + + + + CPApplicationDelegateClass + BKShowcaseController + CPBundleName + __Product__ + CPPrincipalClass + CPApplication + + diff --git a/Tools/steam/Templates/ThemeDescriptor/ThemeDescriptors.j b/Tools/steam/Templates/ThemeDescriptor/ThemeDescriptors.j new file mode 100644 index 000000000..aab4c6581 --- /dev/null +++ b/Tools/steam/Templates/ThemeDescriptor/ThemeDescriptors.j @@ -0,0 +1,33 @@ +/* + * ThemeDescriptors.j + * __Product__ + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +@import + + +@implementation __Product__ThemeDescriptor : CPObject +{ +} + ++ (CPString)themeName +{ + return @"__Product__"; +} + ++ (CPTextField)themedTextField +{ + var textField = [[CPTextField alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 20.0)]; + + [textField setValue:[CPColor blueColor] forThemedAttributeName:@"bezel-color"]; + [textField setValue:[CPColor redColor] forThemedAttributeName:@"text-color"]; + + [textField setStringValue:@"Yikes!"]; + + return textField; +} + +@end diff --git a/Tools/steam/Templates/ThemeDescriptor/index-debug.html b/Tools/steam/Templates/ThemeDescriptor/index-debug.html new file mode 100644 index 000000000..d941b006a --- /dev/null +++ b/Tools/steam/Templates/ThemeDescriptor/index-debug.html @@ -0,0 +1,36 @@ + + + + + + + Hello World + + + + + + + + +
+
+ +
+
+ + + diff --git a/Tools/steam/Templates/ThemeDescriptor/index.html b/Tools/steam/Templates/ThemeDescriptor/index.html new file mode 100644 index 000000000..bea6f5f36 --- /dev/null +++ b/Tools/steam/Templates/ThemeDescriptor/index.html @@ -0,0 +1,37 @@ + + + + + + + Hello World + + + + + + + + + +
+
+ +
+
+ + + + diff --git a/Tools/steam/Templates/ThemeDescriptor/main.j b/Tools/steam/Templates/ThemeDescriptor/main.j new file mode 100755 index 000000000..cb02f4859 --- /dev/null +++ b/Tools/steam/Templates/ThemeDescriptor/main.j @@ -0,0 +1,19 @@ +/* + * main.j + * __Product__ + * + * Created by __Me__ on __Date__. + * Copyright 2008 __MyCompanyName__. All rights reserved. + */ + +@import +@import +@import + +@import "ThemeDescriptors.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From ee3b7deb07ecc16adc3a4dd3e43d5c319d583c7c Mon Sep 17 00:00:00 2001 From: Francisco Tolmasky Date: Sun, 8 Mar 2009 21:01:14 -0700 Subject: [PATCH 2/9] Removed old art. Reviewed by me. --- .../Resources/CPButton/CPButtonHUDRegular0.png | Bin 3309 -> 0 bytes .../Resources/CPButton/CPButtonHUDRegular1.png | Bin 2844 -> 0 bytes .../Resources/CPButton/CPButtonHUDRegular2.png | Bin 3313 -> 0 bytes .../CPButton/CPButtonHUDRegularHighlighted0.png | Bin 3300 -> 0 bytes .../CPButton/CPButtonHUDRegularHighlighted1.png | Bin 2838 -> 0 bytes .../CPButton/CPButtonHUDRegularHighlighted2.png | Bin 3307 -> 0 bytes .../CPButton/CPButtonRoundRectRegular0.png | Bin 393 -> 0 bytes .../CPButton/CPButtonRoundRectRegular1.png | Bin 141 -> 0 bytes .../CPButton/CPButtonRoundRectRegular2.png | Bin 409 -> 0 bytes .../CPButtonRoundRectRegularHighlighted0.png | Bin 378 -> 0 bytes .../CPButtonRoundRectRegularHighlighted1.png | Bin 133 -> 0 bytes .../CPButtonRoundRectRegularHighlighted2.png | Bin 385 -> 0 bytes .../CPButton/CPButtonTexturedRoundedRegular0.png | Bin 230 -> 0 bytes .../CPButton/CPButtonTexturedRoundedRegular1.png | Bin 143 -> 0 bytes .../CPButton/CPButtonTexturedRoundedRegular2.png | Bin 232 -> 0 bytes ...PButtonTexturedRoundedRegularHighlighted0.png | Bin 3001 -> 0 bytes ...PButtonTexturedRoundedRegularHighlighted1.png | Bin 2841 -> 0 bytes ...PButtonTexturedRoundedRegularHighlighted2.png | Bin 3027 -> 0 bytes .../CPPopUpButton/CPPopUpButtonArrows.png | Bin 2841 -> 0 bytes ...CPScrollerDecrementArrowHorizontalRegular.png | Bin 3200 -> 0 bytes ...ecrementArrowHorizontalRegularHighlighted.png | Bin 3232 -> 0 bytes .../CPScrollerDecrementArrowVerticalRegular.png | Bin 472 -> 0 bytes ...rDecrementArrowVerticalRegularHighlighted.png | Bin 498 -> 0 bytes .../CPScrollerDecrementArrowVerticalSmall.png | Bin 3020 -> 0 bytes ...lerDecrementArrowVerticalSmallHighlighted.png | Bin 3038 -> 0 bytes ...CPScrollerIncrementArrowHorizontalRegular.png | Bin 3196 -> 0 bytes ...ncrementArrowHorizontalRegularHighlighted.png | Bin 3212 -> 0 bytes .../CPScrollerIncrementArrowVerticalRegular.png | Bin 458 -> 0 bytes ...rIncrementArrowVerticalRegularHighlighted.png | Bin 472 -> 0 bytes .../CPScrollerIncrementArrowVerticalSmall.png | Bin 3024 -> 0 bytes ...lerIncrementArrowVerticalSmallHighlighted.png | Bin 3044 -> 0 bytes .../CPScrollerKnobHorizontalRegular0.png | Bin 3032 -> 0 bytes .../CPScrollerKnobHorizontalRegular1.png | Bin 2809 -> 0 bytes .../CPScrollerKnobHorizontalRegular2.png | Bin 3031 -> 0 bytes .../CPScrollerKnobSlotHorizontalRegular.png | Bin 2808 -> 0 bytes .../CPScrollerKnobSlotVerticalRegular.png | Bin 2822 -> 0 bytes .../CPScrollerKnobSlotVerticalSmall.png | Bin 2821 -> 0 bytes .../CPScrollerKnobVerticalRegular0.png | Bin 3020 -> 0 bytes .../CPScrollerKnobVerticalRegular1.png | Bin 2826 -> 0 bytes .../CPScrollerKnobVerticalRegular2.png | Bin 3004 -> 0 bytes .../CPScroller/CPScrollerKnobVerticalSmall0.png | Bin 2938 -> 0 bytes .../CPScroller/CPScrollerKnobVerticalSmall1.png | Bin 2822 -> 0 bytes .../CPScroller/CPScrollerKnobVerticalSmall2.png | Bin 2926 -> 0 bytes .../CPTextField/CPTextFieldBezelRounded0.png | Bin 529 -> 0 bytes .../CPTextField/CPTextFieldBezelRounded1.png | Bin 161 -> 0 bytes .../CPTextField/CPTextFieldBezelRounded2.png | Bin 470 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare0.png | Bin 124 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare1.png | Bin 117 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare2.png | Bin 126 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare3.png | Bin 112 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare4.png | Bin 109 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare5.png | Bin 112 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare6.png | Bin 120 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare7.png | Bin 113 -> 0 bytes .../CPTextField/CPTextFieldBezelSquare8.png | Bin 120 -> 0 bytes 55 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 AppKit/Resources/CPButton/CPButtonHUDRegular0.png delete mode 100644 AppKit/Resources/CPButton/CPButtonHUDRegular1.png delete mode 100644 AppKit/Resources/CPButton/CPButtonHUDRegular2.png delete mode 100644 AppKit/Resources/CPButton/CPButtonHUDRegularHighlighted0.png delete mode 100644 AppKit/Resources/CPButton/CPButtonHUDRegularHighlighted1.png delete mode 100644 AppKit/Resources/CPButton/CPButtonHUDRegularHighlighted2.png delete mode 100644 AppKit/Resources/CPButton/CPButtonRoundRectRegular0.png delete mode 100644 AppKit/Resources/CPButton/CPButtonRoundRectRegular1.png delete mode 100644 AppKit/Resources/CPButton/CPButtonRoundRectRegular2.png delete mode 100644 AppKit/Resources/CPButton/CPButtonRoundRectRegularHighlighted0.png delete mode 100644 AppKit/Resources/CPButton/CPButtonRoundRectRegularHighlighted1.png delete mode 100644 AppKit/Resources/CPButton/CPButtonRoundRectRegularHighlighted2.png delete mode 100644 AppKit/Resources/CPButton/CPButtonTexturedRoundedRegular0.png delete mode 100644 AppKit/Resources/CPButton/CPButtonTexturedRoundedRegular1.png delete mode 100644 AppKit/Resources/CPButton/CPButtonTexturedRoundedRegular2.png delete mode 100644 AppKit/Resources/CPButton/CPButtonTexturedRoundedRegularHighlighted0.png delete mode 100644 AppKit/Resources/CPButton/CPButtonTexturedRoundedRegularHighlighted1.png delete mode 100644 AppKit/Resources/CPButton/CPButtonTexturedRoundedRegularHighlighted2.png delete mode 100644 AppKit/Resources/CPPopUpButton/CPPopUpButtonArrows.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerDecrementArrowHorizontalRegular.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerDecrementArrowHorizontalRegularHighlighted.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerDecrementArrowVerticalRegular.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerDecrementArrowVerticalRegularHighlighted.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerDecrementArrowVerticalSmall.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerDecrementArrowVerticalSmallHighlighted.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerIncrementArrowHorizontalRegular.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerIncrementArrowHorizontalRegularHighlighted.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerIncrementArrowVerticalRegular.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerIncrementArrowVerticalRegularHighlighted.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerIncrementArrowVerticalSmall.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerIncrementArrowVerticalSmallHighlighted.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobHorizontalRegular0.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobHorizontalRegular1.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobHorizontalRegular2.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobSlotHorizontalRegular.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobSlotVerticalRegular.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobSlotVerticalSmall.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobVerticalRegular0.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobVerticalRegular1.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobVerticalRegular2.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobVerticalSmall0.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobVerticalSmall1.png delete mode 100644 AppKit/Resources/CPScroller/CPScrollerKnobVerticalSmall2.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelRounded0.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelRounded1.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelRounded2.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare0.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare1.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare2.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare3.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare4.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare5.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare6.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare7.png delete mode 100644 AppKit/Resources/CPTextField/CPTextFieldBezelSquare8.png diff --git a/AppKit/Resources/CPButton/CPButtonHUDRegular0.png b/AppKit/Resources/CPButton/CPButtonHUDRegular0.png deleted file mode 100644 index 158e78580c13db1b2d1cf4316454db9a313508bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3309 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 diff --git a/AppKit/Resources/CPButton/CPButtonHUDRegular1.png b/AppKit/Resources/CPButton/CPButtonHUDRegular1.png deleted file mode 100644 index 31fb7a109242dbcf9d29529efea91daafff795c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2844 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 diff --git a/AppKit/Resources/CPButton/CPButtonHUDRegularHighlighted0.png b/AppKit/Resources/CPButton/CPButtonHUDRegularHighlighted0.png deleted file mode 100644 index 78d5e3ac30c943f1aac5f087a3d7a62b4986ca0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3300 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 diff --git a/AppKit/Resources/CPButton/CPButtonRoundRectRegular1.png b/AppKit/Resources/CPButton/CPButtonRoundRectRegular1.png deleted file mode 100644 index e874e8d12065d50c802c2c8c09dc94e6dd79e30b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{J!3HE}g>Tsdq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73q7rIEGZ*N{ZW>bv3;0{{H&^>A(K}w`Xqo@%_C#8{@Pe nzrX7ni7($JtnOFC%wfQA{hm2{%j^YuK&=d(u6{1-oD!M$0bZY=A7JHosMXp?0iB67+ade`3Bhc!jfK0AjS%F`c!y-oY5-4ia_4b!&fLkR zEX&F<#uQ)&^`&jwTf;Cu&>v7u(_pel(-f`O>u$AL)v$e36y@rdvaV}<$g(W4>$;h3 z+e=75d!nkU@ECpH&p~YNg>>KdXpFKf3p~$Xnx=V9k|%|Pk|dpQ9CtS~lVur3GjJTI zfS)*vALRP^So6x0aDs0>TDo2gbm}0H>#=v)d-is zmVa!e{RKbjy1ocXaU8!iO~V@!>DOEu(|(p^DO6XTgKgVBR8<9hK{gdB{Wpd8q9}&G z?-v#Ee9id0>8b9cC_z>%07*qoM6N<$f}n$<1^@s6 diff --git a/AppKit/Resources/CPButton/CPButtonRoundRectRegularHighlighted1.png b/AppKit/Resources/CPButton/CPButtonRoundRectRegularHighlighted1.png deleted file mode 100644 index cea07927a2fd4c505a28ef291826acc310e4a359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{J!2~2lO_g5*DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9Me3d|jv*DdlA<;yu}+>fOG=o-z{tqxAcL{7F;}lQ&x-b& eH*QEM9AMbBkGbN3Z}2wV`-6K!rdE1;6Wz$unqx=a+oh&CWO9%4S-ETS) zRaK?S-fub*WLajoTyx6$2fDLD90Zj_9BS!3HE91=ODbDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MID|ljv*DdlIGY}Z?k1)cE0}q|NpZR7Z|vWjXzt(#>OfZ z78bJcoZMgkpR2R8(~zMw$*YND0*jfa+6)ylhHF3H-?zUrX-ALhn#nbur{1Kbq#T*j zBH4L0Vglc$nA0t%JvOMAo0}g#-Y|6H_V+Po~-c6&ZTEIEGZ*N}6MuE%tb^d;g4o|No!=^8UWP8XFs%0q-FL p!xXz+5+SymXU>#l4&YNb!0<`g@Z-D48wEhk44$rjF6*2UngEJ!FD3v0 diff --git a/AppKit/Resources/CPButton/CPButtonTexturedRoundedRegular2.png b/AppKit/Resources/CPButton/CPButtonTexturedRoundedRegular2.png deleted file mode 100644 index 49b44ab98522ce692296e59f1108106699d9803a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 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 diff --git a/AppKit/Resources/CPButton/CPButtonTexturedRoundedRegularHighlighted1.png b/AppKit/Resources/CPButton/CPButtonTexturedRoundedRegularHighlighted1.png deleted file mode 100644 index 0b44ef2a3b22e84de19f32000aef5513bf554e46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2841 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 diff --git a/AppKit/Resources/CPScroller/CPScrollerDecrementArrowHorizontalRegular.png b/AppKit/Resources/CPScroller/CPScrollerDecrementArrowHorizontalRegular.png deleted file mode 100644 index 9ab26e2fc26bc828a61e9259a47efaa61cbdb2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3200 zcmV-`41e>9P)3ZN00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00052NklJ(DJ58Jj3kqFm`}JZFy2oO`b{VzpWseiK3nj4|am(AfXP zz5*Wr+Cm5xiv|B0Q4|q|;diCfN8k6K+tu6uHZGS7VHm!bQu@o~G6HA=CuVh*F+4ueD z>i?zV`mo|SCI|wK$0NoV#^Z6LG9d&>lAyKzRBulkpeTwP@N_z{+wG82-r#i}K$d0X zdH&^(gdZLr7>!084hMoDC|h+;xIPaXEh}6U1$mxR6a`XBy4^0*>6H0=j^}yUmf5s? z$8l)2S}%X;xH@TzrD=-my3A%X&gU~)>xMJOac~^xHSn(Cxay#uNs^Ex3B%#=?zs>G z*L7cQx7)|NttZQr=*e576)TUvxU1x9jzK+z_^|>z7!(j#Y7hUa$9N mFc@q$o6RGD_+O9Ej{yJz-E{GBK?OSi00003ZN00009a7bBm000XU z000XU0RWnu7ytkYPiaF#P*7-ZbZ>KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005YNkllHUQEzy#rcnw%aZ9`5fQ(OXMQY zR1`&Mt$#fgR!Wuf?f3h1IvrkLUs*1f$Mb_8PIGtiR1V^@UtW=B6r8d$x120FvPMf#^W)^z{#dwr%$S#2iA^zg;~qiq~iS!u=X>e-8i_9dtnQ Sc%|h40000 diff --git a/AppKit/Resources/CPScroller/CPScrollerDecrementArrowVerticalRegular.png b/AppKit/Resources/CPScroller/CPScrollerDecrementArrowVerticalRegular.png deleted file mode 100644 index 6421e7426332a6dd65837bb35ba4a432dad5d299..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 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 A0RR91 diff --git a/AppKit/Resources/CPScroller/CPScrollerIncrementArrowVerticalRegularHighlighted.png b/AppKit/Resources/CPScroller/CPScrollerIncrementArrowVerticalRegularHighlighted.png deleted file mode 100644 index 13006d9a3f8871c6b7d5360c5213beb13d6bba71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 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 LNkvXXu0mjfyntG( diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobHorizontalRegular2.png b/AppKit/Resources/CPScroller/CPScrollerKnobHorizontalRegular2.png deleted file mode 100644 index 913b0d9ea4eaf672f5e79759981d77dc767eb98b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3031 zcmV;|3n=u7P)4Tx0C=38Q)g6D=@vcr-t0tDdAZ9o73 zZrB8d;W+$%P#4PN3IHSw0H%w?*+KxM5CAfA6*2_?G713fq;#1A03`qbTOJ!14}fX` z06S%pPXhpU(j@l+0JbPoDgr>G06-?n6o~-P4ggq}qZEq(uwVcv%8`h30kE3@V3MKC zlmKAw0Dzq-7Gwhu7yw|R5DQZQ2=)NLkVi%E00=VyD2$Y^c+yu~A!A zINCaVwW$9Z{ELWe@Q#JLh_3eL-tiX;k2mK2vr z|C5P-v+NI;ylVhp)qV!{LR(O~$_DJ0E+DYzfFK@c*+ zL|BM6Vt|+;)`%m*MP?y>NH7wC#36}D3L-_6$WmlAQi7BtRmfhX9{C7|KA|s2*yD+M!(38x2CE(D`Tzx(Llj3(*Z|C0c_XLYvXE=oR!9+KWC% z$1uR?7zZ=NY%ngy!$PrmEE$ty%dujt0;|Cqu{Nv|yMgs$BiMTaiNGS@1RH`oA&@Ya zAS5gzEGLu_st5-N&4doZ4MHDbl<=9zBT%>LK-$#>ix{Hrbl&K@KGg$O>{1c{}+K`84@D zd4T+mLZ=u|94Y>kc#4!#K&hY{q@1E$rwmfYscKYHsv9+wDxxl?mQib|ZPcsO0qQtS zon}t+pheNrXsc+Iv_{%_+C$naI-PDrccq8ZCG?f_O8Q~?MS36oJwtCX;E#^kT*{70eCHdgeLiW9B;*mWr(kUqz&{LZw=zS>?LQ3stJBsj9c? z0@Zxg3e}^kS5-&UsA^_vJT-yZah$}`!vpJ^s_LQF^k6%vR1QdS?5^;Y!cg?&1a{vOW5DByV;|f8k#dSqc!t1t2Iw* z_HrV>*%V3s)#9)iTX@h6DChm=A;FWj>K5D3I7-*<8+-ulv zIBsNaG}oxWsLAM&G0m83oNT02{%vlz3r zW-Vqz=33@_^L+CL^M@8p3r~wh7Bv<(ElHMK%XG_~me;IMD<`W|t7@yO)~L0!wZwX- zb`d(9?KatU+I_Znvd^%uwSVBC z;V|2wz@g3IH%BW+p<}h<&FReP{?k`XZ=L>fhV=~bj9oMCI5S6S0C3Et|wgIyE(fl+>W^Y>Tctn?tajHXr}p0@yyzp z{T@ah0*}2Oy|eIHiL>_1>h(1A6nNHnKJha45_#2m4SHL8r+FXpe&J*9BlkJx^Oonv zTgE%%i}?ol7W;PlY52|ctMYs7Z{(li-{3zQ;1sYV;7lMfFeq?S;2pjmU&ycLkIr_P zy=-?QME!`u_BZjF^n3OiE^A=5eWpG+o+}rJt3T)g!Z(70G%Rxh>kdXjC2~uggZV z=V!Mn*b14VOKG88qwLF>l~bMbE;l;&Xr6kWG_Py1)#CMw2lM^&zg?sbH9l6Bqdr?20>{&TUY_;QJTNkz%WQeo-kZydg<{AOZ9@`mm*=dxWJ zNgJgbZ*TJ4bf8?lJiokubI9iAE%=t=Ew8sO++@f7m10b9ZmR-sT#!nu>j-eL4G{)<)NM ze#`x~zD}pEr0&yx>HgjW5eGWzUFz!(>K-g>KpT_|!-o^R0cR@{sWv6JT3QtX(&ObeNMs{Z8Y|7dG_J!>a&c&X)*%98+eLm>?#S8uy&UJcs zp1$aD@x&#!OUEyBFSlHAzS7*~)OGA9r=N~>J9jrbX7l_T4)PcY5!N?hf6{xcBmY&i(NRD<2Xc7C%yZRPk8%am~+`KR5L{ z_nz$Y?dy6H`Q$;ru>bi#vj6dMpzta4X~m$yVEvHe(1~IH;cL(4JsWr~dp44_~BQtU%N(QM+aWYUrzj1`bzuN{?{{Jw~vL5J${q(_=B>(^b0001b zB>(^b0001bB>(^b0001bC2}$zU;qFB32;bRa{vGf6951U69E94oEQKA0Srk*K~yM_ zeUZIt!eA7JpCb_+g19+k>MV5Z+O=09^b(Q_@!N6@PR%5A?dk<|3WyhAr4SPH{hcnR zkRpB7^YZ?1q$mm%5da%w{1lPBs&0)jU)+$YsuUo`NY{0o&u31jQ=_UIV@w4w2_X-G9Lan9krCxn1=j=_1c zSg=~H9%i#yk$CU<%ixx#DZoqOoEsf)O97ZprvOihwRY6y9{-ANDTlkA2AZY;cu%ag zcLmm3+O|FReZL(!4YA&P`o1T|_*#}_^Sf^76*#n~o Z{{R;}v1>($VZi_Z002ovPDHLkV1gaD$)f-O diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobSlotHorizontalRegular.png b/AppKit/Resources/CPScroller/CPScrollerKnobSlotHorizontalRegular.png deleted file mode 100644 index 60c5300b9d00d2d858076029b0be8d600846464b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2808 zcmV4Tx0C=38Q)g6D=@vcr-t0tDdAZ9o73 zZrB8d;W+$%P#4PN3IHSw0H%w?*+KxM5CAfA6*2_?G713fq;#1A03`qbTOJ!14}fX` z06S%pPXhpU(j@l+0JbPoDgr>G06-?n6o~-P4ggq}qZEq(uwVcv%8`h30kE3@V3MKC zlmKAw0Dzq-7Gwhu7yw|R5DQZQ2=)NLkVi%E00=VyD2$Y^c+yu~A!A zINCaVwW$9Z{ELWe@Q#JLh_3eL-tiX;k2mK2vr z|C5P-v+NI;ylVhp)qV!{LR(O~$_DJ0E+DYzfFK@c*+ zL|BM6Vt|+;)`%m*MP?y>NH7wC#36}D3L-_6$WmlAQi7BtRmfhX9{C7|KA|s2*yD+M!(38x2CE(D`Tzx(Llj3(*Z|C0c_XLYvXE=oR!9+KWC% z$1uR?7zZ=NY%ngy!$PrmEE$ty%dujt0;|Cqu{Nv|yMgs$BiMTaiNGS@1RH`oA&@Ya zAS5gzEGLu_st5-N&4doZ4MHDbl<=9zBT%>LK-$#>ix{Hrbl&K@KGg$O>{1c{}+K`84@D zd4T+mLZ=u|94Y>kc#4!#K&hY{q@1E$rwmfYscKYHsv9+wDxxl?mQib|ZPcsO0qQtS zon}t+pheNrXsc+Iv_{%_+C$naI-PDrccq8ZCG?f_O8Q~?MS36oJwtCX;E#^kT*{70eCHdgeLiW9B;*mWr(kUqz&{LZw=zS>?LQ3stJBsj9c? z0@Zxg3e}^kS5-&UsA^_vJT-yZah$}`!vpJ^s_LQF^k6%vR1QdS?5^;Y!cg?&1a{vOW5DByV;|f8k#dSqc!t1t2Iw* z_HrV>*%V3s)#9)iTX@h6DChm=A;FWj>K5D3I7-*<8+-ulv zIBsNaG}oxWsLAM&G0m83oNT02{%vlz3r zW-Vqz=33@_^L+CL^M@8p3r~wh7Bv<(ElHMK%XG_~me;IMD<`W|t7@yO)~L0!wZwX- zb`d(9?KatU+I_Znvd^%uwSVBC z;V|2wz@g3IH%BW+p<}h<&FReP{?k`XZ=L>fhV=~bj9oMCI5S6S0C3Et|wgIyE(fl+>W^Y>Tctn?tajHXr}p0@yyzp z{T@ah0*}2Oy|eIHiL>_1>h(1A6nNHnKJha45_#2m4SHL8r+FXpe&J*9BlkJx^Oonv zTgE%%i}?ol7W;PlY52|ctMYs7Z{(li-{3zQ;1sYV;7lMfFeq?S;2pjmU&ycLkIr_P zy=-?QME!`u_BZjF^n3OiE^A=5eWpG+o+}rJt3T)g!Z(70G%Rxh>kdXjC2~uggZV z=V!Mn*b14VOKG88qwLF>l~bMbE;l;&Xr6kWG_Py1)#CMw2lM^&zg?sbH9l6Bqdr?20>{&TUY_;QJTNkz%WQeo-kZydg<{AOZ9@`mm*=dxWJ zNgJgbZ*TJ4bf8?lJiokubI9iAE%=t=Ew8sO++@f7m10b9ZmR-sT#!nu>j-eL4G{)<)NM ze#`x~zD}pEr0&yx>HgjW5eGWzUFz!(>K-g>KpT_|!-o^R0cR@{sWv6JT3QtX(&ObeNMs{Z8Y|7dG_J!>a&c&X)*%98+eLm>?#S8uy&UJcs zp1$aD@x&#!OUEyBFSlHAzS7*~)OGA9r=N~>J9jrbX7l_T4)PcY5!N?hf6{xcBmY&i(NRD<2Xc7C%yZRPk8%am~+`KR5L{ z_nz$Y?dy6H`Q$;ru>bi#vj6dMpzta4X~m$yVEvHe(1~IH;cL(4JsWr~dp44_~BQtU%N(QM+aWYUrzj1`bzuN{?{{Jw~vL5J${q(_=B>(^b0001b zB>(^b0001bB>(^b0001bC2}$zU;qFB32;bRa{vGf6951U69E94oEQKA04+&GK~xBt zV<;*r`p=}Ttz|7Cj-v9vW@CO>5kS$IC0000< KMNUMnLSTX|5nsjt diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobSlotVerticalRegular.png b/AppKit/Resources/CPScroller/CPScrollerKnobSlotVerticalRegular.png deleted file mode 100644 index 8dff1370b4c4940aab5a0965ab01e1cc9aada67d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2822 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 Y0KxAFS5D?ig#Z8m07*qoM6N<$f-JW|0ssI2 diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobSlotVerticalSmall.png b/AppKit/Resources/CPScroller/CPScrollerKnobSlotVerticalSmall.png deleted file mode 100644 index 181b1debb678d34955eb7afb7bb277961a6c6b6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2821 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 Xk+uWoaK_@=00000NkvXXu0mjfj+;Bj diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobVerticalRegular0.png b/AppKit/Resources/CPScroller/CPScrollerKnobVerticalRegular0.png deleted file mode 100644 index 3ddbaca6f4c40f45d2332e79445b586171df939e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3020 zcmV;-3p4bIP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002@Nkl1q55Jca6zGMutKemx8BXFAo1YD&JxJpitTtNrP6#_m$(xyz> zoJY1n2v3UGMg(P=Wp`(GW>wcUlCTX>NUCk$1GoI*8~6ZTBsFIq@w`ORo$c4KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000rNklFzi8%ao_yFb6HDlPy3 c0RR6302fy#SMJO1761SM07*qoM6N<$f~?&-aR2}S diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobVerticalRegular2.png b/AppKit/Resources/CPScroller/CPScrollerKnobVerticalRegular2.png deleted file mode 100644 index 2100b9992dff99c0d9358ec80b30b2b3b3210996..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3004 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 diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobVerticalSmall1.png b/AppKit/Resources/CPScroller/CPScrollerKnobVerticalSmall1.png deleted file mode 100644 index 534c519835abc4799914a82a297b59eea1a4ccc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2822 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 Y0Dy5FSFh>hl>h($07*qoM6N<$f^En;MgRZ+ diff --git a/AppKit/Resources/CPScroller/CPScrollerKnobVerticalSmall2.png b/AppKit/Resources/CPScroller/CPScrollerKnobVerticalSmall2.png deleted file mode 100644 index a6aa8d5803b35bb3154894e0bee9b02f3100511a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2926 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 diff --git a/AppKit/Resources/CPTextField/CPTextFieldBezelRounded1.png b/AppKit/Resources/CPTextField/CPTextFieldBezelRounded1.png deleted file mode 100644 index 96c59e9ab5c217613f426379a73e6ec2ae8e8612..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!2~4TPIPMnDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9Mb4fsjv*Dd-dx_u%V5C4>?mW%JA1Qi5`)7{1wG}DTi2W1 zk!`S9p615r!ot3)i>W;-ULl2BtcGRRY^GT=ue7@{FtRa7e&q{uvEc6k8pq)2>gTe~ HDWM4fN!%^- diff --git a/AppKit/Resources/CPTextField/CPTextFieldBezelRounded2.png b/AppKit/Resources/CPTextField/CPTextFieldBezelRounded2.png deleted file mode 100644 index d7b66ce01424b68da2a174eb003ef63ad89d97eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 470 zcmV;{0V)28P)}}r zo%jcUhXsHRkR%DjaSTBazD5el zGvJ$c$6|lATJ?d|2m{Hmm|<$~39NOX1Y-zaXg6}ZKRaXK7%tNXCiRrMA7c047`Q~w zSbUZj7XTIH9dVyo7>3?#HhVBlQz{qJRbJ8JCxCJ8tEyW06ZjHf0AtDnm{r-UW|9fKft diff --git a/AppKit/Resources/CPTextField/CPTextFieldBezelSquare1.png b/AppKit/Resources/CPTextField/CPTextFieldBezelSquare1.png deleted file mode 100644 index 2c77bb764b5fcec9d4a081d58cf3e9a5525280fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrH!2~4l?*DWZNJ*BsMwA5SrGAr-fhB6pR%{QmxabP0l+XkKX!I#E diff --git a/AppKit/Resources/CPTextField/CPTextFieldBezelSquare3.png b/AppKit/Resources/CPTextField/CPTextFieldBezelSquare3.png deleted file mode 100644 index 81cd274512cf61edd45262459f6fbfe946bc3fe9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-Y0V1m%Ufcyzk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XggjjwLn>}1?J9bD>Uh6ABNGpUkUDEn`Td}1{rdmk-l2h!fsKusLA$eLEl`TV)78&qol`;+ E0DoN_YybcN diff --git a/AppKit/Resources/CPTextField/CPTextFieldBezelSquare5.png b/AppKit/Resources/CPTextField/CPTextFieldBezelSquare5.png deleted file mode 100644 index 21f81000edf05b5246b09fb3139cea6868f01ad1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-Y0V1m%Ufcyzk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XggjjwLn>}1{rU0n@#EwDj7&TX!u70m%T6`717#UJUHx3v IIVCg!05qi`djJ3c diff --git a/AppKit/Resources/CPTextField/CPTextFieldBezelSquare6.png b/AppKit/Resources/CPTextField/CPTextFieldBezelSquare6.png deleted file mode 100644 index acc67dfa27a9cb969d98d06c4c56ec24d42e80ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^Od!kwBL7~QRScvgOI#yLg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+5iDSr z1<%~X^wgl##FWaylc_d9MZ%sgjv*DdlK%YvZ~ypszdR!o4}=$H)6;+SUL2^Y?do0|PUI9~-ybVP4Kj PKvfK$u6{1-oD!M<#hfON From a07211253c38c6491d0d28925b627e51cc44ba28 Mon Sep 17 00:00:00 2001 From: Francisco Tolmasky Date: Mon, 9 Mar 2009 15:07:29 -0700 Subject: [PATCH 3/9] Making CPThemedAttribute more robust. Reviewed by me. --- AppKit/CPTheme.j | 5 + AppKit/CPThemedAttribute.j | 203 +++++++++-------------------- AppKit/Cib/CPCib.j | 16 ++- AppKit/Cib/_CPCibCustomResource.j | 3 +- AppKit/Cib/_CPCibKeyedUnarchiver.j | 9 +- Foundation/CPDictionary.j | 10 +- Tools/blend/Tool/main.j | 23 ++-- Tools/build.xml | 1 + Tools/objj/objj.js | 15 ++- 9 files changed, 120 insertions(+), 165 deletions(-) diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index acbe1cee5..76f08eb06 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -305,4 +305,9 @@ var CPThemeNameKey = @"CPThemeNameKey", return _bundle; } +- (BOOL)awakenCustomResources +{ + return YES; +} + @end diff --git a/AppKit/CPThemedAttribute.j b/AppKit/CPThemedAttribute.j index 9ab810f76..17dc3ffc4 100644 --- a/AppKit/CPThemedAttribute.j +++ b/AppKit/CPThemedAttribute.j @@ -30,18 +30,16 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 @implementation CPThemedAttribute : CPObject { - BOOL _isSingularObject; - - JSObject _cache; + JSObject _cache; - CPString _name; - id _defaultValue; + CPString _name; + id _defaultValue; - CPTheme _theme; - Class _themedClass; + CPTheme _theme; + Class _themedClass; - id _values; - id _valueFromTheme; + CPDictionary _values; + CPThemedAttribute _attributeFromTheme; } - (id)initWithName:(CPString)aName defaultValue:(id)aDefaultValue theme:(CPTheme)aTheme class:(Class)aClass @@ -59,9 +57,8 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 _theme = aTheme; _themedClass = aClass; - _isSingularObject = YES; - _values = nil; - _valueFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; + _values = [CPDictionary dictionary]; + _attributeFromTheme = nil;//[_theme valueForAttributeName:_name inClass:_themedClass]; } return self; @@ -90,7 +87,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 _cache = {}; _theme = aTheme; - _valueFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; + _attributeFromTheme = nil;//[_theme valueForAttributeName:_name inClass:_themedClass]; } - (void)setThemedClass:(Class)aClass @@ -98,15 +95,19 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 if (_themedClass === aClass) return; + _cache = {}; _themedClass = aClass; - _valueFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; + _attributeFromTheme = nil;//[_theme valueForAttributeName:_name inClass:_themedClass]; } - (void)setValue:(id)aValue { _cache = {}; - _isSingularObject = YES; - _values = aValue; + + if (aValue === undefined || aValue === nil) + _values = [CPDictionary dictionary]; + else + _values = [CPDictionary dictionaryWithObject:aValue forKey:String(CPControlStateNormal)]; } - (id)value @@ -116,84 +117,61 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (void)setValue:(id)aValue forControlState:(CPControlState)aState { + //delete _cache[aState]; _cache = {}; - if (aState !== CPControlStateNormal) - { - if (_isSingularObject) - { - var normalValue = _values; - - _isSingularObject = NO; - - _values = {}; - - if (normalValue) - _values[CPControlStateNormal] = normalValue; - } - - _values[aState] = aValue; - } - - else if (_isSingularObject) - _values = aValue; - + if ((aValue === undefined) || (aValue === nil)) + [_values removeObjectForKey:String(aState)]; else - _values[CPControlStateNormal] = aValue; + [_values setObject:aValue forKey:String(aState)]; } - (id)valueForControlState:(CPControlState)aState { var value = _cache[aState]; - if (value !== undefined && value !== nil) + // This can be nil. + if (value !== undefined) return value; - if (_isSingularObject) - var value = _values; + value = [_values objectForKey:String(aState)]; - else + // If we don't have a value, and we have a non-normal state... + if ((value === undefined || value === nil) && aState > 0) { - var value = _values[aState]; - - // If we don't have a value, and we have a non-normal state... - if ((value === undefined || value === nil) && aState > 0) + // If this is a composite state, find the closest partial subset match. + if (aState & (aState - 1)) { - // If this is a composite state, find the closest partial subset match. - if (aState & (aState - 1)) + var highestBitCount = 0, + states = [_values allKeys], + count = states.length; + + while (count--) { - var highestBitCount = 0; + // state is a string! + state = Number(states[count]); - for (state in _values) + // A & B = A iff A < B + if ((state & aState) === state) { - if (!_values.hasOwnProperty(state)) - continue; + var bitCount = (state < BIT_COUNT.length) ? BIT_COUNT[state] : bit_count(state); - // state is a string! - state = Number(state); - - // A & B = A iff A < B - if ((state & aState) === state) + if (bitCount > highestBitCount) { - var bitCount = (state < BIT_COUNT.length) ? BIT_COUNT[state] : bit_count(state); - - if (bitCount > highestBitCount) - { - highestBitCount = bitCount; - value = _values[state]; - } + highestBitCount = bitCount; + value = [_values objectForKey:String(state)]; } } } - - // Still don't have a value? OK, let's use the normal value. - if (value === undefined || value === nil) - value = _values[CPControlStateNormal]; } + + // Still don't have a value? OK, let's use the normal value. + if (value === undefined || value === nil) + value = [_values objectForKey:String(CPControlStateNormal)]; } if (value === undefined || value === nil) - value = [_valueFromTheme valueForControlState:aState]; + value = [_attributeFromTheme valueForControlState:aState]; if (value === undefined || value === nil) value = _defaultValue; @@ -205,36 +183,12 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (CPThemedAttribute)themedAttributeMergedWithThemedAttribute:(CPThemedAttribute)aThemedAttribute { - var themedAttribute = CPThemedAttributeMake(_name, _defaultValue, _theme, _themedClass); + var mergedAttribute = CPThemedAttributeMake(_name, _defaultValue, _theme, _themedClass); - themedAttribute._isSingularObject = NO; - themedAttribute._values = {}; - - if (_isSingularObject) - themedAttribute._values[CPControlStateNormal] = _values; + mergedAttribute._values = [_values copy]; + [mergedAttribute._values addEntriesFromDictionary:aThemedAttribute._values]; - else - { - var values = _values; - - for (state in _values) - if (_values.hasOwnProperty(state)) - themedAttribute._values[state] = _values[state]; - } - - if (aThemedAttribute._isSingularObject) - themedAttribute._values[CPControlStateNormal] = aThemedAttribute._values; - - else - { - var values = aThemedAttribute._values; - - for (state in values) - if (values.hasOwnProperty(state)) - themedAttribute._values[state] = values[state]; - } - - return themedAttribute; + return mergedAttribute; } - (id)initWithCoder:(CPCoder)aCoder @@ -244,26 +198,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 if (self) { _cache = {}; - _isSingularObject = [aCoder containsValueForKey:@"value"]; - - if (_isSingularObject) - _values = [aCoder decodeObjectForKey:"value"]; - - else - { - _values = {}; - - var statesAndValues = [aCoder decodeObjectForKey:"statesAndValues"]; - count = [statesAndValues count]; - - while (count--) - { - var value = statesAndValues[count--], - state = statesAndValues[count]; - - _values[state] = value; - } - } + _values = [aCoder decodeObjectForKey:@"values"]; } return self; @@ -271,25 +206,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 - (void)encodeWithCoder:(CPCoder)aCoder { - if (_isSingularObject) - { - [aCoder encodeObject:_values forKey:@"value"]; - - return; - } - - var statesAndValues = []; - - for (state in _values) - { - if (!_values.hasOwnProperty(state)) - continue; - - statesAndValues.push(state); - statesAndValues.push(_values[state]); - } - - [aCoder encodeObject:statesAndValues forKey:@"statesAndValues"]; + [aCoder encodeObject:_values forKey:@"values"]; } @end @@ -301,14 +218,18 @@ function CPThemedAttributeMake(aName, aDefaultValue, aTheme, aClass) function CPThemedAttributeEncode(aCoder, aThemedAttribute) { - if (aThemedAttribute._isSingularObject) - { - var actualValue = aThemedAttribute._values; + var values = aThemedAttribute._values, + count = [values count]; - if (aThemedAttribute._values) - [aCoder encodeObject:actualValue forKey:"$a" + [aThemedAttribute name]]; + if (count === 1) + { + var key = [values allKeys][0]; + + if (Number(key) === 0) + return [aCoder encodeObject:[values objectForKey:key] forKey:"$a" + [aThemedAttribute name]]; } - else + + if (count >= 1) [aCoder encodeObject:aThemedAttribute forKey:"$a" + [aThemedAttribute name]]; } diff --git a/AppKit/Cib/CPCib.j b/AppKit/Cib/CPCib.j index cae1ced63..1a358c022 100644 --- a/AppKit/Cib/CPCib.j +++ b/AppKit/Cib/CPCib.j @@ -42,6 +42,7 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; { CPData _data; CPBundle _bundle; + BOOL _awakenCustomResources; } - (id)initWithContentsOfURL:(CPURL)aURL @@ -49,7 +50,10 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; self = [super init]; if (self) + { _data = [CPURLConnection sendSynchronousRequest:[CPURLRequest requestWithURL:aURL] returningResponse:nil error:nil]; + _awakenCustomResources = YES; + } return self; } @@ -66,9 +70,19 @@ var CPCibObjectDataKey = @"CPCibObjectDataKey"; return self; } +- (void)_setAwakenCustomResources:(BOOL)shouldAwakenCustomResources +{ + _awakenCustomResources = shouldAwakenCustomResources; +} + +- (BOOL)_awakenCustomResources +{ + return _awakenCustomResources; +} + - (BOOL)instantiateCibWithExternalNameTable:(CPDictionary)anExternalNameTable { - var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:_bundle], + var unarchiver = [[_CPCibKeyedUnarchiver alloc] initForReadingWithData:_data bundle:_bundle awakenCustomResources:_awakenCustomResources], replacementClasses = [anExternalNameTable objectForKey:CPCibReplacementClasses]; if (replacementClasses) diff --git a/AppKit/Cib/_CPCibCustomResource.j b/AppKit/Cib/_CPCibCustomResource.j index ec34cc349..d010763f0 100644 --- a/AppKit/Cib/_CPCibCustomResource.j +++ b/AppKit/Cib/_CPCibCustomResource.j @@ -80,7 +80,8 @@ var _CPCibCustomResourceClassNameKey = @"_CPCibCustomResourceClassNameKey", - (id)awakeAfterUsingCoder:(CPCoder)aCoder { - if ([aCoder respondsToSelector:@selector(bundle)]) + if ([aCoder respondsToSelector:@selector(bundle)] && + (![aCoder respondsToSelector:@selector(awakenCustomResources)] || [aCoder awakenCustomResources])) if (_className === @"CPImage") return [[CPImage alloc] initWithContentsOfFile:[[aCoder bundle] pathForResource:_resourceName] size:[_properties objectForKey:@"size"]]; diff --git a/AppKit/Cib/_CPCibKeyedUnarchiver.j b/AppKit/Cib/_CPCibKeyedUnarchiver.j index 1268f35d0..bd0fb31af 100644 --- a/AppKit/Cib/_CPCibKeyedUnarchiver.j +++ b/AppKit/Cib/_CPCibKeyedUnarchiver.j @@ -5,15 +5,17 @@ @implementation _CPCibKeyedUnarchiver : CPKeyedUnarchiver { CPBundle _bundle; + BOOL _awakenCustomResources; } -- (id)initForReadingWithData:(CPData)data bundle:(CPBundle)aBundle +- (id)initForReadingWithData:(CPData)data bundle:(CPBundle)aBundle awakenCustomResources:(BOOL)shouldAwakenCustomResources { self = [super initForReadingWithData:data]; if (self) { _bundle = aBundle; + _awakenCustomResources = shouldAwakenCustomResources; [self setDelegate:self]; } @@ -26,6 +28,11 @@ return _bundle; } +- (BOOL)awakenCustomResources +{ + return _awakenCustomResources; +} + - (void)replaceObjectAtUID:(int)aUID withObject:(id)anObject { _objects[aUID] = anObject; diff --git a/Foundation/CPDictionary.j b/Foundation/CPDictionary.j index 62026ac13..48cbe59e5 100755 --- a/Foundation/CPDictionary.j +++ b/Foundation/CPDictionary.j @@ -459,12 +459,14 @@ if (!aDictionary) return; - var allKeys = [aDictionary allKeys]; + var keys = [aDictionary allKeys], + count = [keys count]; - for (var i=0, count = [allKeys count]; i + diff --git a/Tools/objj/objj.js b/Tools/objj/objj.js index 1130121b1..c1bb61a25 100644 --- a/Tools/objj/objj.js +++ b/Tools/objj/objj.js @@ -31,18 +31,25 @@ try { if (args.length > 0) { + // Convert all arguments to JavaScript-style Strings. + var count = args.length; + + while (count--) + args[count] = String(args[count]); + + // Grab the location of the objj file to run. var mainFilePath = args.shift(); - + // convert from relative to absolute path if (this.Packages) - mainFilePath = (new Packages.java.io.File(mainFilePath)).getAbsolutePath(); + mainFilePath = String((new Packages.java.io.File(mainFilePath)).getAbsolutePath()); if (debug) print("Loading: " + mainFilePath); - objj_import(mainFilePath, YES); + objj_import(mainFilePath, YES); - serviceTimeouts(); + serviceTimeouts(); if (debug) print("Done!"); From 47c20911c3738d97fff225bba0e940828f0be666 Mon Sep 17 00:00:00 2001 From: Francisco Tolmasky Date: Mon, 9 Mar 2009 16:01:34 -0700 Subject: [PATCH 4/9] Updated build stuff. Reviewed by me. --- AppKit/build.xml | 13 +++++-------- Objective-J/plist.js | 4 ++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/AppKit/build.xml b/AppKit/build.xml index 6fa4b3521..f1a52e5c6 100644 --- a/AppKit/build.xml +++ b/AppKit/build.xml @@ -4,7 +4,7 @@ - + @@ -28,14 +28,11 @@ - - - + + + + - - - - diff --git a/Objective-J/plist.js b/Objective-J/plist.js index eb3fcf10c..d330bfc14 100644 --- a/Objective-J/plist.js +++ b/Objective-J/plist.js @@ -496,7 +496,7 @@ function CPPropertyListCreateFrom280NorthData(aData) while (marker = stream.getMarker()) { - if (marker == END_MARKER) + if (marker === END_MARKER) { containers.pop(); continue; @@ -507,7 +507,7 @@ function CPPropertyListCreateFrom280NorthData(aData) if (count) currentContainer = containers[count - 1]; - if (marker == KEY_MARKER) + if (marker === KEY_MARKER) { key = stream.getString(); marker = stream.getMarker(); From 07000fd86f013559d1f7eac321cf3b268ddb8075 Mon Sep 17 00:00:00 2001 From: Francisco Tolmasky Date: Tue, 10 Mar 2009 14:59:07 -0700 Subject: [PATCH 5/9] Changes. Reviewed by me. --- build.xml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/build.xml b/build.xml index c4ccf7655..4b9816333 100644 --- a/build.xml +++ b/build.xml @@ -208,6 +208,7 @@ + @@ -218,6 +219,7 @@ + @@ -227,14 +229,14 @@ - + @@ -247,11 +249,16 @@ - + + + + + + From 71ee5f6b4bc9315398b9fb6644bb4f9a2125e16d Mon Sep 17 00:00:00 2001 From: Francisco Tolmasky Date: Tue, 10 Mar 2009 14:59:59 -0700 Subject: [PATCH 6/9] Java to JS string. Reviewed by me. --- Tools/Utilities/file.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/Utilities/file.js b/Tools/Utilities/file.js index c8461a7ab..990e37e33 100644 --- a/Tools/Utilities/file.js +++ b/Tools/Utilities/file.js @@ -41,7 +41,7 @@ function importFiles(files, aCallback) if (typeof file === "string") file = new File(file); - objj_import(file.getCanonicalPath(), YES, function() { importFiles(files, aCallback) }); + objj_import(String(file.getCanonicalPath()), YES, function() { importFiles(files, aCallback) }); } return; From 8913ef8929c58618eeff5fbd788796273b3862b4 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 10 Mar 2009 15:25:17 -0700 Subject: [PATCH 7/9] Make Debug use Debug blend. Reviewed by me. --- AppKit/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/build.xml b/AppKit/build.xml index f1a52e5c6..b04d3dfd0 100644 --- a/AppKit/build.xml +++ b/AppKit/build.xml @@ -30,7 +30,7 @@ - + From 5cc1ef96097d927ac797beceec32624b35d9840a Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 10 Mar 2009 15:26:13 -0700 Subject: [PATCH 8/9] Fix commented code. Reviewed by me. --- AppKit/CPThemedAttribute.j | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AppKit/CPThemedAttribute.j b/AppKit/CPThemedAttribute.j index 17dc3ffc4..d8073b6bd 100644 --- a/AppKit/CPThemedAttribute.j +++ b/AppKit/CPThemedAttribute.j @@ -58,7 +58,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 _themedClass = aClass; _values = [CPDictionary dictionary]; - _attributeFromTheme = nil;//[_theme valueForAttributeName:_name inClass:_themedClass]; + _attributeFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; } return self; @@ -87,7 +87,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 _cache = {}; _theme = aTheme; - _attributeFromTheme = nil;//[_theme valueForAttributeName:_name inClass:_themedClass]; + _attributeFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; } - (void)setThemedClass:(Class)aClass @@ -97,7 +97,7 @@ var BIT_COUNT = [ 0 /*00000*/, 1 /*00001*/, 1 /*00010*/, 2 /*00011*/, 1 /*0010 _cache = {}; _themedClass = aClass; - _attributeFromTheme = nil;//[_theme valueForAttributeName:_name inClass:_themedClass]; + _attributeFromTheme = [_theme valueForAttributeName:_name inClass:_themedClass]; } - (void)setValue:(id)aValue From 229d814866646c3d1c6ae2a0eb2c16697735aa93 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Tue, 10 Mar 2009 16:06:24 -0700 Subject: [PATCH 9/9] Fix for using unbuilt blend. Reviewed by me. --- AppKit/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/build.xml b/AppKit/build.xml index b04d3dfd0..ea6ebee37 100644 --- a/AppKit/build.xml +++ b/AppKit/build.xml @@ -30,7 +30,7 @@ - +