Author: alg
Date: Mon Oct  8 16:13:37 2012
New Revision: 1395635

URL: http://svn.apache.org/viewvc?rev=1395635&view=rev
Log:
#119885# Made EditMode work with text boxes where text is reaching over the 
TextBox's bounds

Modified:
    incubator/ooo/trunk/main/editeng/source/editeng/impedit.cxx
    incubator/ooo/trunk/main/svx/source/svdraw/svdedxv.cxx
    incubator/ooo/trunk/main/svx/source/svdraw/svdotext.cxx
    incubator/ooo/trunk/main/svx/source/svdraw/svdotxed.cxx

Modified: incubator/ooo/trunk/main/editeng/source/editeng/impedit.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/editeng/source/editeng/impedit.cxx?rev=1395635&r1=1395634&r2=1395635&view=diff
==============================================================================
--- incubator/ooo/trunk/main/editeng/source/editeng/impedit.cxx (original)
+++ incubator/ooo/trunk/main/editeng/source/editeng/impedit.cxx Mon Oct  8 
16:13:37 2012
@@ -49,7 +49,6 @@
 #include <sot/exchange.hxx>
 #include <sot/formats.hxx>
 
-
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::linguistic2;
@@ -449,67 +448,54 @@ void ImpEditView::SetOutputArea( const R
 
 void ImpEditView::ResetOutputArea( const Rectangle& rRec )
 {
-       Rectangle aCurArea( aOutArea );
-       SetOutputArea( rRec );
-       // Umliegende Bereiche invalidieren, wenn UpdateMode der Engine auf 
sal_True
-       if ( !aCurArea.IsEmpty() && 
pEditEngine->pImpEditEngine->GetUpdateMode() )
-       {
-               long nMore = 0;
-               if ( DoInvalidateMore() )
-                       nMore = GetWindow()->PixelToLogic( Size( nInvMore, 0 ) 
).Width();
-               if ( aCurArea.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 );
-               }
-               if ( aCurArea.Right() > aOutArea.Right() )
-               {
-                       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 );
-               }
-               if ( aCurArea.Top() < aOutArea.Top() )
-               {
-                       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 );
-               }
-               if ( aCurArea.Bottom() > aOutArea.Bottom() )
-               {
-                       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;
-                       }
+    // remember old out area
+    const Rectangle aOldArea(aOutArea);
 
-                       GetWindow()->Invalidate( aRect );
-               }
-       }
+    // apply new one
+    SetOutputArea(rRec);
+
+    // invalidate surrounding areas if update is true
+    if(!aOldArea.IsEmpty() && pEditEngine->pImpEditEngine->GetUpdateMode())
+    {
+        // #119885# 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())
+        {
+            GetWindow()->Invalidate(Rectangle(aOutArea.Left() - nMore, 
aOldArea.Top() - nMore, aOldArea.Left(), aOldArea.Bottom() + nMore));
+        }
+        else if(aOldArea.Left() < aOutArea.Left())
+        {
+            GetWindow()->Invalidate(Rectangle(aOldArea.Left() - nMore, 
aOldArea.Top() - nMore, aOutArea.Left(), aOldArea.Bottom() + nMore));
+        }
+
+        if(aOldArea.Right() > aOutArea.Right())
+        {
+            GetWindow()->Invalidate(Rectangle(aOutArea.Right(), aOldArea.Top() 
- nMore, aOldArea.Right() + nMore, aOldArea.Bottom() + nMore));
+        }
+        else if(aOldArea.Right() < aOutArea.Right())
+        {
+            GetWindow()->Invalidate(Rectangle(aOldArea.Right(), aOldArea.Top() 
- nMore, aOutArea.Right() + nMore, aOldArea.Bottom() + nMore));
+        }
+
+        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));
+        }
+    }
 }
 
 void ImpEditView::RecalcOutputArea()

Modified: incubator/ooo/trunk/main/svx/source/svdraw/svdedxv.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/svdraw/svdedxv.cxx?rev=1395635&r1=1395634&r2=1395635&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/svdraw/svdedxv.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/svdraw/svdedxv.cxx Mon Oct  8 16:13:37 
2012
@@ -211,6 +211,7 @@ void SdrObjEditView::ModelHasChanged()
                 aMinArea1.Move(aPvOfs.X(),aPvOfs.Y());
                 Rectangle aNewArea(aMinArea1);
                 aNewArea.Union(aEditArea1);
