summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2015-04-20 20:05:38 +0200
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>2015-04-22 04:09:05 +0000
commit6e44c7b64a699d55024090eb91981d19cf13edbc (patch)
tree5bc7bb98a1d081f8f0bbf6b38603f59c6cd12808 /sw
parent62de1313968453091a0cbacd1d8989daad44fe51 (diff)
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@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk> (cherry picked from commit 04946086b0b08d1ab0de2a91959299312f140ed4) Reviewed-on: https://gerrit.libreoffice.org/15467 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/swunohelper.hxx2
-rw-r--r--sw/source/core/unocore/swunohelper.cxx53
-rw-r--r--sw/source/core/unocore/unoframe.cxx9
-rw-r--r--sw/source/core/unocore/unoparagraph.cxx5
-rw-r--r--sw/source/core/unocore/unostyle.cxx23
5 files changed, 71 insertions, 21 deletions
diff --git a/sw/inc/swunohelper.hxx b/sw/inc/swunohelper.hxx
index 6ebc335b2ae4..c00404c759c1 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 8a1bd2a618b7..45af6f304ac3 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 9185e3d0dafe..a41820310ca9 100644
--- a/sw/source/core/unocore/unoframe.cxx
+++ b/sw/source/core/unocore/unoframe.cxx
@@ -2416,13 +2416,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 3acacd739615..8479ef0b3e6c 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 57ab928ac3a1..2329c7422257 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;
}