Began integrating new imageandtextview into CPButton.

Reviewed by me.
This commit is contained in:
Francisco Ryan Tolmasky I
2009-01-27 01:06:21 -08:00
parent b0d5ca2830
commit 9e7fd7f74f
4 changed files with 141 additions and 95 deletions
+50 -48
View File
@@ -311,7 +311,7 @@ var _CPButtonClassName = nil,
*/
- (void)setButtonType:(CPButtonType)aButtonType
{
if (aButtonType == CPSwitchButton)
if (aButtonType === CPSwitchButton)
{
[self setBordered:NO];
[self setImage:nil];
@@ -326,6 +326,10 @@ var _CPButtonClassName = nil,
if (self)
{
[self setVerticalAlignment:CPCenterVerticalTextAlignment];
_imagePosition = CPImageLeft;
_imageScaling = CPScaleNone;
@@ -351,7 +355,7 @@ var _CPButtonClassName = nil,
_imagePosition = anImagePosition;
[self drawContentsWithHighlight:_isHighlighted];
[_imageAndTextView setImagePosition:_imagePosition];
}
/*!
@@ -373,7 +377,7 @@ var _CPButtonClassName = nil,
_imageScaling = anImageScaling;
[self drawContentsWithHighlight:_isHighlighted];
[_imageAndTextView setImageScaling:anImageScaling];
}
/*!
@@ -392,7 +396,7 @@ var _CPButtonClassName = nil,
{
[super setTextColor:aColor];
[self drawContentsWithHighlight:_isHighlighted];
[_imageAndTextView setTextColor:[self textColor]];
}
/*!
@@ -403,7 +407,7 @@ var _CPButtonClassName = nil,
{
[super setFont:aFont];
[self drawContentsWithHighlight:_isHighlighted];
[_imageAndTextView setFont:[self font]];
}
// Setting the state
@@ -461,7 +465,7 @@ var _CPButtonClassName = nil,
{
[super setAlignment:anAlignment];
[self drawContentsWithHighlight:_isHighlighted];
[_imageAndTextView setAlignment:[self alignment]];
}
/*!
@@ -470,12 +474,12 @@ var _CPButtonClassName = nil,
*/
- (void)setImage:(CPImage)anImage
{
if (_image == anImage)
if (_image === anImage)
return;
_image = anImage;
[self drawContentsWithHighlight:_isHighlighted];
[self setNeedsDisplay:YES];
}
/*!
@@ -514,7 +518,7 @@ var _CPButtonClassName = nil,
_title = aTitle;
[self drawContentsWithHighlight:_isHighlighted];
[self setNeedsDisplay:YES];
}
/*!
@@ -549,11 +553,46 @@ var _CPButtonClassName = nil,
[_imageAndTextView setFrameSize:size];
}
- (CGRect)contentRectForBounds:(CGRect)aRect
{
if (_isBordered)
{
if (_bezelStyle == CPHUDBezelStyle)
aRect.size.height -= 4.0;
else if (_bezelStyle == CPRoundRectBezelStyle)
aRect.size.height -= 2.0;
else if (_bezelStyle == CPTexturedRoundedBezelStyle)
aRect.size.height -= 2.0;
}
return aRect;
}
- (void)drawRect:(CGRect)aRect
{
if (!_imageAndTextView)
{
_imageAndTextView = [[_CPImageAndTextView alloc] initWithFrame:[self contentRectForBounds:aRect] control:self];
[self addSubview:_imageAndTextView];
}
else
[_imageAndTextView setFrame:[self contentRectForBounds:aRect]];
[_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)
{
_imageAndTextView = [[_CPImageAndTextView alloc] initWithFrame:[self contentRectForBounds:[self bounds]] control:self];
[self addSubview:_imageAndTextView];
}
[_imageAndTextView sizeToFit];
var frame = [_imageAndTextView frame],
@@ -570,17 +609,6 @@ var _CPButtonClassName = nil,
[self setFrameSize:CGSizeMake(CGRectGetWidth(frame), height)];
}
/*!
Sets the frame size for the button.
@param the new frame size
*/
- (void)setFrameSize:(CGSize)aSize
{
[super setFrameSize:aSize];
[self tile];
}
/*!
Highlights the receiver based on <code>aFlag</code>.
@param If <code>YES</code> the button will highlight, <code>NO</code> the button will unhighlight.
@@ -590,7 +618,7 @@ var _CPButtonClassName = nil,
_isHighlighted = aFlag;
[self drawBezelWithHighlight:aFlag];
[self drawContentsWithHighlight:aFlag];
[self setNeedsDisplay:YES];
}
/*!
@@ -752,32 +780,6 @@ var _CPButtonClassName = nil,
[self setBackgroundColorWithName:shouldHighlight ? CPControlHighlightedBackgroundColor : CPControlNormalBackgroundColor];
}
/* @ignore */
- (void)drawContentsWithHighlight:(BOOL)isHighlighted
{
if (!_title && !_image && !_alternateTitle && !_alternateImage && !_imageAndTextView)
return;
if (!_imageAndTextView)
{
_imageAndTextView = [[_CPImageAndTextView alloc] initWithFrame:[self bounds]];
[self addSubview:_imageAndTextView];
[self tile];
}
[_imageAndTextView setVerticalAlignment:CPCenterVerticalTextAlignment];
[_imageAndTextView setFont:[self font]];
[_imageAndTextView setTextColor:[self textColor]];
[_imageAndTextView setAlignment:[self alignment]];
[_imageAndTextView setImagePosition:_imagePosition];
[_imageAndTextView setImageScaling:_imageScaling];
[_imageAndTextView setText:isHighlighted && _alternateTitle ? _alternateTitle : _title];
[_imageAndTextView setImage:isHighlighted && _alternateImage ? _alternateImage : _image];
}
- (void)viewDidMoveToWindow
{
if (_bezelBorderNeedsUpdate)
+31 -6
View File
@@ -91,10 +91,13 @@ var CPControlBlackColor = [CPColor blackColor];
BOOL _isEnabled;
int _alignment;
CPVerticalTextAlignment _verticalAlignment;
CPFont _font;
CPColor _textColor;
CPShadow _textShadow;
CPLineBreakMode _lineBreakMode;
id _target;
SEL _action;
int _sendActionOn;
@@ -114,6 +117,8 @@ var CPControlBlackColor = [CPColor blackColor];
if (self)
{
[self setVerticalAlignment:CPTopVerticalTextAlignment];
_sendActionOn = CPLeftMouseUpMask;
_trackingMouseDownFlags = 0;
@@ -169,6 +174,15 @@ var CPControlBlackColor = [CPColor blackColor];
return _textColor;
}
/*!
Sets the receiver's alignment
@param anAlignment the receiver's alignment
*/
- (void)setAlignment:(CPTextAlignment)anAlignment
{
_alignment = anAlignment;
}
/*!
Returns the receiver's alignment
*/
@@ -177,13 +191,24 @@ var CPControlBlackColor = [CPColor blackColor];
return _alignment;
}
/*!
Sets the receiver's alignment
@param anAlignment the receiver's alignment
*/
- (void)setAlignment:(CPTextAlignment)anAlignment
- (void)setVerticalAlignment:(CPVerticalTextAlignment)anAlignment
{
_alignment = anAlignment;
_verticalAlignment = anAlignment;
}
- (CPVerticalTextAlignment)verticalAlignment
{
return _verticalAlignment;
}
- (void)setLineBreakMode:(CPLineBreakMode)aLineBreakMode
{
_lineBreakMode = aLineBreakMode;
}
- (CPLineBreakMode)lineBreakMode
{
return _lineBreakMode;
}
/*!
+6
View File
@@ -65,6 +65,7 @@ var CPPopUpButtonArrowsImage = nil;
[self setImagePosition:CPImageLeft];
[self setAlignment:CPLeftTextAlignment];
[self setLineBreakMode:CPLineBreakByTruncatingTail];
[self setMenu:[[CPMenu alloc] initWithTitle:@""]];
}
@@ -698,6 +699,11 @@ var CPPopUpButtonArrowsImage = nil;
[self sendAction:action to:target];
}
- (CGRect)contentRectForBounds:(CGRect)bounds
{
return CGRectMake(3.0, 2.0, CGRectGetWidth(bounds) - 16.0, CGRectGetHeight(bounds) - 5.0);
}
@end
var CPPopUpButtonMenuKey = @"CPPopUpButtonMenuKey",
+54 -41
View File
@@ -73,27 +73,39 @@ var HORIZONTAL_MARGIN = 3.0,
unsigned _flags;
#if PLATFORM(DOM)
DOMElement _DOMImageElement;
DOMELement _DOMTextElement;
DOMElement _DOMImageElement;
DOMELement _DOMTextElement;
#endif
}
- (id)initWithFrame:(CGRect)aFrame
- (id)initWithFrame:(CGRect)aFrame control:(CPControl)aControl
{
self = [super initWithFrame:aFrame];
if (self)
{
_lineBreakMode = CPLineBreakByClipping;
_textColor = nil;
[self setAlignment:CPCenterTextAlignment];
// ?
[self setVerticalAlignment:CPTopVerticalTextAlignment];
[self setFont:[CPFont systemFontOfSize:12.0]];
[self setImagePosition:CPNoImage];
[self setImageScaling:CPScaleNone];
_textColor = nil;
if (aControl)
{
[self setLineBreakMode:[aControl lineBreakMode]];
[self setTextColor:[aControl textColor]];
[self setAlignment:[aControl alignment]];
[self setVerticalAlignment:[aControl verticalAlignment]];
[self setFont:[aControl font]];
[self setImagePosition:[aControl imagePosition]];
[self setImageScaling:[aControl imageScaling]];
}
else
{
[self setLineBreakMode:CPLineBreakByClipping];
//[self setTextColor:[aControl textColor]];
[self setAlignment:CPCenterTextAlignment];
[self setFont:[CPFont systemFontOfSize:12.0]];
[self setImagePosition:CPNoImage];
[self setImageScaling:CPScaleNone];
}
_textSize = NULL;
}
@@ -101,6 +113,11 @@ var HORIZONTAL_MARGIN = 3.0,
return self;
}
- (id)initWithFrame:(CGRect)aFrame
{
return [self initWithFrame:aFrame control:nil];
}
- (void)setAlignment:(CPTextAlignment)anAlignment
{
if (_alignment === anAlignment)
@@ -489,37 +506,33 @@ var HORIZONTAL_MARGIN = 3.0,
textStyle.left = textRectX + "px";
textStyle.width = textRectWidth + "px";
switch (_verticalAlignment)
if (_verticalAlignment === CPTopVerticalTextAlignment)
{
case CPTopVerticalTextAlignment: textStyle.top = "0px";
textStyle.height = textRectHeight + "px";
break;
case CPCenterVerticalTextAlignment: if (0 && _lineBreakMode !== CPLineBreakByCharWrapping && _lineBreakMode !== CPLineBreakByWordWrapping)
{
textStyle.lineHeight = textRectHeight + "px";
textStyle.height = textRectHeight + "px";
}
else
{
if (!_textSize)
_textSize = [_text sizeWithFont:_font inWidth:textRectWidth];
textStyle.top = (textRectY + (textRectHeight - _textSize.height) / 2.0) + "px";
textStyle.height = _textSize.height + "px";
}
break;
case CPBottomVerticalTextAlignment: if (!_textSize)
_textSize = [_text sizeWithFont:_font inWidth:textRectWidth];
textStyle.top = (textRectY + textRectHeight - _textSize.height) + "px";
textStyle.height = _textSize.height + "px";
break;
textStyle.top = "0px";
textStyle.height = textRectHeight + "px";
}
else
{
if (!_textSize)
{
if (_lineBreakMode === CPLineBreakByCharWrapping ||
_lineBreakMode === CPLineBreakByWordWrapping)
_textSize = [_text sizeWithFont:_font inWidth:textRectWidth];
else
_textSize = [_text sizeWithFont:_font];
}
if (_verticalAlignment === CPCenterVerticalTextAlignment)
{
textStyle.top = (textRectY + (textRectHeight - _textSize.height) / 2.0) + "px";
textStyle.height = _textSize.height + "px";
}
else //if (_verticalAlignment === CPBottomVerticalTextAlignment)
{
textStyle.top = (textRectY + textRectHeight - _textSize.height) + "px";
textStyle.height = _textSize.height + "px";
}
}
}
#endif