void SFTextRelease(SFTextRef sfText) {
    sfText->_retainCount--;
    
    if (sfText->_retainCount == 0) {
        SFFreeStringRecord(sfText->_record);
        SFFontRelease(sfText->_sfFont);
        free(sfText);
    }
}
void SFTextSetFont(SFTextRef sfText, SFFontRef sfFont) {
    if (sfFont) {
        if (sfFont != sfText->_sfFont) {
            SFFontRelease(sfText->_sfFont);
            sfText->_sfFont = SFFontRetain(sfFont);
            
            if (sfText->_record) {
                SFClearCharRecord(sfText->_record);
                applyFontTables(sfText->_sfFont, sfText->_record);
            }
        }
    } else {
        SFFreeStringRecord(sfText->_record);
        sfText->_record = NULL;
    }
}
示例#3
0
void SFFontRelease(SFFontRef sfFont) {
    if (!sfFont)
        return;
    
    sfFont->_retainCount--;
    
    if (sfFont->_retainCount == 0) {
        if (sfFont->_parent)
    		SFFontRelease(sfFont->_parent);
    	else {
            
#ifdef SF_IOS_CG
    		CGFontRelease(sfFont->_cgFont);
#else
    		if (sfFont->_ftFace)
    			FT_Done_Face(sfFont->_ftFace);
            
    		if (sfFont->_ftLib)
    			FT_Done_FreeType(sfFont->_ftLib);
#endif
            
    		if (sfFont->_availableFontTables & itCMAP)
    			SFFreeCMAP(&sfFont->_cmap);
            
    		if (sfFont->_availableFontTables & itGDEF)
    			SFFreeGDEF(&sfFont->_gdef);
            
    		if (sfFont->_availableFontTables & itGSUB)
    			SFFreeGSUB(&sfFont->_gsub);
            
    		if (sfFont->_availableFontTables & itGPOS)
    			SFFreeGPOS(&sfFont->_gpos);
    	}
        
        free(sfFont);
    }
}