diff options
author | Balazs Varga <balazs.varga991@gmail.com> | 2020-05-12 15:36:06 +0200 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2020-07-07 11:13:13 +0200 |
commit | d1e570f2db9903cba2d8d91343922ef1393d4895 (patch) | |
tree | 0fb5f0a47757b7fad6c0ce28f1df7adf12674fe5 | |
parent | don't add a cell to a non-existent column (tdf#104865) (diff) | |
download | core-d1e570f2db9903cba2d8d91343922ef1393d4895.tar.gz core-d1e570f2db9903cba2d8d91343922ef1393d4895.zip |
tdf#132956 Chart view: fix missing plot area
Do not reduce the inside area of the chart depending
on the size of the legend. Use the default legend size.
Regression from commit: 739ed2c29f49ea5e83bcd1352b2644c2e2d09f7b
(tdf#115630 tdf#88922 Chart: fix custom legend position and size)
cherry picked from commit cf46500243c51071227e08c5067041e414180ebc
Change-Id: Ic191229d7ceab1f2689ab07424353108f8cb2b95
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94059
Tested-by: Jenkins
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: Tünde Tóth <tundeth@gmail.com>
Reviewed-by: László Németh <nemeth@numbertext.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95583
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r-- | chart2/source/view/main/ChartView.cxx | 5 | ||||
-rw-r--r-- | chart2/source/view/main/VLegend.cxx | 19 | ||||
-rw-r--r-- | chart2/source/view/main/VLegend.hxx | 6 | ||||
-rw-r--r-- | sw/qa/extras/layout/data/tdf132956.docx | bin | 0 -> 25937 bytes | |||
-rw-r--r-- | sw/qa/extras/layout/layout.cxx | 20 |
5 files changed, 38 insertions, 12 deletions
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx index 44ca2853f503..f0f84a9783f2 100644 --- a/chart2/source/view/main/ChartView.cxx +++ b/chart2/source/view/main/ChartView.cxx @@ -2252,12 +2252,13 @@ bool lcl_createLegend( const uno::Reference< XLegend > & xLegend if (!VLegend::isVisible(xLegend)) return false; + awt::Size rDefaultLegendSize; VLegend aVLegend( xLegend, xContext, rLegendEntryProviderList, xPageShapes, xShapeFactory, rModel); aVLegend.setDefaultWritingMode( nDefaultWritingMode ); aVLegend.createShapes( awt::Size( rRemainingSpace.Width, rRemainingSpace.Height ), - rPageSize ); - aVLegend.changePosition( rRemainingSpace, rPageSize ); + rPageSize, rDefaultLegendSize ); + aVLegend.changePosition( rRemainingSpace, rPageSize, rDefaultLegendSize ); return true; } diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx index 8272696ea102..f9d836921ebe 100644 --- a/chart2/source/view/main/VLegend.cxx +++ b/chart2/source/view/main/VLegend.cxx @@ -270,7 +270,8 @@ awt::Size lcl_placeLegendEntries( const awt::Size& rRemainingSpace, sal_Int32 nYStartPosition, const awt::Size& rPageSize, - bool bIsPivotChart) + bool bIsPivotChart, + awt::Size& rDefaultLegendSize) { bool bIsCustomSize = (eExpansion == css::chart::ChartLegendExpansion_CUSTOM); awt::Size aResultingLegendSize(0,0); @@ -309,6 +310,9 @@ awt::Size lcl_placeLegendEntries( sal_Int32 nMaxEntryHeight = nYOffset + aMaxEntryExtent.Height; sal_Int32 nNumberOfEntries = rEntries.size(); + rDefaultLegendSize.Width = nMaxEntryWidth; + rDefaultLegendSize.Height = nMaxEntryHeight + nYPadding; + sal_Int32 nNumberOfColumns = 0, nNumberOfRows = 0; std::vector< sal_Int32 > aColumnWidths; std::vector< sal_Int32 > aRowHeights; @@ -870,7 +874,8 @@ bool VLegend::isVisible( const Reference< XLegend > & xLegend ) void VLegend::createShapes( const awt::Size & rAvailableSpace, - const awt::Size & rPageSize ) + const awt::Size & rPageSize, + awt::Size & rDefaultLegendSize ) { if(! (m_xLegend.is() && m_xShapeFactory.is() && @@ -980,7 +985,7 @@ void VLegend::createShapes( // place the legend entries aLegendSize = lcl_placeLegendEntries(aViewEntries, eExpansion, bSymbolsLeftSide, fViewFontSize, aMaxSymbolExtent, aTextProperties, xLegendContainer, - m_xShapeFactory, aLegendSize, nUsedButtonHeight, rPageSize, bIsPivotChart); + m_xShapeFactory, aLegendSize, nUsedButtonHeight, rPageSize, bIsPivotChart, rDefaultLegendSize); uno::Reference<beans::XPropertySet> xModelPage(mrModel.getPageBackground()); @@ -1014,7 +1019,8 @@ void VLegend::createShapes( void VLegend::changePosition( awt::Rectangle & rOutAvailableSpace, - const awt::Size & rPageSize ) + const awt::Size & rPageSize, + const css::awt::Size & rDefaultLegendSize ) { if(! m_xShape.is()) return; @@ -1026,6 +1032,7 @@ void VLegend::changePosition( Reference< beans::XPropertySet > xLegendProp( m_xLegend, uno::UNO_QUERY_THROW ); chart2::RelativePosition aRelativePosition; + bool bDefaultLegendSize = rDefaultLegendSize.Width != 0 || rDefaultLegendSize.Height != 0; bool bAutoPosition = ! (xLegendProp->getPropertyValue( "RelativePosition") >>= aRelativePosition); @@ -1046,7 +1053,7 @@ void VLegend::changePosition( // manual position: relative to whole page awt::Rectangle aAvailableSpace( 0, 0, rPageSize.Width, rPageSize.Height ); awt::Point aPos = lcl_calculatePositionAndRemainingSpace( - aAvailableSpace, rPageSize, aRelativePosition, ePos, aLegendSize ); + aAvailableSpace, rPageSize, aRelativePosition, ePos, bDefaultLegendSize ? rDefaultLegendSize : aLegendSize ); m_xShape->setPosition( aPos ); if( ePos != LegendPosition_CUSTOM ) @@ -1054,7 +1061,7 @@ void VLegend::changePosition( // calculate remaining space as if having autoposition: aRelativePosition = lcl_getDefaultPosition( ePos, rOutAvailableSpace, rPageSize ); lcl_calculatePositionAndRemainingSpace( - rOutAvailableSpace, rPageSize, aRelativePosition, ePos, aLegendSize ); + rOutAvailableSpace, rPageSize, aRelativePosition, ePos, bDefaultLegendSize ? rDefaultLegendSize : aLegendSize ); } } } diff --git a/chart2/source/view/main/VLegend.hxx b/chart2/source/view/main/VLegend.hxx index 9e58c40c601f..afc0b415cd10 100644 --- a/chart2/source/view/main/VLegend.hxx +++ b/chart2/source/view/main/VLegend.hxx @@ -50,7 +50,8 @@ public: void setDefaultWritingMode( sal_Int16 nDefaultWritingMode ); void createShapes( const css::awt::Size & rAvailableSpace, - const css::awt::Size & rPageSize ); + const css::awt::Size & rPageSize, + css::awt::Size & rDefaultLegendSize ); /** Sets the position according to its internal anchor. @@ -63,7 +64,8 @@ public: */ void changePosition( css::awt::Rectangle & rOutAvailableSpace, - const css::awt::Size & rReferenceSize ); + const css::awt::Size & rReferenceSize, + const css::awt::Size & rDefaultLegendSize ); static bool isVisible( const css::uno::Reference< css::chart2::XLegend > & xLegend ); diff --git a/sw/qa/extras/layout/data/tdf132956.docx b/sw/qa/extras/layout/data/tdf132956.docx Binary files differnew file mode 100644 index 000000000000..6e3852b38c5c --- /dev/null +++ b/sw/qa/extras/layout/data/tdf132956.docx diff --git a/sw/qa/extras/layout/layout.cxx b/sw/qa/extras/layout/layout.cxx index 4583df8680b8..774b495b31e8 100644 --- a/sw/qa/extras/layout/layout.cxx +++ b/sw/qa/extras/layout/layout.cxx @@ -2371,7 +2371,7 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf115630) "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/push[3]/polyline[1]/point[2]", "x") .toInt32(); - CPPUNIT_ASSERT_EQUAL(sal_Int32(2886), nXRight - nXLeft); + CPPUNIT_ASSERT_DOUBLES_EQUAL(2895, nXRight - nXLeft, 50); } CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf108021) @@ -2604,7 +2604,23 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf129095) xmlDocPtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); CPPUNIT_ASSERT(pXmlDoc); - // check the inner chart area visibility with testing the X axis label + // check the inner chart area (relative size) visibility with testing the X axis label + assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray/text", + "Category 1"); +} + +CPPUNIT_TEST_FIXTURE(SwLayoutWriter, testTdf132956) +{ + SwDoc* pDoc = createDoc("tdf132956.docx"); + SwDocShell* pShell = pDoc->GetDocShell(); + + // Dump the rendering of the first page as an XML file. + std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile(); + MetafileXmlDump dumper; + xmlDocPtr pXmlDoc = dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + // check the inner chart area (default size) visibility with testing the X axis label assertXPathContent(pXmlDoc, "/metafile/push[1]/push[1]/push[1]/push[4]/push[1]/textarray/text", "Category 1"); } |