blob: 47931e15326ae884adc390aa467f4bca26bc07cc [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SVDFMTF_HXX
#define _SVDFMTF_HXX
#include <vcl/metaact.hxx>
#include <vcl/virdev.hxx>
#include <svx/svdobj.hxx>
//************************************************************
// Vorausdeklarationen
//************************************************************
class SfxItemSet;
class SdrObjList;
class SdrModel;
class SdrPage;
class SdrObject;
class SvdProgressInfo;
//************************************************************
// Hilfsklasse ImpSdrGDIMetaFileImport
//************************************************************
class ImpSdrGDIMetaFileImport
{
protected:
::std::vector< SdrObject* > maTmpList;
VirtualDevice maVD;
Rectangle maScaleRect;
sal_uLong mnMapScalingOfs; // ab hier nocht nicht mit MapScaling bearbeitet
SfxItemSet* mpLineAttr;
SfxItemSet* mpFillAttr;
SfxItemSet* mpTextAttr;
SdrModel* mpModel;
SdrLayerID mnLayer;
Color maOldLineColor;
sal_Int32 mnLineWidth;
basegfx::B2DLineJoin maLineJoin;
com::sun::star::drawing::LineCap maLineCap;
XDash maDash;
bool mbMov;
bool mbSize;
Point maOfs;
double mfScaleX;
double mfScaleY;
Fraction maScaleX;
Fraction maScaleY;
bool mbFntDirty;
// fuer Optimierung von (PenNULL,Brush,DrawPoly),(Pen,BrushNULL,DrawPoly) -> aus 2 mach ein
bool mbLastObjWasPolyWithoutLine;
bool mbNoLine;
bool mbNoFill;
// fuer Optimierung mehrerer Linien zu einer Polyline
bool mbLastObjWasLine;
// clipregion
basegfx::B2DPolyPolygon maClip;
protected:
// ckeck for clip and evtl. fill maClip
void checkClip();
bool isClip() const;
// actions
void DoAction(MetaPixelAction & rAct);
void DoAction(MetaPointAction & rAct);
void DoAction(MetaLineAction & rAct);
void DoAction(MetaRectAction & rAct);
void DoAction(MetaRoundRectAction & rAct);
void DoAction(MetaEllipseAction & rAct);
void DoAction(MetaArcAction & rAct);
void DoAction(MetaPieAction & rAct);
void DoAction(MetaChordAction & rAct);
void DoAction(MetaPolyLineAction & rAct);
void DoAction(MetaPolygonAction & rAct);
void DoAction(MetaPolyPolygonAction & rAct);
void DoAction(MetaTextAction & rAct);
void DoAction(MetaTextArrayAction & rAct);
void DoAction(MetaStretchTextAction & rAct);
void DoAction(MetaBmpAction & rAct);
void DoAction(MetaBmpScaleAction & rAct);
void DoAction(MetaBmpExAction & rAct);
void DoAction(MetaBmpExScaleAction & rAct);
void DoAction(MetaHatchAction & rAct);
void DoAction(MetaLineColorAction & rAct);
void DoAction(MetaMapModeAction & rAct);
void DoAction(MetaFillColorAction & rAct) { rAct.Execute(&maVD); }
void DoAction(MetaTextColorAction & rAct) { rAct.Execute(&maVD); }
void DoAction(MetaTextFillColorAction & rAct) { rAct.Execute(&maVD); }
void DoAction(MetaFontAction & rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
void DoAction(MetaTextAlignAction & rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
void DoAction(MetaClipRegionAction & rAct) { rAct.Execute(&maVD); checkClip(); }
void DoAction(MetaRasterOpAction & rAct) { rAct.Execute(&maVD); }
void DoAction(MetaPushAction & rAct) { rAct.Execute(&maVD); checkClip(); }
void DoAction(MetaPopAction & rAct) { rAct.Execute(&maVD); mbFntDirty = true; checkClip(); }
void DoAction(MetaMoveClipRegionAction & rAct) { rAct.Execute(&maVD); checkClip(); }
void DoAction(MetaISectRectClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
void DoAction(MetaISectRegionClipRegionAction& rAct) { rAct.Execute(&maVD); checkClip(); }
void DoAction(MetaCommentAction& rAct, GDIMetaFile* pMtf);
// missing actions added
void DoAction(MetaTextRectAction& rAct);
void DoAction(MetaBmpScalePartAction& rAct);
void DoAction(MetaBmpExScalePartAction& rAct);
void DoAction(MetaMaskAction& rAct);
void DoAction(MetaMaskScaleAction& rAct);
void DoAction(MetaMaskScalePartAction& rAct);
void DoAction(MetaGradientAction& rAct);
void DoAction(MetaWallpaperAction& rAct);
void DoAction(MetaTransparentAction& rAct);
void DoAction(MetaEPSAction& rAct);
void DoAction(MetaRefPointAction& rAct) { rAct.Execute(&maVD); }
void DoAction(MetaTextLineColorAction& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
void DoAction(MetaTextLineAction& rAct);
void DoAction(MetaFloatTransparentAction& rAct);
void DoAction(MetaGradientExAction& rAct);
void DoAction(MetaLayoutModeAction& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
void DoAction(MetaTextLanguageAction& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
void DoAction(MetaOverlineColorAction& rAct) { rAct.Execute(&maVD); mbFntDirty = true; }
void ImportText(const Point& rPos, const XubString& rStr, const MetaAction& rAct);
void SetAttributes(SdrObject* pObj, bool bForceTextAttr = false);
void InsertObj(SdrObject* pObj, bool bScale = true);
void MapScaling();
// #i73407# reformulation to use new B2DPolygon classes
bool CheckLastLineMerge(const basegfx::B2DPolygon& rSrcPoly);
bool CheckLastPolyLineAndFillMerge(const basegfx::B2DPolyPolygon& rPolyPolygon);
void DoLoopActions(GDIMetaFile& rMtf, SvdProgressInfo* pProgrInfo, sal_uInt32* pActionsToReport);
public:
ImpSdrGDIMetaFileImport(
SdrModel& rModel,
SdrLayerID nLay,
const Rectangle& rRect);
~ImpSdrGDIMetaFileImport();
sal_uInt32 DoImport(
const GDIMetaFile& rMtf,
SdrObjList& rDestList,
sal_uInt32 nInsPos = CONTAINER_APPEND,
SvdProgressInfo* pProgrInfo = 0);
};
////////////////////////////////////////////////////////////////////////////////////////////////////
#endif //_SVDFMTF_HXX
// eof