mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-10-28 19:08:50 +00:00
First pass at removing CPTextField from _CPImageAndTitleView.
Reviewed by me.
This commit is contained in:
1 parent
289d0cac63
commit
add96e9c04
1 file changed
+98
-72
@@ -48,8 +48,8 @@
|
||||
|
||||
#if PLATFORM(DOM)
|
||||
DOMElement _DOMImageElement;
|
||||
DOMELement _DOMTextElement;
|
||||
#endif
|
||||
CPTextField _titleField;
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CGRect)aFrame
|
||||
@@ -58,14 +58,14 @@
|
||||
|
||||
if (self)
|
||||
{
|
||||
_alignment = CPCenterTextAlignment;
|
||||
[self setAlignment:CPCenterTextAlignment];
|
||||
[self setFont:[CPFont systemFontOfSize:12.0]];
|
||||
[self setImagePosition:CPNoImage];
|
||||
[self setImageScaling:CPScaleNone];
|
||||
|
||||
_textColor = nil;
|
||||
_font = [CPFont systemFontOfSize:12.0];
|
||||
|
||||
_imagePosition = CPNoImage;
|
||||
_imageScaling = CPScaleNone;
|
||||
|
||||
_titleSize = CGSizeMakeZero();
|
||||
_titleSize = NULL;
|
||||
}
|
||||
|
||||
return self;
|
||||
@@ -73,9 +73,26 @@
|
||||
|
||||
- (void)setAlignment:(CPTextAlignment)anAlignment
|
||||
{
|
||||
if (_alignment === anAlignment)
|
||||
return;
|
||||
|
||||
_alignment = anAlignment;
|
||||
|
||||
[_titleField setAlignment:anAlignment];
|
||||
#if PLATFORM(DOM)
|
||||
switch (_alignment)
|
||||
{
|
||||
case CPLeftTextAlignment: _DOMElement.style.textAlign = "left";
|
||||
break;
|
||||
case CPRightTextAlignment: _DOMElement.style.textAlign = "right";
|
||||
break;
|
||||
case CPCenterTextAlignment: _DOMElement.style.textAlign = "center";
|
||||
break;
|
||||
case CPJustifiedTextAlignment: _DOMElement.style.textAlign = "justify";
|
||||
break;
|
||||
case CPNaturalTextAlignment: _DOMElement.style.textAlign = "";
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
- (CPTextAlignment)alignment
|
||||
@@ -90,10 +107,9 @@
|
||||
|
||||
_imagePosition = anImagePosition;
|
||||
|
||||
if (_imagePosition == CPImageOnly)
|
||||
[_titleField setHidden:YES];
|
||||
else
|
||||
[_titleField setHidden:NO];
|
||||
#if PLATFORM(DOM)
|
||||
[self createOrDestroyDOMTextElement];
|
||||
#endif
|
||||
|
||||
[self tile];
|
||||
}
|
||||
@@ -118,27 +134,16 @@
|
||||
return _imageScaling;
|
||||
}
|
||||
|
||||
- (void)setTextAlignment:(CPTextAlignment)aTextAlignment
|
||||
{
|
||||
if (_alignment == aTextAlignment)
|
||||
return;
|
||||
|
||||
_alignment = aTextAlignment;
|
||||
[_titleField setTextAlignment:aTextAlignment];
|
||||
}
|
||||
|
||||
- (CPTextAlignment)textAlignment
|
||||
{
|
||||
return _alignment;
|
||||
}
|
||||
|
||||
- (void)setTextColor:(CPColor)aTextColor
|
||||
{
|
||||
if (_textColor == aTextColor)
|
||||
return;
|
||||
|
||||
_textColor = aTextColor;
|
||||
[_titleField setTextColor:aTextColor];
|
||||
|
||||
#if PLATFORM(DOM)
|
||||
_DOMElement.style.color = [_textColor cssString];
|
||||
#endif
|
||||
}
|
||||
|
||||
- (CPColor)textColor
|
||||
@@ -148,13 +153,16 @@
|
||||
|
||||
- (void)setFont:(CPFont)aFont
|
||||
{
|
||||
if (_font == aFont)
|
||||
if (_font === aFont)
|
||||
return;
|
||||
|
||||
_font = aFont;
|
||||
[_titleField setFont:aFont];
|
||||
|
||||
[self updateTitleSize];
|
||||
#if PLATFORM(DOM)
|
||||
_DOMElement.style.font = [_font ? _font : [CPFont systemFontOfSize:12.0] cssString];
|
||||
#endif
|
||||
|
||||
_titleSize = NULL;
|
||||
|
||||
[self tile];
|
||||
}
|
||||
@@ -219,40 +227,58 @@
|
||||
return _image;
|
||||
}
|
||||
|
||||
#if PLATFORM(DOM)
|
||||
- (void)createOrDestroyDOMTextElement
|
||||
{
|
||||
var needsDOMTextElement = _imagePosition !== CPImageOnly && ([_title length] > 0);
|
||||
|
||||
if (needsDOMTextElement === !!_DOMTextElement)
|
||||
return;
|
||||
|
||||
if (_DOMTextElement)
|
||||
{
|
||||
_DOMElement.removeChild(_DOMTextElement);
|
||||
_DOMTextElement = NULL;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
_DOMTextElement = document.createElement("div");
|
||||
_DOMTextElement.style.background = "red";
|
||||
_DOMTextElement.style.position = "absolute";
|
||||
_DOMTextElement.style.whiteSpace = "pre";
|
||||
_DOMTextElement.style.cursor = "default";
|
||||
_DOMTextElement.style.zIndex = 100;
|
||||
_DOMTextElement.style.overflow = "hidden";
|
||||
|
||||
_DOMElement.appendChild(_DOMTextElement);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
- (void)setTitle:(CPString)aTitle
|
||||
{
|
||||
if (_title == aTitle)
|
||||
if (_title === aTitle)
|
||||
return;
|
||||
|
||||
_title = aTitle;
|
||||
|
||||
if ([_title length])
|
||||
#if PLATFORM(DOM)
|
||||
[self createOrDestroyDOMTextElement];
|
||||
#endif
|
||||
|
||||
#if PLATFORM(DOM)
|
||||
if (_DOMTextElement)
|
||||
{
|
||||
if (!_titleField)
|
||||
{
|
||||
_titleField = [[CPTextField alloc] initWithFrame:CGRectMakeZero()];
|
||||
|
||||
[_titleField setEditable:NO];
|
||||
|
||||
[_titleField setFont:_font];
|
||||
[_titleField setAlignment:_alignment];
|
||||
[_titleField setTextColor:_textColor];
|
||||
[_titleField setHidden:_imagePosition == CPImageOnly];
|
||||
[_titleField setHitTests:NO];
|
||||
|
||||
[self addSubview:_titleField];
|
||||
}
|
||||
|
||||
[_titleField setStringValue:_title];
|
||||
|
||||
[self updateTitleSize];
|
||||
}
|
||||
else
|
||||
{
|
||||
[_titleField removeFromSuperview];
|
||||
|
||||
_titleField = nil;
|
||||
if (CPFeatureIsCompatible(CPJavascriptInnerTextFeature))
|
||||
_DOMTextElement.innerText = _title;
|
||||
|
||||
else if (CPFeatureIsCompatible(CPJavascriptTextContentFeature))
|
||||
_DOMTextElement.textContent = _title;
|
||||
}
|
||||
#endif
|
||||
|
||||
_titleSize = NULL;
|
||||
|
||||
[self tile];
|
||||
}
|
||||
@@ -262,26 +288,15 @@
|
||||
return _title;
|
||||
}
|
||||
|
||||
- (void)updateTitleSize
|
||||
{
|
||||
if (!_titleField)
|
||||
return;
|
||||
|
||||
var size = _titleSize;
|
||||
|
||||
[_titleField sizeToFit];
|
||||
|
||||
_titleSize = CGSizeMakeCopy([_titleField frame].size);
|
||||
|
||||
[_titleField setFrameSize:size];
|
||||
}
|
||||
|
||||
- (void)tile
|
||||
{
|
||||
if (!_titleSize && _DOMTextElement)
|
||||
_titleSize = [_title sizeWithFont:_font];
|
||||
|
||||
var size = [self bounds].size,
|
||||
centerX = size.width / 2.0,
|
||||
centerY = size.height / 2.0,
|
||||
titleHeight = _titleField ? _titleSize.height : 0.0,
|
||||
titleHeight = _DOMTextElement ? _titleSize.height : 0.0,
|
||||
titleRect = CGRectMake(0.0, centerY - titleHeight / 2.0, size.width, titleHeight);
|
||||
|
||||
if (_imagePosition != CPNoImage && _image)
|
||||
@@ -355,11 +370,22 @@
|
||||
}
|
||||
}
|
||||
|
||||
[_titleField setFrame:titleRect];
|
||||
#if PLATFORM(DOM)
|
||||
if (_DOMTextElement)
|
||||
{
|
||||
_DOMTextElement.style.top = FLOOR(CGRectGetMinY(titleRect)) + "px";
|
||||
_DOMTextElement.style.left = FLOOR(CGRectGetMinX(titleRect)) + "px";
|
||||
_DOMTextElement.style.width = FLOOR(CGRectGetWidth(titleRect)) + "px";
|
||||
_DOMTextElement.style.height = FLOOR(CGRectGetHeight(titleRect)) + "px";
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
- (void)sizeToFit
|
||||
{
|
||||
if (!_titleSize && _DOMTextElement)
|
||||
_titleSize = [_title sizeWithFont:_font];
|
||||
|
||||
var size = CGSizeMakeZero();
|
||||
|
||||
if (_imagePosition != CPNoImage && _image)
|
||||
|
||||
Reference in new issue
Block a user