diff options
author | Kohei Yoshida <kyoshida@novell.com> | 2011-04-06 16:00:05 -0400 |
---|---|---|
committer | Kohei Yoshida <kyoshida@novell.com> | 2011-04-06 16:01:56 -0400 |
commit | 181030a3a3d7abb5556ebacbaffe79980b071f7c (patch) | |
tree | 0566563af8e4ca09fcbf54441e265c166cbff63c /sc/source/ui/view/output2.cxx | |
parent | c00869115d1b1fb8f1b99b3c6ccf9aa9b79c3980 (diff) |
Fixed horizontal alignment issues for vertical text with text wrap on.
Diffstat (limited to 'sc/source/ui/view/output2.cxx')
-rw-r--r-- | sc/source/ui/view/output2.cxx | 84 |
1 files changed, 35 insertions, 49 deletions
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx index e0fecb8be856..e0b185df0cca 100644 --- a/sc/source/ui/view/output2.cxx +++ b/sc/source/ui/view/output2.cxx @@ -2323,6 +2323,36 @@ bool ScOutputData::DrawEditParam::isVerticallyOriented() const return (meOrient == SVX_ORIENTATION_TOPBOTTOM || meOrient == SVX_ORIENTATION_BOTTOMTOP); } +void ScOutputData::DrawEditParam::calcStartPosForVertical( + Point& rLogicStart, long nCellWidth, long nEngineWidth, long nTopM, OutputDevice* pRefDevice) +{ + OSL_ENSURE(isVerticallyOriented(), "Use this only for vertically oriented cell!"); + + if (mbPixelToLogic) + rLogicStart = pRefDevice->PixelToLogic(rLogicStart); + + if (mbBreak) + { + // vertical adjustment is within the EditEngine + if (mbPixelToLogic) + rLogicStart.Y() += pRefDevice->PixelToLogic(Size(0,nTopM)).Height(); + else + rLogicStart.Y() += nTopM; + + switch (meHorJust) + { + case SVX_HOR_JUSTIFY_CENTER: + rLogicStart.X() += (nCellWidth - nEngineWidth) / 2; + break; + case SVX_HOR_JUSTIFY_RIGHT: + rLogicStart.X() += nCellWidth - nEngineWidth; + break; + default: + ; // do nothing + } + } +} + void ScOutputData::DrawEditParam::setAlignmentItems() { if (isVerticallyOriented() || mbAsianVertical) @@ -3130,7 +3160,7 @@ void ScOutputData::DrawEditBottomTop(DrawEditParam& rParam) // Size aPaperSize = Size( 1000000, 1000000 ); - if (rParam.hasLineBreak()) + if (rParam.mbBreak) { // call GetOutputArea with nNeeded=0, to get only the cell width @@ -3145,16 +3175,6 @@ void ScOutputData::DrawEditBottomTop(DrawEditParam& rParam) if (rParam.mbPixelToLogic) { Size aLogicSize = pRefDevice->PixelToLogic(aPaperSize); - if ( rParam.mbBreak && pRefDevice != pFmtDevice ) - { - // #i85342# screen display and formatting for printer, - // use same GetEditArea call as in ScViewData::SetEditEngine - - Fraction aFract(1,1); - Rectangle aUtilRect = ScEditUtil( pDoc, rParam.mnCellX, rParam.mnCellY, nTab, Point(0,0), pFmtDevice, - HMM_PER_TWIPS, HMM_PER_TWIPS, aFract, aFract ).GetEditArea( rParam.mpPattern, false ); - aLogicSize.Width() = aUtilRect.GetWidth(); - } rParam.mpEngine->SetPaperSize(aLogicSize); } else @@ -3399,20 +3419,8 @@ void ScOutputData::DrawEditBottomTop(DrawEditParam& rParam) } } - Point aLogicStart; - if (rParam.mbPixelToLogic) - aLogicStart = pRefDevice->PixelToLogic( Point(nStartX,nStartY) ); - else - aLogicStart = Point(nStartX, nStartY); - - if (rParam.mbBreak) - { - // vertical adjustment is within the EditEngine - if (rParam.mbPixelToLogic) - aLogicStart.Y() += pRefDevice->PixelToLogic(Size(0,nTopM)).Height(); - else - aLogicStart.Y() += nTopM; - } + Point aLogicStart(nStartX, nStartY); + rParam.calcStartPosForVertical(aLogicStart, aCellSize.Width(), nEngineWidth, nTopM, pRefDevice); Point aURLStart = aLogicStart; // copy before modifying for orientation @@ -3548,16 +3556,6 @@ void ScOutputData::DrawEditTopBottom(DrawEditParam& rParam) if (rParam.mbPixelToLogic) { Size aLogicSize = pRefDevice->PixelToLogic(aPaperSize); - if ( rParam.mbBreak && pRefDevice != pFmtDevice ) - { - // #i85342# screen display and formatting for printer, - // use same GetEditArea call as in ScViewData::SetEditEngine - - Fraction aFract(1,1); - Rectangle aUtilRect = ScEditUtil( pDoc, rParam.mnCellX, rParam.mnCellY, nTab, Point(0,0), pFmtDevice, - HMM_PER_TWIPS, HMM_PER_TWIPS, aFract, aFract ).GetEditArea( rParam.mpPattern, false ); - aLogicSize.Width() = aUtilRect.GetWidth(); - } rParam.mpEngine->SetPaperSize(aLogicSize); } else @@ -3804,20 +3802,8 @@ void ScOutputData::DrawEditTopBottom(DrawEditParam& rParam) } } - Point aLogicStart; - if (rParam.mbPixelToLogic) - aLogicStart = pRefDevice->PixelToLogic( Point(nStartX,nStartY) ); - else - aLogicStart = Point(nStartX, nStartY); - - if (rParam.mbBreak) - { - // vertical adjustment is within the EditEngine - if (rParam.mbPixelToLogic) - aLogicStart.Y() += pRefDevice->PixelToLogic(Size(0,nTopM)).Height(); - else - aLogicStart.Y() += nTopM; - } + Point aLogicStart(nStartX, nStartY); + rParam.calcStartPosForVertical(aLogicStart, aCellSize.Width(), nEngineWidth, nTopM, pRefDevice); Point aURLStart = aLogicStart; // copy before modifying for orientation |