From b9bea009ac27ffe822b43911a5c7a30d36c43c50 Mon Sep 17 00:00:00 2001 From: Armin Le Grand Date: Mon, 8 Oct 2012 15:13:37 +0000 Subject: Related: #119885# Made EditMode work with text boxes... where text is reaching over the TextBox's bounds (cherry picked from commit fbbef010986ea359b5209e6d3884bdf4e4ac86a6) Conflicts: editeng/source/editeng/impedit.cxx Change-Id: I00020a33faf86c8671259e71179932cddf54cfe1 --- editeng/source/editeng/impedit.cxx | 88 ++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 51 deletions(-) (limited to 'editeng') diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index bbdaca32cdc3..c0d98e957a5f 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -44,7 +44,6 @@ #include #include - using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::linguistic2; @@ -433,65 +432,52 @@ void ImpEditView::SetOutputArea( const Rectangle& rRect ) void ImpEditView::ResetOutputArea( const Rectangle& rRect ) { - Rectangle aCurArea( aOutArea ); - SetOutputArea( rRect ); - // Invalidate surrounding areas if in update mode of the engine on sal_True - if ( !aCurArea.IsEmpty() && pEditEngine->pImpEditEngine->GetUpdateMode() ) + // remember old out area + const Rectangle aOldArea(aOutArea); + + // apply new one + SetOutputArea(rRect); + + // invalidate surrounding areas if update is true + if(!aOldArea.IsEmpty() && pEditEngine->pImpEditEngine->GetUpdateMode()) { - long nMore = 0; - if ( DoInvalidateMore() ) - nMore = GetWindow()->PixelToLogic( Size( nInvMore, 0 ) ).Width(); - if ( aCurArea.Left() < aOutArea.Left() ) + // #i119885# use grown area if needed; do when getting bigger OR smaller + const sal_Int32 nMore(DoInvalidateMore() ? GetWindow()->PixelToLogic(Size(nInvMore, 0)).Width() : 0); + + if(aOldArea.Left() > aOutArea.Left()) { - Rectangle aRect( aCurArea.TopLeft(), - Size( aOutArea.Left()-aCurArea.Left(), aCurArea.GetHeight() ) ); - if ( nMore ) - { - aRect.Left() -= nMore; - aRect.Top() -= nMore; - aRect.Bottom() += nMore; - } - GetWindow()->Invalidate( aRect ); + GetWindow()->Invalidate(Rectangle(aOutArea.Left() - nMore, aOldArea.Top() - nMore, aOldArea.Left(), aOldArea.Bottom() + nMore)); } - if ( aCurArea.Right() > aOutArea.Right() ) + else if(aOldArea.Left() < aOutArea.Left()) { - long nW = aCurArea.Right() - aOutArea.Right(); - Point aPos( aCurArea.TopRight() ); - aPos.X() -= nW; - Rectangle aRect( aPos, Size( nW, aCurArea.GetHeight() ) ); - if ( nMore ) - { - aRect.Right() += nMore; - aRect.Top() -= nMore; - aRect.Bottom() += nMore; - } - GetWindow()->Invalidate( aRect ); + GetWindow()->Invalidate(Rectangle(aOldArea.Left() - nMore, aOldArea.Top() - nMore, aOutArea.Left(), aOldArea.Bottom() + nMore)); } - if ( aCurArea.Top() < aOutArea.Top() ) + + if(aOldArea.Right() > aOutArea.Right()) { - Rectangle aRect( aCurArea.TopLeft(), Size( aCurArea.GetWidth(), aOutArea.Top() - aCurArea.Top() ) ); - if ( nMore ) - { - aRect.Top() -= nMore; - aRect.Left() -= nMore; - aRect.Right() += nMore; - } - GetWindow()->Invalidate( aRect ); + GetWindow()->Invalidate(Rectangle(aOutArea.Right(), aOldArea.Top() - nMore, aOldArea.Right() + nMore, aOldArea.Bottom() + nMore)); } - if ( aCurArea.Bottom() > aOutArea.Bottom() ) + else if(aOldArea.Right() < aOutArea.Right()) { - long nH = aCurArea.Bottom() - aOutArea.Bottom(); - Point aPos( aCurArea.BottomLeft() ); - aPos.Y() -= nH; - Rectangle aRect( aPos, Size( aCurArea.GetWidth(), nH ) ); - if ( nMore ) - { - aRect.Bottom() += nMore; - aRect.Left() -= nMore; - aRect.Right() += nMore; - } + GetWindow()->Invalidate(Rectangle(aOldArea.Right(), aOldArea.Top() - nMore, aOutArea.Right() + nMore, aOldArea.Bottom() + nMore)); + } - GetWindow()->Invalidate( aRect ); + if(aOldArea.Top() > aOutArea.Top()) + { + GetWindow()->Invalidate(Rectangle(aOldArea.Left() - nMore, aOutArea.Top() - nMore, aOldArea.Right() + nMore, aOldArea.Top())); + } + else if(aOldArea.Top() < aOutArea.Top()) + { + GetWindow()->Invalidate(Rectangle(aOldArea.Left() - nMore, aOldArea.Top() - nMore, aOldArea.Right() + nMore, aOutArea.Top())); + } + + if(aOldArea.Bottom() > aOutArea.Bottom()) + { + GetWindow()->Invalidate(Rectangle(aOldArea.Left() - nMore, aOutArea.Bottom(), aOldArea.Right() + nMore, aOldArea.Bottom() + nMore)); + } + else if(aOldArea.Bottom() < aOutArea.Bottom()) + { + GetWindow()->Invalidate(Rectangle(aOldArea.Left() - nMore, aOldArea.Bottom(), aOldArea.Right() + nMore, aOutArea.Bottom() + nMore)); } } } -- cgit