sw/source/filter/html/htmlgrin.cxx | 70 ++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 28 deletions(-)
New commits: commit d330d1cb36b81026e448dc371075b7bc8c75d33e Author: Caolán McNamara <caol...@redhat.com> Date: Tue Feb 10 09:49:16 2015 +0000 Resolves: tdf#83073 use loaded graphic's width/height as defaults (cherry picked from commit 4327ee505f8507f653c8f4db9ac7503db2e15c3a) Conflicts: sw/source/filter/html/htmlgrin.cxx Change-Id: Idad25f82d884c40c55b886fd7634a6c6e51693c4 Reviewed-on: https://gerrit.libreoffice.org/14402 Tested-by: Michael Stahl <mst...@redhat.com> Reviewed-by: Michael Stahl <mst...@redhat.com> diff --git a/sw/source/filter/html/htmlgrin.cxx b/sw/source/filter/html/htmlgrin.cxx index 9e95fa8..8cc516f 100644 --- a/sw/source/filter/html/htmlgrin.cxx +++ b/sw/source/filter/html/htmlgrin.cxx @@ -312,6 +312,7 @@ void SwHTMLParser::InsertImage() OUString sGrfNm; sal_Int16 eVertOri = text::VertOrientation::TOP; sal_Int16 eHoriOri = text::HoriOrientation::NONE; + bool bWidthProvided=false, bHeightProvided=false; long nWidth=0, nHeight=0; long nVSpace=0, nHSpace=0; @@ -361,6 +362,7 @@ void SwHTMLParser::InsertImage() bPrcWidth = (rOption.GetString().indexOf('%') != -1); if( bPrcWidth && nWidth>100 ) nWidth = 100; + bWidthProvided = true; break; case HTML_O_HEIGHT: // erstmal nur als Pixelwerte merken! @@ -368,6 +370,7 @@ void SwHTMLParser::InsertImage() bPrcHeight = (rOption.GetString().indexOf('%') != -1); if( bPrcHeight && nHeight>100 ) nHeight = 100; + bHeightProvided = true; break; case HTML_O_VSPACE: nVSpace = rOption.GetNumber(); @@ -461,6 +464,42 @@ IMAGE_SETEVENT: } } + Graphic aGraphic; + INetURLObject aGraphicURL( sGrfNm ); + if( aGraphicURL.GetProtocol() == INET_PROT_DATA ) + { + // use embedded base64 encoded data + ::com::sun::star::uno::Sequence< sal_Int8 > aPass; + OUString sBase64Data = sGrfNm.replaceAt(0,22,""); + ::sax::Converter::decodeBase64(aPass, sBase64Data); + if( aPass.hasElements() ) + { + SvMemoryStream aStream(aPass.getArray(), aPass.getLength(), STREAM_READ); + if (GRFILTER_OK == GraphicFilter::GetGraphicFilter().ImportGraphic(aGraphic, "", aStream)) + sGrfNm = ""; + } + } + // sBaseURL is empty if the source is clipboard + else if (sBaseURL.isEmpty()) + { + if (GRFILTER_OK == GraphicFilter::GetGraphicFilter().ImportGraphic(aGraphic, aGraphicURL)) + sGrfNm = ""; + } + + if (!sGrfNm.isEmpty()) + { + aGraphic.SetDefaultType(); + } + + if (!bHeightProvided || !bWidthProvided) + { + Size aPixelSize = aGraphic.GetSizePixel(Application::GetDefaultDevice()); + if (!bWidthProvided) + nWidth = aPixelSize.Width(); + if (!bHeightProvided) + nHeight = aPixelSize.Height(); + } + SfxItemSet aItemSet( pDoc->GetAttrPool(), pCSS1Parser->GetWhichMap() ); SvxCSS1PropertyInfo aPropInfo; if( HasStyleOptions( aStyle, aId, aClass ) ) @@ -694,31 +733,6 @@ IMAGE_SETEVENT: aFrmSize.SetHeightPercent( nPrcHeight ); aFrmSet.Put( aFrmSize ); - Graphic aGraphic; - INetURLObject aGraphicURL( sGrfNm ); - if( aGraphicURL.GetProtocol() == INET_PROT_DATA ) - { - // use embedded base64 encoded data - ::com::sun::star::uno::Sequence< sal_Int8 > aPass; - OUString sBase64Data = sGrfNm.replaceAt(0,22,""); - ::sax::Converter::decodeBase64(aPass, sBase64Data); - if( aPass.hasElements() ) - { - SvMemoryStream aStream(aPass.getArray(), aPass.getLength(), STREAM_READ); - if (GRFILTER_OK == GraphicFilter::GetGraphicFilter().ImportGraphic(aGraphic, "", aStream)) - sGrfNm = ""; - } - } - // sBaseURL is empty if the source is clipboard - else if (sBaseURL.isEmpty()) - { - if (GRFILTER_OK == GraphicFilter::GetGraphicFilter().ImportGraphic(aGraphic, aGraphicURL)) - sGrfNm = ""; - } - if (!sGrfNm.isEmpty()) - { - aGraphic.SetDefaultType(); - } // passing empty sGrfNm here, means we don't want the graphic to be linked SwFrmFmt *pFlyFmt = pDoc->Insert( *pPam, sGrfNm, aEmptyOUStr, &aGraphic, &aFrmSet, NULL, NULL ); @@ -742,10 +756,10 @@ IMAGE_SETEVENT: if( !sAltNm.isEmpty() ) pGrfNd->SetTitle( sAltNm ); - if( bSetTwipSize ) - pGrfNd->SetTwipSize( aGrfSz ); + if( bSetTwipSize ) + pGrfNd->SetTwipSize( aGrfSz ); - pGrfNd->SetChgTwipSize( bChangeFrmSize, bChangeFrmSize ); + pGrfNd->SetChgTwipSize( bChangeFrmSize, bChangeFrmSize ); if( bSetScaleImageMap ) pGrfNd->SetScaleImageMap( true );
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits