sw/inc/swunohelper.hxx | 2 - sw/source/core/unocore/swunohelper.cxx | 53 ++++++++++++++++++++++++++------ sw/source/core/unocore/unoframe.cxx | 20 +++++++++--- sw/source/core/unocore/unomap.cxx | 8 ++-- sw/source/core/unocore/unoparagraph.cxx | 5 +-- sw/source/core/unocore/unostyle.cxx | 23 ++++++++++--- 6 files changed, 84 insertions(+), 27 deletions(-)
New commits: commit 3670e3c0c1bfcea9dc50fefb20b67a828b1e35bb Author: Michael Stahl <mst...@redhat.com> Date: Tue Apr 21 00:15:55 2015 +0200 sw: ODF import: frame background: do not override gradient transparency ... with style:background-transparency (regression from 102bb87ca1a5dee3a09442bf503a54bb703c79ea) Change-Id: Icead7a47c145eace51249896b6e05d65dfaa2f78 diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx index 2ea6eae..cbb6b94 100644 --- a/sw/source/core/unocore/unoframe.cxx +++ b/sw/source/core/unocore/unoframe.cxx @@ -455,7 +455,8 @@ bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxI aXFillTransparenceItem.PutValue(*pXFillTransparenceItem); rToSet.Put(aXFillTransparenceItem); } - else if (pColTrans) + else if (pColTrans && + !pXFillFloatTransparenceItem && !pXFillFloatTransparenceNameItem) { // No fill transparency is given. On the other hand, we have a // BackColorTransparency, so use that. commit 09f0919f9a1686f6c1492777307e77f841294192 Author: Michael Stahl <mst...@redhat.com> Date: Mon Apr 20 23:42:45 2015 +0200 tdf#90640: sw: ODF import: ignore style:background-transparency for ... bitmap backgrounds of frames. OOo/LO versions <= 4.3 wrongly write fo:background-color="transparent" style:background-transparency="100%" for bitmap backgrounds, because of a stupid API implementation with SvxBrushItem. They overwrite that with draw:opacity="100%" on the child element style:background-image, which we don't read if we see draw:fill attributes, so ignore the background-transparency in that case. (regression from 5aa360cae0383f270c12708e7e94179a7fde6711) Change-Id: I4ca59d8932a8e5d034c35543a54528198ad7d51c diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx index 197a83b..2ea6eae 100644 --- a/sw/source/core/unocore/unoframe.cxx +++ b/sw/source/core/unocore/unoframe.cxx @@ -459,9 +459,15 @@ bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxI { // No fill transparency is given. On the other hand, we have a // BackColorTransparency, so use that. + // tdf#90640 tdf#90130: this is necessary for LO 4.4.0 - 4.4.2 + // that forgot to write draw:opacity into documents + // but: the value was *always* wrong for bitmaps! => ignore it sal_Int8 nGraphicTransparency(0); *pColTrans >>= nGraphicTransparency; - rToSet.Put(XFillTransparenceItem(nGraphicTransparency)); + if (aXFillStyleItem.GetValue() != drawing::FillStyle_BITMAP) + { + rToSet.Put(XFillTransparenceItem(nGraphicTransparency)); + } if (aXFillStyleItem.GetValue() == drawing::FillStyle_SOLID) { aBrush.PutValue(*pColTrans, MID_BACK_COLOR_TRANSPARENCY); commit c3e49660e782816d1203cb936156ef6d6a1ad572 Author: Michael Stahl <mst...@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 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 8f5c89d..ceb061b 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 cd7dd01..197a83b 100644 --- a/sw/source/core/unocore/unoframe.cxx +++ b/sw/source/core/unocore/unoframe.cxx @@ -2406,13 +2406,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 2ef2c84..bfc6755 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 2b13e72..800ccf4 100644 --- a/sw/source/core/unocore/unostyle.cxx +++ b/sw/source/core/unocore/unostyle.cxx @@ -2920,14 +2920,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; } @@ -4870,11 +4876,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; } commit 822cb231c9aee2b69d0e645d2fddbab1dfbe3d14 Author: Michael Stahl <mst...@redhat.com> Date: Mon Apr 20 17:19:02 2015 +0200 tdf#90640: sw: ODF export: fix wrong property types in FILL_PROPERTIES_SW Wrong type causes draw:opacity not to be exported from FillTransparence. (regression from 6e61ecd09679a66060f932835622821d39e92f01) Change-Id: I478fc34dfb614f0433a6e28b0260379528b86680 diff --git a/sw/source/core/unocore/unomap.cxx b/sw/source/core/unocore/unomap.cxx index 0fa0229..82d52b9 100644 --- a/sw/source/core/unocore/unomap.cxx +++ b/sw/source/core/unocore/unomap.cxx @@ -569,7 +569,7 @@ SwUnoPropertyMapProvider::~SwUnoPropertyMapProvider() //UUUU #define FILL_PROPERTIES_SW_BMP \ - { OUString(UNO_NAME_SW_FILLBMP_LOGICAL_SIZE), XATTR_FILLBMP_SIZELOG, cppu::UnoType<float>::get(), 0, 0}, \ + { OUString(UNO_NAME_SW_FILLBMP_LOGICAL_SIZE), XATTR_FILLBMP_SIZELOG, cppu::UnoType<bool>::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_OFFSET_X), XATTR_FILLBMP_TILEOFFSETX, cppu::UnoType<sal_Int32>::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_OFFSET_Y), XATTR_FILLBMP_TILEOFFSETY, cppu::UnoType<sal_Int32>::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_POSITION_OFFSET_X), XATTR_FILLBMP_POSOFFSETX, cppu::UnoType<sal_Int32>::get(), 0, 0}, \ @@ -577,8 +577,8 @@ SwUnoPropertyMapProvider::~SwUnoPropertyMapProvider() { OUString(UNO_NAME_SW_FILLBMP_RECTANGLE_POINT), XATTR_FILLBMP_POS, cppu::UnoType<css::drawing::RectanglePoint>::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLBMP_SIZE_X), XATTR_FILLBMP_SIZEX, cppu::UnoType<sal_Int32>::get(), 0, SFX_METRIC_ITEM}, \ { OUString(UNO_NAME_SW_FILLBMP_SIZE_Y), XATTR_FILLBMP_SIZEY, cppu::UnoType<sal_Int32>::get(), 0, SFX_METRIC_ITEM}, \ - { OUString(UNO_NAME_SW_FILLBMP_STRETCH), XATTR_FILLBMP_STRETCH, cppu::UnoType<float>::get(), 0, 0}, \ - { OUString(UNO_NAME_SW_FILLBMP_TILE), XATTR_FILLBMP_TILE, cppu::UnoType<float>::get(), 0, 0},\ + { OUString(UNO_NAME_SW_FILLBMP_STRETCH), XATTR_FILLBMP_STRETCH, cppu::UnoType<bool>::get(), 0, 0}, \ + { OUString(UNO_NAME_SW_FILLBMP_TILE), XATTR_FILLBMP_TILE, cppu::UnoType<bool>::get(), 0, 0},\ { OUString(UNO_NAME_SW_FILLBMP_MODE), OWN_ATTR_FILLBMP_MODE, cppu::UnoType<drawing::BitmapMode>::get(), 0, 0}, \ //UUUU @@ -599,7 +599,7 @@ SwUnoPropertyMapProvider::~SwUnoPropertyMapProvider() { OUString(UNO_NAME_SW_FILLHATCH), XATTR_FILLHATCH, cppu::UnoType<css::drawing::Hatch>::get(), 0, MID_FILLHATCH}, \ { OUString(UNO_NAME_SW_FILLHATCHNAME), XATTR_FILLHATCH, cppu::UnoType<OUString>::get(), 0, MID_NAME }, \ { OUString(UNO_NAME_SW_FILLSTYLE), XATTR_FILLSTYLE, cppu::UnoType<css::drawing::FillStyle>::get(), 0, 0}, \ - { OUString(UNO_NAME_SW_FILL_TRANSPARENCE), XATTR_FILLTRANSPARENCE, cppu::UnoType<sal_Int32>::get(), 0, 0}, \ + { OUString(UNO_NAME_SW_FILL_TRANSPARENCE), XATTR_FILLTRANSPARENCE, cppu::UnoType<sal_Int16>::get(), 0, 0}, \ { OUString(UNO_NAME_SW_FILLTRANSPARENCEGRADIENT), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType<css::awt::Gradient>::get(), 0, MID_FILLGRADIENT}, \ { OUString(UNO_NAME_SW_FILLTRANSPARENCEGRADIENTNAME), XATTR_FILLFLOATTRANSPARENCE, cppu::UnoType<OUString>::get(), 0, MID_NAME }, \ { OUString(UNO_NAME_SW_FILLCOLOR_2), XATTR_SECONDARYFILLCOLOR, cppu::UnoType<sal_Int32>::get(), 0, 0}, \ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits