summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2022-08-18 00:09:25 +0200
committerTomaž Vajngerl <quikee@gmail.com>2022-08-18 08:48:34 +0200
commit9923f2416b63abc09bf8cd83796d1d681e9de225 (patch)
tree51bb665c91823edc4d667f970d4be095a61c5134 /chart2
parente425ee936ee762825a20cd10e6027163eab747a2 (diff)
chart2: improve keys (symbols) rendering in a data table
- better symbol positioning taking symbol height and cell height into account. - symbol height depends on font size (as with the legend) - take symbol aspect ratio into account - remove hardcoded values Change-Id: I3537d82538035cd31b928d4bb6fc5572914fcd13 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138463 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/main/DataTableView.cxx49
1 files changed, 36 insertions, 13 deletions
diff --git a/chart2/source/view/main/DataTableView.cxx b/chart2/source/view/main/DataTableView.cxx
index 5e1a7157cc3e..5504e08a4950 100644
--- a/chart2/source/view/main/DataTableView.cxx
+++ b/chart2/source/view/main/DataTableView.cxx
@@ -339,21 +339,40 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV
// ROW HEADER
// Prepare keys (symbols)
sal_Int32 nMaxSymbolWidth = 0;
+ constexpr const sal_Int32 constSymbolMargin = 100; // 1mm
if (bKeys)
{
+ uno::Reference<beans::XPropertySet> xDataTableProperties(m_xDataTableModel);
+ float fFontHeight = 0.0;
+ xDataTableProperties->getPropertyValue("CharHeight") >>= fFontHeight;
+ fFontHeight = o3tl::convert(fFontHeight, o3tl::Length::pt, o3tl::Length::mm100);
+
+ sal_Int32 nSymbolHeight = sal_Int32(fFontHeight * 0.6);
+ sal_Int32 nSymbolWidth = nSymbolHeight;
+
for (VSeriesPlotter* pSeriesPlotter : m_pSeriesPlotterList)
{
if (pSeriesPlotter)
{
- sal_Int32 nSymbolWidth = 300;
- if (pSeriesPlotter->getLegendSymbolStyle() == LegendSymbolStyle::Line)
- nSymbolWidth = 600;
+ awt::Size aCurrentRatio = pSeriesPlotter->getPreferredLegendKeyAspectRatio();
+ sal_Int32 nCurrentWidth = aCurrentRatio.Width;
+ if (aCurrentRatio.Height > 0)
+ nCurrentWidth = nSymbolHeight * aCurrentRatio.Width / aCurrentRatio.Height;
+ nSymbolWidth = std::max(nSymbolWidth, nCurrentWidth);
+ }
+ }
+ nMaxSymbolWidth = nSymbolWidth;
- nMaxSymbolWidth = std::max(nSymbolWidth, nMaxSymbolWidth);
+ for (VSeriesPlotter* pSeriesPlotter : m_pSeriesPlotterList)
+ {
+ if (pSeriesPlotter)
+ {
+ awt::Size aSize(nSymbolWidth, nSymbolHeight);
+ std::vector<ViewLegendSymbol> aNewEntries
+ = pSeriesPlotter->createSymbols(aSize, m_xTarget, m_xComponentContext);
- std::vector<ViewLegendSymbol> aNewEntries = pSeriesPlotter->createSymbols(
- { nSymbolWidth, 300 }, m_xTarget, m_xComponentContext);
- aSymbols.insert(aSymbols.end(), aNewEntries.begin(), aNewEntries.end());
+ for (auto const& rSymbol : aNewEntries)
+ aSymbols.push_back(rSymbol);
}
}
}
@@ -381,8 +400,8 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV
xCellPropertySet->setPropertyValue("ParaAdjust", uno::Any(style::ParagraphAdjust_LEFT));
if (bKeys)
{
- xCellPropertySet->setPropertyValue("ParaLeftMargin",
- uno::Any(nMaxSymbolWidth + sal_Int32(200)));
+ xCellPropertySet->setPropertyValue(
+ "ParaLeftMargin", uno::Any(nMaxSymbolWidth + sal_Int32(2 * constSymbolMargin)));
}
}
nRow++;
@@ -433,8 +452,8 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV
xBroadcaster->unlockBroadcasts();
- pTableObject->DistributeColumns(0, nColumnCount - 1, true, true);
- pTableObject->DistributeRows(0, nRowCount - 1, true, true);
+ pTableObject->DistributeColumns(0, nColumnCount, true, true);
+ pTableObject->DistributeRows(0, nRowCount, true, true);
xBroadcaster->lockBroadcasts();
@@ -461,8 +480,12 @@ void DataTableView::createShapes(basegfx::B2DVector const& rStart, basegfx::B2DV
xPropertySet->getPropertyValue("Height") >>= nHeight;
if (i > 0)
{
- aSymbols[i - 1].xSymbol->setPosition(
- { nTableX + 100, nTableY + nTotalHeight + 100 });
+ auto& rSymbol = aSymbols[i - 1].xSymbol;
+ sal_Int32 nSymbolHeight = rSymbol->getSize().Height;
+ sal_Int32 nSymbolY
+ = basegfx::fround(double(nHeight) / 2.0 - double(nSymbolHeight) / 2.0);
+ rSymbol->setPosition(
+ { nTableX + constSymbolMargin, nTableY + nTotalHeight + nSymbolY });
}
nTotalHeight += nHeight;
}