summaryrefslogtreecommitdiffstats
path: root/sw/source/filter/ww8/escher.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/ww8/escher.hxx')
-rw-r--r--sw/source/filter/ww8/escher.hxx182
1 files changed, 182 insertions, 0 deletions
diff --git a/sw/source/filter/ww8/escher.hxx b/sw/source/filter/ww8/escher.hxx
new file mode 100644
index 0000000000..179b3a16f3
--- /dev/null
+++ b/sw/source/filter/ww8/escher.hxx
@@ -0,0 +1,182 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#ifndef INCLUDED_SW_SOURCE_FILTER_WW8_ESCHER_HXX
+#define INCLUDED_SW_SOURCE_FILTER_WW8_ESCHER_HXX
+
+#include <filter/msfilter/escherex.hxx>
+#include <svx/svdtrans.hxx>
+#include "wrtww8.hxx"
+
+const sal_uInt32 nInlineHack = 0x00010001;
+class SwFrameFormat;
+// #i30669#
+class SwFormatHoriOrient;
+class SwFormatVertOrient;
+
+class WinwordAnchoring : public EscherExClientRecord_Base
+{
+public:
+ void WriteData(EscherEx& rEx) const override;
+ void SetAnchoring(const SwFrameFormat& rFormat);
+
+ /** method to perform conversion of positioning attributes with the help
+ of corresponding layout information
+
+ #i30669#
+ Because most of the Writer object positions doesn't correspond to the
+ object positions in WW8, this method converts the positioning
+ attributes. For this conversion the corresponding layout information
+ is needed. If no layout information exists - e.g. no layout exists - no
+ conversion is performed.
+ No conversion is performed for as-character anchored objects. Whose
+ object positions are already treated special in method <WriteData(..)>.
+ Usage of method: Used by method <SetAnchoring(..)>, nothing else
+
+ @param _iorHoriOri
+ input/output parameter - containing the current horizontal position
+ attributes, which are converted by this method.
+
+ @param _iorVertOri
+ input/output parameter - containing the current vertical position
+ attributes, which are converted by this method.
+
+ @param _rFrameFormat
+ input parameter - frame format of the anchored object
+
+ @return boolean, indicating, if a conversion has been performed.
+ */
+ static bool ConvertPosition( SwFormatHoriOrient& _iorHoriOri,
+ SwFormatVertOrient& _iorVertOri,
+ const SwFrameFormat& _rFrameFormat );
+
+private:
+ bool mbInline;
+ sal_uInt32 mnGroupShapeBooleanProperties;
+ sal_uInt32 mnXAlign;
+ sal_uInt32 mnYAlign;
+ sal_uInt32 mnXRelTo;
+ sal_uInt32 mnYRelTo;
+
+};
+
+class SwEscherExGlobal : public EscherExGlobal
+{
+public:
+ explicit SwEscherExGlobal();
+ virtual ~SwEscherExGlobal() override;
+
+private:
+ /** Override to create a new memory stream for picture data. */
+ virtual SvStream* ImplQueryPictureStream() override;
+
+private:
+ std::shared_ptr< SvStream > mxPicStrm;
+};
+
+class SwBasicEscherEx : public EscherEx
+{
+private:
+ void Init();
+protected:
+ WW8Export& mrWrt;
+ SvStream* mpEscherStrm;
+ tools::Long mnEmuMul, mnEmuDiv;
+
+ virtual sal_Int32 WriteFlyFrameAttr(const SwFrameFormat& rFormat, MSO_SPT eShapeType,
+ EscherPropertyContainer& rPropOpt);
+ void WriteBrushAttr(const SvxBrushItem &rBrush,
+ EscherPropertyContainer& rPropOpt);
+ void WriteOLEPicture(EscherPropertyContainer &rPropOpt,
+ ShapeFlag nShapeFlags, const Graphic &rGraphic, const SdrObject &rObj,
+ sal_uInt32 nShapeId, const css::awt::Rectangle* pVisArea );
+ static void WriteGrfAttr(const SwNoTextNode& rNd, const SwFrameFormat& rFormat, EscherPropertyContainer& rPropOpt);
+
+ sal_Int32 DrawModelToEmu(sal_Int32 nVal) const
+ { return BigMulDiv(nVal, mnEmuMul, mnEmuDiv); }
+
+ static sal_Int32 ToFract16(sal_Int32 nVal, sal_uInt32 nMax);
+
+ virtual void SetPicId(const SdrObject &, sal_uInt32, EscherPropertyContainer &);
+ SdrLayerID GetInvisibleHellId() const;
+
+public:
+ SwBasicEscherEx(SvStream* pStrm, WW8Export& rWrt);
+ sal_Int32 WriteGrfFlyFrame(const SwFrameFormat& rFormat, sal_uInt32 nShapeId);
+ //For i120928,to export graphic of bullet
+ void WriteGrfBullet(const Graphic&);
+ sal_Int32 WriteOLEFlyFrame(const SwFrameFormat& rFormat, sal_uInt32 nShapeId);
+ void WriteEmptyFlyFrame(const SwFrameFormat& rFormat, sal_uInt32 nShapeId);
+ virtual void WriteFrameExtraData(const SwFrameFormat&);
+ virtual void WritePictures();
+ virtual ~SwBasicEscherEx() override;
+ //i120927,this function is added to export hyperlink info,such as graphic/frame/OLE
+ bool IsRelUrl() const;
+ OUString GetBasePath() const;
+ OUString BuildFileName(sal_uInt16& rnLevel, bool& rbRel, const OUString& rUrl);
+ void WriteHyperlinkWithinFly( SvMemoryStream& rStrm, const SwFormatURL* pINetFormatArg);
+ void PreWriteHyperlinkWithinFly(const SwFrameFormat& rFormat,EscherPropertyContainer& rPropOpt);
+
+private:
+ SwBasicEscherEx(const SwBasicEscherEx&) = delete;
+ SwBasicEscherEx& operator=(const SwBasicEscherEx&) = delete;
+};
+
+class SwEscherEx : public SwBasicEscherEx
+{
+private:
+ std::vector<sal_uLong> m_aFollowShpIds;
+ EscherExHostAppData m_aHostData;
+ WinwordAnchoring m_aWinwordAnchoring;
+ WW8_WrPlcTextBoxes *m_pTextBxs;
+
+ sal_uInt32 GetFlyShapeId(const SwFrameFormat& rFormat,
+ unsigned int nHdFtIndex, DrawObjPointerVector &rPVec);
+ void MakeZOrderArrAndFollowIds(std::vector<DrawObj>& rSrcArr,
+ DrawObjPointerVector& rDstArr);
+
+ sal_Int32 WriteFlyFrame(const DrawObj &rObj, sal_uInt32 &rShapeId,
+ DrawObjPointerVector &rPVec);
+ sal_Int32 WriteTextFlyFrame(const DrawObj &rObj, sal_uInt32 nShapeId,
+ sal_uInt32 nTextBox, DrawObjPointerVector &rPVec);
+ void WriteOCXControl(const SwFrameFormat& rFormat,sal_uInt32 nShapeId);
+ virtual sal_Int32 WriteFlyFrameAttr(const SwFrameFormat& rFormat, MSO_SPT eShapeType,
+ EscherPropertyContainer& rPropOpt) override;
+
+ virtual sal_uInt32 QueryTextID(
+ const css::uno::Reference< css::drawing::XShape > &, sal_uInt32) override;
+ virtual void SetPicId(const SdrObject &rSdrObj, sal_uInt32 nShapeId,
+ EscherPropertyContainer &rPropOpt) override;
+public:
+ SwEscherEx( SvStream* pStrm, WW8Export& rWW8Wrt );
+ virtual ~SwEscherEx() override;
+ void FinishEscher();
+ virtual void WritePictures() override;
+
+ virtual void WriteFrameExtraData(const SwFrameFormat& rFormat) override;
+
+ EscherExHostAppData* StartShape(const css::uno::Reference< css::drawing::XShape > &, const tools::Rectangle*) override {return &m_aHostData;}
+private:
+ SwEscherEx(const SwEscherEx&) = delete;
+ SwEscherEx &operator=(const SwEscherEx&) = delete;
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */