Beispiel #1
0
SFFontRef SFFontMakeClone(SFFontRef sfFont, SFFloat size) {
	SFFont *clone = malloc(sizeof(SFFont));
    
    sfFont = SFFontRetain(sfFont);
    
#ifdef SF_IOS_CG
	clone->_cgFont = sfFont->_cgFont;
#else
	clone->_ftLib = sfFont->_ftLib;
	clone->_ftFace = sfFont->_ftFace;
	clone->_ftSlot = sfFont->_ftSlot;
#endif
    
	setFontSize(clone, size);
    
	clone->_availableFontTables = sfFont->_availableFontTables;
    
	clone->_cmap = sfFont->_cmap;
	clone->_gdef = sfFont->_gdef;
	clone->_gsub = sfFont->_gsub;
	clone->_gpos = sfFont->_gpos;
	clone->_parent = sfFont;
	clone->_retainCount = 1;
    
	return clone;
}
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;
    }
}
SFTextRef SFTextCreateWithString(const SFUnichar *str, int length, SFFontRef sfFont) {
    SFTextRef sfText = malloc(sizeof(SFText));
    
    sfText->_str = str;
    sfText->_strLength = length;
    sfText->_sfFont = SFFontRetain(sfFont);
    sfText->_writingDirection = SFWritingDirectionRTL;

    sfText->_record = NULL;
    
    if (str && length > -1 && sfFont) {
        sfText->_record = SFMakeStringRecordForBaseLevel(str, length, sfText->_writingDirection - 1);
        applyFontTables(sfFont, sfText->_record);
    }
    
    sfText->_txtAlign = SFTextAlignmentRight;
    sfText->_retainCount = 1;
    
    return sfText;
}