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; }