Blob Blame History Raw
From 174f9520dfec39799011cf8af12808b14293c7f8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 5 Dec 2011 15:28:19 +0100
Subject: [PATCH] vertical content overflowing out of cell (#i88341#)

---
 sc/source/ui/inc/output.hxx   |  2 ++
 sc/source/ui/view/output2.cxx | 66 ++++++++++++++++++++++++++++---------------
 2 files changed, 45 insertions(+), 23 deletions(-)

diff --git a/sc/source/ui/inc/output.hxx b/sc/source/ui/inc/output.hxx
index ffb0e15..17e2a9b 100644
--- a/sc/source/ui/inc/output.hxx
+++ b/sc/source/ui/inc/output.hxx
@@ -304,6 +304,8 @@ public:
     void    DrawExtraShadow(bool bLeft, bool bTop, bool bRight, bool bBottom);
     void    DrawFrame();
 
+    bool    UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet);
+
                     // with logic MapMode set!
     void    DrawEdit(bool bPixelToLogic);
 
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index 6a1bbf1..ee1aba3 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -3014,13 +3014,7 @@ void ScOutputData::DrawEditStandard(DrawEditParam& rParam)
                 (ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE);
         bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1;
 
-        //  Don't clip for text height when printing rows with optimal height,
-        //  except when font size is from conditional formatting.
-        //! Allow clipping when vertically merged?
-        if ( eType != OUTTYPE_PRINTER ||
-            ( mpDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) ||
-            ( rParam.mpCondSet && SFX_ITEM_SET ==
-                rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) )
+        if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
             bClip = true;
         else
             bSimClip = true;
@@ -3055,6 +3049,19 @@ void ScOutputData::DrawEditStandard(DrawEditParam& rParam)
     }
 
     Rectangle aLogicClip;
+    if (
+         ((nAttrRotate == 9000) || (nAttrRotate == 27000)) &&
+         (!(rParam.meOrient==SVX_ORIENTATION_STANDARD &&
+            !rParam.mbAsianVertical)) &&
+         (!(bClip || bSimClip))
+       )
+    {
+        if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
+            bClip = true;
+        else
+            bSimClip = true;
+    }
+
     if (bClip || bSimClip)
     {
         // Clip marks are already handled in GetOutputArea
@@ -4008,13 +4015,8 @@ void ScOutputData::DrawEditStacked(DrawEditParam& rParam)
                 (ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE);
         bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1;
 
-        //  Don't clip for text height when printing rows with optimal height,
-        //  except when font size is from conditional formatting.
-        //! Allow clipping when vertically merged?
-        if ( eType != OUTTYPE_PRINTER ||
-            ( mpDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) ||
-            ( rParam.mpCondSet && SFX_ITEM_SET ==
-                rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) )
+
+        if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
             bClip = true;
         else
             bSimClip = true;
@@ -4362,13 +4364,7 @@ void ScOutputData::DrawEditAsianVertical(DrawEditParam& rParam)
                 (ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE);
         bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1;
 
-        //  Don't clip for text height when printing rows with optimal height,
-        //  except when font size is from conditional formatting.
-        //! Allow clipping when vertically merged?
-        if ( eType != OUTTYPE_PRINTER ||
-            ( mpDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) ||
-            ( rParam.mpCondSet && SFX_ITEM_SET ==
-                rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) )
+        if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
             bClip = true;
         else
             bSimClip = true;
@@ -4474,6 +4470,20 @@ void ScOutputData::DrawEditAsianVertical(DrawEditParam& rParam)
     rParam.adjustForHyperlinkInPDF(aURLStart, mpDev);
 }
 
+bool ScOutputData::UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet)
+{
+    bool bNormalClip = false;
+       //      Don't clip for text height when printing rows with optimal height,
+       //      except when font size is from conditional formatting.
+       //!     Allow clipping when vertically merged?
+       if ( eType != OUTTYPE_PRINTER ||
+               ( mpDoc->GetRowFlags( nCellY, nTab ) & CR_MANUALSIZE ) ||
+               ( pCondSet && SFX_ITEM_SET ==
+                       pCondSet->GetItemState(ATTR_FONT_HEIGHT, sal_True) ) )
+               bNormalClip = true;
+    return bNormalClip;
+}
+
 void ScOutputData::DrawEdit(bool bPixelToLogic)
 {
     boost::scoped_ptr<ScFieldEditEngine> pEngine;
@@ -5199,11 +5209,21 @@ void ScOutputData::DrawRotated(bool bPixelToLogic)
                                     else
                                     {
                                         //  bei gedrehtem Text ist Standard zentriert
+                                        long nDiff = 0;
                                         if (eHorJust==SVX_HOR_JUSTIFY_RIGHT)
-                                            aLogicStart.X() += nAvailWidth - nEngineWidth;
+                                            nDiff = nAvailWidth - nEngineWidth;
                                         else if (eHorJust==SVX_HOR_JUSTIFY_CENTER ||
                                                  eHorJust==SVX_HOR_JUSTIFY_STANDARD)
-                                            aLogicStart.X() += (nAvailWidth - nEngineWidth) / 2;
+                                            nDiff = (nAvailWidth - nEngineWidth) / 2;
+
+                                        if (nEngineWidth > nAvailWidth)
+                                        {
+                                            if (nAttrRotate == 9000)
+                                               nDiff = 0;
+                                            else if (nAttrRotate == 27000)
+                                               nDiff = nAvailWidth - nEngineWidth;
+                                        }
+                                        aLogicStart.X() += nDiff;
                                     }
                                 }
 
-- 
1.9.0