+
                 if (aNewArea!=aOldArea || aEditArea1!=aTextEditArea || 
aMinArea1!=aMinTextEditArea ||
                     pTextEditOutliner->GetMinAutoPaperSize()!=aPaperMin1 || 
pTextEditOutliner->GetMaxAutoPaperSize()!=aPaperMax1) {
                     aTextEditArea=aEditArea1;

Modified: incubator/ooo/trunk/main/svx/source/svdraw/svdotext.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/svdraw/svdotext.cxx?rev=1395635&r1=1395634&r2=1395635&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/svdraw/svdotext.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/svdraw/svdotext.cxx Mon Oct  8 16:13:37 
2012
@@ -862,6 +862,17 @@ void SdrTextObj::TakeTextRect( SdrOutlin
                                if (eAniDirection==SDRTEXTANI_LEFT || 
eAniDirection==SDRTEXTANI_RIGHT) nWdt=1000000;
                                if (eAniDirection==SDRTEXTANI_UP || 
eAniDirection==SDRTEXTANI_DOWN) nHgt=1000000;
                        }
+
+            // #119885# Do not limit/force height to geometrical frame (vice 
versa for vertical writing)
+            if(IsVerticalWriting())
+            {
+                nWdt = 1000000;
+            }
+            else
+            {
+                nHgt = 1000000;
+            }
+
                        rOutliner.SetMaxAutoPaperSize(Size(nWdt,nHgt));
                }
 

Modified: incubator/ooo/trunk/main/svx/source/svdraw/svdotxed.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/svdraw/svdotxed.cxx?rev=1395635&r1=1395634&r2=1395635&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svx/source/svdraw/svdotxed.cxx (original)
+++ incubator/ooo/trunk/main/svx/source/svdraw/svdotxed.cxx Mon Oct  8 16:13:37 
2012
@@ -180,9 +180,20 @@ void SdrTextObj::TakeTextEditArea(Size* 
                if (!bFitToSize) {
                        if (nMaxWdt==0 || nMaxWdt>aMaxSiz.Width())  
nMaxWdt=aMaxSiz.Width();
                        if (nMaxHgt==0 || nMaxHgt>aMaxSiz.Height()) 
nMaxHgt=aMaxSiz.Height();
-                       if (!IsAutoGrowWidth() ) { nMaxWdt=aAnkSiz.Width();  
nMinWdt=nMaxWdt; }
-                       if (!IsAutoGrowHeight()) { nMaxHgt=aAnkSiz.Height(); 
nMinHgt=nMaxHgt; }
-                       SdrTextAniKind      eAniKind=GetTextAniKind();
+                       
+            if (!IsAutoGrowWidth() ) 
+            { 
+                nMinWdt = aAnkSiz.Width();  
+                nMaxWdt = nMinWdt; 
+            }
+                       
+            if (!IsAutoGrowHeight()) 
+            { 
+                nMinHgt = aAnkSiz.Height(); 
+                nMaxHgt = nMinHgt; 
+            }
+                       
+            SdrTextAniKind      eAniKind=GetTextAniKind();
                        SdrTextAniDirection eAniDirection=GetTextAniDirection();
 
                        // #101684#
@@ -194,9 +205,22 @@ void SdrTextObj::TakeTextEditArea(Size* 
                                if (eAniDirection==SDRTEXTANI_LEFT || 
eAniDirection==SDRTEXTANI_RIGHT) nMaxWdt=1000000;
                                if (eAniDirection==SDRTEXTANI_UP || 
eAniDirection==SDRTEXTANI_DOWN) nMaxHgt=1000000;
                        }
-                       aPaperMax.Width()=nMaxWdt;
+            
+            // #119885# Do not limit/force height to geometrical frame (vice 
versa for vertical writing)
+            if(IsVerticalWriting())
+            {
+                nMaxWdt = 1000000;
+            }
+            else
+            {
+                nMaxHgt = 1000000;
+            }
+
+            aPaperMax.Width()=nMaxWdt;
                        aPaperMax.Height()=nMaxHgt;
-               } else {
+               } 
+        else 
+        {
                        aPaperMax=aMaxSiz;
                }
                aPaperMin.Width()=nMinWdt;


Reply via email to