Textengine
AssetFontStore support for Freetype streams
AssetFontStore is extended to support two font load strategies:
- AssetFontStore::LoadStrategySelector::PreloadStrategy (the old behavior before the extension): entire fonts are loaded into memory once and font data is accessed from there by Text Engine.
- AssetFontStore::LoadStrategySelector::OnRequestLoadStrategy (new behavior, selectable through a strategy selector): small font portions are streamed directly from the asset repository when Freetype (or indirectly Harfbuzz) needs them.
Use DefaultLoadStrategySelector::SetDefaultFontLoadStrategy to select one of these load strategies. Use DefaultLoadStrategySelector::SetDefaultFontLoadStrategyExceptionList to exclude a list of fonts from the selected font load strategy.
Example:
// Load fonts with OnRequestLoadStrategy
selector.SetDefaultFontLoadStrategy(Candera::AssetFontStore::LoadStrategySelector::OnRequestLoadStrategy);
// "Bitstream Vera Sans" font shall be loaded with PreloadStrategy:
const Char* g_fontName[2] = { "ConstructionKit##ConstructionKit#Resources#Fonts#Bitstream Vera Sans", 0 };
selector.SetDefaultFontLoadStrategyExceptionList(g_fontName);
fontStore.SetLoadStrategySelector(&selector);
Courier applications can use Courier::ViewHandler::SetFontStoreProviderCallback to provide specific settings for the Candera::AssetFontStore in use.
Support of Monotype's WorldType-Shaper
Candera supports the WorldType-Shaper of Monotype now. The integration is done to support the font engine 'iType'. With this release complex texts can be shaped. The behavior is similar to HarfBuzz with the difference of a huge performance boost. WT-Shaper may have a higher memory consumtion as a trade-off to performance. The implementation concept is aligned with HarfBuzz to support a flexible exchangeability.
With this the default shaper of iType switches from ComplexScript to WT-Shaper. The corresponding CMake flag CANDERA_TEXTSHAPER has been extended by the entry WorldType-Shaper.