summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorTünde Tóth <tundeth@gmail.com>2020-06-15 16:42:40 +0200
committerLászló Németh <nemeth@numbertext.org>2020-06-30 12:44:23 +0200
commit72613bd2a04b4b1ba614c0f645e9804ebfe73682 (patch)
tree84699adbd30081c0a90a4a9ea75ba453f3811589 /chart2
parentd828da851efa8e243a940f3eceefc39c6c735f9b (diff)
tdf#126425 Chart: fix missing legend with exceeding text
Ellipsize legend box contents, if the custom size of the chart legend is too small to contain the text. Change-Id: I91ef913f509b233912a8bfb878a1c80d577e2a88 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96437 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/main/VLegend.cxx56
1 files changed, 50 insertions, 6 deletions
diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx
index 4642b63f55d4..d16495e426f3 100644
--- a/chart2/source/view/main/VLegend.cxx
+++ b/chart2/source/view/main/VLegend.cxx
@@ -408,18 +408,62 @@ awt::Size lcl_placeLegendEntries(
DrawModelWrapper::removeShape( aTextShapes[nEntry] );
aTextShapes.pop_back();
}
- if( nEntry < nNumberOfEntries )
+ if( nEntry < nNumberOfEntries && ( nEntry != 0 || nNumberOfColumns != 1 ) )
{
DrawModelWrapper::removeShape( rEntries[ nEntry ].aSymbol );
rEntries.pop_back();
nNumberOfEntries--;
}
}
- nSumHeight -= aRowHeights[nRow];
- aRowHeights.pop_back();
- nRemainingSpace = rRemainingSpace.Height - nSumHeight;
- if( nRemainingSpace>=0 )
- break;
+ if (nRow == 0 && nNumberOfColumns == 1)
+ {
+ try
+ {
+ OUString aLabelString = rEntries[0].aLabel[0]->getString();
+ const OUString sDots = "...";
+ ShapeFactory* pShapeFactory = ShapeFactory::getOrCreateShapeFactory(xShapeFactory);
+ for (sal_Int32 nNewLen = aLabelString.getLength() - sDots.getLength(); nNewLen > 0; nNewLen--)
+ {
+ OUString aNewLabel = aLabelString.copy(0, nNewLen) + sDots;
+ Reference<drawing::XShape> xEntry = pShapeFactory->createText(
+ xTarget, aNewLabel, rTextProperties.first, rTextProperties.second, uno::Any());
+ nSumHeight = xEntry->getSize().Height;
+ nRemainingSpace = rRemainingSpace.Height - nSumHeight;
+ if (nRemainingSpace >= 0)
+ {
+ sal_Int32 nWidth = xEntry->getSize().Width + nSymbolPlusDistanceWidth;
+ if (rRemainingSpace.Width - nWidth >= 0)
+ {
+ aTextShapes.push_back(xEntry);
+ rEntries[0].aLabel[0]->setString(aNewLabel);
+ aRowHeights[0] = nSumHeight;
+ aColumnWidths[0] = nWidth;
+ break;
+ }
+ }
+ DrawModelWrapper::removeShape(xEntry);
+ }
+ if (aTextShapes.size() == 0)
+ {
+ DrawModelWrapper::removeShape(rEntries[0].aSymbol);
+ rEntries.pop_back();
+ nNumberOfEntries--;
+ aRowHeights.pop_back();
+ }
+ }
+ catch (const uno::Exception&)
+ {
+ DBG_UNHANDLED_EXCEPTION("chart2");
+ }
+ }
+ else
+ {
+ nSumHeight -= aRowHeights[nRow];
+ aRowHeights.pop_back();
+ nRemainingSpace = rRemainingSpace.Height - nSumHeight;
+ if (nRemainingSpace >= 0)
+ break;
+ }
}
nNumberOfRows = static_cast<sal_Int32>(aRowHeights.size());
}