diff options
author | Armin Le Grand <Armin.Le.Grand@cib.de> | 2018-01-23 10:29:44 +0100 |
---|---|---|
committer | Armin Le Grand <Armin.Le.Grand@cib.de> | 2018-01-29 10:16:55 +0100 |
commit | c5a3cae89660164f68565ee391ed8cf931f1d4da (patch) | |
tree | 95e428c408137583d09ea215b1878a2bc2bf4b2d /svx | |
parent | b28360c66bc856176ff84bc6c2516f710a7196ab (diff) |
BorderlineFix: Corrected handling for 'rotated' CellBorders
CellBorders can be rotated (including their Text) and need special
visualization that is based on an own sheared/rotated coordinate
system. Currently only possible for single cells (not merged ones)
and needs to handle all borders (also bottom-right directly in the
rotated cell, not in the neighboured ones to have the geometry,
plus avoiding these in the non-rotated neighbour cells.
Also corrected adding CellRotation data to svx::frame::Array
in calc using SetCellRotations() which now gets called in the
ScOutputData constructor to ensure it gets called in all places
where it is used.
Change-Id: I47bdfc29ba5ca76bbc07d98cb64733f867b1ee20
Diffstat (limited to 'svx')
-rw-r--r-- | svx/source/dialog/framelinkarray.cxx | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/svx/source/dialog/framelinkarray.cxx b/svx/source/dialog/framelinkarray.cxx index 096216210585..ab6db75799e3 100644 --- a/svx/source/dialog/framelinkarray.cxx +++ b/svx/source/dialog/framelinkarray.cxx @@ -1092,9 +1092,21 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( const bool bFirstRow(nRow == nFirstRow); const bool bLastRow(nRow == nLastRow); + // handle rotation: If cell is rotated, handle lower/right edge inside + // this local geometry due to the created CoordinateSystem already representing + // the needed transformations. + const bool bRotated(rCell.IsRotated()); + + // Additionally avoid double-handling by supressing handling when self not roated, + // but above/left is rotated and thus already handled. Two directly connected + // rotated will paint/create both edges, they might be rotated differently. + const bool bSuppressAbove(!bRotated && nRow > nFirstRow && CELL(nCol, nRow - 1).IsRotated()); + const bool bSupressLeft(!bRotated && nCol > nFirstCol && CELL(nCol - 1, nRow).IsRotated()); + // create upper line for this Cell - if (!bOverlapY // true for first line in merged cells or cells - || bFirstRow) // true for non_Calc usages of this tooling + if ((!bOverlapY // true for first line in merged cells or cells + || bFirstRow) // true for non_Calc usages of this tooling + && !bSuppressAbove) // true when above is not rotated, so edge is already handled (see bRotated) { // get CellStyle - method will take care to get the correct one, e.g. // for merged cells (it uses ORIGCELL that works with topLeft's of these) @@ -1107,7 +1119,8 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( } // create lower line for this Cell - if (bLastRow) // true for non_Calc usages of this tooling + if (bLastRow // true for non_Calc usages of this tooling + || bRotated) // true if cell is rotated, handle lower edge in local geometry { const Style& rBottom(GetCellStyleBottom(nCol, nRow)); @@ -1118,8 +1131,9 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( } // create left line for this Cell - if (!bOverlapX // true for first column in merged cells or cells - || bFirstCol) // true for non_Calc usages of this tooling + if ((!bOverlapX // true for first column in merged cells or cells + || bFirstCol) // true for non_Calc usages of this tooling + && !bSupressLeft) // true when left is not rotated, so edge is already handled (see bRotated) { const Style& rLeft(GetCellStyleLeft(nCol, nRow)); @@ -1130,7 +1144,8 @@ drawinglayer::primitive2d::Primitive2DContainer Array::CreateB2DPrimitiveRange( } // create right line for this Cell - if (bLastCol) // true for non_Calc usages of this tooling + if (bLastCol // true for non_Calc usages of this tooling + || bRotated) // true if cell is rotated, handle right edge in local geometry { const Style& rRight(GetCellStyleRight(nCol, nRow)); |