Commit 1967fae8 authored by Aric Stewart's avatar Aric Stewart Committed by Alexandre Julliard

user32: Have a fallback in linebreaking if uniscribe fails to analyse a string.

parent 4bc418b3
...@@ -598,10 +598,14 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta ...@@ -598,10 +598,14 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta
const SIZE *sz; const SIZE *sz;
EDIT_InvalidateUniscribeData_linedef(current_line); EDIT_InvalidateUniscribeData_linedef(current_line);
EDIT_UpdateUniscribeData_linedef(es, NULL, current_line); EDIT_UpdateUniscribeData_linedef(es, NULL, current_line);
if (current_line->ssa)
{
sz = ScriptString_pSize(current_line->ssa); sz = ScriptString_pSize(current_line->ssa);
/* Calculate line width */ /* Calculate line width */
current_line->width = sz->cx; current_line->width = sz->cx;
} }
else current_line->width = es->char_width * current_line->net_length;
}
else current_line->width = 0; else current_line->width = 0;
/* FIXME: check here for lines that are too wide even in AUTOHSCROLL (> 32767 ???) */ /* FIXME: check here for lines that are too wide even in AUTOHSCROLL (> 32767 ???) */
...@@ -644,6 +648,8 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta ...@@ -644,6 +648,8 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta
EDIT_InvalidateUniscribeData_linedef(current_line); EDIT_InvalidateUniscribeData_linedef(current_line);
EDIT_UpdateUniscribeData_linedef(es, NULL, current_line); EDIT_UpdateUniscribeData_linedef(es, NULL, current_line);
if (current_line->ssa)
{
count = ScriptString_pcOutChars(current_line->ssa); count = ScriptString_pcOutChars(current_line->ssa);
piDx = HeapAlloc(GetProcessHeap(),0,sizeof(INT) * (*count)); piDx = HeapAlloc(GetProcessHeap(),0,sizeof(INT) * (*count));
ScriptStringGetLogicalWidths(current_line->ssa,piDx); ScriptStringGetLogicalWidths(current_line->ssa,piDx);
...@@ -657,6 +663,9 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta ...@@ -657,6 +663,9 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta
prev = 1; prev = 1;
HeapFree(GetProcessHeap(),0,piDx); HeapFree(GetProcessHeap(),0,piDx);
} }
else
prev = (fw / es->char_width);
}
/* If the first line we are calculating, wrapped before istart, we must /* If the first line we are calculating, wrapped before istart, we must
* adjust istart in order for this to be reflected in the update region. */ * adjust istart in order for this to be reflected in the update region. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment