[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - sw/inc sw/source
Michael Stahl
mstahl at redhat.com
Tue Apr 21 07:37:22 PDT 2015
sw/inc/swunohelper.hxx | 2 -
sw/source/core/unocore/swunohelper.cxx | 53 ++++++++++++++++++++++++++------
sw/source/core/unocore/unoframe.cxx | 9 +++--
sw/source/core/unocore/unoparagraph.cxx | 5 +--
sw/source/core/unocore/unostyle.cxx | 23 ++++++++++---
5 files changed, 71 insertions(+), 21 deletions(-)
New commits:
commit 04946086b0b08d1ab0de2a91959299312f140ed4
Author: Michael Stahl <mstahl at redhat.com>
Date: Mon Apr 20 20:05:38 2015 +0200
tdf#90640: sw: ODF export: be consistent when exporting RES_BACKGROUND
The emulation of legacy RES_BACKGROUND properties claims that (unless
fillstyle is NONE) all of them are direct values, which causes export of
legacy attributes like style:background-transparency without
corresponding non-legacy draw:opacity.
Especially problematic for style:background-transparency, which is set
to 100% if style is bitmap, which is the reasonable default for API
backward compatibility of BackColorTransparency, but wrong for ODF.
Change-Id: I1fa4fa5df45eb00cbfcd2e171b4862c4e195cc7d
(cherry picked from commit c3e49660e782816d1203cb936156ef6d6a1ad572)
Reviewed-on: https://gerrit.libreoffice.org/15462
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos at collabora.co.uk>
diff --git a/sw/inc/swunohelper.hxx b/sw/inc/swunohelper.hxx
index 6ebc335..c00404c 100644
--- a/sw/inc/swunohelper.hxx
+++ b/sw/inc/swunohelper.hxx
@@ -77,7 +77,7 @@ bool UCB_IsDirectory( const OUString& rURL );
///UUUU helper to check if fill style is set to color or bitmap
/// and thus formally used SvxBrushItem parts need to be mapped
/// for backwards compatibility
-bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet);
+bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet, sal_uInt16 const nMemberId);
}
diff --git a/sw/source/core/unocore/swunohelper.cxx b/sw/source/core/unocore/swunohelper.cxx
index 8a1bd2a..45af6f3 100644
--- a/sw/source/core/unocore/swunohelper.cxx
+++ b/sw/source/core/unocore/swunohelper.cxx
@@ -39,6 +39,7 @@
//UUUU
#include <svx/xfillit0.hxx>
+#include <editeng/memberids.hrc>
#include <svl/itemset.hxx>
using namespace com::sun::star;
@@ -268,7 +269,8 @@ bool UCB_GetFileListOfFolder( const OUString& rURL,
}
//UUUU
-bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet)
+bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet,
+ sal_uInt16 const nMID)
{
const XFillStyleItem* pXFillStyleItem(static_cast< const XFillStyleItem* >(rSet.GetItem(XATTR_FILLSTYLE, false)));
@@ -280,17 +282,50 @@ bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet)
// here different FillStyles can be excluded for export; it will depend on the
// quality these fallbacks can reach. That again is done in getSvxBrushItemFromSourceSet,
// take a look there how the superset of DrawObject FillStyles is mapped to SvxBrushItem.
- // For now, take them all - except drawing::FillStyle_NONE
-
- if(drawing::FillStyle_NONE != pXFillStyleItem->GetValue())
+ switch (pXFillStyleItem->GetValue())
{
- return true;
+ case drawing::FillStyle_NONE:
+ return false; // ignoring some extremely limited XFillColorItem eval
+ break;
+ case drawing::FillStyle_SOLID:
+ case drawing::FillStyle_GRADIENT: // gradient and hatch don't exist in
+ case drawing::FillStyle_HATCH: // SvxBrushItem so average color is emulated
+ switch (nMID)
+ {
+ case MID_BACK_COLOR:
+ // Gradient/Hatch always have emulated color
+ return (drawing::FillStyle_SOLID != nMID)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLCOLOR)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLTRANSPARENCE)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE);
+ case MID_BACK_COLOR_R_G_B:
+ // Gradient/Hatch always have emulated color
+ return (drawing::FillStyle_SOLID != nMID)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLCOLOR);
+ case MID_BACK_COLOR_TRANSPARENCY:
+ return SfxItemState::SET == rSet.GetItemState(XATTR_FILLTRANSPARENCE)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE);
+ }
+ break;
+ case drawing::FillStyle_BITMAP:
+ switch (nMID)
+ {
+ case MID_GRAPHIC_URL:
+ return SfxItemState::SET == rSet.GetItemState(XATTR_FILLBITMAP);
+ case MID_GRAPHIC_POSITION:
+ return SfxItemState::SET == rSet.GetItemState(XATTR_FILLBMP_STRETCH)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLBMP_TILE)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLBMP_POS);
+ case MID_GRAPHIC_TRANSPARENT:
+ case MID_GRAPHIC_TRANSPARENCY:
+ return SfxItemState::SET == rSet.GetItemState(XATTR_FILLTRANSPARENCE)
+ || SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE);
+ }
+ break;
+ default:
+ assert(false);
}
- // if(XFILL_SOLID == pXFillStyleItem->GetValue() || XFILL_BITMAP == pXFillStyleItem->GetValue())
- // {
- // return true;
- // }
return false;
}
diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx
index 7cd950e..d62fd291 100644
--- a/sw/source/core/unocore/unoframe.cxx
+++ b/sw/source/core/unocore/unoframe.cxx
@@ -2409,13 +2409,16 @@ uno::Sequence< beans::PropertyState > SwXFrame::getPropertyStates(
pStates[i] = beans::PropertyState_AMBIGUOUS_VALUE;
}
}
- //UUUU for FlyFrames we need to mark all properties from type RES_BACKGROUND
+ //UUUU for FlyFrames we need to mark the used properties from type RES_BACKGROUND
// as beans::PropertyState_DIRECT_VALUE to let users of this property call
// getPropertyValue where the member properties will be mapped from the
// fill attributes to the according SvxBrushItem entries
- else if(RES_BACKGROUND == pEntry->nWID && SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(rFmtSet))
+ else if (RES_BACKGROUND == pEntry->nWID)
{
- pStates[i] = beans::PropertyState_DIRECT_VALUE;
+ if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(rFmtSet, pEntry->nMemberId))
+ pStates[i] = beans::PropertyState_DIRECT_VALUE;
+ else
+ pStates[i] = beans::PropertyState_DEFAULT_VALUE;
}
else
{
diff --git a/sw/source/core/unocore/unoparagraph.cxx b/sw/source/core/unocore/unoparagraph.cxx
index 3acacd7..8479ef0 100644
--- a/sw/source/core/unocore/unoparagraph.cxx
+++ b/sw/source/core/unocore/unoparagraph.cxx
@@ -1031,11 +1031,12 @@ static beans::PropertyState lcl_SwXParagraph_getPropertyState(
{
if(*ppSet)
{
- if(SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(**ppSet))
+ if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(**ppSet,
+ rEntry.nMemberId))
{
eRet = beans::PropertyState_DIRECT_VALUE;
- bDone = true;
}
+ bDone = true;
}
break;
}
diff --git a/sw/source/core/unocore/unostyle.cxx b/sw/source/core/unocore/unostyle.cxx
index 57ab928..2329c74 100644
--- a/sw/source/core/unocore/unostyle.cxx
+++ b/sw/source/core/unocore/unostyle.cxx
@@ -2919,14 +2919,20 @@ uno::Sequence< beans::PropertyState > SwXStyle::getPropertyStates(
bDone = true;
}
- //UUUU for FlyFrames we need to mark all properties from type RES_BACKGROUND
+ //UUUU for FlyFrames we need to mark the used properties from type RES_BACKGROUND
// as beans::PropertyState_DIRECT_VALUE to let users of this property call
// getPropertyValue where the member properties will be mapped from the
// fill attributes to the according SvxBrushItem entries
- if(!bDone && RES_BACKGROUND == pEntry->nWID
- && SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*pSourceSet))
+ if (!bDone && RES_BACKGROUND == pEntry->nWID)
{
- pStates[i] = beans::PropertyState_DIRECT_VALUE;
+ if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*pSourceSet, pEntry->nMemberId))
+ {
+ pStates[i] = beans::PropertyState_DIRECT_VALUE;
+ }
+ else
+ {
+ pStates[i] = beans::PropertyState_DEFAULT_VALUE;
+ }
bDone = true;
}
@@ -4873,11 +4879,16 @@ uno::Sequence< beans::PropertyState > SwXAutoStyle::getPropertyStates(
}
case RES_BACKGROUND:
{
- if(SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*mpSet))
+ if (SWUnoHelper::needToMapFillItemsToSvxBrushItemTypes(*mpSet,
+ pEntry->nMemberId))
{
pStates[i] = beans::PropertyState_DIRECT_VALUE;
- bDone = true;
}
+ else
+ {
+ pStates[i] = beans::PropertyState_DEFAULT_VALUE;
+ }
+ bDone = true;
break;
}
More information about the Libreoffice-commits
mailing list