diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-08-27 12:21:37 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-08-31 15:11:57 +0200 |
commit | 670dcdd889a36ab8a671eb06911b9a0e84723acd (patch) | |
tree | 37d07010772fc1f777d8c53f073b99d0dc46b922 | |
parent | 4c427575b34d15933303a18357564f3d45e01864 (diff) |
don't write SvxBackgroundColorItem via inherited SvxColorItem::Store
SvxBackgroundColorItem inherits from SvxColorItem and for backwards
compatibility with the StarOffice 5 binary file format (yes, really)
writes/reads only rgb and not the transparency value, so copying and pasting
text from a sidebar comment in writer to itself or another one results in a
black character background as the default COL_AUTO turns into black
Change-Id: I18b5105dd8e060b9e49dda6026e26d3a0f00d8f5
(cherry picked from commit 3bc69b1d0d8620afd89a993b5f6bc46a2ff5267f)
this farcical staroffice 5.0 related junk can at least be const
Change-Id: I096d98f6e0cb61cacd9cd82a623f832b88ded1e6
(cherry picked from commit 1e8b7cdbbd084a1e75f82bfff605321c8480b78d)
Reviewed-on: https://gerrit.libreoffice.org/18087
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Michael Meeks <michael.meeks@collabora.com>
-rw-r--r-- | editeng/source/editeng/editattr.cxx | 6 | ||||
-rw-r--r-- | editeng/source/items/textitem.cxx | 38 | ||||
-rw-r--r-- | include/editeng/colritem.hxx | 1 | ||||
-rw-r--r-- | include/tools/color.hxx | 2 | ||||
-rw-r--r-- | tools/source/generic/color.cxx | 2 |
5 files changed, 15 insertions, 34 deletions
diff --git a/editeng/source/editeng/editattr.cxx b/editeng/source/editeng/editattr.cxx index dcb9fa014b87..46cc8cfe99ba 100644 --- a/editeng/source/editeng/editattr.cxx +++ b/editeng/source/editeng/editattr.cxx @@ -221,7 +221,6 @@ void EditCharAttribColor::SetFont( SvxFont& rFont, OutputDevice* ) { Color aColor = static_cast<const SvxColorItem*>(GetItem())->GetValue(); rFont.SetColor( aColor); - //fprintf(stderr, "Called SetFont with Color %d\n", aColor.GetColor()); } // class EditCharAttribBackgroundColor @@ -238,14 +237,11 @@ EditCharAttribBackgroundColor::EditCharAttribBackgroundColor( void EditCharAttribBackgroundColor::SetFont( SvxFont& rFont, OutputDevice* ) { Color aColor = static_cast<const SvxBackgroundColorItem*>(GetItem())->GetValue(); - rFont.SetFillColor( aColor); rFont.SetTransparent(false); - + rFont.SetFillColor(aColor); } - // class EditCharAttribLanguage - EditCharAttribLanguage::EditCharAttribLanguage( const SvxLanguageItem& rAttr, sal_uInt16 _nStart, sal_uInt16 _nEnd ) : EditCharAttrib( rAttr, _nStart, _nEnd ) { diff --git a/editeng/source/items/textitem.cxx b/editeng/source/items/textitem.cxx index 40bf333bc7b3..4289446cf1e5 100644 --- a/editeng/source/items/textitem.cxx +++ b/editeng/source/items/textitem.cxx @@ -1850,9 +1850,12 @@ SvxBackgroundColorItem::SvxBackgroundColorItem( const Color& rCol, { } -SvxBackgroundColorItem:: SvxBackgroundColorItem( SvStream& rStrm, const sal_uInt16 Id ) : - SvxColorItem( rStrm, Id ) +SvxBackgroundColorItem::SvxBackgroundColorItem(SvStream& rStrm, const sal_uInt16 nId) + : SvxColorItem(nId) { + Color aColor; + aColor.Read(rStrm); + SetValue(aColor); } SvxBackgroundColorItem::SvxBackgroundColorItem( const SvxBackgroundColorItem& rCopy ) : @@ -1862,9 +1865,14 @@ SvxBackgroundColorItem::SvxBackgroundColorItem( const SvxBackgroundColorItem& rC SfxPoolItem* SvxBackgroundColorItem::Clone( SfxItemPool * ) const { - return new SvxBackgroundColorItem( *this ); + return new SvxBackgroundColorItem(*this); } +SvStream& SvxBackgroundColorItem::Store(SvStream& rStrm, sal_uInt16) const +{ + GetValue().Write(rStrm); + return rStrm; +} SfxPoolItem* SvxBackgroundColorItem::Create(SvStream& rStrm, sal_uInt16 ) const { @@ -1918,23 +1926,18 @@ bool SvxBackgroundColorItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId } // class SvxColorItem ---------------------------------------------------- - SvxColorItem::SvxColorItem( const sal_uInt16 nId ) : SfxPoolItem( nId ), mColor( COL_BLACK ) { } - - SvxColorItem::SvxColorItem( const Color& rCol, const sal_uInt16 nId ) : SfxPoolItem( nId ), mColor( rCol ) { } - - SvxColorItem::SvxColorItem( SvStream &rStrm, const sal_uInt16 nId ) : SfxPoolItem( nId ) { @@ -1943,21 +1946,16 @@ SvxColorItem::SvxColorItem( SvStream &rStrm, const sal_uInt16 nId ) : mColor = aColor; } - - SvxColorItem::SvxColorItem( const SvxColorItem &rCopy ) : SfxPoolItem( rCopy ), mColor( rCopy.mColor ) { } - - SvxColorItem::~SvxColorItem() { } - sal_uInt16 SvxColorItem::GetVersion( sal_uInt16 nFFVer ) const { DBG_ASSERT( SOFFICE_FILEFORMAT_31==nFFVer || @@ -1967,8 +1965,6 @@ sal_uInt16 SvxColorItem::GetVersion( sal_uInt16 nFFVer ) const return SOFFICE_FILEFORMAT_50 >= nFFVer ? VERSION_USEAUTOCOLOR : 0; } - - bool SvxColorItem::operator==( const SfxPoolItem& rAttr ) const { DBG_ASSERT( SfxPoolItem::operator==(rAttr), "unequal types" ); @@ -1976,16 +1972,12 @@ bool SvxColorItem::operator==( const SfxPoolItem& rAttr ) const return mColor == static_cast<const SvxColorItem&>( rAttr ).mColor; } - - bool SvxColorItem::QueryValue( uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) const { rVal <<= (sal_Int32)(mColor.GetColor()); return true; } - - bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) { sal_Int32 nColor = 0; @@ -1996,15 +1988,11 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, sal_uInt8 /*nMemberId*/ ) return true; } - - SfxPoolItem* SvxColorItem::Clone( SfxItemPool * ) const { return new SvxColorItem( *this ); } - - SvStream& SvxColorItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const { if( VERSION_USEAUTOCOLOR == nItemVersion && @@ -2015,15 +2003,11 @@ SvStream& SvxColorItem::Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const return rStrm; } - - SfxPoolItem* SvxColorItem::Create(SvStream& rStrm, sal_uInt16 /*nVer*/ ) const { return new SvxColorItem( rStrm, Which() ); } - - bool SvxColorItem::GetPresentation ( SfxItemPresentation /*ePres*/, diff --git a/include/editeng/colritem.hxx b/include/editeng/colritem.hxx index dadd4959f7a6..20239085ba61 100644 --- a/include/editeng/colritem.hxx +++ b/include/editeng/colritem.hxx @@ -82,6 +82,7 @@ class EDITENG_DLLPUBLIC SvxBackgroundColorItem : public SvxColorItem SvxBackgroundColorItem(const SvxBackgroundColorItem& rCopy); virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const SAL_OVERRIDE; + virtual SvStream& Store(SvStream& rStream, sal_uInt16 nVersion) const SAL_OVERRIDE; virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const SAL_OVERRIDE; virtual bool QueryValue(css::uno::Any& rVal, sal_uInt8 nMemberId = 0) const SAL_OVERRIDE; virtual bool PutValue(const css::uno::Any& rVal, sal_uInt8 nMemberId = 0) SAL_OVERRIDE; diff --git a/include/tools/color.hxx b/include/tools/color.hxx index c382f870e259..8f2e62e05569 100644 --- a/include/tools/color.hxx +++ b/include/tools/color.hxx @@ -201,7 +201,7 @@ public: } SvStream& Read(SvStream& rIStream, bool bNewFormat = true); - SvStream& Write(SvStream& rOStream, bool bNewFormat = true); + SvStream& Write(SvStream& rOStream, bool bNewFormat = true) const; TOOLS_DLLPUBLIC friend SvStream& ReadColor(SvStream& rIStream, Color& rColor); TOOLS_DLLPUBLIC friend SvStream& WriteColor(SvStream& rOStream, const Color& rColor); diff --git a/tools/source/generic/color.cxx b/tools/source/generic/color.cxx index 453feae9c2e1..2143ac611b24 100644 --- a/tools/source/generic/color.cxx +++ b/tools/source/generic/color.cxx @@ -255,7 +255,7 @@ SvStream& Color::Read( SvStream& rIStm, bool bNewFormat ) return rIStm; } -SvStream& Color::Write( SvStream& rOStm, bool bNewFormat ) +SvStream& Color::Write( SvStream& rOStm, bool bNewFormat ) const { if ( bNewFormat ) rOStm.WriteUInt32( mnColor ); |