Added more customizability.

Reviewed by me.
This commit is contained in:
Francisco Ryan Tolmasky I committed 2009-02-03 22:47:02 -08:00
1 parent 8ea3963f62
commit e4b2988864
9 files changed
+468 -315

No files matched your search

+164 -92
View File
@@ -25,6 +25,7 @@
@import "CPControl.j"
#include "CPControl.h"
#include "CoreGraphics/CGGeometry.h"
@@ -231,24 +232,33 @@ var _CPButtonClassName = nil,
int _tag;
int _state;
BOOL _allowsMixedState;
BOOL _isHighlighted;
CPImage _image;
CPImage _alternateImage;
CPCellImagePosition _imagePosition;
CPImageScaling _imageScaling;
CPString _title;
CPString _alternateTitle;
CPControlStateValue _image;
CPControlStateValue _title;
// Display Properties
CPControlStateValue _bezelInset;
CPControlStateValue _contentInset;
CPControlStateValue _bezelColor;
//
CPView _bezelView;
_CPImageAndTextView _contentView;
// NS-style Display Properties
CPBezelStyle _bezelStyle;
BOOL _isBordered;
CPControlSize _controlSize;
// bleh
BOOL _bezelBorderNeedsUpdate;
_CPImageAndTextView _imageAndTextView;
}
/*!
@@ -326,6 +336,14 @@ var _CPButtonClassName = nil,
if (self)
{
_bezelInset = [[CPControlStateValue alloc] initWithDefaultValue:_CGInsetMakeZero()];
_contentInset = [[CPControlStateValue alloc] initWithDefaultValue:_CGInsetMakeZero()];
_bezelColor = [[CPControlStateValue alloc] initWithDefaultValue:nil];
// _image = [[CPControlStateValue alloc] initWithDefaultValue:nil];
// _title = [[CPControlStateValue alloc] initWithDefaultValue:nil];
[self setAlignment:CPCenterTextAlignment];
[self setVerticalAlignment:CPCenterVerticalTextAlignment];
[self setImagePosition:CPImageLeft];
@@ -340,50 +358,6 @@ var _CPButtonClassName = nil,
return self;
}
/*!
Sets the position of the button's image to <code>anImagePosition</code>.
@param anImagePosition the position for the button's image
*/
- (void)setImagePosition:(CPCellImagePosition)anImagePosition
{
[super setImagePosition:anImagePosition];
[_imageAndTextView setImagePosition:[self imagePosition]];
}
/*!
Sets the button's images scaling method
@param anImageScaling the image scaling method
*/
- (void)setImageScaling:(CPImageScaling)anImageScaling
{
[super setImageScaling:anImageScaling];
[_imageAndTextView setImageScaling:[self imageScaling]];
}
/*!
Sets the color of the button's text
@param aColor the color to use for drawing the button text
*/
- (void)setTextColor:(CPColor)aColor
{
[super setTextColor:aColor];
[_imageAndTextView setTextColor:[self textColor]];
}
/*!
Sets the font that will be used to draw the button text
@param aFont the font used to draw the button text
*/
- (void)setFont:(CPFont)aFont
{
[super setFont:aFont];
[_imageAndTextView setFont:[self font]];
}
// Setting the state
/*!
Returns <code>YES</code> if the button has a 'mixed' state in addition to on and off.
@@ -431,17 +405,6 @@ var _CPButtonClassName = nil,
return _state;
}
/*!
Sets the alignment of the text on the button.
@param anAlignment an alignment object
*/
- (void)setAlignment:(CPTextAlignment)anAlignment
{
[super setAlignment:anAlignment];
[_imageAndTextView setAlignment:[self alignment]];
}
/*!
Sets the image that will be drawn on the button.
@param anImage the image that will be drawn
@@ -507,7 +470,7 @@ var _CPButtonClassName = nil,
Lays out the button.
*/
- (void)tile
{
{return;
var size = [self bounds].size;
if (_isBordered)
@@ -559,34 +522,19 @@ var _CPButtonClassName = nil,
return bounds;
}
- (void)drawRect:(CGRect)aRect
{
if (!_imageAndTextView)
{
_imageAndTextView = [[_CPImageAndTextView alloc] initWithFrame:[self contentRectForBounds:[self bounds]] control:self];
[self addSubview:_imageAndTextView];
}
else
[_imageAndTextView setFrame:[self contentRectForBounds:[self bounds]]];
[_imageAndTextView setText:_isHighlighted && _alternateTitle ? _alternateTitle : _title];
[_imageAndTextView setImage:_isHighlighted && _alternateImage ? _alternateImage : _image];
}
/*!
Compacts the button's frame to fit its contents.
*/
- (void)sizeToFit
{ if (!_imageAndTextView)
{return; if (!_imageAndTextView)
{
_imageAndTextView = [[_CPImageAndTextView alloc] initWithFrame:[self contentRectForBounds:[self bounds]] control:self];
[self addSubview:_imageAndTextView];
}
[_imageAndTextView setText:_isHighlighted && _alternateTitle ? _alternateTitle : _title];
[_imageAndTextView setImage:_isHighlighted && _alternateImage ? _alternateImage : _image];
[_imageAndTextView setText:[self isHighlighted] && _alternateTitle ? _alternateTitle : _title];
[_imageAndTextView setImage:[self isHighlighted] && _alternateImage ? _alternateImage : _image];
[_imageAndTextView sizeToFit];
@@ -610,10 +558,9 @@ var _CPButtonClassName = nil,
*/
- (void)highlight:(BOOL)aFlag
{
_isHighlighted = aFlag;
[super highlight:aFlag];
[self drawBezelWithHighlight:aFlag];
[self setNeedsDisplay:YES];
}
/*!
@@ -658,7 +605,7 @@ var _CPButtonClassName = nil,
_controlSize = aControlSize;
[self drawBezelWithHighlight:_isHighlighted];
[self drawBezelWithHighlight:[self isHighlighted]];
[self _updateTextAttributes];
}
@@ -682,7 +629,7 @@ var _CPButtonClassName = nil,
_isBordered = isBordered;
[self updateBackgroundColors];
[self drawBezelWithHighlight:_isHighlighted];
[self drawBezelWithHighlight:[self isHighlighted]];
[self tile];
}
@@ -723,7 +670,7 @@ var _CPButtonClassName = nil,
_bezelStyle = aBezelStyle;
[self updateBackgroundColors];
[self drawBezelWithHighlight:_isHighlighted];
[self drawBezelWithHighlight:[self isHighlighted]];
[self _updateTextAttributes];
[self tile];
@@ -739,7 +686,7 @@ var _CPButtonClassName = nil,
/* @ignore */
- (void)updateBackgroundColors
{
{return;
if (_isBordered)
{
[self setBackgroundColor:_CPControlThreePartImagePattern(
@@ -766,7 +713,7 @@ var _CPButtonClassName = nil,
/* @ignore */
- (void)drawBezelWithHighlight:(BOOL)shouldHighlight
{
{ return;
_bezelBorderNeedsUpdate = ![self window];
if (_bezelBorderNeedsUpdate)
@@ -778,12 +725,12 @@ var _CPButtonClassName = nil,
- (void)viewDidMoveToWindow
{
if (_bezelBorderNeedsUpdate)
[self drawBezelWithHighlight:_isHighlighted];
[self drawBezelWithHighlight:[self isHighlighted]];
}
/* @ignore */
- (void)_updateTextAttributes
{
{return;
if (_bezelStyle == CPHUDBezelStyle)
[self setTextColor:CPHUDBezelStyleTextColor];
@@ -791,6 +738,131 @@ var _CPButtonClassName = nil,
[self setFont:[CPFont systemFontOfSize:11.0]];
}
// NEW
- (CPView)createBezelView
{
var view = [[CPView alloc] initWithFrame:_CGRectMakeZero()];
[view setHitTests:NO];
return view;
}
CONTROL_STATE_VALUE(BezelColor, bezelColor)
- (CPView)createContentView
{
var view = [[_CPImageAndTextView alloc] initWithFrame:_CGRectMakeZero()];
return view;
}
CONTROL_STATE_VALUE(ContentInset, contentInset)
CONTROL_STATE_VALUE(BezelInset, bezelInset)
- (CGRect)contentRectForBounds:(CGRect)bounds
{
var contentInset = [self contentInset];
if (!contentInset)
return bounds;
bounds.origin.x += contentInset.left;
bounds.origin.y += contentInset.top;
bounds.size.width -= contentInset.left + contentInset.right;
bounds.size.height -= contentInset.top + contentInset.bottom;
return bounds;
}
- (CGRect)bezelRectForBounds:(CFRect)bounds
{
var bezelInset = [self bezelInset];
if (!_CGInsetIsEmpty(bezelInset))
return bounds;
bounds.origin.x += bezelInset.left;
bounds.origin.y += bezelInset.top;
bounds.size.width -= bezelInset.left + bezelInset.right;
bounds.size.height -= bezelInset.top + bezelInset.bottom;
return bounds;
}
- (void)layoutSubviews
{
var bounds = [self bounds],
bezelRect = [self bezelRectForBounds:_CGRectMakeCopy(bounds)];
if (bezelRect && !_CGRectIsEmpty(bezelRect))
{
if (!_bezelView)
{
_bezelView = [self createBezelView];
if (_bezelView)
[self addSubview:_bezelView positioned:CPWindowBelow relativeTo:_contentView];
}
if (_bezelView)
[_bezelView setFrame:bezelRect];
}
else if (_bezelView)
{
[_bezelView removeFromSuperview];
_bezelView = nil;
}
if (_bezelView)
{
[_bezelView setBackgroundColor:[self bezelColor]];
}
var contentRect = [self contentRectForBounds:bounds];
if (contentRect && !_CGRectIsEmpty(contentRect))
{
if (!_contentView)
{
_contentView = [self createContentView];
if (_contentView)
[self addSubview:_contentView positioned:CPWindowAbove relativeTo:_bezelView];
}
if (_contentView)
[_contentView setFrame:contentRect];
}
else if (_contentView)
{
[_contentView removeFromSuperview];
_contentView = nil;
}
if (_contentView)
{
[_contentView setText:[self isHighlighted] && _alternateTitle ? _alternateTitle : _title];
[_contentView setImage:[self isHighlighted] && _alternateImage ? _alternateImage : _image];
// [_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]];
}
}
@end
@@ -844,8 +916,8 @@ var CPButtonImageKey = @"CPButtonImageKey",
// should just automatically be created programmatically as needed.
var actualSubviews = _subviews;
_subviews = [_subviews copy];
[_subviews removeObjectIdenticalTo:_imageAndTextView];
// _subviews = [_subviews copy];
// [_subviews removeObjectIdenticalTo:_imageAndTextView];
[super encodeWithCoder:aCoder];
+27
View File
@@ -0,0 +1,27 @@
#define CONTROL_STATE_VALUE(VALUE, LOWERCASEVALUE) \
- (void)set##VALUE:(id)aValue forControlState:(CPControlState)aControlState\
{\
var currentValue = [_##LOWERCASEVALUE valueForControlState:_controlState];\
[_##LOWERCASEVALUE setValue:aValue forControlState:aControlState];\
if ([_##LOWERCASEVALUE valueForControlState:_controlState] === currentValue)\
return;\
[self setNeedsDisplay:YES];\
[self setNeedsLayout];\
}\
- (id)LOWERCASEVALUE##ForControlState:(CPControlState)aControlState\
{\
return [_##LOWERCASEVALUE valueForControlState:aControlState];\
}\
- (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 valueForControlState:_controlState];\
}
+245 -173
View File
@@ -87,18 +87,6 @@ var CPControlBlackColor = [CPColor blackColor];
@implementation CPControl : CPView
{
id _value;
BOOL _isEnabled;
// Display Properties
CPTextAlignment _alignment;
CPVerticalTextAlignment _verticalAlignment;
CPLineBreakMode _lineBreakMode;
CPColor _textColor;
CPFont _font;
CPCellImagePosition _imagePosition;
CPImageScaling _imageScaling;
// Target-Action Support
id _target;
@@ -116,6 +104,22 @@ var CPControlBlackColor = [CPColor blackColor];
CPDictionary _backgroundColors;
CPString _currentBackgroundColorName;
// Properties
CPControlStateValue _alignment;
CPControlStateValue _verticalAlignment;
CPControlStateValue _lineBreakMode;
CPControlStateValue _textColor;
CPControlStateValue _font;
CPControlStateValue _textShadowColor;
CPControlStateValue _textShadowOffset;
CPControlStateValue _imagePosition;
CPControlStateValue _imageScaling;
CPControlState _controlState;
}
- (id)initWithFrame:(CGRect)aFrame
@@ -124,16 +128,28 @@ var CPControlBlackColor = [CPColor blackColor];
if (self)
{
[self setVerticalAlignment:CPTopVerticalTextAlignment];
_controlState = CPControlStateNormal;
_alignment = [[CPControlStateValue alloc] initWithDefaultValue:CPLeftTextAlignment];
_verticalAlignment = [[CPControlStateValue alloc] initWithDefaultValue:CPTopVerticalTextAlignment];
_lineBreakMode = [[CPControlStateValue alloc] initWithDefaultValue:CPLeftTextAlignment];
_textColor = [[CPControlStateValue alloc] initWithDefaultValue:[CPColor blackColor]];
_font = [[CPControlStateValue alloc] initWithDefaultValue:[CPFont systemFontOfSize:12.0]];
_textShadowColor = [[CPControlStateValue alloc] initWithDefaultValue:nil];
_textShadowOffset = [[CPControlStateValue alloc] initWithDefaultValue:CGSizeMake(0.0, 0.0)];;
_imagePosition = [[CPControlStateValue alloc] initWithDefaultValue:CPImageLeft];
_imageScaling = [[CPControlStateValue alloc] initWithDefaultValue:CPScaleToFit];
//
_sendActionOn = CPLeftMouseUpMask;
_trackingMouseDownFlags = 0;
_isEnabled = YES;
[self setFont:[CPFont systemFontOfSize:12.0]];
[self setTextColor:CPControlBlackColor];
_backgroundColors = [CPDictionary dictionary];
}
@@ -157,163 +173,6 @@ var CPControlBlackColor = [CPColor blackColor];
return _isEnabled;
}
/*!
Sets the receiver's horizontal text alignment
@param anAlignment the receiver's alignment
*/
- (void)setAlignment:(CPTextAlignment)anAlignment
{
_alignment = anAlignment;
}
/*!
Returns the receiver's horizontal text alignment
*/
- (CPTextAlignment)alignment
{
return _alignment;
}
/*!
Sets the receiver's vertical text alignment
@param anAlignment the receiver's alignment
*/
- (void)setVerticalAlignment:(CPVerticalTextAlignment)anAlignment
{
_verticalAlignment = anAlignment;
}
/*!
Returns the receiver's vertical text alignment
*/
- (CPVerticalTextAlignment)verticalAlignment
{
return _verticalAlignment;
}
/*!
Sets the receiver's line break mode.
@param anAlignment the receiver's line break mode.
*/
- (void)setLineBreakMode:(CPLineBreakMode)aLineBreakMode
{
_lineBreakMode = aLineBreakMode;
}
/*!
Returns the receiver's line break mode.
*/
- (CPLineBreakMode)lineBreakMode
{
return _lineBreakMode;
}
/*!
Sets the color of the receiver's text.
*/
- (void)setTextColor:(CPColor)aColor
{
if (_textColor == aColor)
return;
_textColor = aColor;
#if PLATFORM(DOM)
_DOMElement.style.color = [aColor cssString];
#endif
}
/*!
Returns the color of the receiver's text
*/
- (CPColor)textColor
{
return _textColor;
}
/*!
Sets the receiver's font
@param aFont the font for the receiver
*/
- (void)setFont:(CPFont)aFont
{
if (_font == aFont)
return;
_font = aFont;
#if PLATFORM(DOM)
_DOMElement.style.font = [_font ? _font : [CPFont systemFontOfSize:12.0] cssString];
#endif
}
/*!
Returns the receiver's font
*/
- (CPFont)font
{
return _font;
}
/*!
Sets the position of the button's image to <code>anImagePosition</code>.
@param anImagePosition the position for the button's image
*/
- (void)setImagePosition:(CPCellImagePosition)anImagePosition
{
if (_imagePosition === anImagePosition)
return;
_imagePosition = anImagePosition;
}
/*!
Returns the buton's image position
*/
- (CPCellImagePosition)imagePosition
{
return _imagePosition;
}
/*!
Sets the button's images scaling method
@param anImageScaling the image scaling method
*/
- (void)setImageScaling:(CPImageScaling)anImageScaling
{
if (_imageScaling === anImageScaling)
return;
_imageScaling = anImageScaling;
}
/*!
Returns the button's image scaling method
*/
- (CPImageScaling)imageScaling
{
return _imageScaling;
}
/*!
Sets the shadow for the receiver's text.
@param aTextShadow the text shadow
*/
- (void)setTextShadow:(CPShadow)aTextShadow
{
#if PLATFORM(DOM)
_DOMElement.style.textShadow = [_textShadow = aTextShadow cssString];
#endif
}
/*!
Returns the receiver's text shadow
*/
- (CPShadow)textShadow
{
return _textShadow;
}
/*!
Returns the receiver's target action
*/
@@ -713,6 +572,8 @@ var __Deprecated__CPImageViewImageKey = @"CPImageViewImageKey";
if (self)
{
_controlState = CPControlStateNormal;
[self setObjectValue:[aCoder decodeObjectForKey:CPControlValueKey]];
if ([aCoder containsValueForKey:__Deprecated__CPImageViewImageKey])
@@ -856,3 +717,214 @@ 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
+14 -45
View File
@@ -2,6 +2,7 @@
@import <AppKit/CPControl.j>
#include "CoreGraphics/CGGeometry.h"
#include "CPControl.h"
@implementation CPSlider : CPControl
@@ -13,14 +14,11 @@
CPColor _verticalTrackColor; // vertical-track-color
CPColor _horizontalTrackColor; // horizontal-track-color
CPColor _knobColor; // knob-color
CPColor _highlightedKnobColor; // knob-color-highlighted
CPControlStateValue _knobColor;
float _trackWidth; // track-width
CGSize _knobSize; // knob-size
BOOL _isHighlighted;
CPView _trackView;
CPView _knobView;
}
@@ -33,6 +31,8 @@
{
_minValue = 0.0;
_maxValue = 100.0;
_knobColor = [[CPControlStateValue alloc] initWithDefaultValue:nil];
[self setObjectValue:50.0];
@@ -155,19 +155,6 @@
return bounds;
}
- (void)setHighlightedKnobColor:(CPColor)aColor
{
if (_highlightedKnobColor === aColor)
_highlightedKnobColor = aColor;
_highlightedKnobColor = aColor;
}
- (CPColor)highlightedKnobColor
{
return _highlightedKnobColor;
}
- (void)setKnobSize:(CGSize)aKnobSize
{
if (_knobSize && (!aKnobSize || _CGSizeEqualToSize(_knobSize, aKnobSize)))
@@ -179,21 +166,7 @@
[self setNeedsDisplay:YES];
}
- (void)setKnobColor:(CPColor)aColor
{
if (_knobColor === aColor)
return;
_knobColor = aColor;
[self setNeedsLayout];
[self setNeedsDisplay:YES];
}
- (CPColor)knobColor
{
return _knobColor;
}
CONTROL_STATE_VALUE(KnobColor, knobColor)
- (CGRect)knobRectForBounds:(CGRect)bounds
{
@@ -303,13 +276,10 @@
{
[_knobView setFrame:knobRect];
if (_isHighlighted)
{
if (_highlightedKnobColor)
[_knobView setBackgroundColor:_highlightedKnobColor];
}
else if (_knobColor)
[_knobView setBackgroundColor:_knobColor];
var knobColor = [self knobColor];
if (knobColor)
[_knobView setBackgroundColor:knobColor];
}
}
else if (_knobView)
@@ -377,7 +347,7 @@
return NO;
}
_isHighlighted = YES;
[self setHighlighted:YES];
[self setNeedsLayout];
[self setNeedsDisplay:YES];
@@ -394,7 +364,7 @@
- (void)stopTracking:(CGPoint)lastPoint at:(CGPoint)aPoint mouseIsUp:(BOOL)mouseIsUp
{
_isHighlighted = NO;
[self setHighlighted:NO];
if ([_target respondsToSelector:@selector(sliderDidFinish:)])
[_target sliderDidFinish:self];
@@ -427,10 +397,10 @@
if (!theme)
return;
//_knobColor = [theme valueForKey:@"knob-color"];
[self setKnobSize:[theme valueForKey:@"knob-size"]];
[self setKnobColor:[theme valueForKey:@"knob-color"]];
[self setHighlightedKnobColor:[theme valueForKey:@"knob-color-highlighted"]];
[self setTrackWidth:[theme valueForKey:@"track-width"]];
[self setHorizontalTrackColor:[theme valueForKey:@"horizontal-track-color"]];
@@ -446,7 +416,6 @@
[values setObject:_knobSize forKey:@"knob-size"];
[values setObject:_knobColor forKey:@"knob-color"];
[values setObject:_highlightedKnobColor forKey:@"knob-color-highlighted"];
[values setObject:_trackWidth forKey:@"track-width"];
[values setObject:_verticalTrackColor forKey:@"vertical-track-color"];
[values setObject:_horizontalTrackColor forKey:@"horizontal-track-color"];
+5
View File
@@ -59,6 +59,11 @@
#define _CGRectContainsPoint(aRect, aPoint) (aPoint.x >= _CGRectGetMinX(aRect) && aPoint.y >= _CGRectGetMinY(aRect) && aPoint.x < _CGRectGetMaxX(aRect) && aPoint.y < _CGRectGetMaxY(aRect))
#define _CGInsetMake(_top, _left, _bottom, _right) { top:(_top), left:(_left), bottom:(_bottom), right:(_right) }
#define _CGInsetMakeCopy(anInset) _CGInsetMake(anInset.top, anInset.left, anInset.bottom, anInset.right)
#define _CGInsetMakeZero() _CGInsetMake(0, 0, 0, 0)
#define _CGInsetIsEmpty(anInset) ((anInset).left === 0 && (anInset).top === 0 && (anInset).right === 0 && (anInset).bottom === 0)
// DEPRECATED
#define _CGPointCreateCopy(aPoint) _CGPointMake(aPoint.x, aPoint.y)
#define _CGSizeCreateCopy(aSize) _CGSizeMake(aSize.width, aSize.height)
+4
View File
@@ -65,6 +65,10 @@ _function(CGRectIsNull(aRect))
_function(CGRectContainsPoint(aRect, aPoint))
_function(CGInsetMake(top, left, bottom, right))
_function(CGInsetMakeCopy(anInset))
_function(CGInsetIsEmpty(anInset))
/*!
Returns a <code>BOOL</code> indicating whether CGRect <code>lhsRect</code>
contains CGRect <code>rhsRect</code>.
+2 -2
View File
@@ -43,7 +43,7 @@
[horizontalSlider setKnobSize:CGSizeMake(12.0, 12.0)];
[horizontalSlider setKnobColor:knobColor];
[horizontalSlider setHighlightedKnobColor:knobHighlightedColor];
[horizontalSlider setKnobColor:knobHighlightedColor forControlState:CPControlStateHighlighted];
views.push(horizontalSlider);
@@ -64,7 +64,7 @@
[verticalSlider setKnobSize:CGSizeMake(12.0, 12.0)];
[verticalSlider setKnobColor:knobColor];
[verticalSlider setHighlightedKnobColor:knobHighlightedColor];
[verticalSlider setKnobColor:knobHighlightedColor forControlState:CPControlStateHighlighted];
views.push(verticalSlider);
+4
View File
@@ -11,6 +11,10 @@
<string>Default.cptheme</string>
<key>Type</key>
<string>280N.theme</string>
<key>Excluded</key>
<array>
<string>Frameworks</string>
</array>
</dict>
</array>
<key>Configurations</key>
+3 -3
View File
@@ -19,7 +19,7 @@
</target>
<target name = "build" depends = "steam-uptodate">
<steam-build>
<arg line = "-f AppKit.steam -c ${Configuration} -t AppKit" />
</steam-build>
@@ -27,11 +27,11 @@
<steam-build>
<arg line = "-f AppKit.steam -c ${Configuration}-Rhino -t AppKit" />
</steam-build>
<steam-build>
<arg line = "-f Themes/${Theme}/${Theme}.steam -c ${Configuration} -t ${Theme}.cptheme" />
</steam-build>
<copy todir = "${Build}/${Configuration}/AppKit/Resources/${Theme}.cptheme" >
<fileset dir = "${Build}/${Configuration}/${Theme}.cptheme" />
</copy>