xref: /trunk/main/svx/source/svdraw/svdfmtf.hxx (revision 690281a1)
13334a7e6SAndrew Rist /**************************************************************
23334a7e6SAndrew Rist  *
33334a7e6SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
43334a7e6SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
53334a7e6SAndrew Rist  * distributed with this work for additional information
63334a7e6SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
73334a7e6SAndrew Rist  * to you under the Apache License, Version 2.0 (the
83334a7e6SAndrew Rist  * "License"); you may not use this file except in compliance
93334a7e6SAndrew Rist  * with the License.  You may obtain a copy of the License at
103334a7e6SAndrew Rist  *
113334a7e6SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
123334a7e6SAndrew Rist  *
133334a7e6SAndrew Rist  * Unless required by applicable law or agreed to in writing,
143334a7e6SAndrew Rist  * software distributed under the License is distributed on an
153334a7e6SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
163334a7e6SAndrew Rist  * KIND, either express or implied.  See the License for the
173334a7e6SAndrew Rist  * specific language governing permissions and limitations
183334a7e6SAndrew Rist  * under the License.
193334a7e6SAndrew Rist  *
203334a7e6SAndrew Rist  *************************************************************/
213334a7e6SAndrew Rist 
223334a7e6SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _SVDFMTF_HXX
25cdf0e10cSrcweir #define _SVDFMTF_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <vcl/metaact.hxx>
28cdf0e10cSrcweir #include <vcl/virdev.hxx>
29cdf0e10cSrcweir #include <svx/svdobj.hxx>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir //************************************************************
32cdf0e10cSrcweir //   Vorausdeklarationen
33cdf0e10cSrcweir //************************************************************
34cdf0e10cSrcweir 
35cdf0e10cSrcweir class SfxItemSet;
36cdf0e10cSrcweir class SdrObjList;
37cdf0e10cSrcweir class SdrModel;
38cdf0e10cSrcweir class SdrPage;
39cdf0e10cSrcweir class SdrObject;
40cdf0e10cSrcweir class SvdProgressInfo;
41cdf0e10cSrcweir 
42cdf0e10cSrcweir //************************************************************
43cdf0e10cSrcweir //   Hilfsklasse ImpSdrGDIMetaFileImport
44cdf0e10cSrcweir //************************************************************
45cdf0e10cSrcweir 
46cdf0e10cSrcweir class ImpSdrGDIMetaFileImport
47cdf0e10cSrcweir {
48cdf0e10cSrcweir protected:
498718d260SArmin Le Grand     ::std::vector< SdrObject* > maTmpList;
508718d260SArmin Le Grand 	VirtualDevice				maVD;
518718d260SArmin Le Grand 	Rectangle					maScaleRect;
528718d260SArmin Le Grand 	sal_uLong					mnMapScalingOfs; // ab hier nocht nicht mit MapScaling bearbeitet
538718d260SArmin Le Grand 	SfxItemSet*					mpLineAttr;
548718d260SArmin Le Grand 	SfxItemSet*					mpFillAttr;
558718d260SArmin Le Grand 	SfxItemSet*					mpTextAttr;
568718d260SArmin Le Grand 	SdrModel*					mpModel;
578718d260SArmin Le Grand 	SdrLayerID					mnLayer;
588718d260SArmin Le Grand 	Color						maOldLineColor;
598718d260SArmin Le Grand 	sal_Int32					mnLineWidth;
60cdf0e10cSrcweir 	basegfx::B2DLineJoin		maLineJoin;
615aaf853bSArmin Le Grand 	com::sun::star::drawing::LineCap    maLineCap;
62cdf0e10cSrcweir 	XDash						maDash;
63cdf0e10cSrcweir 
648718d260SArmin Le Grand 	bool                        mbMov;
658718d260SArmin Le Grand 	bool                        mbSize;
668718d260SArmin Le Grand 	Point						maOfs;
678718d260SArmin Le Grand     double                      mfScaleX;
688718d260SArmin Le Grand     double                      mfScaleY;
698718d260SArmin Le Grand 	Fraction					maScaleX;
708718d260SArmin Le Grand 	Fraction					maScaleY;
71cdf0e10cSrcweir 
728718d260SArmin Le Grand 	bool                        mbFntDirty;
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 	// fuer Optimierung von (PenNULL,Brush,DrawPoly),(Pen,BrushNULL,DrawPoly) -> aus 2 mach ein
758718d260SArmin Le Grand 	bool                        mbLastObjWasPolyWithoutLine;
768718d260SArmin Le Grand 	bool                        mbNoLine;
778718d260SArmin Le Grand 	bool                        mbNoFill;
78cdf0e10cSrcweir 
79cdf0e10cSrcweir 	// fuer Optimierung mehrerer Linien zu einer Polyline
808718d260SArmin Le Grand 	bool                        mbLastObjWasLine;
81cdf0e10cSrcweir 
8247a7c0c1SArmin Le Grand     // clipregion
8347a7c0c1SArmin Le Grand     basegfx::B2DPolyPolygon     maClip;
8447a7c0c1SArmin Le Grand 
85cdf0e10cSrcweir protected:
8647a7c0c1SArmin Le Grand     // ckeck for clip and evtl. fill maClip
8747a7c0c1SArmin Le Grand     void checkClip();
8847a7c0c1SArmin Le Grand     bool isClip() const;
8947a7c0c1SArmin Le Grand 
9047a7c0c1SArmin Le Grand     // actions
91cdf0e10cSrcweir 	void DoAction(MetaPixelAction			& rAct);
92cdf0e10cSrcweir 	void DoAction(MetaPointAction			& rAct);
93cdf0e10cSrcweir 	void DoAction(MetaLineAction			& rAct);
94cdf0e10cSrcweir 	void DoAction(MetaRectAction			& rAct);
95cdf0e10cSrcweir 	void DoAction(MetaRoundRectAction		& rAct);
96cdf0e10cSrcweir 	void DoAction(MetaEllipseAction			& rAct);
97cdf0e10cSrcweir 	void DoAction(MetaArcAction				& rAct);
98cdf0e10cSrcweir 	void DoAction(MetaPieAction				& rAct);
99cdf0e10cSrcweir 	void DoAction(MetaChordAction			& rAct);
100cdf0e10cSrcweir 	void DoAction(MetaPolyLineAction		& rAct);
101cdf0e10cSrcweir 	void DoAction(MetaPolygonAction			& rAct);
102cdf0e10cSrcweir 	void DoAction(MetaPolyPolygonAction		& rAct);
103cdf0e10cSrcweir 	void DoAction(MetaTextAction			& rAct);
104cdf0e10cSrcweir 	void DoAction(MetaTextArrayAction		& rAct);
105cdf0e10cSrcweir 	void DoAction(MetaStretchTextAction		& rAct);
106cdf0e10cSrcweir 	void DoAction(MetaBmpAction				& rAct);
107cdf0e10cSrcweir 	void DoAction(MetaBmpScaleAction		& rAct);
108cdf0e10cSrcweir 	void DoAction(MetaBmpExAction			& rAct);
109cdf0e10cSrcweir 	void DoAction(MetaBmpExScaleAction		& rAct);
110cdf0e10cSrcweir 	void DoAction(MetaHatchAction			& rAct);
111cdf0e10cSrcweir 	void DoAction(MetaLineColorAction		& rAct);
112cdf0e10cSrcweir 	void DoAction(MetaMapModeAction			& rAct);
DoAction(MetaFillColorAction & rAct)1138718d260SArmin Le Grand 	void DoAction(MetaFillColorAction		& rAct) { rAct.Execute(&maVD); }
DoAction(MetaTextColorAction & rAct)1148718d260SArmin Le Grand 	void DoAction(MetaTextColorAction		& rAct) { rAct.Execute(&maVD); }
DoAction(MetaTextFillColorAction & rAct)1158718d260SArmin Le Grand 	void DoAction(MetaTextFillColorAction	& rAct) { rAct.Execute(&maVD); }
DoAction(MetaFontAction & rAct)1168718d260SArmin Le Grand 	void DoAction(MetaFontAction			& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaTextAlignAction & rAct)1178718d260SArmin Le Grand 	void DoAction(MetaTextAlignAction		& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaClipRegionAction & rAct)1188718d260SArmin Le Grand 	void DoAction(MetaClipRegionAction		& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaRasterOpAction & rAct)1198718d260SArmin Le Grand 	void DoAction(MetaRasterOpAction		& rAct) { rAct.Execute(&maVD); }
DoAction(MetaPushAction & rAct)1208718d260SArmin Le Grand 	void DoAction(MetaPushAction			& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaPopAction & rAct)1218718d260SArmin Le Grand 	void DoAction(MetaPopAction				& rAct) { rAct.Execute(&maVD); mbFntDirty = true; checkClip(); }
DoAction(MetaMoveClipRegionAction & rAct)1228718d260SArmin Le Grand 	void DoAction(MetaMoveClipRegionAction	& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaISectRectClipRegionAction & rAct)1238718d260SArmin Le Grand 	void DoAction(MetaISectRectClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaISectRegionClipRegionAction & rAct)1248718d260SArmin Le Grand 	void DoAction(MetaISectRegionClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
125*690281a1SArmin Le Grand 
126*690281a1SArmin Le Grand     // #i125211# The MetaCommentAction needs to advance (if used), thus
127*690281a1SArmin Le Grand     // give current metafile and index which may be changed
128*690281a1SArmin Le Grand     void DoAction(MetaCommentAction& rAct, GDIMetaFile& rMtf, sal_uLong& a);
129cdf0e10cSrcweir 
1308718d260SArmin Le Grand     // missing actions added
1318718d260SArmin Le Grand     void DoAction(MetaTextRectAction& rAct);
1328718d260SArmin Le Grand     void DoAction(MetaBmpScalePartAction& rAct);
1338718d260SArmin Le Grand     void DoAction(MetaBmpExScalePartAction& rAct);
1348718d260SArmin Le Grand     void DoAction(MetaMaskAction& rAct);
1358718d260SArmin Le Grand     void DoAction(MetaMaskScaleAction& rAct);
1368718d260SArmin Le Grand     void DoAction(MetaMaskScalePartAction& rAct);
1378718d260SArmin Le Grand     void DoAction(MetaGradientAction& rAct);
1388718d260SArmin Le Grand     void DoAction(MetaWallpaperAction& rAct);
1398718d260SArmin Le Grand     void DoAction(MetaTransparentAction& rAct);
1408718d260SArmin Le Grand     void DoAction(MetaEPSAction& rAct);
DoAction(MetaRefPointAction & rAct)1418718d260SArmin Le Grand     void DoAction(MetaRefPointAction& rAct)  { rAct.Execute(&maVD); }
DoAction(MetaTextLineColorAction & rAct)1428718d260SArmin Le Grand     void DoAction(MetaTextLineColorAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
1438718d260SArmin Le Grand     void DoAction(MetaTextLineAction& rAct);
1448718d260SArmin Le Grand     void DoAction(MetaFloatTransparentAction& rAct);
1458718d260SArmin Le Grand     void DoAction(MetaGradientExAction& rAct);
DoAction(MetaLayoutModeAction & rAct)1468718d260SArmin Le Grand     void DoAction(MetaLayoutModeAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaTextLanguageAction & rAct)1478718d260SArmin Le Grand     void DoAction(MetaTextLanguageAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaOverlineColorAction & rAct)1488718d260SArmin Le Grand     void DoAction(MetaOverlineColorAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
1498718d260SArmin Le Grand 
1508718d260SArmin Le Grand 	void ImportText(const Point& rPos, const XubString& rStr, const MetaAction& rAct);
1518718d260SArmin Le Grand 	void SetAttributes(SdrObject* pObj, bool bForceTextAttr = false);
1528718d260SArmin Le Grand 	void InsertObj(SdrObject* pObj, bool bScale = true);
153cdf0e10cSrcweir 	void MapScaling();
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 	// #i73407# reformulation to use new B2DPolygon classes
156cdf0e10cSrcweir 	bool CheckLastLineMerge(const basegfx::B2DPolygon& rSrcPoly);
157cdf0e10cSrcweir 	bool CheckLastPolyLineAndFillMerge(const basegfx::B2DPolyPolygon& rPolyPolygon);
1588718d260SArmin Le Grand 
1598718d260SArmin Le Grand     void DoLoopActions(GDIMetaFile& rMtf, SvdProgressInfo* pProgrInfo, sal_uInt32* pActionsToReport);
160cdf0e10cSrcweir 
161cdf0e10cSrcweir public:
1628718d260SArmin Le Grand 	ImpSdrGDIMetaFileImport(
1638718d260SArmin Le Grand         SdrModel& rModel,
1648718d260SArmin Le Grand         SdrLayerID nLay,
1658718d260SArmin Le Grand         const Rectangle& rRect);
166cdf0e10cSrcweir 	~ImpSdrGDIMetaFileImport();
1678718d260SArmin Le Grand 
1688718d260SArmin Le Grand     sal_uInt32 DoImport(
1698718d260SArmin Le Grand         const GDIMetaFile& rMtf,
1708718d260SArmin Le Grand         SdrObjList& rDestList,
1718718d260SArmin Le Grand         sal_uInt32 nInsPos = CONTAINER_APPEND,
1728718d260SArmin Le Grand         SvdProgressInfo* pProgrInfo = 0);
173cdf0e10cSrcweir };
174cdf0e10cSrcweir 
175cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
176cdf0e10cSrcweir 
177cdf0e10cSrcweir #endif //_SVDFMTF_HXX
178cdf0e10cSrcweir // eof
179