Kaydet (Commit) 578feb2c authored tarafından Tor Lillqvist's avatar Tor Lillqvist Kaydeden (comit) Andras Timar

tdf#95783: Don't calculate width of text with glyph fallback as way too wide

The old code in MultiSalLayout::GetTextBreak() only makes sense if the
base level character width is zero where a fallback level has a
non-zero character width, and vice versa. But this is not the case for
Windows, at least not any more now when using UniscribeLayout and not
SimpleWinLayout.

This simple change fixes that: Only use the width from a fallback
level if the width at the base level is zero. Hopefully it does not
cause regressions for other documents or on other platforms. (But, I
repeat, I find it hard to believe that the intent of the code could
really have been to ever add two or more non-zero widths for the same
character from different levels of fallback and use that.)

Change-Id: Ic66c55db4b7463f9e04fcedec76f1c44f5e62e03
(cherry picked from commit a0d112a5)
Reviewed-on: https://gerrit.libreoffice.org/20172Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
(cherry picked from commit b8711f66)
üst 8fb4de6b
......@@ -1979,9 +1979,12 @@ sal_Int32 MultiSalLayout::GetTextBreak( DeviceCoordinate nMaxWidth, DeviceCoordi
fUnitMul /= rLayout.GetUnitsPerPixel();
for( int i = 0; i < nCharCount; ++i )
{
DeviceCoordinate w = pCharWidths[ i + nCharCount ];
w = (DeviceCoordinate)(w * fUnitMul + 0.5);
pCharWidths[ i ] += w;
if( pCharWidths[ i ] == 0 )
{
DeviceCoordinate w = pCharWidths[ i + nCharCount ];
w = (DeviceCoordinate)(w * fUnitMul + 0.5);
pCharWidths[ i ] = w;
}
}
}
......
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