[Libreoffice-commits] core.git: chart2/qa include/oox oox/source
Vinaya Mandke
vinaya.mandke at synerzip.com
Tue Feb 11 17:47:08 PST 2014
chart2/qa/extras/chart2export.cxx | 10 ++++
chart2/qa/extras/data/docx/fdo74115_WallBitmapFill.docx |binary
include/oox/export/chartexport.hxx | 1
include/oox/export/drawingml.hxx | 16 +++++--
oox/source/export/chartexport.cxx | 31 ++++++++++++++
oox/source/export/drawingml.cxx | 34 ++++++++++------
oox/source/export/shapes.cxx | 2
7 files changed, 77 insertions(+), 17 deletions(-)
New commits:
commit ffb1053b287fddd2c96757e5c6825381afc43fa1
Author: Vinaya Mandke <vinaya.mandke at synerzip.com>
Date: Mon Feb 3 11:53:02 2014 +0530
fdo#74115 Fix for DOCX BitmapFill for Chart Wall
Fixed import and export for chart wall Bitmap Fill in DOCX
Added UT for the same.
Conflicts:
oox/source/export/chartexport.cxx
Change-Id: Id066b0e4c2007fcdfdbbfa67b40307463bf0cfe7
diff --git a/chart2/qa/extras/chart2export.cxx b/chart2/qa/extras/chart2export.cxx
index d51bd1c..77140840 100644
--- a/chart2/qa/extras/chart2export.cxx
+++ b/chart2/qa/extras/chart2export.cxx
@@ -44,6 +44,7 @@ public:
void testDoughnutChart();
void testDisplayUnits();
void testFdo74115WallGradientFill();
+ void testFdo74115WallBitmapFill();
CPPUNIT_TEST_SUITE(Chart2ExportTest);
CPPUNIT_TEST(test);
@@ -60,6 +61,7 @@ public:
CPPUNIT_TEST(testDoughnutChart);
CPPUNIT_TEST(testDisplayUnits);
CPPUNIT_TEST(testFdo74115WallGradientFill);
+ CPPUNIT_TEST(testFdo74115WallBitmapFill);
CPPUNIT_TEST_SUITE_END();
protected:
@@ -556,6 +558,14 @@ void Chart2ExportTest::testFdo74115WallGradientFill()
assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:gradFill");
}
+void Chart2ExportTest::testFdo74115WallBitmapFill()
+{
+ load("/chart2/qa/extras/data/docx/", "fdo74115_WallBitmapFill.docx");
+ xmlDocPtr pXmlDoc = parseExport("word/charts/chart", "Office Open XML Text");
+ CPPUNIT_ASSERT(pXmlDoc);
+ assertXPath(pXmlDoc, "/c:chartSpace/c:chart/c:plotArea/c:spPr/a:blipFill");
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ExportTest);
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/chart2/qa/extras/data/docx/fdo74115_WallBitmapFill.docx b/chart2/qa/extras/data/docx/fdo74115_WallBitmapFill.docx
new file mode 100644
index 0000000..0c842fd
Binary files /dev/null and b/chart2/qa/extras/data/docx/fdo74115_WallBitmapFill.docx differ
diff --git a/include/oox/export/chartexport.hxx b/include/oox/export/chartexport.hxx
index c9c13ba..04a5e20 100644
--- a/include/oox/export/chartexport.hxx
+++ b/include/oox/export/chartexport.hxx
@@ -123,6 +123,7 @@ private:
void exportPlotAreaShapeProps( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet );
void exportFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet );
void exportGradientFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet );
+ void exportBitmapFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropSet );
void exportDataTable( );
void exportAreaChart( com::sun::star::uno::Reference< com::sun::star::chart2::XChartType > xChartType );
diff --git a/include/oox/export/drawingml.hxx b/include/oox/export/drawingml.hxx
index 8b963f7..36d94a6 100644
--- a/include/oox/export/drawingml.hxx
+++ b/include/oox/export/drawingml.hxx
@@ -101,7 +101,9 @@ protected:
OUString aName, ::com::sun::star::beans::PropertyState& eState );
const char* GetFieldType( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > rRun, sal_Bool& bIsField );
- OUString WriteImage( const OUString& rURL );
+
+ /// If bRelPathToMedia is true add "../" to image folder path while adding the image relationship
+ OUString WriteImage( const OUString& rURL, bool bRelPathToMedia = false);
void WriteStyleProperties( sal_Int32 nTokenId, ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aProperties );
const char* GetComponentDir();
@@ -117,7 +119,8 @@ public:
::oox::core::XmlFilterBase* GetFB() { return mpFB; }
DocumentType GetDocumentType() { return meDocumentType; }
- OUString WriteImage( const Graphic &rGraphic );
+ /// If bRelPathToMedia is true add "../" to image folder path while adding the image relationship
+ OUString WriteImage( const Graphic &rGraphic , bool bRelPathToMedia = false);
void WriteColor( sal_uInt32 nColor, sal_Int32 nAlpha = MAX_PERCENT );
void WriteColor( OUString sColorSchemeName, ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aTransformations );
@@ -132,14 +135,19 @@ public:
void WriteGradientFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
void WriteGradientFill( ::com::sun::star::awt::Gradient rGradient );
void WriteGrabBagGradientFill( ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aGradientStops, ::com::sun::star::awt::Gradient rGradient);
- void WriteBlipFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, OUString sURLPropName, sal_Int32 nXmlNamespace );
+ void WriteBlipFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet,
+ OUString sBitmapURL, sal_Int32 nXmlNamespace,
+ bool bWriteMode, bool bRelPathToMedia = false );
void WriteBlipFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, OUString sURLPropName );
+ void WriteBlipFill( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet,
+ OUString sURLPropName, sal_Int32 nXmlNamespace );
void WriteSrcRect( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >, const OUString& );
void WriteOutline( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
void WriteStretch();
void WriteLinespacing( ::com::sun::star::style::LineSpacing& rLineSpacing );
- OUString WriteBlip( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet, OUString& rURL, const Graphic *pGraphic=NULL );
+ OUString WriteBlip( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet,
+ OUString& rURL, bool bRelPathToMedia = false , const Graphic *pGraphic=NULL );
void WriteBlipMode( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > rXPropSet );
void WriteShapeTransformation( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rXShape,
diff --git a/oox/source/export/chartexport.cxx b/oox/source/export/chartexport.cxx
index 939e5a4..19394de 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -1166,11 +1166,40 @@ void ChartExport::exportFill( Reference< XPropertySet > xPropSet )
case FillStyle_GRADIENT :
exportGradientFill( xPropSet );
break;
+ case FillStyle_BITMAP :
+ exportBitmapFill( xPropSet );
+ break;
default:
WriteFill( xPropSet );
}
}
+void ChartExport::exportBitmapFill( Reference< XPropertySet > xPropSet )
+{
+ if( xPropSet.is() )
+ {
+ OUString sFillGradientName;
+ xPropSet->getPropertyValue("FillBitmapName") >>= sFillGradientName;
+
+ uno::Reference< lang::XMultiServiceFactory > xFact( getModel(), uno::UNO_QUERY );
+ try
+ {
+ uno::Reference< container::XNameAccess > xGradient( xFact->createInstance("com.sun.star.drawing.BitmapTable"), uno::UNO_QUERY );
+ uno::Any rValue = xGradient->getByName( sFillGradientName );
+ OUString sBitmapURL;
+ if( (rValue >>= sBitmapURL) )
+ {
+ WriteBlipFill( xPropSet, sBitmapURL, XML_a, true, true );
+ }
+ }
+ catch( const uno::Exception & rEx )
+ {
+ DBG_WARNING( "Bitmap Property not Found; ChartExport::exportBitmapFill" );
+ }
+
+ }
+}
+
void ChartExport::exportGradientFill( Reference< XPropertySet > xPropSet )
{
if( xPropSet.is() )
@@ -1191,7 +1220,7 @@ void ChartExport::exportGradientFill( Reference< XPropertySet > xPropSet )
}
catch( const uno::Exception & rEx )
{
- DBG_WARNING( "Gradient Property not Found; ChartExport::exportPlotAreaGradientFill" );
+ DBG_WARNING( "Gradient Property not Found; ChartExport::exportGradientFill" );
}
}
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index ee3f9b1..42fec3f 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -661,7 +661,7 @@ void DrawingML::WriteOutline( Reference< XPropertySet > rXPropSet )
mpFS->endElementNS( XML_a, XML_ln );
}
-OUString DrawingML::WriteImage( const OUString& rURL )
+OUString DrawingML::WriteImage( const OUString& rURL, bool bRelPathToMedia )
{
OString aURLBS(OUStringToOString(rURL, RTL_TEXTENCODING_UTF8));
@@ -673,7 +673,7 @@ OUString DrawingML::WriteImage( const OUString& rURL )
DBG(fprintf (stderr, "begin: %ld %s\n", long( sizeof( aURLBegin ) ), USS( rURL ) + RTL_CONSTASCII_LENGTH( aURLBegin ) ));
Graphic aGraphic = GraphicObject( aURLBS.copy(RTL_CONSTASCII_LENGTH(aURLBegin)) ).GetTransformedGraphic ();
- return WriteImage( aGraphic );
+ return WriteImage( aGraphic , bRelPathToMedia );
} else {
// add link to relations
}
@@ -705,7 +705,7 @@ const char* DrawingML::GetRelationCompPrefix()
return "unknown";
}
-OUString DrawingML::WriteImage( const Graphic& rGraphic )
+OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia )
{
GfxLink aLink = rGraphic.GetLink ();
OUString sMediaType;
@@ -780,11 +780,14 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic )
xOutStream->writeBytes( Sequence< sal_Int8 >( (const sal_Int8*) aData, nDataSize ) );
xOutStream->closeOutput();
+ OString sRelPathToMedia = "media/image";
+ if ( bRelPathToMedia )
+ sRelPathToMedia = "../" + sRelPathToMedia;
sRelId = mpFB->addRelation( mpFS->getOutputStream(),
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
OUStringBuffer()
.appendAscii( GetRelationCompPrefix() )
- .appendAscii( "media/image" )
+ .appendAscii( sRelPathToMedia.getStr() )
.append( (sal_Int32) mnImageCounter ++ )
.appendAscii( pExtension )
.makeStringAndClear() );
@@ -792,9 +795,9 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic )
return sRelId;
}
-OUString DrawingML::WriteBlip( Reference< XPropertySet > rXPropSet, OUString& rURL, const Graphic *pGraphic )
+OUString DrawingML::WriteBlip( Reference< XPropertySet > rXPropSet, OUString& rURL, bool bRelPathToMedia, const Graphic *pGraphic )
{
- OUString sRelId = pGraphic ? WriteImage( *pGraphic ) : WriteImage( rURL );
+ OUString sRelId = pGraphic ? WriteImage( *pGraphic, bRelPathToMedia ) : WriteImage( rURL, bRelPathToMedia );
sal_Int16 nBright = 0;
sal_Int32 nContrast = 0;
@@ -845,17 +848,27 @@ void DrawingML::WriteBlipFill( Reference< XPropertySet > rXPropSet, OUString sUR
if ( GetProperty( rXPropSet, sURLPropName ) ) {
OUString aURL;
mAny >>= aURL;
+ bool bWriteMode = false;
+ if( sURLPropName == "FillBitmapURL" || sURLPropName == "BackGraphicURL")
+ bWriteMode = true;
+ WriteBlipFill( rXPropSet, aURL, nXmlNamespace, bWriteMode );
+ }
+}
- DBG(fprintf (stderr, "URL: %s\n", OUStringToOString( aURL, RTL_TEXTENCODING_UTF8 ).getStr() ));
+void DrawingML::WriteBlipFill( Reference< XPropertySet > rXPropSet, OUString sBitmapURL, sal_Int32 nXmlNamespace, bool bWriteMode, bool bRelPathToMedia )
+{
+ if ( !sBitmapURL.isEmpty() ) {
+ DBG(fprintf (stderr, "URL: %s\n", OUStringToOString( sBitmapURL, RTL_TEXTENCODING_UTF8 ).getStr() ));
- if( aURL.isEmpty() )
+
+ if( sBitmapURL.isEmpty() )
return;
mpFS->startElementNS( nXmlNamespace , XML_blipFill, FSEND );
- WriteBlip( rXPropSet, aURL );
+ WriteBlip( rXPropSet, sBitmapURL, bRelPathToMedia );
- if( sURLPropName == "FillBitmapURL" || sURLPropName == "BackGraphicURL")
+ if( bWriteMode )
WriteBlipMode( rXPropSet );
else if( GetProperty( rXPropSet, "FillBitmapStretch" ) ) {
bool bStretch = false;
@@ -864,7 +877,6 @@ void DrawingML::WriteBlipFill( Reference< XPropertySet > rXPropSet, OUString sUR
if( bStretch )
WriteStretch();
}
-
mpFS->endElementNS( nXmlNamespace, XML_blipFill );
}
}
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index cd94303f..f50cab4 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -507,7 +507,7 @@ void ShapeExport::WriteGraphicObjectShapePart( Reference< XShape > xShape, const
pFS->startElementNS( mnXmlNamespace, XML_blipFill, FSEND );
- WriteBlip( xShapeProps, sGraphicURL, pGraphic );
+ WriteBlip( xShapeProps, sGraphicURL, false, pGraphic );
WriteSrcRect( xShapeProps, sGraphicURL );
More information about the Libreoffice-commits
mailing list