diff options
author | Miklos Vajna <vmiklos@suse.cz> | 2012-09-12 09:59:27 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2012-09-12 10:03:18 +0200 |
commit | 18b3feb8bef06bf7b126fd0bc743e19479cb8026 (patch) | |
tree | 1dc7edbf8779d04cd6bc52be8edc16b79c69d7d3 /sw | |
parent | 40f1a95eff2b207e9b2b59c72c02e633ee9bf7be (diff) |
n#778133 sw: add BackgroundParaOverDrawings compat flag
In Word, the layer that contains a background image is behind the layer
that contains the paragraph background. In Writer, the paragraph
background is painted before the hell layer. Add a compat flag to change
the order, so the DOCX importer can trigger that.
To reproduce, create an XShape, send it to the background, set some
color for a paragraph background, and notice that the background color
is missing where the shape is behind the text.
Change-Id: I9b1fffd9ac9a6e5a1c3d1f65371440047d125b38
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/IDocumentSettingAccess.hxx | 1 | ||||
-rw-r--r-- | sw/inc/doc.hxx | 1 | ||||
-rw-r--r-- | sw/source/core/doc/doc.cxx | 5 | ||||
-rw-r--r-- | sw/source/core/doc/docnew.cxx | 1 | ||||
-rw-r--r-- | sw/source/core/inc/frame.hxx | 5 | ||||
-rw-r--r-- | sw/source/core/layout/paintfrm.cxx | 18 | ||||
-rw-r--r-- | sw/source/filter/xml/xmlimp.cxx | 7 | ||||
-rw-r--r-- | sw/source/ui/uno/SwXDocumentSettings.cxx | 14 |
8 files changed, 44 insertions, 8 deletions
diff --git a/sw/inc/IDocumentSettingAccess.hxx b/sw/inc/IDocumentSettingAccess.hxx index b7d2c13d2db4..efddb59e044b 100644 --- a/sw/inc/IDocumentSettingAccess.hxx +++ b/sw/inc/IDocumentSettingAccess.hxx @@ -85,6 +85,7 @@ namespace com { namespace sun { namespace star { namespace i18n { struct Forbidd TAB_OVERFLOW, UNBREAKABLE_NUMBERINGS, CLIPPED_PICTURES, + BACKGROUND_PARA_OVER_DRAWINGS, // COMPATIBILITY FLAGS END BROWSE_MODE, diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 001ebf89f98a..9346d04edda5 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -592,6 +592,7 @@ private: bool mbTabOverflow; bool mbUnbreakableNumberings; bool mbClippedPictures; + bool mbBackgroundParaOverDrawings; bool mbLastBrowseMode : 1; diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 3dc4caf2d6c8..de69e8835c38 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -200,6 +200,7 @@ bool SwDoc::get(/*[in]*/ DocumentSettingId id) const case TAB_OVERFLOW: return mbTabOverflow; case UNBREAKABLE_NUMBERINGS: return mbUnbreakableNumberings; case CLIPPED_PICTURES: return mbClippedPictures; + case BACKGROUND_PARA_OVER_DRAWINGS: return mbBackgroundParaOverDrawings; case BROWSE_MODE: return mbLastBrowseMode; // Attention: normally the ViewShell has to be asked! case HTML_MODE: return mbHTMLMode; @@ -351,6 +352,10 @@ void SwDoc::set(/*[in]*/ DocumentSettingId id, /*[in]*/ bool value) mbClippedPictures = value; break; + case BACKGROUND_PARA_OVER_DRAWINGS: + mbBackgroundParaOverDrawings = value; + break; + // COMPATIBILITY FLAGS END case BROWSE_MODE: //can be used temporary (load/save) when no ViewShell is avaiable diff --git a/sw/source/core/doc/docnew.cxx b/sw/source/core/doc/docnew.cxx index b2d07dbae092..73029d57c10b 100644 --- a/sw/source/core/doc/docnew.cxx +++ b/sw/source/core/doc/docnew.cxx @@ -359,6 +359,7 @@ SwDoc::SwDoc() mbUnbreakableNumberings = false; mbFloattableNomargins = false; mbClippedPictures = false; + mbBackgroundParaOverDrawings = false; mEmbedFonts = false; mEmbedSystemFonts = false; diff --git a/sw/source/core/inc/frame.hxx b/sw/source/core/inc/frame.hxx index b346b3044b0c..b72964c32384 100644 --- a/sw/source/core/inc/frame.hxx +++ b/sw/source/core/inc/frame.hxx @@ -492,11 +492,12 @@ public: virtual void PaintBorder( const SwRect&, const SwPageFrm *pPage, const SwBorderAttrs & ) const; void PaintBaBo( const SwRect&, const SwPageFrm *pPage = 0, - const sal_Bool bLowerBorder = sal_False ) const; + const sal_Bool bLowerBorder = sal_False, const bool bOnlyTxtBackground = false ) const; void PaintBackground( const SwRect&, const SwPageFrm *pPage, const SwBorderAttrs &, const sal_Bool bLowerMode = sal_False, - const sal_Bool bLowerBorder = sal_False ) const; + const sal_Bool bLowerBorder = sal_False, + const bool bOnlyTxtBackground = false ) const; void PaintBorderLine( const SwRect&, const SwRect&, const SwPageFrm*, const Color *pColor, const editeng::SvxBorderStyle = ::com::sun::star::table::BorderLineStyle::SOLID ) const; diff --git a/sw/source/core/layout/paintfrm.cxx b/sw/source/core/layout/paintfrm.cxx index 3bef609d8be0..d8673cd22c6f 100644 --- a/sw/source/core/layout/paintfrm.cxx +++ b/sw/source/core/layout/paintfrm.cxx @@ -3129,6 +3129,9 @@ SwRootFrm::Paint(SwRect const& rRect, SwPrintData const*const pPrintData) const pLines->LockLines( sal_False ); } + if ( pSh->GetDoc()->get( IDocumentSettingAccess::BACKGROUND_PARA_OVER_DRAWINGS ) ) + pPage->PaintBaBo( aPaintRect, pPage, sal_True, /*bOnlyTxtBackground=*/true ); + if( pSh->GetWin() ) { // collect sub-lines @@ -6005,7 +6008,7 @@ SwRect SwPageFrm::GetBoundRect() const |*************************************************************************/ void SwFrm::PaintBaBo( const SwRect& rRect, const SwPageFrm *pPage, - const sal_Bool bLowerBorder ) const + const sal_Bool bLowerBorder, const bool bOnlyTxtBackground ) const { if ( !pPage ) pPage = FindPageFrm(); @@ -6025,18 +6028,19 @@ void SwFrm::PaintBaBo( const SwRect& rRect, const SwPageFrm *pPage, // OD 20.11.2002 #104598# - take care of page margin area // Note: code move from <SwFrm::PaintBackground(..)> to new method // <SwPageFrm::Paintmargin(..)>. - if ( IsPageFrm() ) + if ( IsPageFrm() && !bOnlyTxtBackground) { static_cast<const SwPageFrm*>(this)->PaintMarginArea( rRect, pGlobalShell ); } // paint background { - PaintBackground( rRect, pPage, rAttrs, sal_False, bLowerBorder ); + PaintBackground( rRect, pPage, rAttrs, sal_False, bLowerBorder, bOnlyTxtBackground ); } // OD 06.08.2002 #99657# - paint border before painting background // paint grid for page frame and paint border + if (!bOnlyTxtBackground) { SwRect aRect( rRect ); if( IsPageFrm() ) @@ -6058,7 +6062,8 @@ void SwFrm::PaintBaBo( const SwRect& rRect, const SwPageFrm *pPage, void SwFrm::PaintBackground( const SwRect &rRect, const SwPageFrm *pPage, const SwBorderAttrs & rAttrs, const sal_Bool bLowerMode, - const sal_Bool bLowerBorder ) const + const sal_Bool bLowerBorder, + const bool bOnlyTxtBackground ) const { // OD 20.01.2003 #i1837# - no paint of table background, if corresponding // option is *not* set. @@ -6186,8 +6191,9 @@ void SwFrm::PaintBackground( const SwRect &rRect, const SwPageFrm *pPage, /// background transparency have to be considered /// Set missing 5th parameter to the default value GRFNUM_NO /// - see declaration in /core/inc/frmtool.hxx. - ::DrawGraphic( pItem, pOut, aOrigBackRect, aRegion[i], GRFNUM_NO, - bConsiderBackgroundTransparency ); + if (IsTxtFrm() || !bOnlyTxtBackground) + ::DrawGraphic( pItem, pOut, aOrigBackRect, aRegion[i], GRFNUM_NO, + bConsiderBackgroundTransparency ); } } if( pCol ) diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx index 4d626291b25b..bf1c1c32eefb 100644 --- a/sw/source/filter/xml/xmlimp.cxx +++ b/sw/source/filter/xml/xmlimp.cxx @@ -1155,6 +1155,7 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC aSet.insert(String("TabOverflow", RTL_TEXTENCODING_ASCII_US)); aSet.insert(String("UnbreakableNumberings", RTL_TEXTENCODING_ASCII_US)); aSet.insert(String("ClippedPictures", RTL_TEXTENCODING_ASCII_US)); + aSet.insert(String("BackgroundParaOverDrawings", RTL_TEXTENCODING_ASCII_US)); sal_Int32 nCount = aConfigProps.getLength(); const PropertyValue* pValues = aConfigProps.getConstArray(); @@ -1187,6 +1188,7 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC bool bTabOverflow = false; bool bUnbreakableNumberings = false; bool bClippedPictures = false; + bool bBackgroundParaOverDrawings = false; OUString sRedlineProtectionKey( RTL_CONSTASCII_USTRINGPARAM( "RedlineProtectionKey" ) ); @@ -1277,6 +1279,8 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC bUnbreakableNumberings = true; else if ( pValues->Name == "ClippedPictures" ) bClippedPictures = true; + else if ( pValues->Name == "BackgroundParaOverDrawings" ) + bBackgroundParaOverDrawings = true; } catch( Exception& ) { @@ -1461,6 +1465,9 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC OUString( RTL_CONSTASCII_USTRINGPARAM("ClippedPictures") ), makeAny( false ) ); } + if ( !bBackgroundParaOverDrawings ) + xProps->setPropertyValue("BackgroundParaOverDrawings", makeAny( false ) ); + Reference < XTextDocument > xTextDoc( GetModel(), UNO_QUERY ); Reference < XText > xText = xTextDoc->getText(); Reference<XUnoTunnel> xTextTunnel( xText, UNO_QUERY); diff --git a/sw/source/ui/uno/SwXDocumentSettings.cxx b/sw/source/ui/uno/SwXDocumentSettings.cxx index 728e54c2ad32..8871cdda0a59 100644 --- a/sw/source/ui/uno/SwXDocumentSettings.cxx +++ b/sw/source/ui/uno/SwXDocumentSettings.cxx @@ -129,6 +129,7 @@ enum SwDocumentSettingsPropertyHandles HANDLE_STYLES_NODEFAULT, HANDLE_FLOATTABLE_NOMARGINS, HANDLE_CLIPPED_PICTURES, + HANDLE_BACKGROUND_PARA_OVER_DRAWINGS, HANDLE_EMBED_FONTS, HANDLE_EMBED_SYSTEM_FONTS }; @@ -196,6 +197,7 @@ MasterPropertySetInfo * lcl_createSettingsInfo() { RTL_CONSTASCII_STRINGPARAM("StylesNoDefault"), HANDLE_STYLES_NODEFAULT, CPPUTYPE_BOOLEAN, 0, 0}, { RTL_CONSTASCII_STRINGPARAM("FloattableNomargins"), HANDLE_FLOATTABLE_NOMARGINS, CPPUTYPE_BOOLEAN, 0, 0}, { RTL_CONSTASCII_STRINGPARAM("ClippedPictures"), HANDLE_CLIPPED_PICTURES, CPPUTYPE_BOOLEAN, 0, 0}, + { RTL_CONSTASCII_STRINGPARAM("BackgroundParaOverDrawings"), HANDLE_BACKGROUND_PARA_OVER_DRAWINGS, CPPUTYPE_BOOLEAN, 0, 0}, { RTL_CONSTASCII_STRINGPARAM("EmbedFonts"), HANDLE_EMBED_FONTS, CPPUTYPE_BOOLEAN, 0, 0}, { RTL_CONSTASCII_STRINGPARAM("EmbedSystemFonts"), HANDLE_EMBED_SYSTEM_FONTS, CPPUTYPE_BOOLEAN, 0, 0}, /* @@ -775,6 +777,12 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf mpDoc->set(IDocumentSettingAccess::CLIPPED_PICTURES, bTmp); } break; + case HANDLE_BACKGROUND_PARA_OVER_DRAWINGS: + { + sal_Bool bTmp = *(sal_Bool*)rValue.getValue(); + mpDoc->set(IDocumentSettingAccess::BACKGROUND_PARA_OVER_DRAWINGS, bTmp); + } + break; case HANDLE_EMBED_FONTS: { sal_Bool bTmp = *(sal_Bool*)rValue.getValue(); @@ -1176,6 +1184,12 @@ void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInf rValue.setValue( &bTmp, ::getBooleanCppuType() ); } break; + case HANDLE_BACKGROUND_PARA_OVER_DRAWINGS: + { + sal_Bool bTmp = mpDoc->get( IDocumentSettingAccess::BACKGROUND_PARA_OVER_DRAWINGS ); + rValue.setValue( &bTmp, ::getBooleanCppuType() ); + } + break; case HANDLE_EMBED_FONTS: { sal_Bool bTmp = mpDoc->get( IDocumentSettingAccess::EMBED_FONTS ); |