diff options
Diffstat (limited to 'sw/source/filter/ww8/wrtw8esh.cxx')
-rw-r--r-- | sw/source/filter/ww8/wrtw8esh.cxx | 16 |
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; } |