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