Limit GetJustifiedGlyphs only to scripts with custom justification character

This commit is contained in:
Ebrahim Byagowi 2016-04-01 15:36:40 +00:00
parent 32ae9d1b3f
commit adf20ba0d1
1 changed files with 60 additions and 38 deletions

View File

@ -815,7 +815,7 @@ retry_getglyphs:
} }
// TODO: get lineWith from somewhere // TODO: get lineWith from somewhere
FLOAT lineWidth = 15000; FLOAT lineWidth = 60000;
FLOAT* justifiedGlyphAdvances = FLOAT* justifiedGlyphAdvances =
(FLOAT*) malloc (maxGlyphCount * sizeof (FLOAT)); (FLOAT*) malloc (maxGlyphCount * sizeof (FLOAT));
@ -830,6 +830,18 @@ retry_getglyphs:
return false; return false;
} }
DWRITE_SCRIPT_PROPERTIES scriptProperties;
hr = analyzer->GetScriptProperties (runHead->mScript, &scriptProperties);
if (FAILED (hr))
{
FAIL ("Analyzer failed to get script properties.");
return false;
}
uint32_t justificationCharacter = scriptProperties.justificationCharacter;
// if a script justificationCharacter is not space, it can have GetJustifiedGlyphs
if (justificationCharacter != 32)
{
retry_getjustifiedglyphs: retry_getjustifiedglyphs:
UINT16* modifiedClusterMap = (UINT16*) malloc (maxGlyphCount * sizeof (UINT16)); UINT16* modifiedClusterMap = (UINT16*) malloc (maxGlyphCount * sizeof (UINT16));
UINT16* modifiedGlyphIndices = (UINT16*) malloc (maxGlyphCount * sizeof (UINT16)); UINT16* modifiedGlyphIndices = (UINT16*) malloc (maxGlyphCount * sizeof (UINT16));
@ -872,9 +884,19 @@ retry_getjustifiedglyphs:
glyphAdvances = modifiedGlyphAdvances; glyphAdvances = modifiedGlyphAdvances;
glyphOffsets = modifiedGlyphOffsets; glyphOffsets = modifiedGlyphOffsets;
free(justificationOpportunities);
free(justifiedGlyphAdvances); free(justifiedGlyphAdvances);
free(justifiedGlyphOffsets); free(justifiedGlyphOffsets);
}
else
{
free(glyphAdvances);
free(glyphOffsets);
glyphAdvances = justifiedGlyphAdvances;
glyphOffsets = justifiedGlyphOffsets;
}
free(justificationOpportunities);
#endif #endif