[Libreoffice-commits] core.git: 2 commits - filter/source include/filter oox/source sd/source
Noel Power
noel.power at suse.com
Wed Jun 26 08:50:47 PDT 2013
filter/source/msfilter/escherex.cxx | 32 ++++++++++++++++++++++++++++++++
include/filter/msfilter/escherex.hxx | 2 ++
oox/source/ole/axcontrol.cxx | 32 ++++++++++++++++++++++++++------
oox/source/ole/olehelper.cxx | 2 +-
sd/source/filter/eppt/eppt.cxx | 3 ++-
sd/source/filter/eppt/epptso.cxx | 4 ++++
6 files changed, 67 insertions(+), 8 deletions(-)
New commits:
commit 0a686a9bb54b5c1b3a45810e2601a098c0272c33
Author: Noel Power <noel.power at suse.com>
Date: Wed Jun 26 10:36:53 2013 +0100
tweak ppt ole import for libreoffice codebase
a) make sure backcolor is skipped when libreoffice backcolor
is default. Libreoffice default is 0 ( but if we write that out mso
reads it as black )
b) don't take the label default backcolor in exchange for the
libreoffice default. Libreoffice default backcolor for label is white,
mso's default is rather different ( and never seems to be used )
c) re-enable compObj export ( seemed this was disabled unintentionally
except for buttons )
Change-Id: Ie68267809cee2e92bd06e88e698f17a10eeeb6ad
diff --git a/oox/source/ole/axcontrol.cxx b/oox/source/ole/axcontrol.cxx
index eca6d70..86642dc 100644
--- a/oox/source/ole/axcontrol.cxx
+++ b/oox/source/ole/axcontrol.cxx
@@ -1033,7 +1033,10 @@ void AxCommandButtonModel::exportBinaryModel( BinaryOutputStream& rOutStrm )
{
AxBinaryPropertyWriter aWriter( rOutStrm );
aWriter.writeIntProperty< sal_uInt32 >( mnTextColor );
- aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ if ( mnBackColor )
+ aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ else
+ aWriter.skipProperty(); // default backcolour
aWriter.writeIntProperty< sal_uInt32 >( mnFlags );
aWriter.writeStringProperty( maCaption );
aWriter.skipProperty(); // pict pos
@@ -1156,7 +1159,12 @@ void AxLabelModel::exportBinaryModel( BinaryOutputStream& rOutStrm )
{
AxBinaryPropertyWriter aWriter( rOutStrm );
aWriter.writeIntProperty< sal_uInt32 >( mnTextColor );
- aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ if ( mnBackColor )
+ aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ else
+ // if mnBackColor == 0 then it's the libreoffice default backcolour is
+ // the MSO Label default which is AX_SYSCOLOR_BUTTONFACE
+ aWriter.writeIntProperty< sal_uInt32 >( AX_SYSCOLOR_WINDOWBACK );
aWriter.writeIntProperty< sal_uInt32 >( mnFlags );
aWriter.writeStringProperty( maCaption );
aWriter.skipProperty(); // picture position
@@ -1299,7 +1307,10 @@ void AxImageModel::exportBinaryModel( BinaryOutputStream& rOutStrm )
aWriter.skipProperty(); //undefined
aWriter.skipProperty(); //auto-size
aWriter.writeIntProperty< sal_uInt32 >( mnBorderColor );
- aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ if ( mnBackColor )
+ aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ else
+ aWriter.skipProperty(); // default backcolour
aWriter.writeIntProperty< sal_uInt8 >( mnBorderStyle );
aWriter.skipProperty(); // mouse pointer
aWriter.writeIntProperty< sal_uInt8 >( mnPicSizeMode );
@@ -1500,7 +1511,10 @@ void AxMorphDataModelBase::exportBinaryModel( BinaryOutputStream& rOutStrm )
aWriter.writeIntProperty< sal_uInt32 >( mnFlags );
else
aWriter.skipProperty(); //mnFlags
- aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ if ( mnBackColor )
+ aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ else
+ aWriter.skipProperty(); // default backcolour
aWriter.writeIntProperty< sal_uInt32 >( mnTextColor );
// only write if different from default
@@ -2116,7 +2130,10 @@ void AxSpinButtonModel::exportBinaryModel( BinaryOutputStream& rOutStrm )
{
AxBinaryPropertyWriter aWriter( rOutStrm );
aWriter.writeIntProperty< sal_uInt32 >( mnArrowColor );
- aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ if ( mnBackColor )
+ aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ else
+ aWriter.skipProperty(); // default backcolour
aWriter.writeIntProperty< sal_uInt32 >( mnFlags );
aWriter.writePairProperty( maSize );
aWriter.skipProperty(); // unused
@@ -2261,7 +2278,10 @@ void AxScrollBarModel::exportBinaryModel( BinaryOutputStream& rOutStrm )
{
AxBinaryPropertyWriter aWriter( rOutStrm );
aWriter.writeIntProperty< sal_uInt32 >( mnArrowColor );
- aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ if ( mnBackColor )
+ aWriter.writeIntProperty< sal_uInt32 >( mnBackColor );
+ else
+ aWriter.skipProperty(); // default backcolour
aWriter.writeIntProperty< sal_uInt32 >( mnFlags );
aWriter.writePairProperty( maSize );
aWriter.skipProperty(); // mouse pointer
diff --git a/oox/source/ole/olehelper.cxx b/oox/source/ole/olehelper.cxx
index 8dc8f7c..433b884 100644
--- a/oox/source/ole/olehelper.cxx
+++ b/oox/source/ole/olehelper.cxx
@@ -461,7 +461,7 @@ void OleFormCtrlExportHelper::exportName( const Reference< XOutputStream >& rxOu
void OleFormCtrlExportHelper::exportCompObj( const Reference< XOutputStream >& rxOut )
{
oox::BinaryXOutputStream aOut( rxOut, false );
- if ( mpModel && mpModel->getControlType() == API_CONTROL_BUTTON )
+ if ( mpModel )
mpModel->exportCompObj( aOut );
}
commit f38487511957971f9d08dd5c9af8f8128371540e
Author: Jianyuan Li <lijiany at apache.org>
Date: Tue Sep 11 08:00:21 2012 +0000
#119467# Form controls cannot be saved into .ppt file in AOO3.4
Reported by: Du Jing
Patch by: Jianyuan Li
Review by: sunying
diff --git a/filter/source/msfilter/escherex.cxx b/filter/source/msfilter/escherex.cxx
index 3696251..bd6b0e4 100644
--- a/filter/source/msfilter/escherex.cxx
+++ b/filter/source/msfilter/escherex.cxx
@@ -18,6 +18,7 @@
*/
#include "eschesdo.hxx"
+#include <svx/svdxcgv.hxx>
#include <svx/svdomedia.hxx>
#include <svx/xflftrit.hxx>
#include <filter/msfilter/escherex.hxx>
@@ -3812,6 +3813,37 @@ MSO_SPT EscherPropertyContainer::GetCustomShapeType( const uno::Reference< drawi
return GetCustomShapeType( rXShape, nMirrorFlags, aShapeType );
}
+//Implement for form control export
+sal_Bool EscherPropertyContainer::CreateBlipPropertiesforOLEControl(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape)
+{
+ SdrObject* pShape = GetSdrObjectFromXShape( rXShape );
+ if ( pShape )
+ {
+ SdrModel* pMod = pShape->GetModel();
+ Graphic aGraphic(SdrExchangeView::GetObjGraphic( pMod, pShape));
+
+ GraphicObject aGraphicObject = aGraphic;
+ OString aUniqueId = aGraphicObject.GetUniqueID();
+ if ( aUniqueId.getLength() )
+ {
+ if ( pGraphicProvider && pPicOutStrm && pShapeBoundRect )
+ {
+ Rectangle aRect( Point( 0, 0 ), pShapeBoundRect->GetSize() );
+
+ sal_uInt32 nBlibId = pGraphicProvider->GetBlibID( *pPicOutStrm, aUniqueId, aRect, NULL );
+ if ( nBlibId )
+ {
+ AddOpt( ESCHER_Prop_pib, nBlibId, sal_True );
+ ImplCreateGraphicAttributes( rXPropSet, nBlibId, sal_False );
+ return sal_True;
+ }
+ }
+ }
+ }
+
+ return sal_False;
+}
+
EscherPersistTable::EscherPersistTable()
{
}
diff --git a/include/filter/msfilter/escherex.hxx b/include/filter/msfilter/escherex.hxx
index 4b7a0c9..e21805a 100644
--- a/include/filter/msfilter/escherex.hxx
+++ b/include/filter/msfilter/escherex.hxx
@@ -1262,6 +1262,8 @@ public:
const sal_Bool bFillBitmapModeAllowed = sal_True
);
+ sal_Bool CreateBlipPropertiesforOLEControl( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape);
+
sal_Bool CreatePolygonProperties(
const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
sal_uInt32 nFlags,
diff --git a/sd/source/filter/eppt/eppt.cxx b/sd/source/filter/eppt/eppt.cxx
index 861d06a..d7eeb5d 100644
--- a/sd/source/filter/eppt/eppt.cxx
+++ b/sd/source/filter/eppt/eppt.cxx
@@ -1325,7 +1325,8 @@ void PPTWriter::ImplWriteOLE( )
if ( pPtr->xControlModel.is() )
{
OUString aName;
- ::com::sun::star::awt::Size aSize;
+ //Initialize the graphic size which will be used on export
+ ::com::sun::star::awt::Size aSize( pPtr->xShape->getSize() );
SvStorageRef xDest( new SvStorage( new SvMemoryStream(), sal_True ) );
sal_Bool bOk = oox::ole::MSConvertOCXControls::WriteOCXStream( mXModel, xDest, pPtr->xControlModel, aSize, aName );
if ( bOk )
diff --git a/sd/source/filter/eppt/epptso.cxx b/sd/source/filter/eppt/epptso.cxx
index fa1a46b..3d45f89 100644
--- a/sd/source/filter/eppt/epptso.cxx
+++ b/sd/source/filter/eppt/epptso.cxx
@@ -2573,6 +2573,7 @@ void PPTWriter::ImplWritePage( const PHLayout& rLayout, EscherSolverContainer& a
<< nPageId;
PPTExOleObjEntry* pEntry = new PPTExOleObjEntry( OCX_CONTROL, mpExEmbed->Tell() );
pEntry->xControlModel = aXControlModel;
+ pEntry->xShape = mXShape;
maExOleObj.push_back( pEntry );
mnExEmbed++;
@@ -2644,6 +2645,9 @@ void PPTWriter::ImplWritePage( const PHLayout& rLayout, EscherSolverContainer& a
ImplCreateShape( ESCHER_ShpInst_HostControl, nSpFlags, aSolverContainer );
if ( aPropOpt.CreateGraphicProperties( mXPropSet, OUString( "MetaFile" ), sal_False ) )
aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
+ //export form control graphic
+ else if ( aPropOpt.CreateBlipPropertiesforOLEControl(mXPropSet,mXShape))
+ aPropOpt.AddOpt( ESCHER_Prop_LockAgainstGrouping, 0x800080 );
aPropOpt.AddOpt( ESCHER_Prop_pictureId, mnExEmbed );
aPropOpt.AddOpt( ESCHER_Prop_pictureActive, 0x10000 );
More information about the Libreoffice-commits
mailing list