summaryrefslogtreecommitdiff
path: root/sw/source/filter/ww8/wrtw8esh.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/ww8/wrtw8esh.cxx')
-rw-r--r--sw/source/filter/ww8/wrtw8esh.cxx16
1 files changed, 13 insertions, 3 deletions
diff --git a/sw/source/filter/ww8/wrtw8esh.cxx b/sw/source/filter/ww8/wrtw8esh.cxx
index 858a721bf79b..a06a244e2879 100644
--- a/sw/source/filter/ww8/wrtw8esh.cxx
+++ b/sw/source/filter/ww8/wrtw8esh.cxx
@@ -2209,9 +2209,19 @@ sal_Int32 SwBasicEscherEx::ToFract16(sal_Int32 nVal, sal_uInt32 nMax) const
{
if (nMax)
{
- sal_Int32 nMSVal = (nVal / 65536) * nMax;
- nMSVal += (nVal * 65536 ) / nMax;
- return nMSVal;
+ if (nVal >= 0)
+ {
+ sal_Int32 nMSVal = (nVal / 65536) * nMax;
+ nMSVal += (nVal * 65536) / nMax;
+ return nMSVal;
+ } else {
+ // negative fraction does not have "-0", fractional part is always
+ // positive: -0.4 represented as -1 + 0.6
+ sal_Int32 const nDiv = (nVal / sal_Int32(nMax)) - 1;
+ sal_uInt32 nMSVal = (nDiv << 16) & 0xffff0000;
+ nMSVal += (nVal * 65536) / sal_Int32(nMax) + (-nDiv * 65536);
+ return nMSVal;
+ }
}
return 0;
}