mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-09 10:20:59 +00:00
Additional theme changes.
Reviewed by me.
This commit is contained in:
1 parent
e4b2988864
commit
df5f6c692f
14 files changed
+805
-890
No files matched your search
+138
-372
@@ -24,9 +24,10 @@
|
||||
@import "CGGeometry.j"
|
||||
|
||||
@import "CPControl.j"
|
||||
@import "CPThemedValue.j"
|
||||
|
||||
#include "CPControl.h"
|
||||
#include "CoreGraphics/CGGeometry.h"
|
||||
#include "CPThemedValue.h"
|
||||
|
||||
|
||||
CPScaleProportionally = 0;
|
||||
@@ -233,14 +234,11 @@ var _CPButtonClassName = nil,
|
||||
int _state;
|
||||
BOOL _allowsMixedState;
|
||||
|
||||
CPImage _image;
|
||||
CPImage _alternateImage;
|
||||
|
||||
CPString _title;
|
||||
CPString _alternateTitle;
|
||||
CPControlStateValue _title;
|
||||
CPString _alteranteTitle;
|
||||
|
||||
CPControlStateValue _image;
|
||||
CPControlStateValue _title;
|
||||
CPImage _alternateImage;
|
||||
|
||||
// Display Properties
|
||||
CPControlStateValue _bezelInset;
|
||||
@@ -248,7 +246,7 @@ var _CPButtonClassName = nil,
|
||||
|
||||
CPControlStateValue _bezelColor;
|
||||
|
||||
//
|
||||
// Layout Views
|
||||
CPView _bezelView;
|
||||
_CPImageAndTextView _contentView;
|
||||
|
||||
@@ -256,78 +254,6 @@ var _CPButtonClassName = nil,
|
||||
CPBezelStyle _bezelStyle;
|
||||
BOOL _isBordered;
|
||||
CPControlSize _controlSize;
|
||||
|
||||
// bleh
|
||||
BOOL _bezelBorderNeedsUpdate;
|
||||
}
|
||||
|
||||
/*!
|
||||
Initializes the CPButton class.
|
||||
@ignore
|
||||
*/
|
||||
+ (void)initialize
|
||||
{
|
||||
if (self != [CPButton class])
|
||||
return;
|
||||
|
||||
_CPButtonClassName = [CPButton className];
|
||||
|
||||
// Textured Rounded
|
||||
_CPButtonBezelStyleIdentifiers[CPRoundedBezelStyle] = @"Rounded";
|
||||
_CPButtonBezelStyleIdentifiers[CPRegularSquareBezelStyle] = @"RegularSquare";
|
||||
_CPButtonBezelStyleIdentifiers[CPThickSquareBezelStyle] = @"ThickSquare";
|
||||
_CPButtonBezelStyleIdentifiers[CPThickerSquareBezelStyle] = @"ThickerSquare";
|
||||
_CPButtonBezelStyleIdentifiers[CPDisclosureBezelStyle] = @"Disclosure";
|
||||
_CPButtonBezelStyleIdentifiers[CPShadowlessSquareBezelStyle] = @"ShadowlessSquare";
|
||||
_CPButtonBezelStyleIdentifiers[CPCircularBezelStyle] = @"Circular";
|
||||
_CPButtonBezelStyleIdentifiers[CPTexturedSquareBezelStyle] = @"TexturedSquare";
|
||||
_CPButtonBezelStyleIdentifiers[CPHelpButtonBezelStyle] = @"HelpButton";
|
||||
_CPButtonBezelStyleIdentifiers[CPSmallSquareBezelStyle] = @"SmallSquare";
|
||||
_CPButtonBezelStyleIdentifiers[CPTexturedRoundedBezelStyle] = @"TexturedRounded";
|
||||
_CPButtonBezelStyleIdentifiers[CPRoundRectBezelStyle] = @"RoundRect";
|
||||
_CPButtonBezelStyleIdentifiers[CPRecessedBezelStyle] = @"Recessed";
|
||||
_CPButtonBezelStyleIdentifiers[CPRoundedDisclosureBezelStyle] = @"RoundedDisclosure";
|
||||
_CPButtonBezelStyleIdentifiers[CPHUDBezelStyle] = @"HUD";
|
||||
|
||||
var regularIdentifier = _CPControlIdentifierForControlSize(CPRegularControlSize),
|
||||
smallIdentifier = _CPControlIdentifierForControlSize(CPSmallControlSize),
|
||||
miniIdentifier = _CPControlIdentifierForControlSize(CPMiniControlSize);
|
||||
|
||||
// Rounded Rect
|
||||
var prefix = _CPButtonClassName + _CPButtonBezelStyleIdentifiers[CPRoundRectBezelStyle];
|
||||
|
||||
_CPButtonBezelStyleSizes[prefix + regularIdentifier] = [_CGSizeMake(10.0, 18.0), _CGSizeMake(1.0, 18.0), _CGSizeMake(10.0, 18.0)];
|
||||
_CPButtonBezelStyleSizes[prefix + regularIdentifier + _CPButtonBezelStyleHighlightedIdentifier] = [_CGSizeMake(10.0, 18.0), _CGSizeMake(1.0, 18.0), _CGSizeMake(10.0, 18.0)];
|
||||
|
||||
// HUD
|
||||
var prefix = _CPButtonClassName + _CPButtonBezelStyleIdentifiers[CPHUDBezelStyle];
|
||||
|
||||
_CPButtonBezelStyleSizes[prefix + regularIdentifier] = [_CGSizeMake(13.0, 20.0), _CGSizeMake(1.0, 20.0), _CGSizeMake(13.0, 20.0)];
|
||||
_CPButtonBezelStyleSizes[prefix + regularIdentifier + _CPButtonBezelStyleHighlightedIdentifier] = [_CGSizeMake(13.0, 20.0), _CGSizeMake(1.0, 20.0), _CGSizeMake(13.0, 20.0)];
|
||||
|
||||
CPHUDBezelStyleTextColor = [CPColor whiteColor];
|
||||
|
||||
// Textured Rounded
|
||||
var prefix = _CPButtonClassName + _CPButtonBezelStyleIdentifiers[CPTexturedRoundedBezelStyle];
|
||||
|
||||
_CPButtonBezelStyleSizes[prefix + regularIdentifier] = [_CGSizeMake(7.0, 20.0), _CGSizeMake(1.0, 20.0), _CGSizeMake(7.0, 20.0)];
|
||||
_CPButtonBezelStyleSizes[prefix + regularIdentifier + _CPButtonBezelStyleHighlightedIdentifier] = [_CGSizeMake(7.0, 20.0), _CGSizeMake(1.0, 20.0), _CGSizeMake(7.0, 20.0)];
|
||||
}
|
||||
|
||||
// Configuring Buttons
|
||||
/*!
|
||||
Sets how the button highlights and shows its state.
|
||||
@param aButtonType Defines the behavior of the button.
|
||||
*/
|
||||
- (void)setButtonType:(CPButtonType)aButtonType
|
||||
{
|
||||
if (aButtonType === CPSwitchButton)
|
||||
{
|
||||
[self setBordered:NO];
|
||||
[self setImage:nil];
|
||||
[self setAlternateImage:nil];
|
||||
[self setAlignment:CPLeftTextAlignment];
|
||||
}
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CGRect)aFrame
|
||||
@@ -336,14 +262,17 @@ var _CPButtonClassName = nil,
|
||||
|
||||
if (self)
|
||||
{
|
||||
_bezelInset = [[CPControlStateValue alloc] initWithDefaultValue:_CGInsetMakeZero()];
|
||||
_contentInset = [[CPControlStateValue alloc] initWithDefaultValue:_CGInsetMakeZero()];
|
||||
var theme = [self theme],
|
||||
theClass = [self class];
|
||||
|
||||
_bezelColor = [[CPControlStateValue alloc] initWithDefaultValue:nil];
|
||||
_bezelInset = CPThemedValueMake(_CGInsetMakeZero(), "bezel-inset", theme, theClass);
|
||||
_contentInset = CPThemedValueMake(_CGInsetMakeZero(), "content-inset", theme, theClass);
|
||||
|
||||
_bezelColor = CPThemedValueMake(nil, "bezel-color", theme, theClass);
|
||||
|
||||
_image = CPThemedValueMake(nil, @"image", theme, theClass);
|
||||
_title = CPThemedValueMake(nil, @"title", theme, theClass);
|
||||
|
||||
// _image = [[CPControlStateValue alloc] initWithDefaultValue:nil];
|
||||
// _title = [[CPControlStateValue alloc] initWithDefaultValue:nil];
|
||||
|
||||
[self setAlignment:CPCenterTextAlignment];
|
||||
[self setVerticalAlignment:CPCenterVerticalTextAlignment];
|
||||
[self setImagePosition:CPImageLeft];
|
||||
@@ -351,7 +280,7 @@ var _CPButtonClassName = nil,
|
||||
|
||||
_controlSize = CPRegularControlSize;
|
||||
|
||||
[self setBezelStyle:CPRoundRectBezelStyle];
|
||||
// [self setBezelStyle:CPRoundRectBezelStyle];
|
||||
[self setBordered:YES];
|
||||
}
|
||||
|
||||
@@ -405,35 +334,39 @@ var _CPButtonClassName = nil,
|
||||
return _state;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the image that will be drawn on the button.
|
||||
@param anImage the image that will be drawn
|
||||
*/
|
||||
- (void)setImage:(CPImage)anImage
|
||||
THEMED_STATED_VALUE(Title, title)
|
||||
|
||||
- (void)setAlternateTitle:(CPString)aTitle
|
||||
{
|
||||
if (_image === anImage)
|
||||
if (_alternateTitle === aTitle)
|
||||
return;
|
||||
|
||||
_image = anImage;
|
||||
|
||||
_alternateTitle = aTitle;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the image that will be drawn on the button
|
||||
*/
|
||||
- (CPImage)image
|
||||
- (CPString)alternateTitle
|
||||
{
|
||||
return _image;
|
||||
return _alternateTitle;
|
||||
}
|
||||
|
||||
THEMED_STATED_VALUE(Image, image)
|
||||
|
||||
/*!
|
||||
Sets the button's image which is used in its alternate state.
|
||||
@param anImage the image to be used while the button is in an alternate state
|
||||
*/
|
||||
- (void)setAlternateImage:(CPImage)anImage
|
||||
{
|
||||
_alternateImage = anImage;
|
||||
if (_alternateImage === anImage)
|
||||
return;
|
||||
|
||||
_alteranteImage = anImage;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -444,114 +377,6 @@ var _CPButtonClassName = nil,
|
||||
return _alternateImage;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the button's title.
|
||||
@param aTitle the new title for the button
|
||||
*/
|
||||
- (void)setTitle:(CPString)aTitle
|
||||
{
|
||||
if (_title == aTitle)
|
||||
return;
|
||||
|
||||
_title = aTitle;
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the button's title string
|
||||
*/
|
||||
- (CPString)title
|
||||
{
|
||||
return _title;
|
||||
}
|
||||
|
||||
/*!
|
||||
Lays out the button.
|
||||
*/
|
||||
- (void)tile
|
||||
{return;
|
||||
var size = [self bounds].size;
|
||||
|
||||
if (_isBordered)
|
||||
{
|
||||
var imageAndTitleSize = CGSizeMakeCopy(size);
|
||||
|
||||
if (_bezelStyle == CPHUDBezelStyle)
|
||||
imageAndTitleSize.height -= 4.0;
|
||||
else if (_bezelStyle == CPRoundRectBezelStyle)
|
||||
imageAndTitleSize.height -= 2.0;
|
||||
else if (_bezelStyle == CPTexturedRoundedBezelStyle)
|
||||
imageAndTitleSize.height -= 2.0;
|
||||
|
||||
[_imageAndTextView setFrameSize:imageAndTitleSize];
|
||||
}
|
||||
else
|
||||
[_imageAndTextView setFrameSize:size];
|
||||
}
|
||||
|
||||
- (CGRect)contentRectForBounds:(CGRect)bounds
|
||||
{
|
||||
if (_isBordered)
|
||||
{
|
||||
if (_bezelStyle === CPHUDBezelStyle)
|
||||
{
|
||||
bounds.origin.x += 5.0;
|
||||
bounds.origin.y += 2.0;
|
||||
bounds.size.width -= 5.0 * 2;
|
||||
bounds.size.height -= 2.0 + 4.0;
|
||||
}
|
||||
|
||||
else if (_bezelStyle === CPRoundRectBezelStyle)
|
||||
{
|
||||
bounds.origin.x += 5.0;
|
||||
bounds.origin.y += 1.0;
|
||||
bounds.size.width -= 5.0 * 2;
|
||||
bounds.size.height -= 1.0 + 2.0;
|
||||
}
|
||||
|
||||
else if (_bezelStyle === CPTexturedRoundedBezelStyle)
|
||||
{
|
||||
bounds.origin.x += 5.0;
|
||||
bounds.origin.y += 2.0;
|
||||
bounds.size.width -= 5.0 * 2;
|
||||
bounds.size.height -= 2.0 + 3.0;
|
||||
}
|
||||
}
|
||||
|
||||
return bounds;
|
||||
}
|
||||
|
||||
/*!
|
||||
Compacts the button's frame to fit its contents.
|
||||
*/
|
||||
- (void)sizeToFit
|
||||
{return; if (!_imageAndTextView)
|
||||
{
|
||||
_imageAndTextView = [[_CPImageAndTextView alloc] initWithFrame:[self contentRectForBounds:[self bounds]] control:self];
|
||||
|
||||
[self addSubview:_imageAndTextView];
|
||||
}
|
||||
|
||||
[_imageAndTextView setText:[self isHighlighted] && _alternateTitle ? _alternateTitle : _title];
|
||||
[_imageAndTextView setImage:[self isHighlighted] && _alternateImage ? _alternateImage : _image];
|
||||
|
||||
[_imageAndTextView sizeToFit];
|
||||
|
||||
var frame = [_imageAndTextView frame],
|
||||
height = CGRectGetHeight(frame);
|
||||
/*
|
||||
if (_isBordered)
|
||||
if (_bezelStyle == CPHUDBezelStyle)
|
||||
height += 2.0;
|
||||
else if (_bezelStyle == CPRoundRectBezelStyle)
|
||||
height += 1.0;
|
||||
else if (_bezelStyle == CPTexturedRoundedBezelStyle)
|
||||
height += 2.0;
|
||||
*/
|
||||
[self setFrameSize:CGSizeMake(CGRectGetWidth(frame), height)];
|
||||
}
|
||||
|
||||
/*!
|
||||
Highlights the receiver based on <code>aFlag</code>.
|
||||
@param If <code>YES</code> the button will highlight, <code>NO</code> the button will unhighlight.
|
||||
@@ -594,123 +419,6 @@ var _CPButtonClassName = nil,
|
||||
[super stopTracking:lastPoint at:aPoint mouseIsUp:mouseIsUp];
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the button's control size.
|
||||
@param aControlSize the button's new control size
|
||||
*/
|
||||
- (void)setControlSize:(CPControlSize)aControlSize
|
||||
{
|
||||
if (_controlSize == aControlSize)
|
||||
return;
|
||||
|
||||
_controlSize = aControlSize;
|
||||
|
||||
[self drawBezelWithHighlight:[self isHighlighted]];
|
||||
[self _updateTextAttributes];
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the button's control size.
|
||||
*/
|
||||
- (CPControlSize)controlSize
|
||||
{
|
||||
return _controlSize;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets whether the button has a bezeled border.
|
||||
@param If <code>YES</code>, the the button will have a bezeled border.
|
||||
*/
|
||||
- (void)setBordered:(BOOL)isBordered
|
||||
{
|
||||
if (_isBordered == isBordered)
|
||||
return;
|
||||
|
||||
_isBordered = isBordered;
|
||||
|
||||
[self updateBackgroundColors];
|
||||
[self drawBezelWithHighlight:[self isHighlighted]];
|
||||
|
||||
[self tile];
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns <code>YES</code> if the border is bezeled.
|
||||
*/
|
||||
- (BOOL)isBordered
|
||||
{
|
||||
return _isBordered;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the button's bezel style.
|
||||
@param aBezelStye one of the predefined bezel styles
|
||||
*/
|
||||
- (void)setBezelStyle:(CPBezelStyle)aBezelStyle
|
||||
{
|
||||
// FIXME: We need real support for these:
|
||||
if (aBezelStyle == CPRoundedBezelStyle ||
|
||||
aBezelStyle == CPRoundedBezelStyle ||
|
||||
aBezelStyle == CPRegularSquareBezelStyle ||
|
||||
aBezelStyle == CPThickSquareBezelStyle ||
|
||||
aBezelStyle == CPThickerSquareBezelStyle ||
|
||||
aBezelStyle == CPDisclosureBezelStyle ||
|
||||
aBezelStyle == CPShadowlessSquareBezelStyle ||
|
||||
aBezelStyle == CPCircularBezelStyle ||
|
||||
aBezelStyle == CPTexturedSquareBezelStyle ||
|
||||
aBezelStyle == CPHelpButtonBezelStyle ||
|
||||
aBezelStyle == CPSmallSquareBezelStyle ||
|
||||
aBezelStyle == CPRecessedBezelStyle ||
|
||||
aBezelStyle == CPRoundedDisclosureBezelStyle)
|
||||
aBezelStyle = CPRoundRectBezelStyle;
|
||||
|
||||
if (_bezelStyle == aBezelStyle)
|
||||
return;
|
||||
|
||||
_bezelStyle = aBezelStyle;
|
||||
|
||||
[self updateBackgroundColors];
|
||||
[self drawBezelWithHighlight:[self isHighlighted]];
|
||||
|
||||
[self _updateTextAttributes];
|
||||
[self tile];
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the current bezel style
|
||||
*/
|
||||
- (int)bezelStyle
|
||||
{
|
||||
return _bezelStyle;
|
||||
}
|
||||
|
||||
/* @ignore */
|
||||
- (void)updateBackgroundColors
|
||||
{return;
|
||||
if (_isBordered)
|
||||
{
|
||||
[self setBackgroundColor:_CPControlThreePartImagePattern(
|
||||
NO,
|
||||
_CPButtonBezelStyleSizes,
|
||||
_CPButtonClassName,
|
||||
_CPButtonBezelStyleIdentifiers[_bezelStyle],
|
||||
_CPControlIdentifierForControlSize(_controlSize)) forName:CPControlNormalBackgroundColor];
|
||||
|
||||
[self setBackgroundColor:_CPControlThreePartImagePattern(
|
||||
NO,
|
||||
_CPButtonBezelStyleSizes,
|
||||
_CPButtonClassName,
|
||||
_CPButtonBezelStyleIdentifiers[_bezelStyle],
|
||||
_CPControlIdentifierForControlSize(_controlSize),
|
||||
_CPButtonBezelStyleHighlightedIdentifier) forName:CPControlHighlightedBackgroundColor];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self setBackgroundColor:nil forName:CPControlNormalBackgroundColor];
|
||||
[self setBackgroundColor:nil forName:CPControlHighlightedBackgroundColor];
|
||||
}
|
||||
}
|
||||
|
||||
/* @ignore */
|
||||
- (void)drawBezelWithHighlight:(BOOL)shouldHighlight
|
||||
{ return;
|
||||
@@ -722,24 +430,6 @@ var _CPButtonClassName = nil,
|
||||
[self setBackgroundColorWithName:shouldHighlight ? CPControlHighlightedBackgroundColor : CPControlNormalBackgroundColor];
|
||||
}
|
||||
|
||||
- (void)viewDidMoveToWindow
|
||||
{
|
||||
if (_bezelBorderNeedsUpdate)
|
||||
[self drawBezelWithHighlight:[self isHighlighted]];
|
||||
}
|
||||
|
||||
/* @ignore */
|
||||
- (void)_updateTextAttributes
|
||||
{return;
|
||||
if (_bezelStyle == CPHUDBezelStyle)
|
||||
[self setTextColor:CPHUDBezelStyleTextColor];
|
||||
|
||||
if (_controlSize == CPRegularControlSize)
|
||||
[self setFont:[CPFont systemFontOfSize:11.0]];
|
||||
}
|
||||
|
||||
// NEW
|
||||
|
||||
- (CPView)createBezelView
|
||||
{
|
||||
var view = [[CPView alloc] initWithFrame:_CGRectMakeZero()];
|
||||
@@ -749,7 +439,7 @@ var _CPButtonClassName = nil,
|
||||
return view;
|
||||
}
|
||||
|
||||
CONTROL_STATE_VALUE(BezelColor, bezelColor)
|
||||
THEMED_STATED_VALUE(BezelColor, bezelColor)
|
||||
|
||||
- (CPView)createContentView
|
||||
{
|
||||
@@ -758,12 +448,15 @@ CONTROL_STATE_VALUE(BezelColor, bezelColor)
|
||||
return view;
|
||||
}
|
||||
|
||||
CONTROL_STATE_VALUE(ContentInset, contentInset)
|
||||
CONTROL_STATE_VALUE(BezelInset, bezelInset)
|
||||
THEMED_STATED_VALUE(ContentInset, contentInset)
|
||||
THEMED_STATED_VALUE(BezelInset, bezelInset)
|
||||
|
||||
- (CGRect)contentRectForBounds:(CGRect)bounds
|
||||
{
|
||||
var contentInset = [self contentInset];
|
||||
if (![self isBordered])
|
||||
return bounds;
|
||||
|
||||
var contentInset = [self currentContentInset];
|
||||
|
||||
if (!contentInset)
|
||||
return bounds;
|
||||
@@ -778,7 +471,10 @@ CONTROL_STATE_VALUE(BezelInset, bezelInset)
|
||||
|
||||
- (CGRect)bezelRectForBounds:(CFRect)bounds
|
||||
{
|
||||
var bezelInset = [self bezelInset];
|
||||
if (![self isBordered])
|
||||
return _CGRectMakeZero();
|
||||
|
||||
var bezelInset = [self currentBezelInset];
|
||||
|
||||
if (!_CGInsetIsEmpty(bezelInset))
|
||||
return bounds;
|
||||
@@ -845,31 +541,91 @@ CONTROL_STATE_VALUE(BezelInset, bezelInset)
|
||||
|
||||
if (_contentView)
|
||||
{
|
||||
[_contentView setText:[self isHighlighted] && _alternateTitle ? _alternateTitle : _title];
|
||||
[_contentView setImage:[self isHighlighted] && _alternateImage ? _alternateImage : _image];
|
||||
[_contentView setText:[self currentTitle]];
|
||||
[_contentView setImage:[self currentImage]];
|
||||
|
||||
// [_imageAndTextView setText:[self titleForControlState:_title]];
|
||||
// [_imageAndTextView setImage:[self imageForControlState:_controlState]];
|
||||
|
||||
[_contentView setFont:[self font]];
|
||||
[_contentView setTextColor:[self textColor]];
|
||||
[_contentView setAlignment:[self alignment]];
|
||||
[_contentView setVerticalAlignment:[self verticalAlignment]];
|
||||
[_contentView setLineBreakMode:[self lineBreakMode]];
|
||||
[_contentView setTextShadowColor:[self textShadowColor]];
|
||||
[_contentView setTextShadowOffset:[self textShadowOffset]];
|
||||
[_contentView setImagePosition:[self imagePosition]];
|
||||
[_contentView setImageScaling:[self imageScaling]];
|
||||
[_contentView setFont:[self currentFont]];
|
||||
[_contentView setTextColor:[self currentTextColor]];
|
||||
[_contentView setAlignment:[self currentAlignment]];
|
||||
[_contentView setVerticalAlignment:[self currentVerticalAlignment]];
|
||||
[_contentView setLineBreakMode:[self currentLineBreakMode]];
|
||||
[_contentView setTextShadowColor:[self currentTextShadowColor]];
|
||||
[_contentView setTextShadowOffset:[self currentTextShadowOffset]];
|
||||
[_contentView setImagePosition:[self currentImagePosition]];
|
||||
[_contentView setImageScaling:[self currentImageScaling]];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation CPButton (Theming)
|
||||
|
||||
- (void)viewDidChangeTheme
|
||||
{
|
||||
[super viewDidChangeTheme];
|
||||
|
||||
var theme = [self theme];
|
||||
|
||||
[_bezelInset setTheme:theme];
|
||||
[_contentInset setTheme:theme];
|
||||
|
||||
[_bezelColor setTheme:theme];
|
||||
}
|
||||
|
||||
- (CPDictionary)themedValues
|
||||
{
|
||||
var values = [super themedValues];
|
||||
|
||||
[values setObject:_bezelInset forKey:@"bezel-inset"];
|
||||
[values setObject:_contentInset forKey:@"content-inset"];
|
||||
|
||||
[values setObject:_bezelColor forKey:@"bezel-color"];
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation CPButton (NS)
|
||||
|
||||
- (void)setBezelStyle:(unsigned)aBezelStyle
|
||||
{
|
||||
}
|
||||
|
||||
- (unsigned)bezelStyle
|
||||
{
|
||||
}
|
||||
|
||||
- (void)setBordered:(BOOL)shouldBeBordered
|
||||
{
|
||||
if (_isBordered === shouldBeBordered)
|
||||
return;
|
||||
|
||||
_isBordered = shouldBeBordered;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (BOOL)isBordered
|
||||
{
|
||||
return _isBordered;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
var CPButtonImageKey = @"CPButtonImageKey",
|
||||
CPButtonAlternateImageKey = @"CPButtonAlternateImageKey",
|
||||
CPButtonTitleKey = @"CPButtonTitleKey",
|
||||
CPButtonAlteranteTitleKey = @"CPButtonAlternateTitleKey",
|
||||
CPButtonContentInsetKey = @"CPButtonContentInsetKey",
|
||||
CPButtonBezelInsetKey = @"CPButtonBezelInsetKey",
|
||||
CPButtonBezelColorKey = @"CPButtonBezelColorKey",
|
||||
CPButtonImageAndTitleViewKey = @"CPButtonImageAndTitleViewKey",
|
||||
CPButtonImagePositionKey = @"CPButtonImagePositionKey",
|
||||
CPButtonImageScalingKey = @"CPButtonImageScalingKey",
|
||||
@@ -891,16 +647,23 @@ var CPButtonImageKey = @"CPButtonImageKey",
|
||||
{
|
||||
_controlSize = CPRegularControlSize;
|
||||
|
||||
[self setImage:[aCoder decodeObjectForKey:CPButtonImageKey]];
|
||||
var theme = [self theme],
|
||||
theClass = [self class];
|
||||
|
||||
[self setAlternateImage:[aCoder decodeObjectForKey:CPButtonAlternateImageKey]];
|
||||
|
||||
[self setTitle:[aCoder decodeObjectForKey:CPButtonTitleKey]];
|
||||
_image = CPThemedValueDecode(aCoder, CPButtonImageKey, nil, @"image", theme, theClass);
|
||||
_title = CPThemedValueDecode(aCoder, CPButtonTitleKey, nil, @"title", theme, theClass);
|
||||
|
||||
_contentInset = CPThemedValueDecode(aCoder, CPButtonContentInsetKey, _CGInsetMakeZero(), @"content-inset", theme, theClass);
|
||||
_bezelInset = CPThemedValueDecode(aCoder, CPButtonBezelInsetKey, _CGInsetMakeZero(), @"bezel-inset", theme, theClass);
|
||||
|
||||
[self setImagePosition:[aCoder decodeIntForKey:CPButtonImagePositionKey]];
|
||||
[self setImageScaling:[aCoder decodeIntForKey:CPButtonImageScalingKey]];
|
||||
_bezelColor = CPThemedValueDecode(aCoder, CPButtonBezelColorKey, nil, @"bezel-color", theme, theClass);
|
||||
|
||||
[self setBezelStyle:[aCoder decodeIntForKey:CPButtonBezelStyleKey]];
|
||||
[self setBordered:[aCoder decodeBoolForKey:CPButtonIsBorderedKey]];
|
||||
_isBordered = [aCoder decodeBoolForKey:CPButtonIsBorderedKey];
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -923,16 +686,19 @@ var CPButtonImageKey = @"CPButtonImageKey",
|
||||
|
||||
_subviews = actualSubviews;
|
||||
|
||||
[aCoder encodeObject:_image forKey:CPButtonImageKey];
|
||||
|
||||
[aCoder encodeObject:_alternateImage forKey:CPButtonAlternateImageKey];
|
||||
|
||||
[aCoder encodeObject:_title forKey:CPButtonTitleKey];
|
||||
|
||||
[aCoder encodeInt:_imagePosition forKey:CPButtonImagePositionKey];
|
||||
[aCoder encodeInt:_imageScaling forKey:CPButtonImageScalingKey];
|
||||
|
||||
[aCoder encodeBool:_isBordered forKey:CPButtonIsBorderedKey];
|
||||
[aCoder encodeInt:_bezelStyle forKey:CPButtonBezelStyleKey];
|
||||
|
||||
CPThemedValueEncode(aCoder, CPButtonImageKey, _image);
|
||||
CPThemedValueEncode(aCoder, CPButtonTitleKey, _title);
|
||||
|
||||
CPThemedValueEncode(aCoder, CPButtonContentInsetKey, _contentInset);
|
||||
CPThemedValueEncode(aCoder, CPButtonBezelInsetKey, _bezelInset);
|
||||
|
||||
CPThemedValueEncode(aCoder, CPButtonBezelColorKey, _bezelColor);
|
||||
}
|
||||
|
||||
@end
|
||||
+228
-380
@@ -23,10 +23,12 @@
|
||||
@import "CPFont.j"
|
||||
@import "CPShadow.j"
|
||||
@import "CPView.j"
|
||||
@import "CPThemedValue.j"
|
||||
|
||||
#include "CoreGraphics/CGGeometry.h"
|
||||
#include "CPThemedValue.h"
|
||||
#include "Platform/Platform.h"
|
||||
|
||||
|
||||
/*
|
||||
@global
|
||||
@group CPTextAlignment
|
||||
@@ -86,28 +88,22 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
*/
|
||||
@implementation CPControl : CPView
|
||||
{
|
||||
id _value;
|
||||
id _value;
|
||||
|
||||
// Target-Action Support
|
||||
id _target;
|
||||
SEL _action;
|
||||
int _sendActionOn;
|
||||
id _target;
|
||||
SEL _action;
|
||||
int _sendActionOn;
|
||||
|
||||
// Mouse Tracking Support
|
||||
BOOL _continuousTracking;
|
||||
BOOL _trackingWasWithinFrame;
|
||||
unsigned _trackingMouseDownFlags;
|
||||
CGPoint _previousTrackingLocation;
|
||||
|
||||
// Stuff
|
||||
CPShadow _textShadow;
|
||||
|
||||
CPDictionary _backgroundColors;
|
||||
CPString _currentBackgroundColorName;
|
||||
BOOL _continuousTracking;
|
||||
BOOL _trackingWasWithinFrame;
|
||||
unsigned _trackingMouseDownFlags;
|
||||
CGPoint _previousTrackingLocation;
|
||||
|
||||
// Properties
|
||||
CPControlStateValue _alignment;
|
||||
CPControlStateValue _verticalAlignment;
|
||||
CPThemedValue _alignment;
|
||||
CPThemedValue _verticalAlignment;
|
||||
|
||||
CPControlStateValue _lineBreakMode;
|
||||
CPControlStateValue _textColor;
|
||||
@@ -120,6 +116,9 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
CPControlStateValue _imageScaling;
|
||||
|
||||
CPControlState _controlState;
|
||||
|
||||
// FIXME: Who uses this?
|
||||
BOOL _isBezeled;
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CGRect)aFrame
|
||||
@@ -130,57 +129,32 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
{
|
||||
_controlState = CPControlStateNormal;
|
||||
|
||||
_alignment = [[CPControlStateValue alloc] initWithDefaultValue:CPLeftTextAlignment];
|
||||
_verticalAlignment = [[CPControlStateValue alloc] initWithDefaultValue:CPTopVerticalTextAlignment];
|
||||
var theme = [self theme],
|
||||
theClass = [self class];
|
||||
|
||||
_lineBreakMode = [[CPControlStateValue alloc] initWithDefaultValue:CPLeftTextAlignment];
|
||||
_textColor = [[CPControlStateValue alloc] initWithDefaultValue:[CPColor blackColor]];
|
||||
_font = [[CPControlStateValue alloc] initWithDefaultValue:[CPFont systemFontOfSize:12.0]];
|
||||
_alignment = CPThemedValueMake(CPLeftTextAlignment, "alignment", theme, theClass);
|
||||
_verticalAlignment = CPThemedValueMake(CPTopVerticalTextAlignment, "vertical-alignment", theme, theClass);
|
||||
|
||||
_textShadowColor = [[CPControlStateValue alloc] initWithDefaultValue:nil];
|
||||
_textShadowOffset = [[CPControlStateValue alloc] initWithDefaultValue:CGSizeMake(0.0, 0.0)];;
|
||||
_lineBreakMode = CPThemedValueMake(CPLineBreakByClipping, "line-break-mode", theme, theClass);
|
||||
_textColor = CPThemedValueMake([CPColor blackColor], "text-color", theme, theClass);
|
||||
_font = CPThemedValueMake([CPFont systemFontOfSize:12.0], "font", theme, theClass);
|
||||
|
||||
_imagePosition = [[CPControlStateValue alloc] initWithDefaultValue:CPImageLeft];
|
||||
_imageScaling = [[CPControlStateValue alloc] initWithDefaultValue:CPScaleToFit];
|
||||
_textShadowColor = CPThemedValueMake(nil, @"text-shadow-color", theme, theClass);
|
||||
_textShadowOffset = CPThemedValueMake(_CGSizeMake(0.0, 0.0), "text-shadow-offset", theme, theClass);
|
||||
|
||||
_imagePosition = CPThemedValueMake(CPImageLeft, @"image-position", theme, theClass);
|
||||
_imageScaling = CPThemedValueMake(CPScaleToFit, "image-scaling", theme, theClass);
|
||||
|
||||
[theme setActiveClass:nil];
|
||||
//
|
||||
|
||||
_sendActionOn = CPLeftMouseUpMask;
|
||||
_trackingMouseDownFlags = 0;
|
||||
|
||||
_isEnabled = YES;
|
||||
|
||||
_backgroundColors = [CPDictionary dictionary];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets whether the receiver responds to mouse events.
|
||||
@param isEnabled whether the receiver will respond to mouse events
|
||||
*/
|
||||
- (void)setEnabled:(BOOL)isEnabled
|
||||
{
|
||||
[self setAlphaValue:(_isEnabled = isEnabled) ? 1.0 : 0.3];
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns <code>YES</code> if the receiver responds to mouse events.
|
||||
*/
|
||||
- (BOOL)isEnabled
|
||||
{
|
||||
return _isEnabled;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the receiver's target action
|
||||
*/
|
||||
- (SEL)action
|
||||
{
|
||||
return _action;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets the receiver's target action
|
||||
@param anAction Sets the action message that gets sent to the target.
|
||||
@@ -191,11 +165,11 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the receiver's target. The target receives action messages from the receiver.
|
||||
Returns the receiver's target action
|
||||
*/
|
||||
- (id)target
|
||||
- (SEL)action
|
||||
{
|
||||
return _target;
|
||||
return _action;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -207,6 +181,54 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
_target = aTarget;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the receiver's target. The target receives action messages from the receiver.
|
||||
*/
|
||||
- (id)target
|
||||
{
|
||||
return _target;
|
||||
}
|
||||
|
||||
/*!
|
||||
Causes <code>anAction</code> to be sent to <code>anObject</code>.
|
||||
@param anAction the action to send
|
||||
@param anObject the object to which the action will be sent
|
||||
*/
|
||||
- (void)sendAction:(SEL)anAction to:(id)anObject
|
||||
{
|
||||
[CPApp sendAction:anAction to:anObject from:self];
|
||||
}
|
||||
|
||||
- (int)sendActionOn:(int)mask
|
||||
{
|
||||
var previousMask = _sendActionOn;
|
||||
|
||||
_sendActionOn = mask;
|
||||
|
||||
return previousMask;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns whether the control can continuously send its action messages.
|
||||
*/
|
||||
- (BOOL)isContinuous
|
||||
{
|
||||
// Some subclasses should redefine this with CPLeftMouseDraggedMask
|
||||
return (_sendActionOn & CPPeriodicMask) !== 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets whether the cell can continuously send its action messages.
|
||||
*/
|
||||
- (void)setContinuous:(BOOL)flag
|
||||
{
|
||||
// Some subclasses should redefine this with CPLeftMouseDraggedMask
|
||||
if (flag)
|
||||
_sendActionOn |= CPPeriodicMask;
|
||||
else
|
||||
_sendActionOn &= ~CPPeriodicMask;
|
||||
}
|
||||
|
||||
- (BOOL)tracksMouseOutsideOfFrame
|
||||
{
|
||||
return NO;
|
||||
@@ -277,53 +299,12 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
|
||||
- (void)mouseDown:(CPEvent)anEvent
|
||||
{
|
||||
if (!_isEnabled)
|
||||
if (![self isEnabled])
|
||||
return;
|
||||
|
||||
[self trackMouse:anEvent];
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Causes <code>anAction</code> to be sent to <code>anObject</code>.
|
||||
@param anAction the action to send
|
||||
@param anObject the object to which the action will be sent
|
||||
*/
|
||||
- (void)sendAction:(SEL)anAction to:(id)anObject
|
||||
{
|
||||
[CPApp sendAction:anAction to:anObject from:self];
|
||||
}
|
||||
|
||||
- (int)sendActionOn:(int)mask
|
||||
{
|
||||
var previousMask = _sendActionOn;
|
||||
|
||||
_sendActionOn = mask;
|
||||
|
||||
return previousMask;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns whether the control can continuously send its action messages.
|
||||
*/
|
||||
- (BOOL)isContinuous
|
||||
{
|
||||
// Some subclasses should redefine this with CPLeftMouseDraggedMask
|
||||
return (_sendActionOn & CPPeriodicMask) !== 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
Sets whether the cell can continuously send its action messages.
|
||||
*/
|
||||
- (void)setContinuous:(BOOL)flag
|
||||
{
|
||||
// Some subclasses should redefine this with CPLeftMouseDraggedMask
|
||||
if (flag)
|
||||
_sendActionOn |= CPPeriodicMask;
|
||||
else
|
||||
_sendActionOn &= ~CPPeriodicMask;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns the receiver's object value
|
||||
*/
|
||||
@@ -338,6 +319,9 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
- (void)setObjectValue:(id)anObject
|
||||
{
|
||||
_value = anObject;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -391,7 +375,6 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
[self setObjectValue:anObject];
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
Returns the receiver's int value
|
||||
*/
|
||||
@@ -425,7 +408,6 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
[self setObjectValue:anObject];
|
||||
}
|
||||
|
||||
|
||||
- (void)takeDoubleValueFrom:(id)sender
|
||||
{
|
||||
if ([sender respondsToSelector:@selector(doubleValue)])
|
||||
@@ -466,44 +448,6 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
[self setStringValue:[sender stringValue]];
|
||||
}
|
||||
|
||||
|
||||
- (void)setBackgroundColor:(CPColor)aColor
|
||||
{
|
||||
_backgroundColors = [CPDictionary dictionary];
|
||||
|
||||
[self setBackgroundColor:aColor forName:CPControlNormalBackgroundColor];
|
||||
|
||||
[super setBackgroundColor:aColor];
|
||||
}
|
||||
|
||||
- (void)setBackgroundColor:(CPColor)aColor forName:(CPString)aName
|
||||
{
|
||||
if (!aColor)
|
||||
[_backgroundColors removeObjectForKey:aName];
|
||||
else
|
||||
[_backgroundColors setObject:aColor forKey:aName];
|
||||
|
||||
if (_currentBackgroundColorName == aName)
|
||||
[self setBackgroundColorWithName:_currentBackgroundColorName];
|
||||
}
|
||||
|
||||
- (CPColor)backgroundColorForName:(CPString)aName
|
||||
{
|
||||
var backgroundColor = [_backgroundColors objectForKey:aName];
|
||||
|
||||
if (!backgroundColor && aName != CPControlNormalBackgroundColor)
|
||||
return [_backgroundColors objectForKey:CPControlNormalBackgroundColor];
|
||||
|
||||
return backgroundColor;
|
||||
}
|
||||
|
||||
- (void)setBackgroundColorWithName:(CPString)aName
|
||||
{
|
||||
_currentBackgroundColorName = aName;
|
||||
|
||||
[super setBackgroundColor:[self backgroundColorForName:aName]];
|
||||
}
|
||||
|
||||
- (void)textDidBeginEditing:(CPNotification)note
|
||||
{
|
||||
//this looks to prevent false propagation of notifications for other objects
|
||||
@@ -531,28 +475,123 @@ var CPControlBlackColor = [CPColor blackColor];
|
||||
[[CPNotificationCenter defaultCenter] postNotificationName:CPControlTextDidEndEditingNotification object:self userInfo:[CPDictionary dictionaryWithObject:[note object] forKey:"CPFieldEditor"]];
|
||||
}
|
||||
|
||||
/*
|
||||
Ð doubleValue
|
||||
Ð setDoubleValue:
|
||||
Ð intValue
|
||||
Ð setIntValue:
|
||||
Ð objectValue
|
||||
Ð setObjectValue:
|
||||
Ð stringValue
|
||||
Ð setStringValue:
|
||||
Ð setNeedsDisplay
|
||||
Ð attributedStringValue
|
||||
Ð setAttributedStringValue:
|
||||
*/
|
||||
THEMED_STATED_VALUE(Alignment, alignment)
|
||||
THEMED_STATED_VALUE(VerticalAlignment, verticalAlignment)
|
||||
THEMED_STATED_VALUE(LineBreakMode, lineBreakMode)
|
||||
THEMED_STATED_VALUE(TextColor, textColor)
|
||||
THEMED_STATED_VALUE(Font, font)
|
||||
THEMED_STATED_VALUE(TextShadowColor, textShadowColor)
|
||||
THEMED_STATED_VALUE(TextShadowOffset, textShadowOffset)
|
||||
THEMED_STATED_VALUE(ImagePosition, imagePosition)
|
||||
THEMED_STATED_VALUE(ImageScaling, imageScaling)
|
||||
|
||||
- (int)controlState
|
||||
{
|
||||
return _controlState;
|
||||
}
|
||||
|
||||
- (void)setEnabled:(BOOL)isEnabled
|
||||
{
|
||||
if ((!(_controlState & CPControlStateDisabled)) === isEnabled)
|
||||
return;
|
||||
|
||||
if (isEnabled)
|
||||
_controlState &= ~CPControlStateDisabled;
|
||||
else
|
||||
_controlState |= CPControlStateDisabled;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (BOOL)isEnabled
|
||||
{
|
||||
return !(_controlState & CPControlStateDisabled);
|
||||
}
|
||||
|
||||
- (void)highlight:(BOOL)shouldHighlight
|
||||
{
|
||||
[self setHighlighted:shouldHighlight];
|
||||
}
|
||||
|
||||
- (void)setHighlighted:(BOOL)isHighlighted
|
||||
{
|
||||
if ((!!(_controlState & CPControlStateHighlighted)) === isHighlighted)
|
||||
return;
|
||||
|
||||
if (isHighlighted)
|
||||
_controlState |= CPControlStateHighlighted;
|
||||
else
|
||||
_controlState &= ~CPControlStateHighlighted;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (BOOL)isHighlighted
|
||||
{
|
||||
return !!(_controlState & CPControlStateHighlighted);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation CPControl (Theming)
|
||||
|
||||
- (void)viewDidChangeTheme
|
||||
{
|
||||
[super viewDidChangeTheme];
|
||||
|
||||
var theme = [self theme];
|
||||
|
||||
[_alignment setTheme:theme];
|
||||
[_verticalAlignment setTheme:theme];
|
||||
|
||||
[_lineBreakMode setTheme:theme];
|
||||
[_textColor setTheme:theme];
|
||||
[_font setTheme:theme];
|
||||
|
||||
[_textShadowColor setTheme:theme];
|
||||
[_textShadowOffset setTheme:theme];
|
||||
|
||||
[_imagePositions setTheme:theme];
|
||||
[_imageScaling setTheme:theme];
|
||||
}
|
||||
|
||||
- (CPDictionary)themedValues
|
||||
{
|
||||
var values = [super themedValues];
|
||||
|
||||
[values setObject:_alignment forKey:@"alignment"];
|
||||
[values setObject:_verticalAlignment forKey:@"vertical-alignment"];
|
||||
|
||||
[values setObject:_lineBreakMode forKey:@"line-break-mode"];
|
||||
[values setObject:_textColor forKey:@"text-color"];
|
||||
[values setObject:_font forKey:@"font"];
|
||||
|
||||
[values setObject:_textShadowColor forKey:@"text-shadow-color"];
|
||||
[values setObject:_textShadowOffset forKey:@"text-shadow-offset"];
|
||||
|
||||
[values setObject:_imagePosition forKey:@"image-position"];
|
||||
[values setObject:_imageScaling forKey:@"image-scaling"];
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
var CPControlValueKey = "CPControlValueKey",
|
||||
CPControlIsEnabledKey = "CPControlIsEnabledKey",
|
||||
CPControlAlignmentKey = "CPControlAlignmentKey",
|
||||
|
||||
CPControlAlignmentKey = @"CPControlAlignmentKey",
|
||||
CPControlVerticalAlignmentKey = @"CPControlVerticalAlignmentKey",
|
||||
CPControlFontKey = "CPControlFontKey",
|
||||
CPControlTextColorKey = "CPControlTextColorKey",
|
||||
CPControlLineBreakModeKey = @"CPControlLineBreakModeKey",
|
||||
CPControlFontKey = @"CPControlFontKey",
|
||||
CPControlTextColorKey = @"CPControlTextColorKey",
|
||||
CPControlTextShadowColorKey = @"CPControlTextShadowColorKey",
|
||||
CPControlTextShadowOffsetKey = @"CPControlTextShadowOffsetKey",
|
||||
CPControlImagePositionKey = @"CPControlImagePositionKey",
|
||||
CPControlImageScalingKey = @"CPControlImageScalingKey",
|
||||
|
||||
CPControlTargetKey = "CPControlTargetKey",
|
||||
CPControlActionKey = "CPControlActionKey",
|
||||
CPControlSendActionOnKey = "CPControlSendActionOnKey";
|
||||
@@ -574,21 +613,28 @@ var __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey";
|
||||
{
|
||||
_controlState = CPControlStateNormal;
|
||||
|
||||
var theme = [self theme],
|
||||
theClass = [self class];
|
||||
|
||||
[self setObjectValue:[aCoder decodeObjectForKey:CPControlValueKey]];
|
||||
|
||||
if ([aCoder containsValueForKey:__Deprecated__CPImageViewImageKey])
|
||||
[self setObjectValue:[aCoder decodeObjectForKey:_DeprecatedCPImageViewImageKey]];
|
||||
|
||||
[self setEnabled:[aCoder decodeBoolForKey:CPControlIsEnabledKey]];
|
||||
|
||||
[self setAlignment:[aCoder decodeIntForKey:CPControlAlignmentKey]];
|
||||
[self setVerticalAlignment:[aCoder decodeIntForKey:CPControlVerticalAlignmentKey]];
|
||||
[self setFont:[aCoder decodeObjectForKey:CPControlFontKey]];
|
||||
[self setTextColor:[aCoder decodeObjectForKey:CPControlTextColorKey]];
|
||||
|
||||
_alignment = CPThemedValueDecode(aCoder, CPControlAlignmentKey, CPLeftTextAlignment, @"alignment", theme, theClass);
|
||||
_verticalAlignment = CPThemedValueDecode(aCoder, CPControlVerticalAlignmentKey, CPTopVerticalTextAlignment, @"vertical-alignment", theme, theClass);
|
||||
|
||||
_lineBreakMode = CPThemedValueDecode(aCoder, CPControlLineBreakModeKey, CPLineBreakByClipping, @"line-break-mode", theme, theClass);
|
||||
_textColor = CPThemedValueDecode(aCoder, CPControlTextColorKey, [CPColor blackColor], @"text-color", theme, theClass);
|
||||
_font = CPThemedValueDecode(aCoder, CPControlFontKey, [CPFont systemFontOfSize:12.0], @"font", theme, theClass);
|
||||
|
||||
_textShadowColor = CPThemedValueDecode(aCoder, CPControlTextShadowColorKey, nil, @"text-shadow-color", theme, theClass);
|
||||
_textShadowOffset = CPThemedValueDecode(aCoder, CPControlTextShadowOffsetKey, _CGSizeMake(0.0, 0.0), @"text-shadow-offset", theme, theClass);
|
||||
|
||||
_imagePosition = CPThemedValueDecode(aCoder, CPControlImagePositionKey, CPImageLeft, @"image-position", theme, theClass);
|
||||
_imageScaling = CPThemedValueDecode(aCoder, CPControlImageScalingKey, CPScaleToFit, @"image-scaling", theme, theClass);
|
||||
|
||||
/*
|
||||
[self setTarget:[aCoder decodeObjectForKey:CPControlTargetKey]];
|
||||
[self setAction:[aCoder decodeObjectForKey:CPControlActionKey]];
|
||||
[self sendActionOn:[aCoder decodeIntForKey:CPControlSendActionOnKey]];
|
||||
[self sendActionOn:[aCoder decodeIntForKey:CPControlSendActionOnKey]];*/
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -603,7 +649,21 @@ var __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey";
|
||||
[super encodeWithCoder:aCoder];
|
||||
|
||||
[aCoder encodeObject:_value forKey:CPControlValueKey];
|
||||
|
||||
CPThemedValueEncode(aCoder, CPControlAlignmentKey, _alignment);
|
||||
CPThemedValueEncode(aCoder, CPControlVerticalAlignmentKey, _verticalAlignment);
|
||||
|
||||
CPThemedValueEncode(aCoder, CPControlLineBreakModeKey, _lineBreakMode);
|
||||
CPThemedValueEncode(aCoder, CPControlTextColorKey, _textColor);
|
||||
CPThemedValueEncode(aCoder, CPControlFontKey, _font);
|
||||
|
||||
CPThemedValueEncode(aCoder, CPControlTextShadowColorKey, _textShadowColor);
|
||||
CPThemedValueEncode(aCoder, CPControlTextShadowOffsetKey, _textShadowOffset);
|
||||
|
||||
CPThemedValueEncode(aCoder, CPControlImagePositionKey, _imagePosition);
|
||||
CPThemedValueEncode(aCoder, CPControlImageScalingKey, _imageScaling);
|
||||
|
||||
/*
|
||||
[aCoder encodeBool:_isEnabled forKey:CPControlIsEnabledKey];
|
||||
|
||||
[aCoder encodeInt:_alignment forKey:CPControlAlignmentKey];
|
||||
@@ -615,7 +675,7 @@ var __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey";
|
||||
[aCoder encodeConditionalObject:_target forKey:CPControlTargetKey];
|
||||
[aCoder encodeObject:_action forKey:CPControlActionKey];
|
||||
|
||||
[aCoder encodeInt:_sendActionOn forKey:CPControlSendActionOnKey];
|
||||
[aCoder encodeInt:_sendActionOn forKey:CPControlSendActionOnKey];*/
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -716,215 +776,3 @@ function _CPControlThreePartImagePattern(isVertical, sizes, aClassName)
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
///
|
||||
|
||||
#include "CPControl.h"
|
||||
|
||||
@implementation CPControl (BETTER)
|
||||
|
||||
CONTROL_STATE_VALUE(Alignment, alignment)
|
||||
CONTROL_STATE_VALUE(VerticalAlignment, verticalAlignment)
|
||||
CONTROL_STATE_VALUE(LineBreakMode, lineBreakMode)
|
||||
CONTROL_STATE_VALUE(TextColor, textColor)
|
||||
CONTROL_STATE_VALUE(Font, font)
|
||||
CONTROL_STATE_VALUE(TextShadowColor, textShadowColor)
|
||||
CONTROL_STATE_VALUE(TextShadowOffset, textShadowOffset)
|
||||
CONTROL_STATE_VALUE(ImagePosition, imagePosition)
|
||||
CONTROL_STATE_VALUE(ImageScaling, imageScaling)
|
||||
|
||||
- (int)controlState
|
||||
{
|
||||
return _controlState;
|
||||
}
|
||||
|
||||
- (void)setEnabled:(BOOL)isEnabled
|
||||
{
|
||||
if ((!(_controlState & CPControlStateDisabled)) === isEnabled)
|
||||
return;
|
||||
|
||||
if (isEnabled)
|
||||
_controlState &= ~CPControlStateDisabled;
|
||||
else
|
||||
_controlState |= CPControlStateDisabled;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (BOOL)isEnabled
|
||||
{
|
||||
return !(_controlState & CPControlStateDisabled);
|
||||
}
|
||||
|
||||
- (void)highlight:(BOOL)shouldHighlight
|
||||
{
|
||||
[self setHighlighted:shouldHighlight];
|
||||
}
|
||||
|
||||
- (void)setHighlighted:(BOOL)isHighlighted
|
||||
{
|
||||
if ((!!(_controlState & CPControlStateHighlighted)) === isHighlighted)
|
||||
return;
|
||||
|
||||
if (isHighlighted)
|
||||
_controlState |= CPControlStateHighlighted;
|
||||
else
|
||||
_controlState &= ~CPControlStateHighlighted;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (BOOL)isHighlighted
|
||||
{
|
||||
return !!(_controlState & CPControlStateHighlighted);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
CPControlStateNormal = 0,
|
||||
CPControlStateHighlighted = 1 << 0,
|
||||
CPControlStateDisabled = 1 << 1,
|
||||
CPControlStateSelected = 1 << 2,
|
||||
CPControlStateDefault = 1 << 3;
|
||||
|
||||
@implementation CPControlStateValue : CPObject
|
||||
{
|
||||
id _defaultValue;
|
||||
JSObject _values;
|
||||
int _highestState;
|
||||
}
|
||||
|
||||
- (id)initWithDefaultValue:(id)aDefaultValue
|
||||
{
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_defaultValue = aDefaultValue;
|
||||
_values = {};
|
||||
_highestState = 0;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setDefaultValue:(id)aDefaultValue
|
||||
{
|
||||
_defaultValue = aDefaultValue;
|
||||
}
|
||||
|
||||
- (id)valueForControlState:(CPControlState)aState
|
||||
{
|
||||
var value = _values[aState];
|
||||
|
||||
// If we don't have a value, and we have a non-normal state...
|
||||
if (value === undefined && aState > 0)
|
||||
{
|
||||
// If this is a composite state, retrieve what we can.
|
||||
if (!(aState & (aState - 1)))
|
||||
{
|
||||
var state = 1;
|
||||
|
||||
while (value === undefined && state < _highestState)
|
||||
{
|
||||
if (state & aState)
|
||||
value = _values[state];
|
||||
|
||||
state << 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Still don't have a value? OK, let's use the normal value.
|
||||
if (value === undefined && aState > 0)
|
||||
value = _values[CPControlStateNormal];
|
||||
}
|
||||
|
||||
return value || _defaultValue;
|
||||
}
|
||||
|
||||
- (void)setValue:(id)aValue
|
||||
{
|
||||
_values = {};
|
||||
_values[CPControlStateNormal] = aValue;
|
||||
_highestState = CPControlStateNormal;
|
||||
}
|
||||
|
||||
- (void)setValue:(id)aValue forControlState:(CPControlState)aState
|
||||
{
|
||||
if (_highestState < aState)
|
||||
_highestState = aState;
|
||||
|
||||
_values[aState] = aValue;
|
||||
}
|
||||
|
||||
- (void)removeValueForControlState:(CPControlState)aState
|
||||
{
|
||||
delete _values[aState];
|
||||
|
||||
// if (_highestState === aState)
|
||||
// _highestState = nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
var CPControlStateValueStates = @"CPControlStateValueStates",
|
||||
CPControlStateValueValues = @"CPControlStateValueValues";
|
||||
|
||||
@implementation CPControlStateValue (CPCoding)
|
||||
|
||||
- (id)initWithCoder:(CPCoder)aCoder
|
||||
{
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_values = {};
|
||||
_highestState = 0;
|
||||
|
||||
var states = [aCoder decodeObjectForKey:CPControlStateValueStates];
|
||||
|
||||
if (states)
|
||||
{
|
||||
var values = [aCoder decodeObjectForKey:CPControlStateValueValues],
|
||||
count = states.length;
|
||||
|
||||
while (count--)
|
||||
{
|
||||
var state = states[count];
|
||||
|
||||
if (state > _highestState)
|
||||
_highestState = state;
|
||||
|
||||
_values[state] = values[count];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)encodeWithCoder:(CPCoder)aCoder
|
||||
{
|
||||
var states = [],
|
||||
values = [];
|
||||
|
||||
for (state in _values)
|
||||
{
|
||||
if (!_values.hasOwnProperty(state))
|
||||
continue;
|
||||
|
||||
states.push(state);
|
||||
values.push(_values[state]);
|
||||
}
|
||||
|
||||
if (states.length)
|
||||
{
|
||||
[aCoder encodeObject:states forKey:CPControlStateValueStates];
|
||||
[aCoder encodeObject:values forKey:CPControlStateValueValues];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -61,8 +61,6 @@ var CPPopUpButtonArrowsImage = nil;
|
||||
_selectedIndex = CPNotFound;
|
||||
_preferredEdge = CPMaxYEdge;
|
||||
|
||||
[self setBezelStyle:CPTexturedRoundedBezelStyle];
|
||||
|
||||
[self setImagePosition:CPImageLeft];
|
||||
[self setAlignment:CPLeftTextAlignment];
|
||||
[self setLineBreakMode:CPLineBreakByTruncatingTail];
|
||||
|
||||
+72
-102
@@ -1,8 +1,9 @@
|
||||
|
||||
@import <AppKit/CPControl.j>
|
||||
@import "CPControl.j"
|
||||
@import "CPThemedValue.j"
|
||||
|
||||
#include "CoreGraphics/CGGeometry.h"
|
||||
#include "CPControl.h"
|
||||
#include "CPThemedValue.h"
|
||||
|
||||
|
||||
@implementation CPSlider : CPControl
|
||||
@@ -11,13 +12,13 @@
|
||||
double _maxValue;
|
||||
double _altIncrementValue;
|
||||
|
||||
CPColor _verticalTrackColor; // vertical-track-color
|
||||
CPColor _horizontalTrackColor; // horizontal-track-color
|
||||
CPThemedValue _verticalTrackColor; // vertical-track-color
|
||||
CPThemedValue _horizontalTrackColor; // horizontal-track-color
|
||||
|
||||
CPControlStateValue _knobColor;
|
||||
CPThemedValue _knobColor;
|
||||
|
||||
float _trackWidth; // track-width
|
||||
CGSize _knobSize; // knob-size
|
||||
CPThemedValue _trackWidth; // track-width
|
||||
CPThemedValue _knobSize; // knob-size
|
||||
|
||||
CPView _trackView;
|
||||
CPView _knobView;
|
||||
@@ -32,8 +33,16 @@
|
||||
_minValue = 0.0;
|
||||
_maxValue = 100.0;
|
||||
|
||||
_knobColor = [[CPControlStateValue alloc] initWithDefaultValue:nil];
|
||||
|
||||
var theme = [self theme],
|
||||
theClass = [self class];
|
||||
|
||||
_knobColor = CPThemedValueMake(nil, "knob-color", theme, theClass);
|
||||
_knobSize = CPThemedValueMake(_CGSizeMakeZero(), "knob-size", theme, theClass);
|
||||
|
||||
_trackWidth = CPThemedValueMake(0.0, "track-width", theme, theClass);
|
||||
_verticalTrackColor = CPThemedValueMake(nil, "vertical-track-color", theme, theClass);
|
||||
_horizontalTrackColor = CPThemedValueMake(nil, "horizonal-track-color", theme, theClass);
|
||||
|
||||
[self setObjectValue:50.0];
|
||||
|
||||
[self setContinuous:YES];
|
||||
@@ -86,94 +95,41 @@
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (void)setHorizontalTrackColor:(CPColor)aColor
|
||||
{
|
||||
if (_horizontalTrackColor === aColor)
|
||||
return;
|
||||
|
||||
_horizontalTrackColor = aColor;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (CPColor)horizontalTrackColor
|
||||
{
|
||||
return _horizontalTrackColor;
|
||||
}
|
||||
|
||||
- (void)setVerticalTrackColor:(CPColor)aColor
|
||||
{
|
||||
if (_verticalTrackColor === aColor)
|
||||
return;
|
||||
|
||||
_verticalTrackColor = aColor;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (CPColor)verticalTrackColor
|
||||
{
|
||||
return _verticalTrackColor;
|
||||
}
|
||||
|
||||
- (void)setTrackWidth:(float)aTrackWidth
|
||||
{
|
||||
if (_trackWidth === aTrackWidth)
|
||||
return;
|
||||
|
||||
_trackWidth = aTrackWidth;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
- (float)trackWidth
|
||||
{
|
||||
return _trackWidth;
|
||||
}
|
||||
|
||||
- (CGRect)trackRectForBounds:(CGRect)bounds
|
||||
{
|
||||
var trackWidth = [self trackWidth];
|
||||
var trackWidth = [self currentTrackWidth];
|
||||
|
||||
if (!trackWidth)
|
||||
if (trackWidth <= 0)
|
||||
return _CGRectMakeZero();
|
||||
|
||||
if ([self isVertical])
|
||||
{
|
||||
bounds.origin.x = (_CGRectGetWidth(bounds) - trackWidth) / 2.0;
|
||||
bounds.size.width = _trackWidth;
|
||||
bounds.size.width = trackWidth;
|
||||
}
|
||||
else
|
||||
{
|
||||
bounds.origin.y = (_CGRectGetHeight(bounds) - trackWidth) / 2.0;
|
||||
bounds.size.height = _trackWidth;
|
||||
bounds.size.height = trackWidth;
|
||||
}
|
||||
|
||||
return bounds;
|
||||
}
|
||||
|
||||
- (void)setKnobSize:(CGSize)aKnobSize
|
||||
{
|
||||
if (_knobSize && (!aKnobSize || _CGSizeEqualToSize(_knobSize, aKnobSize)))
|
||||
return;
|
||||
|
||||
_knobSize = aKnobSize ? _CGSizeMakeCopy(aKnobSize) : nil;
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
CONTROL_STATE_VALUE(KnobColor, knobColor)
|
||||
THEMED_STATED_VALUE(KnobColor, knobColor)
|
||||
THEMED_STATED_VALUE(KnobSize, knobSize)
|
||||
THEMED_STATED_VALUE(TrackWidth, trackWidth)
|
||||
THEMED_STATED_VALUE(HorizontalTrackColor, horizontalTrackColor)
|
||||
THEMED_STATED_VALUE(VerticalTrackColor, verticalTrackColor)
|
||||
|
||||
- (CGRect)knobRectForBounds:(CGRect)bounds
|
||||
{
|
||||
if (!_knobSize || _knobSize.width <= 0 || _knobSize.height <= 0)
|
||||
var knobSize = [self currentKnobSize];
|
||||
|
||||
if (knobSize.width <= 0 || knobSize.height <= 0)
|
||||
return _CGRectMakeZero();
|
||||
|
||||
var knobRect = _CGRectMake(0.0, 0.0, _knobSize.width, _knobSize.height),
|
||||
var knobRect = _CGRectMake(0.0, 0.0, knobSize.width, knobSize.height),
|
||||
trackRect = [self trackRectForBounds:bounds];
|
||||
|
||||
// No track, do our best to approximate a place for this thing.
|
||||
@@ -182,13 +138,13 @@ CONTROL_STATE_VALUE(KnobColor, knobColor)
|
||||
|
||||
if ([self isVertical])
|
||||
{
|
||||
knobRect.origin.x = _CGRectGetMidX(trackRect) - _knobSize.width / 2.0;
|
||||
knobRect.origin.y = (([self doubleValue] - _minValue) / (_maxValue - _minValue)) * (_CGRectGetHeight(trackRect) - _knobSize.height);
|
||||
knobRect.origin.x = _CGRectGetMidX(trackRect) - knobSize.width / 2.0;
|
||||
knobRect.origin.y = (([self doubleValue] - _minValue) / (_maxValue - _minValue)) * (_CGRectGetHeight(trackRect) - knobSize.height);
|
||||
}
|
||||
else
|
||||
{
|
||||
knobRect.origin.x = (([self doubleValue] - _minValue) / (_maxValue - _minValue)) * (_CGRectGetWidth(trackRect) - _knobSize.width);
|
||||
knobRect.origin.y = _CGRectGetMidY(trackRect) - _knobSize.height / 2.0;
|
||||
knobRect.origin.x = (([self doubleValue] - _minValue) / (_maxValue - _minValue)) * (_CGRectGetWidth(trackRect) - knobSize.width);
|
||||
knobRect.origin.y = _CGRectGetMidY(trackRect) - knobSize.height / 2.0;
|
||||
}
|
||||
|
||||
return knobRect;
|
||||
@@ -231,7 +187,7 @@ CONTROL_STATE_VALUE(KnobColor, knobColor)
|
||||
{
|
||||
if (!_trackView)
|
||||
{
|
||||
_trackView = [self createTrackView]
|
||||
_trackView = [self createTrackView];
|
||||
|
||||
if (_trackView)
|
||||
[self addSubview:_trackView positioned:CPWindowBelow relativeTo:_knobView];
|
||||
@@ -244,12 +200,12 @@ CONTROL_STATE_VALUE(KnobColor, knobColor)
|
||||
if ([self isVertical])
|
||||
{
|
||||
if (_verticalTrackColor)
|
||||
[_trackView setBackgroundColor:_verticalTrackColor];
|
||||
[_trackView setBackgroundColor:[self currentVerticalTrackColor]];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_horizontalTrackColor)
|
||||
[_trackView setBackgroundColor:_horizontalTrackColor];
|
||||
[_trackView setBackgroundColor:[self currentHorizontalTrackColor]];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -276,7 +232,7 @@ CONTROL_STATE_VALUE(KnobColor, knobColor)
|
||||
{
|
||||
[_knobView setFrame:knobRect];
|
||||
|
||||
var knobColor = [self knobColor];
|
||||
var knobColor = [self currentKnobColor];
|
||||
|
||||
if (knobColor)
|
||||
[_knobView setBackgroundColor:knobColor];
|
||||
@@ -398,13 +354,12 @@ CONTROL_STATE_VALUE(KnobColor, knobColor)
|
||||
if (!theme)
|
||||
return;
|
||||
|
||||
//_knobColor = [theme valueForKey:@"knob-color"];
|
||||
[_knobColor setTheme:theme];
|
||||
[_knobSize setTheme:theme];
|
||||
|
||||
[self setKnobSize:[theme valueForKey:@"knob-size"]];
|
||||
|
||||
[self setTrackWidth:[theme valueForKey:@"track-width"]];
|
||||
[self setHorizontalTrackColor:[theme valueForKey:@"horizontal-track-color"]];
|
||||
[self setVerticalTrackColor:[theme valueForKey:@"vertical-track-color"]];
|
||||
[_trackWidth setTheme:theme];
|
||||
[_horizontalTrackColor setTheme:theme];
|
||||
[_verticalTrackColor setTheme:theme];
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
@@ -425,9 +380,15 @@ CONTROL_STATE_VALUE(KnobColor, knobColor)
|
||||
|
||||
@end
|
||||
|
||||
var CPSliderMinValueKey = "CPSliderMinValueKey",
|
||||
CPSliderMaxValueKey = "CPSliderMaxValueKey",
|
||||
CPSliderAltIncrValueKey = "CPSliderAltIncrValueKey";
|
||||
var CPSliderMinValueKey = "CPSliderMinValueKey",
|
||||
CPSliderMaxValueKey = "CPSliderMaxValueKey",
|
||||
CPSliderAltIncrValueKey = "CPSliderAltIncrValueKey",
|
||||
|
||||
CPSliderKnobColorKey = "CPSliderKnobColorKey",
|
||||
CPSliderKnobSizeKey = "CPSliderKnobSizeKey";
|
||||
CPSliderTrackWidthKey = "CPSliderTrackWidthKey";
|
||||
CPSliderHorizontalTrackColorKey = "CPSliderHorizontalTrackColorKey";
|
||||
CPSliderVerticalTrackColorKey = "CPSliderVerticalTrackColorKey";
|
||||
|
||||
@implementation CPSlider (CPCoding)
|
||||
|
||||
@@ -441,9 +402,17 @@ var CPSliderMinValueKey = "CPSliderMinValueKey",
|
||||
_maxValue = [aCoder decodeDoubleForKey:CPSliderMaxValueKey];
|
||||
_altIncrementValue = [aCoder decodeDoubleForKey:CPSliderAltIncrValueKey];
|
||||
|
||||
[self setContinuous:YES];
|
||||
var theme = [self theme],
|
||||
theClass = [self class];
|
||||
|
||||
_knobColor = CPThemedValueDecode(aCoder, CPSliderKnobColorKey, nil, "knob-color", theme, theClass);
|
||||
_knobSize = CPThemedValueDecode(aCoder, CPSliderKnobSizeKey, nil, "knob-size", theme, theClass);
|
||||
|
||||
_trackWidth = CPThemedValueDecode(aCoder, CPSliderKnobColorKey, nil, "track-width", theme, theClass);
|
||||
_horizontalTrackColor = CPThemedValueDecode(aCoder, CPSliderHorizontalTrackColorKey, nil, "horizontal-track-color", theme, theClass);
|
||||
_verticalTrackColor = CPThemedValueDecode(aCoder, CPSliderVerticalTrackColorKey, nil, "vertical-track-color", theme, theClass);
|
||||
|
||||
[self setTheme:[CPTheme defaultTheme]];
|
||||
[self setContinuous:YES];
|
||||
|
||||
[self setNeedsLayout];
|
||||
[self setNeedsDisplay:YES];
|
||||
@@ -455,7 +424,7 @@ var CPSliderMinValueKey = "CPSliderMinValueKey",
|
||||
- (void)encodeWithCoder:(CPCoder)aCoder
|
||||
{
|
||||
[super encodeWithCoder:aCoder];
|
||||
|
||||
/*
|
||||
var count = [_subviews count],
|
||||
subviews = nil;
|
||||
|
||||
@@ -472,21 +441,22 @@ var CPSliderMinValueKey = "CPSliderMinValueKey",
|
||||
if (_knobView)
|
||||
[_subviews removeObjectIdenticalTo:_knobView];
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
[super encodeWithCoder:aCoder];
|
||||
|
||||
_subviews = subviews;
|
||||
// _subviews = subviews;
|
||||
|
||||
[aCoder encodeDouble:_minValue forKey:CPSliderMinValueKey];
|
||||
[aCoder encodeDouble:_maxValue forKey:CPSliderMaxValueKey];
|
||||
[aCoder encodeDouble:_altIncrementValue forKey:CPSliderAltIncrValueKey];
|
||||
|
||||
// NO!
|
||||
/* [aCoder encodeObject:_verticalTrackColor forKey:"1"];
|
||||
[aCoder encodeObject:_horizontalTrackColor forKey:"2"];
|
||||
[aCoder encodeObject:_knobColor forKey:"3"];
|
||||
[aCoder encodeObject:_highlightedKnobColor forKey:"4"];*/
|
||||
CPThemedValueEncode(aCoder, CPSliderKnobColorKey, _knobColor);
|
||||
CPThemedValueEncode(aCoder, CPSliderKnobSizeKey, _knobSize);
|
||||
|
||||
CPThemedValueEncode(aCoder, CPSliderTrackWidthKey, _trackWidth);
|
||||
CPThemedValueEncode(aCoder, CPSliderHorizontalTrackColorKey, _horizontalTrackColor);
|
||||
CPThemedValueEncode(aCoder, CPSliderVerticalTrackColorKey, _verticalTrackColor);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
+10
-1
@@ -3,6 +3,8 @@
|
||||
@import <AppKit/_CPCibCustomResource.j>
|
||||
@import <AppKit/_CPCibKeyedUnarchiver.j>
|
||||
|
||||
@import "CPThemedValue.j"
|
||||
|
||||
|
||||
var CPThemesByName = nil,
|
||||
CPThemeDefaultTheme = nil,
|
||||
@@ -122,7 +124,7 @@ var CPThemesByName = nil,
|
||||
- (id)valueForKey:(CPString)aKey inClass:(CPClass)aClass
|
||||
{
|
||||
if (!aClass)
|
||||
throw "no!";
|
||||
return nil;
|
||||
|
||||
var className = [aClass className],
|
||||
table = _classTable[className];
|
||||
@@ -138,6 +140,11 @@ var CPThemesByName = nil,
|
||||
return value;
|
||||
}
|
||||
|
||||
- (id)valueForIdentifier:(CPString)anIdentifier inClass:(Class)aClass
|
||||
{
|
||||
return [self valueForKey:anIdentifier inClass:aClass];
|
||||
}
|
||||
|
||||
- (void)takeThemeFromObject:(id)anObject
|
||||
{
|
||||
var values = [anObject themedValues],
|
||||
@@ -192,6 +199,8 @@ var CPThemesByName = nil,
|
||||
}
|
||||
|
||||
if (table[aKey] !== aValue)
|
||||
// {
|
||||
// if (table.hasOwnProperty(aKey)
|
||||
table[aKey] = aValue;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,20 @@
|
||||
#define CONTROL_STATE_VALUE(VALUE, LOWERCASEVALUE) \
|
||||
|
||||
#define THEMED_VALUE(VALUE, LOWERCASEVALUE) \
|
||||
- (void)set##VALUE:(id)aValue\
|
||||
{\
|
||||
var currentValue = [_##LOWERCASEVALUE valueForControlState:_controlState];\
|
||||
[_##LOWERCASEVALUE setValue:aValue];\
|
||||
if ([_##LOWERCASEVALUE valueForControlState:_controlState] === currentValue)\
|
||||
return;\
|
||||
[self setNeedsDisplay:YES];\
|
||||
[self setNeedsLayout];\
|
||||
}\
|
||||
- (id)LOWERCASEVALUE\
|
||||
{\
|
||||
return [_##LOWERCASEVALUE value];\
|
||||
}\
|
||||
|
||||
#define THEMED_STATED_VALUE(VALUE, LOWERCASEVALUE) \
|
||||
- (void)set##VALUE:(id)aValue forControlState:(CPControlState)aControlState\
|
||||
{\
|
||||
var currentValue = [_##LOWERCASEVALUE valueForControlState:_controlState];\
|
||||
@@ -22,6 +38,10 @@
|
||||
[self setNeedsLayout];\
|
||||
}\
|
||||
- (id)LOWERCASEVALUE\
|
||||
{\
|
||||
return [_##LOWERCASEVALUE value];\
|
||||
}\
|
||||
- (id)current##VALUE\
|
||||
{\
|
||||
return [_##LOWERCASEVALUE valueForControlState:_controlState];\
|
||||
}
|
||||
@@ -0,0 +1,273 @@
|
||||
|
||||
@import <Foundation/CPObject.j>
|
||||
|
||||
|
||||
CPControlStateNormal = 0,
|
||||
CPControlStateHighlighted = 1 << 0,
|
||||
CPControlStateDisabled = 1 << 1,
|
||||
CPControlStateSelected = 1 << 2,
|
||||
CPControlStateDefault = 1 << 3;
|
||||
|
||||
var BIT_COUNT = [ 0 /*0000*/, 1 /*0001*/, 1 /*0010*/, 2 /*0011*/, 1 /*0100*/, 2 /*0101*/, 2 /*0110*/, 3 /*0111*/,
|
||||
1 /*1000*/, 2 /*1001*/, 2 /*1010*/, 3 /*1011*/, 2 /*1100*/, 3 /*1101*/, 3 /*1110*/, 4 /*1111*/],
|
||||
bit_count = function(bits)
|
||||
{
|
||||
var count = 0;
|
||||
|
||||
while (bits)
|
||||
{
|
||||
++count;
|
||||
bits &= (bits - 1);
|
||||
}
|
||||
|
||||
return count ;
|
||||
}
|
||||
|
||||
@implementation CPThemedValue : CPObject
|
||||
{
|
||||
BOOL _isSingularObject;
|
||||
|
||||
CPTheme _theme;
|
||||
CPString _identifier;
|
||||
Class _themedClass;
|
||||
|
||||
id _defaultValue;
|
||||
|
||||
id _values;
|
||||
id _valueFromTheme;
|
||||
}
|
||||
|
||||
- (id)initWithDefaultValue:(id)aDefaultValue identifier:(CPString)anIdentifier theme:(CPTheme)aTheme class:(Class)aClass
|
||||
{
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_theme = aTheme;
|
||||
_themedClass = aClass;
|
||||
_identifier = anIdentifier;
|
||||
_defaultValue = aDefaultValue;
|
||||
|
||||
_isSingularObject = YES;
|
||||
_values = nil;
|
||||
_valueFromTheme = [_theme valueForIdentifier:_identifier inClass:_themedClass];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setDefaultValue:(id)aValue
|
||||
{
|
||||
_defaultValue = aValue;
|
||||
}
|
||||
|
||||
- (void)setIdentifier:(CPString)anIdentifier
|
||||
{
|
||||
if (_identifier === anIdentifier)
|
||||
return;
|
||||
|
||||
_identifier = anIdentifier;
|
||||
_valueFromTheme = [_theme valueForIdentifier:_identifier inClass:_themedClass];
|
||||
}
|
||||
|
||||
- (CPString)identifier
|
||||
{
|
||||
return _identifier;
|
||||
}
|
||||
|
||||
- (void)setTheme:(CPTheme)aTheme
|
||||
{
|
||||
if (_theme === aTheme)
|
||||
return;
|
||||
|
||||
_theme = aTheme;
|
||||
_valueFromTheme = [_theme valueForIdentifier:_identifier inClass:_themedClass];
|
||||
}
|
||||
|
||||
- (void)setThemedClass:(Class)aClass
|
||||
{
|
||||
if (_themedClass === aClass)
|
||||
return;
|
||||
|
||||
_themedClass = aClass;
|
||||
_valueFromTheme = [_theme valueForIdentifier:_identifier inClass:_themedClass];
|
||||
}
|
||||
|
||||
- (void)setValue:(id)aValue
|
||||
{
|
||||
_isSingularObject = YES;
|
||||
_values = aValue;
|
||||
}
|
||||
|
||||
- (id)value
|
||||
{
|
||||
return [self valueForControlState:CPControlStateNormal];
|
||||
}
|
||||
|
||||
- (void)setValue:(id)aValue forControlState:(CPControlState)aState
|
||||
{
|
||||
if (aState !== CPControlStateNormal)
|
||||
{
|
||||
if (_isSingularObject)
|
||||
{
|
||||
var normalValue = _values;
|
||||
|
||||
_isSingularObject = NO;
|
||||
|
||||
_values = {};
|
||||
|
||||
if (normalValue)
|
||||
_values[CPControlStateNormal] = normalValue;
|
||||
}
|
||||
|
||||
_values[aState] = aValue;
|
||||
}
|
||||
|
||||
else if (isSingularObject)
|
||||
_values = aValue;
|
||||
|
||||
else
|
||||
_values[CPControlStateNormal] = aValue;
|
||||
}
|
||||
|
||||
- (id)valueForControlState:(CPControlState)aState
|
||||
{
|
||||
if (_isSingularObject)
|
||||
return _values || [_valueFromTheme valueForControlState:aState] || _defaultValue;
|
||||
|
||||
var value = _values[aState];
|
||||
|
||||
// If we don't have a value, and we have a non-normal state...
|
||||
if (value === undefined && aState > 0)
|
||||
{
|
||||
// If this is a composite state, find the closest partial subset match.
|
||||
if (!(aState & (aState - 1)))
|
||||
{
|
||||
var highestBitCount = 0;
|
||||
|
||||
for (state in _values)
|
||||
{
|
||||
if (!_values.hasOwnProperty(state))
|
||||
continue;
|
||||
|
||||
// A & B = A iff A < B
|
||||
if ((state & aState) === 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 = _values[CPControlStateNormal];
|
||||
}
|
||||
|
||||
return value || [_valueFromTheme valueForControlState:aState] || _defaultValue;
|
||||
}
|
||||
|
||||
- (id)initWithCoder:(CPCoder)aCoder
|
||||
{
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
_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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (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"];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
function CPThemedValueMake(aDefaultValue, anIdentifier, aTheme, aClass)
|
||||
{
|
||||
return [[CPThemedValue alloc] initWithDefaultValue:aDefaultValue identifier:anIdentifier theme:aTheme class:aClass];
|
||||
}
|
||||
|
||||
function CPThemedValueEncode(aCoder, aKey, aThemedValue)
|
||||
{
|
||||
if (aThemedValue._isSingularObject)
|
||||
{
|
||||
var actualValue = aThemedValue._values;
|
||||
|
||||
if (aThemedValue._values)
|
||||
[aCoder encodeObject:actualValue forKey:aKey];
|
||||
}
|
||||
else
|
||||
[aCoder encodeObject:aThemedValue forKey:aKey];
|
||||
}
|
||||
|
||||
function CPThemedValueDecode(aCoder, aKey, aDefaultValue, anIdentifier, aTheme, aClass)
|
||||
{
|
||||
if (![aCoder containsValueForKey:aKey])
|
||||
return CPThemedValueMake(aDefaultValue, anIdentifier, aTheme, aClass);
|
||||
|
||||
var value = [aCoder decodeObjectForKey:aKey];
|
||||
|
||||
if (![value isKindOfClass:[CPThemedValue class]])
|
||||
{
|
||||
var themedValue = CPThemedValueMake(aDefaultValue, anIdentifier, aTheme, aClass);
|
||||
|
||||
[themedValue setValue:value];
|
||||
|
||||
value = themedValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
[value setDefaultValue:aDefaultValue];
|
||||
[value setTheme:aTheme];
|
||||
[value setIdentifier:anIdentifier];
|
||||
[value setThemedClass:aClass];
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
+4
-2
@@ -243,8 +243,8 @@ var DOMElementPrototype = nil,
|
||||
_DOMImageParts = [];
|
||||
_DOMImageSizes = [];
|
||||
#endif
|
||||
|
||||
[self setTheme:[CPTheme defaultTheme]];
|
||||
|
||||
_theme = [CPTheme defaultTheme];
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -1883,6 +1883,8 @@ var CPViewAutoresizingMaskKey = @"CPViewAutoresizingMask",
|
||||
|
||||
[self setBackgroundColor:[aCoder decodeObjectForKey:CPViewBackgroundColorKey]];
|
||||
|
||||
_theme = [CPTheme defaultTheme];
|
||||
|
||||
[self setNeedsDisplay:YES];
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ _function(CGRectIsNull(aRect))
|
||||
_function(CGRectContainsPoint(aRect, aPoint))
|
||||
|
||||
_function(CGInsetMake(top, left, bottom, right))
|
||||
_function(CGInsetMakeZero())
|
||||
_function(CGInsetMakeCopy(anInset))
|
||||
_function(CGInsetIsEmpty(anInset))
|
||||
|
||||
|
||||
@@ -49,6 +49,17 @@ _CPButtonBezelStyleHeights[CPHUDBezelStyle] = 20;
|
||||
_isBordered = [cell isBordered];
|
||||
_bezelStyle = [cell bezelStyle];
|
||||
|
||||
var theme = nil,
|
||||
theClass = [self class];
|
||||
|
||||
_bezelInset = CPThemedValueMake(CGInsetMakeZero(), "bezel-inset", theme, theClass);
|
||||
_contentInset = CPThemedValueMake(CGInsetMakeZero(), "content-inset", theme, theClass);
|
||||
|
||||
_bezelColor = CPThemedValueMake(nil, "bezel-color", theme, theClass);
|
||||
|
||||
_image = CPThemedValueMake(nil, @"image", theme, theClass);
|
||||
_title = CPThemedValueMake(nil, @"title", theme, theClass);
|
||||
|
||||
// clean up:
|
||||
|
||||
switch (_bezelStyle)
|
||||
|
||||
@@ -36,6 +36,24 @@
|
||||
{
|
||||
[self sendActionOn:CPLeftMouseUpMask];
|
||||
|
||||
// Shoudl we stub this out?
|
||||
|
||||
var theme = nil,
|
||||
theClass = [self class];
|
||||
|
||||
_alignment = CPThemedValueMake(CPLeftTextAlignment, "alignment", theme, theClass);
|
||||
_verticalAlignment = CPThemedValueMake(CPTopVerticalTextAlignment, "vertical-alignment", theme, theClass);
|
||||
|
||||
_lineBreakMode = CPThemedValueMake(CPLineBreakByClipping, "line-break-mode", theme, theClass);
|
||||
_textColor = CPThemedValueMake([CPColor blackColor], "text-color", theme, theClass);
|
||||
_font = CPThemedValueMake([CPFont systemFontOfSize:12.0], "font", theme, theClass);
|
||||
|
||||
_textShadowColor = CPThemedValueMake(nil, @"text-shadow-color", theme, theClass);
|
||||
_textShadowOffset = CPThemedValueMake(CGSizeMake(0.0, 0.0), "text-shadow-offset", theme, theClass);
|
||||
|
||||
_imagePosition = CPThemedValueMake(CPImageLeft, @"image-position", theme, theClass);
|
||||
_imageScaling = CPThemedValueMake(CPScaleToFit, "image-scaling", theme, theClass);
|
||||
|
||||
var cell = [aCoder decodeObjectForKey:@"NSCell"];
|
||||
|
||||
[self setObjectValue:[cell objectValue]];
|
||||
|
||||
@@ -38,7 +38,16 @@
|
||||
_minValue = [cell minValue];
|
||||
_maxValue = [cell maxValue];
|
||||
_altIncrementValue = [cell altIncrementValue];
|
||||
_isVertical = [cell isVertical];
|
||||
|
||||
var theme = nil,
|
||||
theClass = [self class];
|
||||
|
||||
_knobColor = CPThemedValueMake(nil, "knob-color", theme, theClass);
|
||||
_knobSize = CPThemedValueMake(CGSizeMakeZero(), "knob-size", theme, theClass);
|
||||
|
||||
_trackWidth = CPThemedValueMake(0.0, "track-width", theme, theClass);
|
||||
_horizontalTrackColor = CPThemedValueMake(nil, "horizontal-track-color", theme, theClass);
|
||||
_verticalTrackColor = CPThemedValueMake(nil, "vertical-track-color", theme, theClass);
|
||||
}
|
||||
|
||||
return self;
|
||||
|
||||
+13
-23
@@ -26,19 +26,7 @@ function Target(dictionary)
|
||||
count = exclusions.length;
|
||||
|
||||
for (; index < count; ++index)
|
||||
{
|
||||
var file = new File(exclusions[index]).getCanonicalFile();
|
||||
|
||||
if (file.isDirectory())
|
||||
{
|
||||
var files = getFiles(file);
|
||||
|
||||
if (files.length)
|
||||
this._exclusions = this._exclusions.concat(files);
|
||||
}
|
||||
else
|
||||
this._exclusions.push(file);
|
||||
}
|
||||
this._exclusions.push(new File((exclusions[index])).getCanonicalFile());
|
||||
}
|
||||
|
||||
return this;
|
||||
@@ -102,17 +90,17 @@ function Project(/*String*/ aFilePath, /*String*/ aBuildPath)
|
||||
this._infoDictionary = readPlist(new File(this._root.getAbsolutePath() + "/Info.plist"));
|
||||
else
|
||||
this._infoDictionary = new objj_dictionary();
|
||||
|
||||
|
||||
this.buildPath = aBuildPath;
|
||||
|
||||
|
||||
// Covert target dictionaries to target objects.
|
||||
var targetDictionaries = dictionary_getValue(this._properties, "Targets");
|
||||
|
||||
|
||||
this._targets = [];
|
||||
|
||||
for (index = 0, count = targetDictionaries.length; index < count; ++index)
|
||||
|
||||
for (var index = 0, count = targetDictionaries.length; index < count; ++index)
|
||||
this._targets.push(new Target(targetDictionaries[index]));
|
||||
|
||||
|
||||
this.setActiveTarget(this._targets[0]);
|
||||
|
||||
// Covert target dictionaries to target objects.
|
||||
@@ -124,7 +112,7 @@ function Project(/*String*/ aFilePath, /*String*/ aBuildPath)
|
||||
this._configurations.push(new Configuration(configurationDictionaries[index]));
|
||||
|
||||
this.setActiveConfiguration(this._configurations[0]);
|
||||
|
||||
|
||||
// Grab the Resources Directory (if it exists)
|
||||
this._resources = new File(this._root.getAbsolutePath() + "/Resources/").getCanonicalFile();
|
||||
|
||||
@@ -271,13 +259,15 @@ Project.prototype.buildTheme = function()
|
||||
OBJJ_INCLUDE_PATHS.push(defaultFrameworks);
|
||||
}
|
||||
|
||||
OBJJ_INCLUDE_PATHS = [System.getenv("STEAM_BUILD") + "/Release-Rhino/", System.getenv("STEAM_BUILD") + "/Release/"];
|
||||
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") + "/Release/Foundation", System.getenv("STEAM_BUILD") + "/Release-Rhino/AppKit"], function()
|
||||
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("Frameworks/"));
|
||||
var jFiles = getFiles(project._root, "j", project.activeTarget().exclusions().concat([new File("Frameworks/")]));
|
||||
|
||||
// Load 'em
|
||||
importFiles(jFiles, function()
|
||||
|
||||
@@ -12,7 +12,7 @@ function build()
|
||||
projectFilePath = null,
|
||||
|
||||
gzip = false;
|
||||
|
||||
|
||||
for (; index < count; ++index)
|
||||
{
|
||||
switch (arguments[index])
|
||||
@@ -49,7 +49,7 @@ function build()
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// If no project file was specified, look for one.
|
||||
if (!projectFilePath)
|
||||
{
|
||||
@@ -60,7 +60,7 @@ function build()
|
||||
|
||||
projectFilePath = candidates[0];
|
||||
}
|
||||
|
||||
|
||||
// Construct the Build Directory
|
||||
if (!buildPath)
|
||||
{
|
||||
@@ -69,9 +69,9 @@ function build()
|
||||
if (!buildPath)
|
||||
buildPath = "Build";
|
||||
}
|
||||
|
||||
|
||||
var project = new Project(projectFilePath, buildPath);
|
||||
|
||||
|
||||
project._gzip = gzip;
|
||||
|
||||
if (targetName)
|
||||
@@ -93,7 +93,7 @@ function build()
|
||||
|
||||
project.setActiveConfiguration(configuration);
|
||||
}
|
||||
|
||||
|
||||
if (!actions.length)
|
||||
actions.push("build");
|
||||
|
||||
|
||||
Reference in new issue
Block a user