xref: /AOO41X/main/svx/source/svdraw/svdfmtf.hxx (revision 8718d260ee3e87f2aa89251cd7815a8ebeedbbaf)
13334a7e6SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
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
10cdf0e10cSrcweir  *
113334a7e6SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
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.
19cdf0e10cSrcweir  *
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:
49*8718d260SArmin Le Grand     ::std::vector< SdrObject* > maTmpList;
50*8718d260SArmin Le Grand 	VirtualDevice				maVD;
51*8718d260SArmin Le Grand 	Rectangle					maScaleRect;
52*8718d260SArmin Le Grand 	sal_uLong					mnMapScalingOfs; // ab hier nocht nicht mit MapScaling bearbeitet
53*8718d260SArmin Le Grand 	SfxItemSet*					mpLineAttr;
54*8718d260SArmin Le Grand 	SfxItemSet*					mpFillAttr;
55*8718d260SArmin Le Grand 	SfxItemSet*					mpTextAttr;
56*8718d260SArmin Le Grand 	SdrModel*					mpModel;
57*8718d260SArmin Le Grand 	SdrLayerID					mnLayer;
58*8718d260SArmin Le Grand 	Color						maOldLineColor;
59*8718d260SArmin Le Grand 	sal_Int32					mnLineWidth;
60cdf0e10cSrcweir 	basegfx::B2DLineJoin		maLineJoin;
615aaf853bSArmin Le Grand 	com::sun::star::drawing::LineCap    maLineCap;
62cdf0e10cSrcweir 	XDash						maDash;
63cdf0e10cSrcweir 
64*8718d260SArmin Le Grand 	bool                        mbMov;
65*8718d260SArmin Le Grand 	bool                        mbSize;
66*8718d260SArmin Le Grand 	Point						maOfs;
67*8718d260SArmin Le Grand     double                      mfScaleX;
68*8718d260SArmin Le Grand     double                      mfScaleY;
69*8718d260SArmin Le Grand 	Fraction					maScaleX;
70*8718d260SArmin Le Grand 	Fraction					maScaleY;
71cdf0e10cSrcweir 
72*8718d260SArmin Le Grand 	bool                        mbFntDirty;
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 	// fuer Optimierung von (PenNULL,Brush,DrawPoly),(Pen,BrushNULL,DrawPoly) -> aus 2 mach ein
75*8718d260SArmin Le Grand 	bool                        mbLastObjWasPolyWithoutLine;
76*8718d260SArmin Le Grand 	bool                        mbNoLine;
77*8718d260SArmin Le Grand 	bool                        mbNoFill;
78cdf0e10cSrcweir 
79cdf0e10cSrcweir 	// fuer Optimierung mehrerer Linien zu einer Polyline
80*8718d260SArmin 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)113*8718d260SArmin Le Grand 	void DoAction(MetaFillColorAction		& rAct) { rAct.Execute(&maVD); }
DoAction(MetaTextColorAction & rAct)114*8718d260SArmin Le Grand 	void DoAction(MetaTextColorAction		& rAct) { rAct.Execute(&maVD); }
DoAction(MetaTextFillColorAction & rAct)115*8718d260SArmin Le Grand 	void DoAction(MetaTextFillColorAction	& rAct) { rAct.Execute(&maVD); }
DoAction(MetaFontAction & rAct)116*8718d260SArmin Le Grand 	void DoAction(MetaFontAction			& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaTextAlignAction & rAct)117*8718d260SArmin Le Grand 	void DoAction(MetaTextAlignAction		& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaClipRegionAction & rAct)118*8718d260SArmin Le Grand 	void DoAction(MetaClipRegionAction		& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaRasterOpAction & rAct)119*8718d260SArmin Le Grand 	void DoAction(MetaRasterOpAction		& rAct) { rAct.Execute(&maVD); }
DoAction(MetaPushAction & rAct)120*8718d260SArmin Le Grand 	void DoAction(MetaPushAction			& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaPopAction & rAct)121*8718d260SArmin Le Grand 	void DoAction(MetaPopAction				& rAct) { rAct.Execute(&maVD); mbFntDirty = true; checkClip(); }
DoAction(MetaMoveClipRegionAction & rAct)122*8718d260SArmin Le Grand 	void DoAction(MetaMoveClipRegionAction	& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaISectRectClipRegionAction & rAct)123*8718d260SArmin Le Grand 	void DoAction(MetaISectRectClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
DoAction(MetaISectRegionClipRegionAction & rAct)124*8718d260SArmin Le Grand 	void DoAction(MetaISectRegionClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
125cdf0e10cSrcweir 	void DoAction(MetaCommentAction& rAct, GDIMetaFile* pMtf);
126cdf0e10cSrcweir 
127*8718d260SArmin Le Grand     // missing actions added
128*8718d260SArmin Le Grand     void DoAction(MetaTextRectAction& rAct);
129*8718d260SArmin Le Grand     void DoAction(MetaBmpScalePartAction& rAct);
130*8718d260SArmin Le Grand     void DoAction(MetaBmpExScalePartAction& rAct);
131*8718d260SArmin Le Grand     void DoAction(MetaMaskAction& rAct);
132*8718d260SArmin Le Grand     void DoAction(MetaMaskScaleAction& rAct);
133*8718d260SArmin Le Grand     void DoAction(MetaMaskScalePartAction& rAct);
134*8718d260SArmin Le Grand     void DoAction(MetaGradientAction& rAct);
135*8718d260SArmin Le Grand     void DoAction(MetaWallpaperAction& rAct);
136*8718d260SArmin Le Grand     void DoAction(MetaTransparentAction& rAct);
137*8718d260SArmin Le Grand     void DoAction(MetaEPSAction& rAct);
DoAction(MetaRefPointAction & rAct)138*8718d260SArmin Le Grand     void DoAction(MetaRefPointAction& rAct)  { rAct.Execute(&maVD); }
DoAction(MetaTextLineColorAction & rAct)139*8718d260SArmin Le Grand     void DoAction(MetaTextLineColorAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
140*8718d260SArmin Le Grand     void DoAction(MetaTextLineAction& rAct);
141*8718d260SArmin Le Grand     void DoAction(MetaFloatTransparentAction& rAct);
142*8718d260SArmin Le Grand     void DoAction(MetaGradientExAction& rAct);
DoAction(MetaLayoutModeAction & rAct)143*8718d260SArmin Le Grand     void DoAction(MetaLayoutModeAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaTextLanguageAction & rAct)144*8718d260SArmin Le Grand     void DoAction(MetaTextLanguageAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
DoAction(MetaOverlineColorAction & rAct)145*8718d260SArmin Le Grand     void DoAction(MetaOverlineColorAction& rAct)  { rAct.Execute(&maVD); mbFntDirty = true; }
146*8718d260SArmin Le Grand 
147cdf0e10cSrcweir 	void ImportText(const Point& rPos, const XubString& rStr, const MetaAction& rAct);
148*8718d260SArmin Le Grand 	void SetAttributes(SdrObject* pObj, bool bForceTextAttr = false);
149*8718d260SArmin Le Grand 	void InsertObj(SdrObject* pObj, bool bScale = true);
150cdf0e10cSrcweir 	void MapScaling();
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 	// #i73407# reformulation to use new B2DPolygon classes
153cdf0e10cSrcweir 	bool CheckLastLineMerge(const basegfx::B2DPolygon& rSrcPoly);
154cdf0e10cSrcweir 	bool CheckLastPolyLineAndFillMerge(const basegfx::B2DPolyPolygon& rPolyPolygon);
155cdf0e10cSrcweir 
156*8718d260SArmin Le Grand     void DoLoopActions(GDIMetaFile& rMtf, SvdProgressInfo* pProgrInfo, sal_uInt32* pActionsToReport);
157*8718d260SArmin Le Grand 
158cdf0e10cSrcweir public:
159*8718d260SArmin Le Grand 	ImpSdrGDIMetaFileImport(
160*8718d260SArmin Le Grand         SdrModel& rModel,
161*8718d260SArmin Le Grand         SdrLayerID nLay,
162*8718d260SArmin Le Grand         const Rectangle& rRect);
163cdf0e10cSrcweir 	~ImpSdrGDIMetaFileImport();
164*8718d260SArmin Le Grand 
165*8718d260SArmin Le Grand     sal_uInt32 DoImport(
166*8718d260SArmin Le Grand         const GDIMetaFile& rMtf,
167*8718d260SArmin Le Grand         SdrObjList& rDestList,
168*8718d260SArmin Le Grand         sal_uInt32 nInsPos = CONTAINER_APPEND,
169*8718d260SArmin Le Grand         SvdProgressInfo* pProgrInfo = 0);
170cdf0e10cSrcweir };
171cdf0e10cSrcweir 
172cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////////////////////////////
173cdf0e10cSrcweir 
174cdf0e10cSrcweir #endif //_SVDFMTF_HXX
175cdf0e10cSrcweir // eof
176