summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-05-20 11:05:46 +0100
committerCaolán McNamara <caolanm@redhat.com>2019-05-20 21:44:12 +0200
commit5c8de864f72c4e077b7be5871a2e51f02f69c0e9 (patch)
tree3b0c48783ab00ffdbd60f479ac55d7e86ae70e1f /vcl
parentd6d82d3f2b4a468e4ca432c964f0923ce289d862 (diff)
calc item width on request
Change-Id: Ifa56a903b3c3a3962fd2ecf76ff101976e17fc05 Reviewed-on: https://gerrit.libreoffice.org/72600 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/treelist/svlbitm.cxx7
-rw-r--r--vcl/source/treelist/treelistbox.cxx25
2 files changed, 27 insertions, 5 deletions
diff --git a/vcl/source/treelist/svlbitm.cxx b/vcl/source/treelist/svlbitm.cxx
index 764c8d6878df..56b4f016d9e9 100644
--- a/vcl/source/treelist/svlbitm.cxx
+++ b/vcl/source/treelist/svlbitm.cxx
@@ -244,13 +244,18 @@ void SvLBoxString::InitViewData(
pView->Control::SetFont( aFont );
}
- pViewData->mnWidth = pView->GetTextWidth(maText);
+ pViewData->mnWidth = -1; // calc on demand
pViewData->mnHeight = pView->GetTextHeight();
if (mbEmphasized)
pView->Pop();
}
+int SvLBoxString::CalcWidth(const SvTreeListBox* pView) const
+{
+ return pView->GetTextWidth(maText);
+}
+
// ***************************************************************
// class SvLBoxButton
// ***************************************************************
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index de328f8dde39..f42aac4983af 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -306,7 +306,13 @@ SvLBoxItem::~SvLBoxItem()
int SvLBoxItem::GetWidth(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const
{
const SvViewDataItem* pViewData = pView->GetViewDataItem( pEntry, this );
- return pViewData->mnWidth;
+ int nWidth = pViewData->mnWidth;
+ if (nWidth == -1)
+ {
+ nWidth = CalcWidth(pView);
+ const_cast<SvViewDataItem*>(pViewData)->mnWidth = nWidth;
+ }
+ return nWidth;
}
int SvLBoxItem::GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const
@@ -315,10 +321,16 @@ int SvLBoxItem::GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEn
return pViewData->mnHeight;
}
-int SvLBoxItem::GetWidth(const SvViewDataEntry* pData, sal_uInt16 nItemPos)
+int SvLBoxItem::GetWidth(const SvTreeListBox* pView, const SvViewDataEntry* pData, sal_uInt16 nItemPos)
{
const SvViewDataItem& rIData = pData->GetItem(nItemPos);
- return rIData.mnWidth;
+ int nWidth = rIData.mnWidth;
+ if (nWidth == -1)
+ {
+ nWidth = CalcWidth(pView);
+ const_cast<SvViewDataItem&>(rIData).mnWidth = nWidth;
+ }
+ return nWidth;
}
int SvLBoxItem::GetHeight(const SvViewDataEntry* pData, sal_uInt16 nItemPos)
@@ -327,6 +339,11 @@ int SvLBoxItem::GetHeight(const SvViewDataEntry* pData, sal_uInt16 nItemPos)
return rIData.mnHeight;
}
+int SvLBoxItem::CalcWidth(const SvTreeListBox* /*pView*/) const
+{
+ return 0;
+}
+
struct SvTreeListBoxImpl
{
bool m_bIsEmptyTextAllowed:1;
@@ -2645,7 +2662,7 @@ void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::Render
SvLBoxItem& rItem = rEntry.GetItem(nCurItem);
SvLBoxTabFlags nFlags = pTab->nFlags;
- Size aSize(SvLBoxItem::GetWidth(pViewDataEntry, nCurItem),
+ Size aSize(rItem.GetWidth(this, pViewDataEntry, nCurItem),
SvLBoxItem::GetHeight(pViewDataEntry, nCurItem));
long nTabPos = GetTabPos(&rEntry, pTab);