[Libreoffice-commits] core.git: Branch 'libreoffice-6-0' - sc/source

Armin Le Grand Armin.Le.Grand at cib.de
Tue May 29 08:24:01 UTC 2018


 sc/source/ui/view/output.cxx |   21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

New commits:
commit 08e45e11a0e74cdb4a17ec29df9d03ad03b7f7c0
Author: Armin Le Grand <Armin.Le.Grand at cib.de>
Date:   Thu Apr 19 18:56:55 2018 +0200

    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 at libreoffice.org>
    Reviewed-by: Armin Le Grand <Armin.Le.Grand at cib.de>
    (cherry picked from commit 0185e65bcd73dbad2205a39369e1e06b33a2ca51)
    Reviewed-on: https://gerrit.libreoffice.org/54922

diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index 6e0fa1a77e5c..ac525bb0f803 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);
+                        }
                     }
                 }
             }


More information about the Libreoffice-commits mailing list