[Libreoffice-commits] core.git: oox/inc oox/source sc/qa

2020-09-29 Thread Regényi Balázs (via logerrit)
 oox/inc/drawingml/textbodyproperties.hxx|2 +
 oox/source/drawingml/shape.cxx  |7 
 oox/source/drawingml/textbodypropertiescontext.cxx  |4 +-
 oox/source/export/drawingml.cxx |   19 +-
 sc/qa/unit/data/xlsx/tdf91251_missingOverflowRoundtrip.xlsx |binary
 sc/qa/unit/subsequent_export-test.cxx   |   21 
 6 files changed, 49 insertions(+), 4 deletions(-)

New commits:
commit 79737c8b0d84d4967c5f1c41b740a8a52db8b551
Author: Regényi Balázs 
AuthorDate: Tue Sep 22 17:12:59 2020 +0200
Commit: László Németh 
CommitDate: Tue Sep 29 12:26:25 2020 +0200

tdf#91251 XLSX textbox export: fix missing overflow properties

by grab-bagging them.

Co-authored-by: Szabolcs Toth

Change-Id: I242bf33e1272d913805c90a2ef902be8633618fb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103182
Tested-by: László Németh 
Reviewed-by: László Németh 

diff --git a/oox/inc/drawingml/textbodyproperties.hxx 
b/oox/inc/drawingml/textbodyproperties.hxx
index 26e34ac6a5f7..8a51c2bb906e 100644
--- a/oox/inc/drawingml/textbodyproperties.hxx
+++ b/oox/inc/drawingml/textbodyproperties.hxx
@@ -46,6 +46,8 @@ struct TextBodyProperties
 sal_Int32 mnNumCol = 1;
 /// Normal autofit: font scale (default: 100%).
 sal_Int32 mnFontScale = 10;
+OUString msHorzOverflow;
+OUString msVertOverflow;
 
 explicitTextBodyProperties();
 
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index ddc5a96b8018..5af4d51cbfd4 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1429,6 +1429,13 @@ Reference< XShape > const & Shape::createAndInsert(
degrees anticlockwise. */
 mpCustomShapePropertiesPtr->setTextRotateAngle(-1 * 
nTextRotateAngle / 6);
 }
+
+auto sHorzOverflow = 
getTextBody()->getTextProperties().msHorzOverflow;
+if (!sHorzOverflow.isEmpty())
+putPropertyToGrabBag("horzOverflow", 
uno::makeAny(getTextBody()->getTextProperties().msHorzOverflow));
+auto nVertOverflow = 
getTextBody()->getTextProperties().msVertOverflow;
+if (!nVertOverflow.isEmpty())
+putPropertyToGrabBag("vertOverflow", 
uno::makeAny(getTextBody()->getTextProperties().msVertOverflow));
 }
 
 // Note that the script 
oox/source/drawingml/customshapes/generatePresetsData.pl looks
diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx 
b/oox/source/drawingml/textbodypropertiescontext.cxx
index d3add310097f..6a6d9e90ef63 100644
--- a/oox/source/drawingml/textbodypropertiescontext.cxx
+++ b/oox/source/drawingml/textbodypropertiescontext.cxx
@@ -80,9 +80,9 @@ TextBodyPropertiesContext::TextBodyPropertiesContext( 
ContextHandler2Helper cons
 mrTextBodyProp.maPropertyMap.setProperty(PROP_FromWordArt, bFromWordArt);
 
   // ST_TextHorzOverflowType
-//   sal_Int32 nHorzOverflow = rAttribs.getToken( XML_horzOverflow, 
XML_overflow );
+mrTextBodyProp.msHorzOverflow = rAttribs.getString(XML_horzOverflow, "");
 // ST_TextVertOverflowType
-//   sal_Int32 nVertOverflow =  rAttribs.getToken( XML_vertOverflow, 
XML_overflow );
+mrTextBodyProp.msVertOverflow = rAttribs.getString(XML_vertOverflow, "");
 
 // ST_TextColumnCount
 mrTextBodyProp.mnNumCol = rAttribs.getInteger( XML_numCol, 1 );
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 8ea8035ea39a..0612fe56ed43 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -2955,18 +2955,31 @@ void DrawingML::WriteText(const Reference& 
rXIface, bool bBodyPr, bo
 }
 
 bool isUpright = false;
