diff options
author | Armin Le Grand <Armin.Le.Grand@cib.de> | 2018-04-19 18:56:55 +0200 |
---|---|---|
committer | Armin Le Grand <Armin.Le.Grand@cib.de> | 2018-04-20 11:54:34 +0200 |
commit | 0185e65bcd73dbad2205a39369e1e06b33a2ca51 (patch) | |
tree | c8862813a76693974b5b10c97e65ba86d503c446 | |
parent | 40180e56ff33c2217e333244607a7ac47552b533 (diff) |
tdf#115582 Correct coordinate usage for sc's ::Array
In ScOutputData::SetCellRotations() eventually existing
CellRotations are added to the svx::frame::Array data
that gets created for repaint. This used the wrong coordinate
calculation, thus in some cases the repaint of rotated
Cells failed.
Change-Id: Ib5df8576e8c9404d717d5dcc5662aa04b82cf959
Reviewed-on: https://gerrit.libreoffice.org/53171
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Armin Le Grand <Armin.Le.Grand@cib.de>
-rw-r--r-- | sc/source/ui/view/output.cxx | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx index edddda98954c..842f42212778 100644 --- a/sc/source/ui/view/output.cxx +++ b/sc/source/ui/view/output.cxx @@ -657,13 +657,22 @@ void ScOutputData::SetCellRotations() // Needed for CellInfo internal decisions (bg fill, ...) pInfo->nRotateDir = nDir; - // add rotation info to Array information - const long nAttrRotate(pPattern->GetRotateVal(pCondSet)); - const SvxRotateMode eRotMode(pPattern->GetItem(ATTR_ROTATE_MODE, pCondSet).GetValue()); - const double fOrient((bLayoutRTL ? -1.0 : 1.0) * nAttrRotate * F_PI18000); // 1/100th degrees -> [0..2PI] - svx::frame::Array& rArray = mrTabInfo.maArray; + // create target coordinates + const SCCOL nTargetX(nX - nVisX1 + 1); + const SCROW nTargetY(nY - nVisY1 + 1); - rArray.SetCellRotation(nX+1, nY+1, eRotMode, fOrient); + // Check for values - below in SetCellRotation these will + // be converted to size_t and thus may not be negative + if(nTargetX >= 0 && nTargetY >= 0) + { + // add rotation info to Array information + const long nAttrRotate(pPattern->GetRotateVal(pCondSet)); + const SvxRotateMode eRotMode(pPattern->GetItem(ATTR_ROTATE_MODE, pCondSet).GetValue()); + const double fOrient((bLayoutRTL ? -1.0 : 1.0) * nAttrRotate * F_PI18000); // 1/100th degrees -> [0..2PI] + svx::frame::Array& rArray = mrTabInfo.maArray; + + rArray.SetCellRotation(nTargetX, nTargetY, eRotMode, fOrient); + } } } } |