提交 a23d90d7 编写于 作者: B bae

7143617: Improve fontmanager layout lookup operations

Reviewed-by: igor, prr, mschoene
上级 063e6a16
...@@ -95,6 +95,10 @@ le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdj ...@@ -95,6 +95,10 @@ le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdj
if (selectMask != 0) { if (selectMask != 0) {
const LookupTable *lookupTable = lookupListTable->getLookupTable(lookup); const LookupTable *lookupTable = lookupListTable->getLookupTable(lookup);
if (!lookupTable)
continue;
le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags); le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
glyphIterator.reset(lookupFlags, selectMask); glyphIterator.reset(lookupFlags, selectMask);
...@@ -136,6 +140,9 @@ le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, Featur ...@@ -136,6 +140,9 @@ le_int32 LookupProcessor::selectLookups(const FeatureTable *featureTable, Featur
for (le_uint16 lookup = 0; lookup < lookupCount; lookup += 1) { for (le_uint16 lookup = 0; lookup < lookupCount; lookup += 1) {
le_uint16 lookupListIndex = SWAPW(featureTable->lookupListIndexArray[lookup]); le_uint16 lookupListIndex = SWAPW(featureTable->lookupListIndexArray[lookup]);
if (lookupListIndex >= lookupSelectCount)
continue;
lookupSelectArray[lookupListIndex] |= featureMask; lookupSelectArray[lookupListIndex] |= featureMask;
lookupOrderArray[store++] = lookupListIndex; lookupOrderArray[store++] = lookupListIndex;
} }
...@@ -147,7 +154,7 @@ LookupProcessor::LookupProcessor(const char *baseAddress, ...@@ -147,7 +154,7 @@ LookupProcessor::LookupProcessor(const char *baseAddress,
Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset, Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures, LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures,
LEErrorCode& success) LEErrorCode& success)
: lookupListTable(NULL), featureListTable(NULL), lookupSelectArray(NULL), : lookupListTable(NULL), featureListTable(NULL), lookupSelectArray(NULL), lookupSelectCount(0),
lookupOrderArray(NULL), lookupOrderCount(0) lookupOrderArray(NULL), lookupOrderCount(0)
{ {
const ScriptListTable *scriptListTable = NULL; const ScriptListTable *scriptListTable = NULL;
...@@ -195,6 +202,8 @@ LookupProcessor::LookupProcessor(const char *baseAddress, ...@@ -195,6 +202,8 @@ LookupProcessor::LookupProcessor(const char *baseAddress,
lookupSelectArray[i] = 0; lookupSelectArray[i] = 0;
} }
lookupSelectCount = lookupListCount;
le_int32 count, order = 0; le_int32 count, order = 0;
le_int32 featureReferences = 0; le_int32 featureReferences = 0;
const FeatureTable *featureTable = NULL; const FeatureTable *featureTable = NULL;
...@@ -211,6 +220,10 @@ LookupProcessor::LookupProcessor(const char *baseAddress, ...@@ -211,6 +220,10 @@ LookupProcessor::LookupProcessor(const char *baseAddress,
le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]); le_uint16 featureIndex = SWAPW(langSysTable->featureIndexArray[feature]);
featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag); featureTable = featureListTable->getFeatureTable(featureIndex, &featureTag);
if (!featureTable)
continue;
featureReferences += SWAPW(featureTable->lookupCount); featureReferences += SWAPW(featureTable->lookupCount);
} }
......
...@@ -90,6 +90,7 @@ protected: ...@@ -90,6 +90,7 @@ protected:
const FeatureListTable *featureListTable; const FeatureListTable *featureListTable;
FeatureMask *lookupSelectArray; FeatureMask *lookupSelectArray;
le_uint32 lookupSelectCount;
le_uint16 *lookupOrderArray; le_uint16 *lookupOrderArray;
le_uint32 lookupOrderCount; le_uint32 lookupOrderCount;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册