svx/source/fmcomp/gridcell.cxx | 18 ++++++++---------- svx/source/inc/gridcell.hxx | 15 +-------------- 2 files changed, 9 insertions(+), 24 deletions(-)
New commits: commit d7397d36b3c801681a802f4f2f16aec0c01a76db Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Oct 1 16:12:37 2021 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Fri Oct 1 22:53:07 2021 +0200 tdf#141633 use OutputDevice::DrawText for multiline text too m_bFastPaint is only false for the multiline text, where it then tries to use a textview widget to render the text onto the OutputDevice while for simpleline text it just uses OutputDevice::DrawText. This isn't working particuarly well anymore for print output and DrawText can be used with flags of DrawTextFlags::Top | DrawTextFlags::MultiLine | DrawTextFlags::WordBreak to render text equivalently to the multiple line textview which seems a saner approach. Change-Id: I3c96f837aaeba82ebf5956ab2ba35210c978f255 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122953 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/svx/source/fmcomp/gridcell.cxx b/svx/source/fmcomp/gridcell.cxx index 45362a0e7140..a513784d35f9 100644 --- a/svx/source/fmcomp/gridcell.cxx +++ b/svx/source/fmcomp/gridcell.cxx @@ -3562,7 +3562,7 @@ void FmXDataCell::UpdateFromColumn() FmXTextCell::FmXTextCell( DbGridColumn* pColumn, std::unique_ptr<DbCellControl> pControl ) :FmXDataCell( pColumn, std::move(pControl) ) - ,m_bFastPaint( true ) + ,m_bIsMultiLineText(false) { } @@ -3572,13 +3572,7 @@ void FmXTextCell::PaintFieldToCell(OutputDevice& rDev, const Reference< css::sdb::XColumn >& _rxField, const Reference< XNumberFormatter >& xFormatter) { - if ( !m_bFastPaint ) - { - FmXDataCell::PaintFieldToCell( rDev, rRect, _rxField, xFormatter ); - return; - } - - DrawTextFlags nStyle = DrawTextFlags::Clip | DrawTextFlags::VCenter; + DrawTextFlags nStyle = DrawTextFlags::Clip; if ( ( rDev.GetOutDevType() == OUTDEV_WINDOW ) && !rDev.GetOwnerWindow()->IsEnabled() ) nStyle |= DrawTextFlags::Disable; @@ -3594,6 +3588,11 @@ void FmXTextCell::PaintFieldToCell(OutputDevice& rDev, nStyle |= DrawTextFlags::Left; } + if (!m_bIsMultiLineText) + nStyle |= DrawTextFlags::VCenter; + else + nStyle |= DrawTextFlags::Top | DrawTextFlags::MultiLine | DrawTextFlags::WordBreak; + try { const Color* pColor = nullptr; @@ -3627,8 +3626,7 @@ FmXEditCell::FmXEditCell( DbGridColumn* pColumn, std::unique_ptr<DbCellControl> { m_pEditImplementation = pTextField->GetEditImplementation(); - if (pTextField->IsMultiLineEdit()) - m_bFastPaint = false; + m_bIsMultiLineText = pTextField->IsMultiLineEdit(); } else { diff --git a/svx/source/inc/gridcell.hxx b/svx/source/inc/gridcell.hxx index 081f7a4bc684..b2aa1140006f 100644 --- a/svx/source/inc/gridcell.hxx +++ b/svx/source/inc/gridcell.hxx @@ -816,20 +816,7 @@ protected: class FmXTextCell : public FmXDataCell { protected: - /** determines whether the text of this cell can be painted directly, without - using the painter control - - If this is <TRUE/>, the <member>PaintCell</member> method will simply use the text as returned - by <member>GetText</member>, and draw it onto the device passed to <member>PaintFieldToCell</member>, - while respecting the current alignment settings. - - If this is <FALSE/>, the <member>PaintFieldToCell</member> request will be forwarded to the painter - control (<member>m_pPainter</member>). This is more expensive, but the only option - if your painting involves more that a simple DrawText. - - This member is <TRUE/> by default, and can be modified by derived classes. - */ - bool m_bFastPaint; + bool m_bIsMultiLineText; public: FmXTextCell( DbGridColumn* pColumn, std::unique_ptr<DbCellControl> pControl );