diff options
-rw-r--r-- | editeng/source/items/frmitems.cxx | 52 | ||||
-rw-r--r-- | sw/source/core/unocore/swunohelper.cxx | 2 | ||||
-rw-r--r-- | sw/source/core/unocore/unoframe.cxx | 9 | ||||
-rw-r--r-- | sw/source/core/unocore/unotbl.cxx | 1 |
4 files changed, 55 insertions, 9 deletions
diff --git a/editeng/source/items/frmitems.cxx b/editeng/source/items/frmitems.cxx index 5d3f3370bbde..f7a73d190229 100644 --- a/editeng/source/items/frmitems.cxx +++ b/editeng/source/items/frmitems.cxx @@ -44,6 +44,7 @@ #include <com/sun/star/frame/status/UpperLowerMarginScale.hpp> #include <com/sun/star/frame/status/LeftRightMarginScale.hpp> #include <com/sun/star/drawing/ShadingPattern.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> #include <i18nutil/unicode.hxx> #include <unotools/ucbstreamhelper.hxx> @@ -84,6 +85,7 @@ #include <editeng/editerr.hxx> #include <libxml/xmlwriter.h> #include <o3tl/enumrange.hxx> +#include <vcl/GraphicLoader.hxx> using namespace ::editeng; using namespace ::com::sun::star; @@ -3190,10 +3192,6 @@ bool SvxBrushItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const rVal <<= static_cast<style::GraphicLocation>(static_cast<sal_Int16>(eGraphicPos)); break; - case MID_GRAPHIC: - SAL_WARN( "editeng.items", "not implemented" ); - break; - case MID_GRAPHIC_TRANSPARENT: rVal <<= ( aColor.GetTransparency() == 0xff ); break; @@ -3214,6 +3212,22 @@ bool SvxBrushItem::QueryValue( uno::Any& rVal, sal_uInt8 nMemberId ) const } break; + case MID_GRAPHIC: + { + uno::Reference<graphic::XGraphic> xGraphic; + if (!maStrLink.isEmpty()) + { + Graphic aGraphic(vcl::graphic::loadFromURL(maStrLink)); + xGraphic = aGraphic.GetXGraphic(); + } + else if (xGraphicObject) + { + xGraphic = xGraphicObject->GetGraphic().GetXGraphic(); + } + rVal <<= xGraphic; + } + break; + case MID_GRAPHIC_FILTER: { rVal <<= maStrFilter; @@ -3276,10 +3290,6 @@ bool SvxBrushItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) } break; - case MID_GRAPHIC: - SAL_WARN( "editeng.items", "not implemented" ); - break; - case MID_GRAPHIC_TRANSPARENT: aColor.SetTransparency( Any2Bool( rVal ) ? 0xff : 0 ); break; @@ -3316,6 +3326,32 @@ bool SvxBrushItem::PutValue( const uno::Any& rVal, sal_uInt8 nMemberId ) } break; + case MID_GRAPHIC: + { + if (rVal.getValueType() == cppu::UnoType<graphic::XGraphic>::get()) + { + auto xGraphic = rVal.get<uno::Reference<graphic::XGraphic>>(); + + Graphic aGraphic(xGraphic); + maStrLink.clear(); + + std::unique_ptr<GraphicObject> xOldGrfObj(std::move(xGraphicObject)); + xGraphicObject.reset(new GraphicObject(aGraphic)); + ApplyGraphicTransparency_Impl(); + xOldGrfObj.reset(); + + if (aGraphic && eGraphicPos == GPOS_NONE) + { + eGraphicPos = GPOS_MM; + } + else if (!aGraphic) + { + eGraphicPos = GPOS_NONE; + } + } + } + break; + case MID_GRAPHIC_FILTER: { if( rVal.getValueType() == ::cppu::UnoType<OUString>::get() ) diff --git a/sw/source/core/unocore/swunohelper.cxx b/sw/source/core/unocore/swunohelper.cxx index 354ff65703a5..9d2040e87d55 100644 --- a/sw/source/core/unocore/swunohelper.cxx +++ b/sw/source/core/unocore/swunohelper.cxx @@ -313,6 +313,8 @@ bool needToMapFillItemsToSvxBrushItemTypes(const SfxItemSet& rSet, { case MID_GRAPHIC_URL: return SfxItemState::SET == rSet.GetItemState(XATTR_FILLBITMAP); + case MID_GRAPHIC: + 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) diff --git a/sw/source/core/unocore/unoframe.cxx b/sw/source/core/unocore/unoframe.cxx index f93ed469dd21..bb2f794d7a3e 100644 --- a/sw/source/core/unocore/unoframe.cxx +++ b/sw/source/core/unocore/unoframe.cxx @@ -212,12 +212,14 @@ bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxI const ::uno::Any* pTrans = nullptr; GetProperty(RES_BACKGROUND, MID_GRAPHIC_TRANSPARENT, pTrans ); const ::uno::Any* pGrLoc = nullptr; GetProperty(RES_BACKGROUND, MID_GRAPHIC_POSITION, pGrLoc ); const ::uno::Any* pGrURL = nullptr; GetProperty(RES_BACKGROUND, MID_GRAPHIC_URL, pGrURL ); + const ::uno::Any* pGraphic = nullptr; GetProperty(RES_BACKGROUND, MID_GRAPHIC, pGraphic ); const ::uno::Any* pGrFilter = nullptr; GetProperty(RES_BACKGROUND, MID_GRAPHIC_FILTER, pGrFilter ); const ::uno::Any* pGrTranparency = nullptr; GetProperty(RES_BACKGROUND, MID_GRAPHIC_TRANSPARENCY, pGrTranparency ); const bool bSvxBrushItemPropertiesUsed( pCol || pTrans || pGrURL || + pGraphic || pGrFilter || pGrLoc || pGrTranparency || @@ -264,7 +266,7 @@ bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxI // but there is a GraphicURL const bool bFillStyleUsed(pXFillStyleItem && pXFillStyleItem->hasValue() && (pXFillStyleItem->get<drawing::FillStyle>() != drawing::FillStyle_SOLID - || !pGrURL)); + || !pGrURL || !pGraphic)); SAL_INFO_IF(pXFillStyleItem && pXFillStyleItem->hasValue() && !bFillStyleUsed, "sw.uno", "FillBaseProperties: ignoring invalid FillStyle"); const bool bXFillStyleItemUsed( @@ -329,6 +331,11 @@ bool BaseFrameProperties_Impl::FillBaseProperties(SfxItemSet& rToSet, const SfxI bRet &= static_cast<SfxPoolItem&>(aBrush).PutValue(*pGrURL, MID_GRAPHIC_URL); } + if (pGraphic) + { + bRet &= static_cast<SfxPoolItem&>(aBrush).PutValue(*pGraphic, MID_GRAPHIC); + } + if(pGrFilter) { bRet &= static_cast<SfxPoolItem&>(aBrush).PutValue(*pGrFilter, MID_GRAPHIC_FILTER); diff --git a/sw/source/core/unocore/unotbl.cxx b/sw/source/core/unocore/unotbl.cxx index 73217063f9e4..ea14bc88228c 100644 --- a/sw/source/core/unocore/unotbl.cxx +++ b/sw/source/core/unocore/unotbl.cxx @@ -1839,6 +1839,7 @@ void SwTableProperties_Impl::ApplyTableAttr(const SwTable& rTable, SwDoc& rDoc) MID_GRAPHIC_TRANSPARENT, MID_GRAPHIC_POSITION, MID_GRAPHIC_URL, + MID_GRAPHIC, MID_GRAPHIC_FILTER }); bool bPutBreak = true; |