From 5316edea6948f3e2a77e4fc68799f67de21fada7 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 72934cf..3a91c14 100644 --- a/sc/source/ui/inc/output.hxx +++ b/sc/source/ui/inc/output.hxx @@ -306,6 +306,8 @@ public: void DrawExtraShadow(sal_Bool bLeft, sal_Bool bTop, sal_Bool bRight, sal_Bool bBottom); void DrawFrame(); + bool UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet); + // with logic MapMode set! void DrawEdit(sal_Bool bPixelToLogic); diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx index de1506a..5522e69 100644 --- a/sc/source/ui/view/output2.cxx +++ b/sc/source/ui/view/output2.cxx @@ -2818,13 +2818,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; @@ -2859,6 +2853,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 @@ -3191,13 +3198,8 @@ void ScOutputData::DrawEditBottomTop(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; @@ -3563,13 +3565,7 @@ void ScOutputData::DrawEditTopBottom(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; @@ -4460,6 +4456,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 || + ( pDoc->GetRowFlags( nCellY, nTab ) & CR_MANUALSIZE ) || + ( pCondSet && SFX_ITEM_SET == + pCondSet->GetItemState(ATTR_FONT_HEIGHT, sal_True) ) ) + bNormalClip = true; + return bNormalClip; +} + void ScOutputData::DrawEdit(sal_Bool bPixelToLogic) { ScFieldEditEngine* pEngine = NULL; @@ -5168,11 +5178,21 @@ void ScOutputData::DrawRotated(sal_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.7.7.3