Skip to content

Commit

Permalink
bugfix:ibireme#284 text render wrong when use TextGlyphTransformAttri…
Browse files Browse the repository at this point in the history
…bute
  • Loading branch information
ibireme committed Apr 21, 2016
1 parent 5038c85 commit 10b20f2
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions YYText/Component/YYTextLayout.m
Original file line number Diff line number Diff line change
Expand Up @@ -636,8 +636,8 @@ + (YYTextLayout *)layoutWithContainer:(YYTextContainer *)container text:(NSAttri
size.height += rect.origin.y;
if (size.width < 0) size.width = 0;
if (size.height < 0) size.height = 0;
size.width = YYTextCGFloatPixelCeil(size.width);
size.height = YYTextCGFloatPixelCeil(size.height);
size.width = ceil(size.width);
size.height = ceil(size.height);
textBoundingSize = size;
}

Expand Down Expand Up @@ -2572,11 +2572,13 @@ static void YYTextDrawText(YYTextLayout *layout, CGContextRef context, CGSize si
YYTextLine *line = lines[l];
if (layout.truncatedLine && layout.truncatedLine.index == line.index) line = layout.truncatedLine;
NSArray *lineRunRanges = line.verticalRotateRange;
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextSetTextPosition(context, line.position.x + verticalOffset, size.height - line.position.y);
CGFloat posX = line.position.x + verticalOffset;
CGFloat posY = size.height - line.position.y;
CFArrayRef runs = CTLineGetGlyphRuns(line.CTLine);
for (NSUInteger r = 0, rMax = CFArrayGetCount(runs); r < rMax; r++) {
CTRunRef run = CFArrayGetValueAtIndex(runs, r);
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextSetTextPosition(context, posX, posY);
YYTextDrawRun(line, run, context, size, isVertical, lineRunRanges[r], verticalOffset);
}
if (cancel && cancel()) break;
Expand Down Expand Up @@ -2986,18 +2988,19 @@ static void YYTextDrawShadow(YYTextLayout *layout, CGContextRef context, CGSize
CGContextTranslateCTM(context, point.x, point.y);
CGContextTranslateCTM(context, 0, size.height);
CGContextScaleCTM(context, 1, -1);
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
NSArray *lines = layout.lines;
for (NSUInteger l = 0, lMax = layout.lines.count; l < lMax; l++) {
if (cancel && cancel()) break;

YYTextLine *line = lines[l];
if (layout.truncatedLine && layout.truncatedLine.index == line.index) line = layout.truncatedLine;
NSArray *lineRunRanges = line.verticalRotateRange;
CGContextSetTextPosition(context, line.position.x, size.height - line.position.y);
CGFloat linePosX = line.position.x;
CGFloat linePosY = size.height - line.position.y;
CFArrayRef runs = CTLineGetGlyphRuns(line.CTLine);
for (NSUInteger r = 0, rMax = CFArrayGetCount(runs); r < rMax; r++) {
CTRunRef run = CFArrayGetValueAtIndex(runs, r);
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextSetTextPosition(context, linePosX, linePosY);
NSDictionary *attrs = (id)CTRunGetAttributes(run);
YYTextShadow *shadow = attrs[YYTextShadowAttributeName];
YYTextShadow *nsShadow = [YYTextShadow shadowWithNSShadow:attrs[NSShadowAttributeName]]; // NSShadow compatible
Expand Down Expand Up @@ -3042,11 +3045,14 @@ static void YYTextDrawInnerShadow(YYTextLayout *layout, CGContextRef context, CG
YYTextLine *line = lines[l];
if (layout.truncatedLine && layout.truncatedLine.index == line.index) line = layout.truncatedLine;
NSArray *lineRunRanges = line.verticalRotateRange;
CGContextSetTextPosition(context, line.position.x, size.height - line.position.y);
CGFloat linePosX = line.position.x;
CGFloat linePosY = size.height - line.position.y;
CFArrayRef runs = CTLineGetGlyphRuns(line.CTLine);
for (NSUInteger r = 0, rMax = CFArrayGetCount(runs); r < rMax; r++) {
CTRunRef run = CFArrayGetValueAtIndex(runs, r);
if (CTRunGetGlyphCount(run) == 0) continue;
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextSetTextPosition(context, linePosX, linePosY);
NSDictionary *attrs = (id)CTRunGetAttributes(run);
YYTextShadow *shadow = attrs[YYTextInnerShadowAttributeName];
while (shadow) {
Expand Down

0 comments on commit 10b20f2

Please sign in to comment.