Changeset 845

Show
Ignore:
Timestamp:
04/17/08 05:31:09 (6 months ago)
Author:
astrange
Message:

Use kUCTextBreakIterateMask properly (optimization, not a bug fix). Improve handling of very small outlines. Some debug code added with #if 0.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Subtitles/SubATSUIRenderer.m

    r841 r845  
    665665        FindAllPossibleLineBreaks(breakLocator, uline, lineLen, breakOpportunities); 
    666666         
     667#if 0 
     668        { 
     669                NSMutableString *nss = [NSMutableString string]; 
     670                int i; 
     671                 
     672                for (i = 0; i < [div->text length]; i++) { 
     673                        if (bitfield_test(breakOpportunities, i)) 
     674                                [nss appendFormat:@"%c", '|']; 
     675                         
     676                        [nss appendFormat:@"%C", [div->text characterAtIndex:i]]; 
     677                } 
     678                 
     679                NSLog(@"breaks (div): \"%@\"", nss); 
     680        } 
     681         
     682        { 
     683                NSMutableString *nss = [NSMutableString string]; 
     684                int i; 
     685                 
     686                for (i = 0; i < lineLen; i++) { 
     687                        if (bitfield_test(breakOpportunities, i)) 
     688                                [nss appendFormat:@"%c", '|']; 
     689                         
     690                        [nss appendFormat:@"%C", uline[i]]; 
     691                } 
     692                 
     693                NSLog(@"breaks (uline): \"%@\"", nss); 
     694        } 
     695#endif 
     696     
    667697        do { 
    668698                int j, lastIndex = 0; 
     
    802832                         
    803833                case kTextLayerOutline: 
    804                         if_different(outlineRadius) CGContextSetLineWidth(c, spanEx->outlineRadius*2. + .5); 
     834                        if_different(outlineRadius) CGContextSetLineWidth(c, spanEx->outlineRadius ? (spanEx->outlineRadius*2. + .5) : 0.); 
    805835                        if_different(outlineColor)  SetColor(c, (div->styleLine->borderStyle == kSubBorderStyleNormal) ? strokec : fillc, spanEx->outlineColor); 
    806836                         
     
    12211251         
    12221252        while (1) { 
    1223                 UniCharArrayOffset breakOffset
     1253                UniCharArrayOffset breakOffset = 0
    12241254                OSStatus status; 
    12251255                 
    1226                 status = UCFindTextBreak(breakLocator, kUCTextBreakLineMask, kUCTextBreakLeadingEdgeMask | (lastBreak ? kUCTextBreakLeadingEdgeMask : 0), uline, lineLen, lastBreak, &breakOffset); 
    1227                  
    1228                 if (status != noErr || breakOffset == lineLen) break; 
     1256                status = UCFindTextBreak(breakLocator, kUCTextBreakLineMask, kUCTextBreakLeadingEdgeMask | (lastBreak ? kUCTextBreakIterateMask : 0), uline, lineLen, lastBreak, &breakOffset); 
     1257                 
     1258                if (status != noErr || breakOffset >= lineLen) break; 
    12291259                 
    12301260                bitfield_set(breakOpportunities, breakOffset-1);