Skip to content

Commit

Permalink
* Support margins
Browse files Browse the repository at this point in the history
  • Loading branch information
joehewitt committed Apr 20, 2009
1 parent 694de1e commit b059c7c
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 32 deletions.
7 changes: 4 additions & 3 deletions samples/TTCatalog/Classes/StyledTextTestController.m
Expand Up @@ -32,7 +32,8 @@ - (TTStyle*)inlineBox {
- (TTStyle*)inlineBox2 {
return
[TTSolidFillStyle styleWithColor:[UIColor cyanColor] next:
[TTBoxStyle styleWithPadding:UIEdgeInsetsMake(0,13,0,13) next:nil]];
[TTBoxStyle styleWithMargin:UIEdgeInsetsMake(5,50,0,50)
padding:UIEdgeInsetsMake(0,13,0,13) next:nil]];
}

@end
Expand Down Expand Up @@ -75,9 +76,9 @@ - (void)loadView {
// NSString* kText = @"\
//<div class=\"inlineBox\"><div class=\"inlineBox2\">You can enclose blocks within an HTML div.</div></div>";
// NSString* kText = @"\
//<span class=\"inlineBox\"><span class=\"inlineBox2\">You can enclose blocks within an HTML div.</span></span>";
//<span class=\"inlineBox\"><span class=\"inlineBox2\">You can enclose blocks within an HTML div.</span></span>x";
// NSString* kText = @"\
//<div class=\"inlineBox2\">You can enclose blocks within an HTML div.</div>test";
//<div class=\"inlineBox2\">You can enclose blocks within an HTML div.</div>";

TTStyledTextLabel* label1 = [[[TTStyledTextLabel alloc] initWithFrame:self.view.bounds] autorelease];
label1.font = [UIFont systemFontOfSize:17];
Expand Down
64 changes: 36 additions & 28 deletions src/TTStyledLayout.m
Expand Up @@ -198,7 +198,6 @@ - (void)layoutElement:(TTStyledElement*)elt {
}

// Figure out which font to use for the node
// XXXjoe Do this lazily when asked for font
UIFont* font = nil;
TTTextStyle* textStyle = nil;
if (style) {
Expand All @@ -207,7 +206,6 @@ - (void)layoutElement:(TTStyledElement*)elt {
font = textStyle.font;
}
}

if (!font) {
if ([elt isKindOfClass:[TTStyledLinkNode class]]
|| [elt isKindOfClass:[TTStyledBoldNode class]]) {
Expand All @@ -219,10 +217,20 @@ - (void)layoutElement:(TTStyledElement*)elt {
}
}

CGFloat minX = _minX;
CGFloat maxWidth = _maxWidth;
TTStyledFrame* blockFrame = nil;
BOOL isBlock = [elt isKindOfClass:[TTStyledBlock class]];
TTBoxStyle* padding = style ? [style firstStyleOfClass:[TTBoxStyle class]] : nil;

if (isBlock) {
if (padding) {
_x += padding.margin.left;
_minX += padding.margin.left;
_maxWidth -= padding.margin.left + padding.margin.right;
_height += padding.margin.top;
}

if (_lastFrame) {
if (!_lineHeight && [elt isKindOfClass:[TTStyledLineBreakNode class]]) {
_lineHeight = self.fontHeight;
Expand All @@ -233,34 +241,30 @@ - (void)layoutElement:(TTStyledElement*)elt {
blockFrame = [self addBlockFrame:style element:elt width:_maxWidth height:_height];
}
} else {
if (padding) {
_x += padding.margin.left;
}
if (style) {
_inlineFrame = [self addInlineFrame:style element:elt width:0 height:0];
}
}

CGFloat minX = _minX;
CGFloat maxWidth = _maxWidth;

TTBoxStyle* padding = nil;
if (style) {
padding = [style firstStyleOfClass:[TTBoxStyle class]];
if (padding) {
if (isBlock) {
_minX += padding.padding.left;
}
_maxWidth -= padding.padding.left+padding.padding.right;
_x += padding.padding.left;
_lineWidth += padding.padding.left;

TTStyledBoxFrame* inlineFrame = _inlineFrame;
while (inlineFrame) {
inlineFrame.width += padding.padding.left;
inlineFrame = inlineFrame.parentFrame;
}
if (padding) {
if (isBlock) {
_minX += padding.padding.left;
}
_maxWidth -= padding.padding.left+padding.padding.right;
_x += padding.padding.left;
_lineWidth += padding.padding.left;

TTStyledBoxFrame* inlineFrame = _inlineFrame;
while (inlineFrame) {
inlineFrame.width += padding.padding.left;
inlineFrame = inlineFrame.parentFrame;
}

if (isBlock) {
_height += padding.padding.top;
}
if (isBlock) {
_height += padding.padding.top;
}
}

Expand All @@ -284,19 +288,23 @@ - (void)layoutElement:(TTStyledElement*)elt {
[self breakLine];

if (padding) {
// _x += padding.padding.right;
// _lineWidth += padding.padding.right;
_height += padding.padding.bottom;
}
blockFrame.height = _height - blockFrame.height;
if (padding) {
_height += padding.margin.bottom;
}
} else if (!isBlock && style) {
_inlineFrame.height += self.fontHeight;
if (padding) {
_x += padding.padding.right;
_lineWidth += padding.padding.right;
_x += padding.padding.right + padding.margin.right;
_lineWidth += padding.padding.right + padding.margin.right;

TTStyledBoxFrame* inlineFrame = _inlineFrame;
while (inlineFrame) {
if (inlineFrame != _inlineFrame) {
inlineFrame.width += padding.margin.right;
}
inlineFrame.width += padding.padding.right;
inlineFrame.y -= padding.padding.top;
inlineFrame.height += padding.padding.top+padding.padding.bottom;
Expand Down
7 changes: 6 additions & 1 deletion src/TTStyledText.m
Expand Up @@ -138,7 +138,12 @@ - (TTStyledFrame*)hitTest:(CGPoint)point {
TTStyledFrame* frame = self.rootFrame;
while (frame) {
if (CGRectContainsPoint(frame.bounds, point)) {
return frame;
if ([frame isKindOfClass:[TTStyledTextFrame class]]) {
TTStyledTextFrame* boxFrame = (TTStyledTextFrame*)frame;
if ([boxFrame.element isKindOfClass:[TTStyledLinkNode class]]) {
return frame;
}
}
}
frame = frame.nextFrame;
}
Expand Down

0 comments on commit b059c7c

Please sign in to comment.