1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_VCL_SOURCE_FILTER_WMF_EMFWR_HXX
21 #define INCLUDED_VCL_SOURCE_FILTER_WMF_EMFWR_HXX
23 #include <vcl/metaact.hxx>
24 #include <vcl/graph.hxx>
25 #include <vcl/gdimtf.hxx>
26 #include <vcl/virdev.hxx>
27 #include <vcl/fltcall.hxx>
30 namespace basegfx
{ class B2DPolygon
; }
36 ScopedVclPtr
<VirtualDevice
> maVDev
;
37 MapMode maDestMapMode
;
40 sal_uLong mnHandleCount
;
41 sal_uLong mnRecordCount
;
42 sal_uLong mnRecordPos
;
43 sal_uLong mnRecordPlusPos
;
45 bool mbRecordPlusOpen
;
47 sal_uInt32 mnLineHandle
;
49 sal_uInt32 mnFillHandle
;
51 sal_uInt32 mnTextHandle
;
52 sal_uInt32 mnHorTextAlign
;
54 void ImplBeginRecord( sal_uInt32 nType
);
56 void ImplBeginPlusRecord( sal_uInt16 nType
, sal_uInt16 nFlags
);
57 void ImplEndPlusRecord();
58 void ImplPlusRecord( sal_uInt16 nType
, sal_uInt16 nFlags
);
59 void ImplBeginCommentRecord( sal_Int32 nCommentType
);
60 void ImplEndCommentRecord();
62 sal_uLong
ImplAcquireHandle();
63 void ImplReleaseHandle( sal_uLong nHandle
);
65 bool ImplPrepareHandleSelect( sal_uInt32
& rHandle
, sal_uLong nSelectType
);
66 void ImplCheckLineAttr();
67 void ImplCheckFillAttr();
68 void ImplCheckTextAttr();
70 void ImplWriteColor( const Color
& rColor
);
71 void ImplWriteRasterOp( RasterOp eRop
);
72 void ImplWriteExtent( long nExtent
);
73 void ImplWritePoint( const Point
& rPoint
);
74 void ImplWriteSize( const Size
& rSize
);
75 void ImplWriteRect( const Rectangle
& rRect
);
76 void ImplWritePath( const tools::PolyPolygon
& rPolyPoly
, bool bClose
);
77 void ImplWritePolygonRecord( const Polygon
& rPoly
, bool bClose
);
78 void ImplWritePolyPolygonRecord( const tools::PolyPolygon
& rPolyPoly
);
79 void ImplWriteBmpRecord( const Bitmap
& rBmp
, const Point
& rPt
, const Size
& rSz
, sal_uInt32 nROP
);
80 void ImplWriteTextRecord( const Point
& rPos
, const OUString
& rText
, const long* pDXArray
, sal_uInt32 nWidth
);
82 void Impl_handleLineInfoPolyPolygons(const LineInfo
& rInfo
, const basegfx::B2DPolygon
& rLinePolygon
);
83 void ImplWrite( const GDIMetaFile
& rMtf
);
84 void WriteEMFPlusHeader( const Size
&rMtfSizePix
, const Size
&rMtfSizeLog
);
85 void ImplWritePlusEOF();
86 void ImplWritePlusFillPolygonRecord( const Polygon
& rPoly
, const sal_uInt32
& nTrans
);
87 void ImplWritePlusColor( const Color
& rColor
, const sal_uInt32
& nTrans
);
88 void ImplWritePlusPoint( const Point
& rPoint
);
92 EMFWriter(SvStream
&rStream
)
93 : maVDev( VclPtr
<VirtualDevice
>::Create() )
100 , mbRecordOpen(false)
101 , mbRecordPlusOpen(false)
102 , mbLineChanged(false)
104 , mbFillChanged(false)
106 , mbTextChanged(false)
112 bool WriteEMF(const GDIMetaFile
& rMtf
);
115 #endif // INCLUDED_VCL_SOURCE_FILTER_WMF_EMFWR_HXX
117 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */