From 69ea079e09f64ac037686f874617efc63d0449f5 Mon Sep 17 00:00:00 2001 From: Oliver-Rainer Wittmann Date: Fri, 6 Jul 2012 07:07:48 +0000 Subject: #119567# - method - assure correct scaling in case that the size is substituted. Found by: Yan Ji Patch by: zjchen Review by: Oliver --- sw/source/filter/ww8/wrtww8gr.cxx | 50 +++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 12 deletions(-) (limited to 'sw') diff --git a/sw/source/filter/ww8/wrtww8gr.cxx b/sw/source/filter/ww8/wrtww8gr.cxx index 2f9b94552558..114dcf7b9023 100644 --- a/sw/source/filter/ww8/wrtww8gr.cxx +++ b/sw/source/filter/ww8/wrtww8gr.cxx @@ -601,8 +601,9 @@ void SwWW8WrGrf::WritePICFHeader(SvStream& rStrm, const sw::Frame &rFly, substitute the final size and loose on retaining the scaling factor but still keep the correct display size anyway. */ - if ( (aGrTwipSz.Width() > SHRT_MAX) || (aGrTwipSz.Height() > SHRT_MAX) - || (aGrTwipSz.Width() < 0 ) || (aGrTwipSz.Height() < 0) ) + const bool bIsSubstitutedSize = (aGrTwipSz.Width() > SHRT_MAX) || (aGrTwipSz.Height() > SHRT_MAX) || + (aGrTwipSz.Width() < 0 ) || (aGrTwipSz.Height() < 0); + if ( bIsSubstitutedSize ) { aGrTwipSz.Width() = nWidth; aGrTwipSz.Height() = nHeight; @@ -617,26 +618,51 @@ void SwWW8WrGrf::WritePICFHeader(SvStream& rStrm, const sw::Frame &rFly, Set_UInt16(pArr, msword_cast(aGrTwipSz.Width())); Set_UInt16(pArr, msword_cast(aGrTwipSz.Height())); - if( aGrTwipSz.Width() + nXSizeAdd ) // set mx + if ( aGrTwipSz.Width() + nXSizeAdd ) // set mx { - double fVal = nWidth * 1000.0 / (aGrTwipSz.Width() + nXSizeAdd); - Set_UInt16( pArr, (sal_uInt16)::rtl::math::round(fVal) ); + if ( !bIsSubstitutedSize ) + { + const double fVal = nWidth * 1000.0 / (aGrTwipSz.Width() + nXSizeAdd ); + Set_UInt16( pArr, (sal_uInt16)::rtl::math::round(fVal) ); + } + else + { + Set_UInt16( pArr, 1000 ); + } } else + { pArr += 2; + } - if( aGrTwipSz.Height() + nYSizeAdd ) // set my + if ( aGrTwipSz.Height() + nYSizeAdd ) // set my { - double fVal = nHeight * 1000.0 / (aGrTwipSz.Height() + nYSizeAdd); - Set_UInt16( pArr, (sal_uInt16)::rtl::math::round(fVal) ); + if ( !bIsSubstitutedSize ) + { + const double fVal = nHeight * 1000.0 / (aGrTwipSz.Height() + nYSizeAdd); + Set_UInt16( pArr, (sal_uInt16)::rtl::math::round(fVal) ); + } + else + { + Set_UInt16( pArr, 1000 ); + } } else + { pArr += 2; + } - Set_UInt16( pArr, nCropL ); // set dxaCropLeft - Set_UInt16( pArr, nCropT ); // set dyaCropTop - Set_UInt16( pArr, nCropR ); // set dxaCropRight - Set_UInt16( pArr, nCropB ); // set dyaCropBottom + if ( !bIsSubstitutedSize ) + { + Set_UInt16( pArr, nCropL ); // set dxaCropLeft + Set_UInt16( pArr, nCropT ); // set dyaCropTop + Set_UInt16( pArr, nCropR ); // set dxaCropRight + Set_UInt16( pArr, nCropB ); // set dyaCropBottom + } + else + { + pArr += 8; + } rStrm.Write( aArr, nHdrLen ); } -- cgit