FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, uint32_t checksum, uint8_t* pData, uint32_t size, int font_offset) { CTTFontDesc* pFontDesc = new CTTFontDesc; pFontDesc->m_Type = 2; pFontDesc->m_pFontData = pData; for (int i = 0; i < 16; i++) pFontDesc->m_TTCFace.m_pFaces[i] = nullptr; pFontDesc->m_RefCount++; m_FaceMap[KeyNameFromSize(ttc_size, checksum)] = pFontDesc; int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); return pFontDesc->m_TTCFace.m_pFaces[face_index]; }
FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, FX_DWORD checksum, int font_offset, FX_LPBYTE& pFontData) { CFX_ByteString key; key.Format("%d:%d", ttc_size, checksum); CTTFontDesc* pFontDesc = NULL; m_FaceMap.Lookup(key, (void*&)pFontDesc); if (pFontDesc == NULL) { return NULL; } pFontData = pFontDesc->m_pFontData; pFontDesc->m_RefCount ++; int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); if (pFontDesc->m_TTCFace.m_pFaces[face_index] == NULL) { pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); } return pFontDesc->m_TTCFace.m_pFaces[face_index]; }
FXFT_Face CFX_FontMgr::AddCachedTTCFace(int ttc_size, FX_DWORD checksum, uint8_t* pData, FX_DWORD size, int font_offset) { CFX_ByteString key; key.Format("%d:%d", ttc_size, checksum); CTTFontDesc* pFontDesc = new CTTFontDesc; pFontDesc->m_Type = 2; pFontDesc->m_pFontData = pData; for (int i = 0; i < 16; i ++) { pFontDesc->m_TTCFace.m_pFaces[i] = NULL; } pFontDesc->m_RefCount ++; key.Format("%d:%d", ttc_size, checksum); m_FaceMap.SetAt(key, pFontDesc); int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); return pFontDesc->m_TTCFace.m_pFaces[face_index]; }
FXFT_Face CFX_FontMgr::GetCachedTTCFace(int ttc_size, uint32_t checksum, int font_offset, uint8_t*& pFontData) { auto it = m_FaceMap.find(KeyNameFromSize(ttc_size, checksum)); if (it == m_FaceMap.end()) return nullptr; CTTFontDesc* pFontDesc = it->second; pFontData = pFontDesc->m_pFontData; pFontDesc->m_RefCount++; int face_index = GetTTCIndex(pFontDesc->m_pFontData, ttc_size, font_offset); if (!pFontDesc->m_TTCFace.m_pFaces[face_index]) { pFontDesc->m_TTCFace.m_pFaces[face_index] = GetFixedFace(pFontDesc->m_pFontData, ttc_size, face_index); } return pFontDesc->m_TTCFace.m_pFaces[face_index]; }