mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-18 22:18:16 +00:00
usp10: Rewrite ScriptStringXtoCP to make use of ScriptXtoCP.
This commit is contained in:
parent
d7ea24d56d
commit
f026616c22
|
@ -991,14 +991,11 @@ HRESULT WINAPI ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS ssa, int icp, BOOL fTrai
|
||||||
* ScriptStringXtoCP (USP10.@)
|
* ScriptStringXtoCP (USP10.@)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int* piCh, int* piTrailing)
|
HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int* piCh, int* piTrailing)
|
||||||
{
|
{
|
||||||
StringAnalysis* analysis = ssa;
|
StringAnalysis* analysis = ssa;
|
||||||
int i;
|
int i;
|
||||||
int j;
|
|
||||||
int runningX = 0;
|
|
||||||
int runningCp = 0;
|
int runningCp = 0;
|
||||||
int width;
|
|
||||||
|
|
||||||
TRACE("(%p), %d, (%p), (%p)\n", ssa, iX, piCh, piTrailing);
|
TRACE("(%p), %d, (%p), (%p)\n", ssa, iX, piCh, piTrailing);
|
||||||
|
|
||||||
|
@ -1022,24 +1019,33 @@ HRESULT WINAPI ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS ssa, int iX, int* piCh,
|
||||||
|
|
||||||
for(i=0; i<analysis->numItems; i++)
|
for(i=0; i<analysis->numItems; i++)
|
||||||
{
|
{
|
||||||
for(j=0; j<analysis->glyphs[i].numGlyphs; j++)
|
int CP = analysis->pItem[i+1].iCharPos - analysis->pItem[i].iCharPos;
|
||||||
|
/* initialize max extents for uninitialized runs */
|
||||||
|
if (analysis->glyphs[i].iMaxPosX == -1)
|
||||||
{
|
{
|
||||||
width = analysis->glyphs[i].piAdvance[j];
|
if (analysis->pItem[i].a.fRTL)
|
||||||
if(iX < (runningX + width))
|
ScriptCPtoX(0, FALSE, CP, analysis->glyphs[i].numGlyphs, analysis->glyphs[i].pwLogClust,
|
||||||
{
|
analysis->glyphs[i].psva, analysis->glyphs[i].piAdvance,
|
||||||
*piCh = runningCp;
|
&analysis->pItem[i].a, &analysis->glyphs[i].iMaxPosX);
|
||||||
if((iX - runningX) > width/2)
|
else
|
||||||
*piTrailing = TRUE;
|
ScriptCPtoX(CP, TRUE, CP, analysis->glyphs[i].numGlyphs, analysis->glyphs[i].pwLogClust,
|
||||||
else
|
analysis->glyphs[i].psva, analysis->glyphs[i].piAdvance,
|
||||||
*piTrailing = FALSE;
|
&analysis->pItem[i].a, &analysis->glyphs[i].iMaxPosX);
|
||||||
|
|
||||||
if (analysis->pItem[i].a.fRTL)
|
|
||||||
*piTrailing = !*piTrailing;
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
runningX += width;
|
|
||||||
runningCp++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (iX > analysis->glyphs[i].iMaxPosX)
|
||||||
|
{
|
||||||
|
iX -= analysis->glyphs[i].iMaxPosX;
|
||||||
|
runningCp += CP;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScriptXtoCP(iX, CP, analysis->glyphs[i].numGlyphs, analysis->glyphs[i].pwLogClust,
|
||||||
|
analysis->glyphs[i].psva, analysis->glyphs[i].piAdvance,
|
||||||
|
&analysis->pItem[i].a, piCh, piTrailing);
|
||||||
|
*piCh += runningCp;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* out of range */
|
/* out of range */
|
||||||
|
|
Loading…
Reference in a new issue