[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - oox/inc oox/source sd/qa
oox/inc/drawingml/colorchoicecontext.hxx| 15 + oox/source/drawingml/colorchoicecontext.cxx | 25 oox/source/drawingml/diagram/diagram.cxx| 17 +- oox/source/drawingml/diagram/diagram.hxx| 16 ++ oox/source/drawingml/diagram/diagramfragmenthandler.cxx | 15 +++-- oox/source/drawingml/diagram/diagramlayoutatoms.cxx | 20 +++- oox/source/drawingml/diagram/diagramlayoutatoms.hxx |3 + oox/source/drawingml/diagram/layoutatomvisitors.cxx |4 +- sd/qa/unit/data/pptx/fill-color-list.pptx |binary sd/qa/unit/import-tests-smartart.cxx| 19 10 files changed, 105 insertions(+), 29 deletions(-) New commits: commit 50d004fc8fe2c44516c52d22b40a221e8e3b587d Author: Miklos Vajna AuthorDate: Fri May 22 17:58:22 2020 +0200 Commit: Mike Kaganski CommitDate: Fri May 29 16:33:44 2020 +0200 smartart import: handle multiple in The TODO in the ColorFragmentHandler ctor was right: we only handled the last child, but there can be multiple one. Use them based on the index of a shape in a loop. Move the TODO to the only place which still assumes a single color in the color list. (cherry picked from commit 12bea6c897822964ad4705418da54411cb15749e) Conflicts: oox/source/drawingml/colorchoicecontext.cxx oox/source/drawingml/diagram/diagram.cxx sd/qa/unit/import-tests-smartart.cxx Change-Id: I1c5c4f82e621f1110ef06b0490ff79f82f60f214 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95015 Tested-by: Jenkins Reviewed-by: Mike Kaganski diff --git a/oox/inc/drawingml/colorchoicecontext.hxx b/oox/inc/drawingml/colorchoicecontext.hxx index 29889f494e3d..dae8d7fb8e25 100644 --- a/oox/inc/drawingml/colorchoicecontext.hxx +++ b/oox/inc/drawingml/colorchoicecontext.hxx @@ -22,6 +22,8 @@ #include +#include + namespace oox { namespace drawingml { @@ -65,6 +67,19 @@ private: Color& mrColor; }; +/// Same as ColorContext, but handles multiple colors. +class ColorsContext : public ::oox::core::ContextHandler2 +{ +public: +explicit ColorsContext(::oox::core::ContextHandler2Helper const& rParent, + std::vector& rColors); + +virtual ::oox::core::ContextHandlerRef +onCreateContext(sal_Int32 nElement, const ::oox::AttributeList& rAttribs) override; + +private: +std::vector& mrColors; +}; } // namespace drawingml } // namespace oox diff --git a/oox/source/drawingml/colorchoicecontext.cxx b/oox/source/drawingml/colorchoicecontext.cxx index cf6c17ecd3b4..a9e0d91ef32e 100644 --- a/oox/source/drawingml/colorchoicecontext.cxx +++ b/oox/source/drawingml/colorchoicecontext.cxx @@ -149,6 +149,31 @@ ColorContext::ColorContext( ContextHandler2Helper const & rParent, Color& rColor return nullptr; } +ColorsContext::ColorsContext(ContextHandler2Helper const& rParent, std::vector& rColors) +: ContextHandler2(rParent) +, mrColors(rColors) +{ +} + +::oox::core::ContextHandlerRef ColorsContext::onCreateContext(sal_Int32 nElement, + const AttributeList&) +{ +switch (nElement) +{ +case A_TOKEN(scrgbClr): +case A_TOKEN(srgbClr): +case A_TOKEN(hslClr): +case A_TOKEN(sysClr): +case A_TOKEN(schemeClr): +case A_TOKEN(prstClr): +{ +mrColors.emplace_back(); +return new ColorValueContext(*this, mrColors.back()); +} +} +return nullptr; +} + } // namespace drawingml } // namespace oox diff --git a/oox/source/drawingml/diagram/diagram.cxx b/oox/source/drawingml/diagram/diagram.cxx index b2f3373ad113..a03a06c39125 100644 --- a/oox/source/drawingml/diagram/diagram.cxx +++ b/oox/source/drawingml/diagram/diagram.cxx @@ -321,9 +321,11 @@ void loadDiagram( ShapePtr const & pShape, if( !pData->getExtDrawings().empty() ) { const DiagramColorMap::const_iterator aColor = pDiagram->getColors().find("node0"); -if( aColor != pDiagram->getColors().end() ) +if( aColor != pDiagram->getColors().end() && !aColor->second.maTextFillColors.empty()) { -pShape->setFontRefColorForNodes(aColor->second.maTextFillColor); +// TODO(F1): well, actually, there might be *several* color +// definitions in it, after all it's called list. + pShape->setFontRefColorForNodes(DiagramColor::getColorByIndex(aColor->second.maTextFillColors, -1)); } } @@ -425,6 +427,17 @@ void reloadDiagram(SdrObject* pObj, core::XmlFilterBase& rFilter) child->addShape(rFilter, rFilter.getCurrentTheme(), xShapes, aTransformation, pShape->getFillProperties()); } +const oox::drawingml::Color& +DiagramColor::getColorByIndex(const
[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - oox/inc oox/source sd/qa
oox/inc/drawingml/table/tableproperties.hxx|2 ++ oox/source/drawingml/table/tablecell.cxx |6 ++ oox/source/drawingml/table/tablecontext.cxx|2 ++ oox/source/drawingml/table/tableproperties.cxx |1 + sd/qa/unit/data/pptx/tdf127237.pptx|binary sd/qa/unit/export-tests-ooxml1.cxx | 22 ++ 6 files changed, 33 insertions(+) New commits: commit 6e873fd94a192f503fd1aff205bdfb5ad465c7ef Author: nd101 AuthorDate: Mon Sep 2 10:29:12 2019 +0800 Commit: Xisco FaulĂ CommitDate: Fri Dec 6 22:41:35 2019 +0100 tdf#127237 fix table background color in Impress import When the background color is set at the table level in PPTX, instead of at cell level, the background color fails to show up in Impress. Change-Id: I2838e5b56e4a2414494ee99c0f8975b7256ac6dc Reviewed-on: https://gerrit.libreoffice.org/78377 Tested-by: Jenkins Reviewed-by: Miklos Vajna (cherry picked from commit 4c2254cbebca53c34fa48a1dd90cebe434f24274) Reviewed-on: https://gerrit.libreoffice.org/84644 Reviewed-by: Xisco FaulĂ diff --git a/oox/inc/drawingml/table/tableproperties.hxx b/oox/inc/drawingml/table/tableproperties.hxx index dd50cd7a694d..010fc67df416 100644 --- a/oox/inc/drawingml/table/tableproperties.hxx +++ b/oox/inc/drawingml/table/tableproperties.hxx @@ -54,6 +54,7 @@ public: voidsetBandRow(bool b) { mbBandRow = b; }; boolisBandCol() const { return mbBandCol; }; voidsetBandCol(bool b) { mbBandCol = b; }; +Color& getBgColor(){ return maBgColor; }; void pushToPropSet( const ::oox::core::XmlFilterBase& rFilterBase, const css::uno::Reference < css::beans::XPropertySet > & xPropSet, @@ -70,6 +71,7 @@ private: std::shared_ptr< TableStyle > mpTableStyle; // or the complete TableStyle std::vector< sal_Int32 >mvTableGrid; std::vector< TableRow > mvTableRows; +Color maBgColor; boolmbFirstRow; boolmbFirstCol; diff --git a/oox/source/drawingml/table/tablecell.cxx b/oox/source/drawingml/table/tablecell.cxx index f27117fd2b42..50dda7080bb0 100644 --- a/oox/source/drawingml/table/tablecell.cxx +++ b/oox/source/drawingml/table/tablecell.cxx @@ -424,6 +424,12 @@ void TableCell::pushToXCell( const ::oox::core::XmlFilterBase& rFilterBase, cons applyLineAttributes( rFilterBase, xPropSet, aLinePropertiesTopLeftToBottomRight, PROP_DiagonalTLBR ); applyLineAttributes( rFilterBase, xPropSet, aLinePropertiesBottomLeftToTopRight, PROP_DiagonalBLTR ); +if (rProperties.getBgColor().isUsed() && !maFillProperties.maFillColor.isUsed() && maFillProperties.moFillType.get() == XML_noFill) +{ +maFillProperties.moFillType = XML_solidFill; +maFillProperties.maFillColor = rProperties.getBgColor(); +} + aFillProperties.assignUsed( maFillProperties ); ShapePropertyMap aPropMap( rFilterBase.getModelObjectHelper() ); diff --git a/oox/source/drawingml/table/tablecontext.cxx b/oox/source/drawingml/table/tablecontext.cxx index 3371e105f691..90191f615d4d 100644 --- a/oox/source/drawingml/table/tablecontext.cxx +++ b/oox/source/drawingml/table/tablecontext.cxx @@ -57,6 +57,8 @@ TableContext::onCreateContext( ::sal_Int32 aElementToken, const AttributeList& r mrTableProperties.setBandCol( rAttribs.getBool( XML_bandCol, false ) ); } break; +case A_TOKEN(solidFill): +return new ColorContext(*this, mrTableProperties.getBgColor()); case A_TOKEN( tableStyle ): // CT_TableStyle { std::shared_ptr< TableStyle >& rTableStyle = mrTableProperties.getTableStyle(); diff --git a/oox/source/drawingml/table/tableproperties.cxx b/oox/source/drawingml/table/tableproperties.cxx index b6f9a8a59cfc..a32353d52f1f 100644 --- a/oox/source/drawingml/table/tableproperties.cxx +++ b/oox/source/drawingml/table/tableproperties.cxx @@ -49,6 +49,7 @@ TableProperties::TableProperties() , mbBandRow( false ) , mbBandCol( false ) { +maBgColor.setUnused(); } static void CreateTableRows( const uno::Reference< XTableRows >& xTableRows, const std::vector< TableRow >& rvTableRows ) diff --git a/sd/qa/unit/data/pptx/tdf127237.pptx b/sd/qa/unit/data/pptx/tdf127237.pptx new file mode 100644 index ..f63423cd47e8 Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf127237.pptx differ diff --git a/sd/qa/unit/export-tests-ooxml1.cxx b/sd/qa/unit/export-tests-ooxml1.cxx index 79b18b7cb914..769bf6e52456 100644 --- a/sd/qa/unit/export-tests-ooxml1.cxx +++ b/sd/qa/unit/export-tests-ooxml1.cxx @@ -55,6 +55,7 @@ class SdOOXMLExportTest1 : public SdModelTestBaseXML { public: void testFdo90607(); +