diff options
author | Marco Cecchetti <marco.cecchetti@collabora.com> | 2020-04-09 18:51:46 +0200 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2020-05-10 11:17:01 +0200 |
commit | 2ce5938b38c5080e5ac7f200afa1446abe53db28 (patch) | |
tree | bb0ced95a213ca74783850faff00f010a24a74db /editeng | |
parent | 0b81aaa36b5b78e208c5cc2cd36b4906b8d636a6 (diff) |
lok: calc: formula bar: improve selection handling
This patch provides some improvements for the single input line case
with a multi-line text selection:
- selection rectangles are correct when selection is expanded to the
previous or the next line
- two flag parameters for notifying the client if the start/end
selection handles should be visible or they don't
Change-Id: Ica0428786183c4b5a15870c43490bc69452c2a49
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92121
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Andras Timar <andras.timar@collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93344
Tested-by: Jenkins
Diffstat (limited to 'editeng')
-rw-r--r-- | editeng/source/editeng/impedit.cxx | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index b5be152d6ece..e087305effd1 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -278,6 +278,10 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion, const sal_Int32 nEndPara = pEditEngine->GetEditDoc().GetPos(pEndNode); if (nStartPara == EE_PARA_NOT_FOUND || nEndPara == EE_PARA_NOT_FOUND) return; + + bool bStartHandleVisible = false; + bool bEndHandleVisible = false; + for ( sal_Int32 nPara = nStartPara; nPara <= nEndPara; nPara++ ) { ParaPortion* pTmpPortion = pEditEngine->GetParaPortions().SafeGetObject( nPara ); @@ -341,6 +345,11 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion, if ( aBottomRight.Y() < GetVisDocTop() ) continue; + if ( ( nPara == nStartPara ) && ( nLine == nStartLine ) ) + bStartHandleVisible = true; + if ( ( nPara == nEndPara ) && ( nLine == nEndLine ) ) + bEndHandleVisible = true; + // Now that we have Bidi, the first/last index doesn't have to be the 'most outside' position if ( !bPartOfLine ) { @@ -405,6 +414,8 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion, const OUString rAction("text_selection"); std::vector<vcl::LOKPayloadItem> aItems; aItems.emplace_back("rectangles", sRectangle); + aItems.emplace_back("startHandleVisible", OString::boolean(bStartHandleVisible)); + aItems.emplace_back("endHandleVisible", OString::boolean(bEndHandleVisible)); pNotifier->notifyWindow(pParent->GetLOKWindowId(), rAction, aItems); pPolyPoly.reset(); return; @@ -1384,6 +1395,11 @@ Pair ImpEditView::Scroll( long ndX, long ndY, ScrollRangeCheck nRangeCheck ) EENotify aNotify( EE_NOTIFY_TEXTVIEWSCROLLED ); pEditEngine->pImpEditEngine->GetNotifyHdl().Call( aNotify ); } + + if (comphelper::LibreOfficeKit::isActive()) + { + DrawSelectionXOR(); + } } return Pair( nRealDiffX, nRealDiffY ); |