diff options
-rw-r--r-- | filter/source/msfilter/msdffimp.cxx | 8 | ||||
-rw-r--r-- | sw/qa/extras/ww8export/ww8export2.cxx | 6 | ||||
-rw-r--r-- | sw/source/core/edit/edfcol.cxx | 20 |
3 files changed, 24 insertions, 10 deletions
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx index fdc3f1e3a5dd..1fc80da83cb8 100644 --- a/filter/source/msfilter/msdffimp.cxx +++ b/filter/source/msfilter/msdffimp.cxx @@ -4419,13 +4419,13 @@ SdrObject* SvxMSDffManager::ImportShape( const DffRecordHeader& rHd, SvStream& r OutputDevice* pOut = Application::GetDefaultDevice(); vcl::Font aFont( pOut->GetFont() ); aFont.SetFamilyName( aFontName ); - auto nTextWidth = pOut->GetTextWidth( aObjectText ); + tools::Rectangle aBoundingRect; + pOut->GetTextBoundRect( aBoundingRect, aObjectText ); OUString aObjName = GetPropertyString(DFF_Prop_wzName, rSt); - if ( nTextWidth && aObjData.eShapeType == mso_sptTextPlainText && aObjName.match("PowerPlusWaterMarkObject")) + if ( aBoundingRect.GetWidth() && aObjData.eShapeType == mso_sptTextPlainText && aObjName.match( "PowerPlusWaterMarkObject" ) ) { - fRatio = aFont.GetFontSize().Height(); - fRatio /= nTextWidth; + fRatio = (double)aBoundingRect.GetHeight() / aBoundingRect.GetWidth(); sal_Int32 nNewHeight = fRatio * aObjData.aBoundRect.getWidth(); sal_Int32 nPaddingY = aObjData.aBoundRect.getHeight() - nNewHeight; diff --git a/sw/qa/extras/ww8export/ww8export2.cxx b/sw/qa/extras/ww8export/ww8export2.cxx index 94039067e58d..1c180173f11b 100644 --- a/sw/qa/extras/ww8export/ww8export2.cxx +++ b/sw/qa/extras/ww8export/ww8export2.cxx @@ -24,6 +24,7 @@ #include <ftninfo.hxx> #include <pagedesc.hxx> +#include <editeng/unoprnms.hxx> class Test : public SwModelTestBase { @@ -269,7 +270,10 @@ DECLARE_WW8EXPORT_TEST(testTdf91687, "tdf91687.doc") uno::Reference<drawing::XShape> xWatermark = getShape(1); uno::Reference<beans::XPropertySet> xWatermarkProperties(xWatermark, uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL((sal_Int32)5172, xWatermark->getSize().Height); + sal_Int32 nHeight = 0; + xWatermarkProperties->getPropertyValue(UNO_NAME_TEXT_UPPERDIST) >>= nHeight; + + CPPUNIT_ASSERT_EQUAL((sal_Int32)5172, xWatermark->getSize().Height + nHeight); CPPUNIT_ASSERT_EQUAL((sal_Int32)18105, xWatermark->getSize().Width); } diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx index 0e2fc36051bc..2b32ccfb9f0d 100644 --- a/sw/source/core/edit/edfcol.cxx +++ b/sw/source/core/edit/edfcol.cxx @@ -1307,14 +1307,22 @@ void lcl_placeWatermarkInHeader(const SfxWatermarkItem& rWatermark, // Calc the ratio. double fRatio = 0; + double fRatioFrame = 0; OutputDevice* pOut = Application::GetDefaultDevice(); vcl::Font aFont(pOut->GetFont()); aFont.SetFamilyName(sFont); - auto nTextWidth = pOut->GetTextWidth(rWatermark.GetText()); - if (nTextWidth) + + tools::Rectangle aBoundingRect; + pOut->GetTextBoundRect(aBoundingRect, rWatermark.GetText()); + if (aBoundingRect.GetWidth()) { - fRatio = aFont.GetFontSize().Height(); - fRatio /= nTextWidth; + fRatio = (double)aBoundingRect.GetHeight() / aBoundingRect.GetWidth(); + auto nTextWidth = pOut->GetTextWidth(rWatermark.GetText()); + if (nTextWidth) + { + fRatioFrame = aFont.GetFontSize().Height(); + fRatioFrame /= nTextWidth; + } } // Calc the size. @@ -1339,7 +1347,8 @@ void lcl_placeWatermarkInHeader(const SfxWatermarkItem& rWatermark, xPageStyle->getPropertyValue(UNO_NAME_BOTTOM_MARGIN) >>= nBottomMargin; nWidth = aSize.Height - nTopMargin - nBottomMargin; } - sal_Int32 nHeight = nWidth * fRatio; + sal_Int32 nHeight = fRatio * nWidth; + sal_Int32 nFrameHeight = fRatioFrame * nWidth; // Create and insert the shape. uno::Reference<drawing::XShape> xShape(xMultiServiceFactory->createInstance(aShapeServiceName), uno::UNO_QUERY); @@ -1379,6 +1388,7 @@ void lcl_placeWatermarkInHeader(const SfxWatermarkItem& rWatermark, xPropertySet->setPropertyValue(UNO_NAME_VERT_ORIENT_RELATION, uno::makeAny(static_cast<sal_Int16>(text::RelOrientation::PAGE_PRINT_AREA))); xPropertySet->setPropertyValue(UNO_NAME_CHAR_FONT_NAME, uno::makeAny(sFont)); xPropertySet->setPropertyValue(UNO_NAME_CHAR_HEIGHT, uno::makeAny(WATERMARK_AUTO_SIZE)); + xPropertySet->setPropertyValue(UNO_NAME_TEXT_UPPERDIST, uno::makeAny(sal_uInt32(nFrameHeight - nHeight))); xPropertySet->setPropertyValue("Transformation", uno::makeAny(aMatrix)); xPropertySet->setPropertyValue(UNO_NAME_HORI_ORIENT, uno::makeAny(static_cast<sal_Int16>(text::HoriOrientation::CENTER))); xPropertySet->setPropertyValue(UNO_NAME_VERT_ORIENT, uno::makeAny(static_cast<sal_Int16>(text::VertOrientation::CENTER))); |