Changeset 919 for trunk/Subtitles

Show
Ignore:
Timestamp:
07/29/08 22:44:52 (4 months ago)
Author:
astrange
Message:

SSA: Support vertical text (fonts with @ in the name).

Files:

Legend:

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

    r901 r919  
    350350-(void*)completedStyleParsing:(SubStyle*)s 
    351351{ 
    352         const ATSUAttributeTag tags[] = {kATSUStyleRenderingOptionsTag, kATSUSizeTag, kATSUQDBoldfaceTag, kATSUQDItalicTag, kATSUQDUnderlineTag, kATSUStyleStrikeThroughTag, kATSUFontTag}; 
    353         const ByteCount          sizes[] = {sizeof(ATSStyleRenderingOptions), sizeof(Fixed), sizeof(Boolean), sizeof(Boolean), sizeof(Boolean), sizeof(Boolean), sizeof(ATSUFontID)}; 
    354          
    355         ATSUFontID font = GetFontIDForSSAName(s->fontname); 
     352        const ATSUAttributeTag tags[] = {kATSUStyleRenderingOptionsTag, kATSUSizeTag, kATSUQDBoldfaceTag, kATSUQDItalicTag, kATSUQDUnderlineTag, kATSUStyleStrikeThroughTag, kATSUFontTag, kATSUVerticalCharacterTag}; 
     353        const ByteCount          sizes[] = {sizeof(ATSStyleRenderingOptions), sizeof(Fixed), sizeof(Boolean), sizeof(Boolean), sizeof(Boolean), sizeof(Boolean), sizeof(ATSUFontID), sizeof(ATSUVerticalCharacterType)}; 
     354         
     355        NSString *fn = s->fontname; 
     356        ATSUVerticalCharacterType vertical = ParseFontVerticality(&fn) ? kATSUStronglyVertical : kATSUStronglyHorizontal; 
     357        ATSUFontID font = GetFontIDForSSAName(fn); 
    356358        ATSFontRef fontRef = font; 
    357359        ATSStyleRenderingOptions opt = kATSStyleApplyAntiAliasing; 
     
    360362        ATSUStyle style; 
    361363                 
    362         const ATSUAttributeValuePtr vals[] = {&opt, &size, &b, &i, &u, &st, &font}; 
     364        const ATSUAttributeValuePtr vals[] = {&opt, &size, &b, &i, &u, &st, &font, &vertical}; 
    363365         
    364366        if (!s->platformSizeScale) s->platformSizeScale = GetWinFontSizeScale(fontRef); 
     
    462464                        sv(); 
    463465                        { 
     466                                ATSUVerticalCharacterType vertical = ParseFontVerticality(&sval) ? kATSUStronglyVertical : kATSUStronglyHorizontal; 
    464467                                ATSUFontID font = GetFontIDForSSAName(sval); 
    465468                                 
    466                                 if (font) SetATSUStyleOther(spanEx->style, kATSUFontTag, sizeof(ATSUFontID), &font); 
     469                                if (font) { 
     470                                        SetATSUStyleFlag(spanEx->style, kATSUVerticalCharacterTag, vertical); 
     471                                        SetATSUStyleOther(spanEx->style, kATSUFontTag, sizeof(ATSUFontID), &font); 
     472                                } 
    467473                        } 
    468474                        break; 
  • trunk/Subtitles/SubContext.h

    r872 r919  
    5555 
    5656extern UInt8 SSA2ASSAlignment(UInt8 a); 
    57 void ParseASSAlignment(UInt8 a, UInt8 *alignH, UInt8 *alignV); 
     57extern void ParseASSAlignment(UInt8 a, UInt8 *alignH, UInt8 *alignV); 
    5858extern SubRGBAColor ParseSSAColor(unsigned rgb); 
     59extern BOOL ParseFontVerticality(NSString **fontname); 
  • trunk/Subtitles/SubContext.m

    r891 r919  
    6262                case 3: case 6: case 9: *alignH = kSubAlignmentRight; break; 
    6363        } 
     64} 
     65 
     66BOOL ParseFontVerticality(NSString **fontname) 
     67{ 
     68        if ([*fontname characterAtIndex:0] == '@') { 
     69                *fontname = [*fontname substringFromIndex:1]; 
     70                return YES; 
     71        } 
     72        return NO; 
    6473} 
    6574