tdf#113050 sdext.pdfimport: Create the fill-image style and use it
In a poly which is being image filled, we need to create a style
with the actual image definition in the 'Contents'
and then set the (automatically created) name of this in
the prop on the main style.
Also we need to set draw:fill to "bitmap" rather than "solid"
Change-Id: I253704519011e98fd106331ccfb139ad93ef6dee
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163572
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/sdext/source/pdfimport/tree/drawtreevisiting.cxx b/sdext/source/pdfimport/tree/drawtreevisiting.cxx
index 5aae544..2c02adde 100644
--- a/sdext/source/pdfimport/tree/drawtreevisiting.cxx
+++ b/sdext/source/pdfimport/tree/drawtreevisiting.cxx
@@ -817,10 +817,29 @@ void DrawXmlFinalizer::visit( PolyPolyElement& elem, const std::list< std::uniqu
aGCProps[ "draw:stroke" ] = "none";
}
if (elem.FillImage != -1)
{
PropertyMap props;
// The image isn't actually in a prop, it's in an extra chunk inside.
StyleContainer::Style style("draw:fill-image"_ostr, std::move(props));
style.Contents = m_rProcessor.getImages().asBase64EncodedString(elem.FillImage);
aGCProps[ "draw:fill-image-name" ] =
m_rStyleContainer.getStyleName(
m_rStyleContainer.getStyleId(style));
}
// TODO(F1): check whether stuff could be emulated by gradient/bitmap/hatch
if( elem.Action & (PATH_FILL | PATH_EOFILL) )
{
aGCProps[ "draw:fill" ] = "solid";
if (elem.FillImage == -1)
{
aGCProps[ "draw:fill" ] = "solid";
}
else
{
aGCProps[ "draw:fill" ] = "bitmap";
}
aGCProps[ "draw:fill-color" ] = getColorString(rGC.FillColor);
if (rGC.FillColor.Alpha != 1.0)
aGCProps["draw:opacity"] = getPercentString(rGC.FillColor.Alpha * 100.0);
diff --git a/sdext/source/pdfimport/tree/writertreevisiting.cxx b/sdext/source/pdfimport/tree/writertreevisiting.cxx
index 9ecce8f..746fc9e 100644
--- a/sdext/source/pdfimport/tree/writertreevisiting.cxx
+++ b/sdext/source/pdfimport/tree/writertreevisiting.cxx
@@ -995,10 +995,29 @@ void WriterXmlFinalizer::visit( PolyPolyElement& elem, const std::list< std::uni
aGCProps[ "draw:stroke" ] = "none";
}
if (elem.FillImage != -1)
{
PropertyMap props;
// The image isn't actually in a prop, it's in an extra chunk inside.
StyleContainer::Style style("draw:fill-image"_ostr, std::move(props));
style.Contents = m_rProcessor.getImages().asBase64EncodedString(elem.FillImage);
aGCProps[ "draw:fill-image-name" ] =
m_rStyleContainer.getStyleName(
m_rStyleContainer.getStyleId(style));
}
// TODO(F1): check whether stuff could be emulated by gradient/bitmap/hatch
if( elem.Action & (PATH_FILL | PATH_EOFILL) )
{
aGCProps[ "draw:fill" ] = "solid";
if (elem.FillImage == -1)
{
aGCProps[ "draw:fill" ] = "solid";
}
else
{
aGCProps[ "draw:fill" ] = "bitmap";
}
aGCProps[ "draw:fill-color" ] = getColorString( rGC.FillColor );
}
else