8025034: Improve layout lookups
Reviewed-by: mschoene, vadim, srl
This commit is contained in:
parent
ba37926d77
commit
132ff0eea1
@ -138,7 +138,7 @@ le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIt
|
||||
le_int32 LookupProcessor::selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success)
|
||||
{
|
||||
le_uint16 lookupCount = featureTable.isValid()? SWAPW(featureTable->lookupCount) : 0;
|
||||
le_int32 store = order;
|
||||
le_uint32 store = (le_uint32)order;
|
||||
|
||||
LEReferenceToArrayOf<le_uint16> lookupListIndexArray(featureTable, success, featureTable->lookupListIndexArray, lookupCount);
|
||||
|
||||
@ -147,6 +147,9 @@ le_int32 LookupProcessor::selectLookups(const LEReferenceTo<FeatureTable> &featu
|
||||
if (lookupListIndex >= lookupSelectCount) {
|
||||
continue;
|
||||
}
|
||||
if (store >= lookupOrderCount) {
|
||||
continue;
|
||||
}
|
||||
|
||||
lookupSelectArray[lookupListIndex] |= featureMask;
|
||||
lookupOrderArray[store++] = lookupListIndex;
|
||||
@ -246,7 +249,7 @@ LookupProcessor::LookupProcessor(const LETableReference &baseAddress,
|
||||
|
||||
if (requiredFeatureIndex != 0xFFFF) {
|
||||
requiredFeatureTable = featureListTable->getFeatureTable(featureListTable, requiredFeatureIndex, &requiredFeatureTag, success);
|
||||
featureReferences += SWAPW(featureTable->lookupCount);
|
||||
featureReferences += SWAPW(requiredFeatureTable->lookupCount);
|
||||
}
|
||||
|
||||
lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences);
|
||||
@ -254,6 +257,7 @@ LookupProcessor::LookupProcessor(const LETableReference &baseAddress,
|
||||
success = LE_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
}
|
||||
lookupOrderCount = featureReferences;
|
||||
|
||||
for (le_int32 f = 0; f < featureMapCount; f += 1) {
|
||||
FeatureMap fm = featureMap[f];
|
||||
|
Loading…
Reference in New Issue
Block a user