diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-05-20 11:05:46 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-05-20 21:44:12 +0200 |
commit | 5c8de864f72c4e077b7be5871a2e51f02f69c0e9 (patch) | |
tree | 3b0c48783ab00ffdbd60f479ac55d7e86ae70e1f /vcl | |
parent | d6d82d3f2b4a468e4ca432c964f0923ce289d862 (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.cxx | 7 | ||||
-rw-r--r-- | vcl/source/treelist/treelistbox.cxx | 25 |
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); |