std::string FontRendererImpl::GetFontKey(ComPtr<IDWriteFontFace> fontFace, float emSize) { // get the file reference key uint32_t reqFiles = 1; IDWriteFontFile* file; fontFace->GetFiles(&reqFiles, &file); const void* referenceKey; uint32_t referenceKeySize; file->GetReferenceKey(&referenceKey, &referenceKeySize); // store in a buffer and append the size uint32_t referenceKeySizeTarget = min(referenceKeySize, 128); char refKeyBuffer[256]; memcpy(refKeyBuffer, referenceKey, referenceKeySizeTarget); *(float*)&refKeyBuffer[referenceKeySizeTarget] = emSize; // release the file file->Release(); return std::string(refKeyBuffer, referenceKeySizeTarget + 4); }
void QWinRTFontDatabase::releaseHandle(void *handle) { if (!handle) return; IDWriteFontFile *fontFile = reinterpret_cast<IDWriteFontFile *>(handle); if (m_fonts.contains(fontFile)) { m_fonts.remove(fontFile); fontFile->Release(); return; } QBasicFontDatabase::releaseHandle(handle); }