Changeset 846

Show
Ignore:
Timestamp:
04/17/08 08:17:35 (5 months ago)
Author:
astrange
Message:

Fix the bug causing newlines to be added in the wrong place.

Files:

Legend:

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

    r845 r846  
    654654} 
    655655 
    656 static UniCharArrayOffset BreakOneLineSpan(ATSUTextLayout layout, SubRenderDiv *div, TextBreakLocatorRef breakLocator
    657                                                                                    ATSLayoutRecord *records, ItemCount lineLen, Fixed idealLineWidth, Fixed originalLineWidth, Fixed maximumLineWidth, unsigned numBreaks, unichar *uline
     656static UniCharArrayOffset BreakOneLineSpan(ATSUTextLayout layout, SubRenderDiv *div, unsigned char *breakOpportunities
     657                                                                                   ATSLayoutRecord *records, ItemCount lineLen, Fixed idealLineWidth, Fixed originalLineWidth, Fixed maximumLineWidth, unsigned numBreaks
    658658{                
    659659        int recOffset = 0; 
     
    661661        BOOL foundABreak; 
    662662        UniCharArrayOffset lastBreakOffset = 0; 
    663         declare_bitfield(breakOpportunities, lineLen); 
    664          
    665         FindAllPossibleLineBreaks(breakLocator, uline, lineLen, breakOpportunities); 
    666          
    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      
     663         
    697664        do { 
    698665                int j, lastIndex = 0; 
     
    739706{ 
    740707        UniCharArrayOffset hardBreaks[numHardBreaks+2]; 
     708        declare_bitfield(breakOpportunities, textLen); 
     709         
    741710        float fWidth = FixedToFloat(breakingWidth); 
    742711         
    743712        ATSUGetSoftLineBreaks(layout, kATSUFromTextBeginning, kATSUToTextEnd, numHardBreaks, &hardBreaks[1], NULL);      
    744         int i
    745          
     713        FindAllPossibleLineBreaks(breakLocator, utext, textLen, breakOpportunities)
     714                
    746715        hardBreaks[0] = 0; 
    747716        hardBreaks[numHardBreaks+1] = textLen; 
     
    763732                        ATSUDirectGetLayoutDataArrayPtrFromTextLayout(layout, thisBreak, kATSUDirectDataLayoutRecordATSLayoutRecordCurrent, (void*)&records, &numRecords); 
    764733                                                 
    765                         UniCharArrayOffset res = BreakOneLineSpan(layout, div, breakLocator, records, numRecords, idealBreakWidth, fixLineWidth, breakingWidth, idealSplitLines-1, &utext[thisBreak]); 
     734                        UniCharArrayOffset res = BreakOneLineSpan(layout, div, breakOpportunities, records, numRecords, idealBreakWidth, fixLineWidth, breakingWidth, idealSplitLines-1); 
    766735                         
    767736                        if (res) ATSUBatchBreakLines(layout, res, nextBreak - res, breakingWidth, NULL);