#ifdef ENABLE_VECTOR_BASED_TEXT_RENDERING
delete mVectorFontCache;
#endif
-
+ DestroyMatchedPatterns();
FT_Done_FreeType( mFreeTypeLibrary );
}
FcCharSet* characterSet = NULL;
FcPatternGetCharSet( match, FC_CHARSET, 0u, &characterSet );
- FcPatternDestroy( match );
FcPatternDestroy( pattern );
+ mMatchedFcPatternCache.PushBack( match );
mFontCache[id-1u].mCharacterSet = characterSet;
// Add the path to the cache.
}
}
-FcCharSet* FontClient::Plugin::CreateCharacterSetFromDescription( const FontDescription& description ) const
+FcCharSet* FontClient::Plugin::CreateCharacterSetFromDescription( const FontDescription& description )
{
FcCharSet* characterSet = NULL;
FcPattern* match = FcFontMatch( NULL, pattern, &result );
FcPatternGetCharSet( match, FC_CHARSET, 0u, &characterSet );
+ mMatchedFcPatternCache.PushBack( match );
- FcPatternDestroy( match );
FcPatternDestroy( pattern );
}
return characterSet;
}
+void FontClient::Plugin::DestroyMatchedPatterns()
+{
+ for (auto & object : mMatchedFcPatternCache) {
+ FcPatternDestroy(reinterpret_cast<FcPattern*>(object));
+ }
+ mMatchedFcPatternCache.Clear();
+}
+
} // namespace Internal
} // namespace TextAbstraction
*
* @return A character set.
*/
- _FcCharSet* CreateCharacterSetFromDescription( const FontDescription& description ) const;
+ _FcCharSet* CreateCharacterSetFromDescription( const FontDescription& description );
+
+ /**
+ * @brief Destroy all matched Patterns.
+ *
+ */
+ void DestroyMatchedPatterns();
private:
CharacterSetList mCharacterSetCache; ///< Caches character set lists for the validated font.
std::vector<FontIdCacheItem> mFontIdCache; ///< Caches font identifiers for the pairs of font point size and the index to the vector with font descriptions of the validated fonts.
- VectorFontCache* mVectorFontCache; ///< Separate cache for vector data blobs etc.
-
- Vector<EllipsisItem> mEllipsisCache; ///< Caches ellipsis glyphs for a particular point size.
+ VectorFontCache* mVectorFontCache; ///< Separate cache for vector data blobs etc.
+ Vector<EllipsisItem> mEllipsisCache; ///< Caches ellipsis glyphs for a particular point size.
+ Vector<_FcPattern*> mMatchedFcPatternCache; ///< Contain matched FcPattern pointer.
bool mDefaultFontDescriptionCached : 1; ///< Whether the default font is cached or not
};