summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver-Rainer Wittmann <orw@apache.org>2012-07-06 07:07:48 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-04-15 02:18:24 +0100
commit7f71ed1c62775a4e5b2efebf55f284a5c32b2df4 (patch)
treed73528a5e0721fe98261ee2913daf00712942110
parenta63c9bac6a6223ac716b7bcb590dac4eb01d5def (diff)
Resolves: #i119567# wmf in PICT assure correct scaling...
in case that the size is substituted. Found by: Yan Ji <yanji.yj at gmail dot com> Patch by: zjchen <zjchencdl at gmail dot com> Review by: Oliver <orw at apache dot org> (cherry picked from commit 69ea079e09f64ac037686f874617efc63d0449f5) Change-Id: I1eb4b0be184fcefca26eee5f98ba6135a32574c2
-rw-r--r--sw/source/filter/ww8/wrtww8gr.cxx50
1 files changed, 38 insertions, 12 deletions
diff --git a/sw/source/filter/ww8/wrtww8gr.cxx b/sw/source/filter/ww8/wrtww8gr.cxx
index 74f46da0b895..32c5b2ece54a 100644
--- a/sw/source/filter/ww8/wrtww8gr.cxx
+++ b/sw/source/filter/ww8/wrtww8gr.cxx
@@ -630,8 +630,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;
@@ -646,26 +647,51 @@ void SwWW8WrGrf::WritePICFHeader(SvStream& rStrm, const sw::Frame &rFly,
Set_UInt16(pArr, msword_cast<sal_uInt16>(aGrTwipSz.Width()));
Set_UInt16(pArr, msword_cast<sal_uInt16>(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 );
}