From 174f9520dfec39799011cf8af12808b14293c7f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= 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 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