+std::optional sHorzOverflow;
+std::optional sVertOverflow;
 if (GetProperty(rXPropSet, "InteropGrabBag"))
 {
 if 
(rXPropSet->getPropertySetInfo()->hasPropertyByName("InteropGrabBag"))
 {
 uno::Sequence aGrabBag;
 rXPropSet->getPropertyValue("InteropGrabBag") >>= aGrabBag;
-for (auto& aProp : aGrabBag)
+for (const auto& aProp : std::as_const(aGrabBag))
 {
 if (aProp.Name == "Upright")
 {
 aProp.Value >>= isUpright;
-break;
+}
+else if (aProp.Name == "horzOverflow")
+{
+OUString sValue;
+aProp.Value >>= sValue;
+sHorzOverflow = sValue;
+}
+else if (aProp.Name == "vertOverflow")
+{
+OUString sValue;
+aProp.Value >>= sValue;
+  

[Libreoffice-commits] core.git: oox/inc oox/source sc/qa

2020-09-24 Thread Szabolcs Toth (via logerrit)
 oox/inc/drawingml/textbodyproperties.hxx   |1 
 oox/source/drawingml/shape.cxx |   24 +--
 oox/source/drawingml/textbodypropertiescontext.cxx |5 +-
 oox/source/export/drawingml.cxx|   37 -
 sc/qa/unit/data/xlsx/tdf106197_import_upright.xlsx |binary
 sc/qa/unit/subsequent_filters-test.cxx |   45 +
 6 files changed, 89 insertions(+), 23 deletions(-)

New commits:
commit 8c23be49fb5a9044989532e6e20feb1e3ff64f2b
Author: Szabolcs Toth 
AuthorDate: Wed Sep 16 14:41:24 2020 +0200
Commit: László Németh 
CommitDate: Thu Sep 24 12:54:14 2020 +0200

tdf#106197 XLSX shape import: keep text upright

Handle and grab-bag attribute upright to keep
text upright regardless of shape rotation, fixing
the text direction after import and after a round-trip.

Co-authored-by: Balázs Regényi

Change-Id: If4c73aeaebad55af967cea894a94756068ca3766
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102870
Tested-by: László Németh 
Reviewed-by: László Németh 

diff --git a/oox/inc/drawingml/textbodyproperties.hxx 
b/oox/inc/drawingml/textbodyproperties.hxx
index 6e5e97fb94ba..26e34ac6a5f7 100644
--- a/oox/inc/drawingml/textbodyproperties.hxx
+++ b/oox/inc/drawingml/textbodyproperties.hxx
@@ -34,6 +34,7 @@ struct TextBodyProperties
 OptValue< sal_Int32 >   moRotation;
 boolmbAnchorCtr;
 OptValue< sal_Int32 >   moVert;
+boolmoUpright = false;
 std::optional< sal_Int32 >moInsets[4];
 std::optional< sal_Int32 >moTextOffUpper;
 std::optional< sal_Int32 >moTextOffLeft;
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 02b89312d200..326d90be3ffd 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1409,10 +1409,26 @@ Reference< XShape > const & Shape::createAndInsert(
 sal_Int32 nTextRotateAngle = static_cast< sal_Int32 >( 
getTextBody()->getTextProperties().moRotation.get( 0 ) );
 
 nTextRotateAngle -= mnDiagramRotation;
-/* OOX measures text rotation clockwise in 1/6th degrees,
-   relative to the containing shape. setTextRotateAngle wants
-   degrees anticlockwise. */
-mpCustomShapePropertiesPtr->setTextRotateAngle( -1 * 
nTextRotateAngle / 6 );
+
+bool isUpright = getTextBody()->getTextProperties().moUpright;
+if (isUpright)
+{
+// When upright is set, we want the text without any 
rotation.
+// But if we set 0 here, the text is still rotated if the
+// shape containing it is rotated.
+// Hence, we rotate the text into the the opposite 
direction of
+// the rotation of the shape, by as much as the shape was 
rotated.
+mpCustomShapePropertiesPtr->setTextRotateAngle(mnRotation 
/ 6);
+// Also put this away in a Gabbag.
+putPropertyToGrabBag("Upright", Any(isUpright));
+}
+else
+{
+/* OOX measures text rotation clockwise in 1/6th 
degrees,
+   relative to the containing shape. setTextRotateAngle 
wants
+   degrees anticlockwise. */
+mpCustomShapePropertiesPtr->setTextRotateAngle(-1 * 
nTextRotateAngle / 6);
+}
 }
 
 // Note that the script 
oox/source/drawingml/customshapes/generatePresetsData.pl looks
diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx 
b/oox/source/drawingml/textbodypropertiescontext.cxx
index b72fa194401a..d3add310097f 100644
--- a/oox/source/drawingml/textbodypropertiescontext.cxx
+++ b/oox/source/drawingml/textbodypropertiescontext.cxx
@@ -94,7 +94,10 @@ TextBodyPropertiesContext::TextBodyPropertiesContext( 
ContextHandler2Helper cons
 // ST_PositiveCoordinate
 //   sal_Int32 nSpcCol = rAttribs.getInteger( XML_spcCol, 0 );
 //   bool bSpcFirstLastPara = rAttribs.getBool( XML_spcFirstLastPara, 0 );
-//   bool bUpRight = rAttribs.getBool( XML_upright, 0 );
+
+bool bUpright = rAttribs.getBool(XML_upright, false);
+if (bUpright)
+mrTextBodyProp.moUpright = true;
 
 // ST_TextVerticalType
 if( rAttribs.hasAttribute( XML_vert ) ) {
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 8d3cbd23a6a7..8ea8035ea39a 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -2932,24 +2932,6 @@ void DrawingML::WriteText(const Reference& 
rXIface, bool bBodyPr, bo
 else if( bVertical &&