LibreOffice Module drawinglayer (master) 1
vclmetafileprocessor2d.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
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/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
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 .
18 */
19
20#pragma once
21
22#include <stack>
23
24#include "vclprocessor2d.hxx"
25#include <com/sun/star/i18n/XBreakIterator.hpp>
27#include <vcl/pdfextoutdevdata.hxx> // vcl::PDFExtOutDevData support
28#include <vcl/lazydelete.hxx>
29
30class GDIMetaFile;
31namespace tools
32{
33class Rectangle;
34}
35class Gradient;
36class SvtGraphicFill;
38
40{
41class FillGradientAttribute;
42class LineAttribute;
43class StrokeAttribute;
44class LineStartEndAttribute;
45}
46
48{
49class GraphicPrimitive2D;
50class ControlPrimitive2D;
51class TextHierarchyFieldPrimitive2D;
52class TextHierarchyLinePrimitive2D;
53class TextHierarchyBulletPrimitive2D;
54class TextHierarchyParagraphPrimitive2D;
55class TextHierarchyBlockPrimitive2D;
56class TextSimplePortionPrimitive2D;
57class PolygonHairlinePrimitive2D;
58class PolygonStrokePrimitive2D;
59class PolygonStrokeArrowPrimitive2D;
60class PolyPolygonGraphicPrimitive2D;
61class PolyPolygonHatchPrimitive2D;
62class PolyPolygonGradientPrimitive2D;
63class PolyPolygonColorPrimitive2D;
64class MaskPrimitive2D;
65class UnifiedTransparencePrimitive2D;
66class TransparencePrimitive2D;
67class ObjectInfoPrimitive2D;
68class StructureTagPrimitive2D;
69}
70
71namespace basegfx
72{
73class BColor;
74}
75
77{
91{
92private:
94 GDIMetaFile& o_rContentMetafile);
95 void
98 bool bIsTransparenceGradient) const;
99 void impStartSvtGraphicFill(SvtGraphicFill const* pSvtGraphicFill);
100 void impEndSvtGraphicFill(SvtGraphicFill const* pSvtGraphicFill);
101 std::unique_ptr<SvtGraphicStroke>
103 const basegfx::BColor* pColor,
104 const attribute::LineAttribute* pLineAttribute,
105 const attribute::StrokeAttribute* pStrokeAttribute,
108 void impStartSvtGraphicStroke(SvtGraphicStroke const* pSvtGraphicStroke);
109 void impEndSvtGraphicStroke(SvtGraphicStroke const* pSvtGraphicStroke);
111 void popListItem();
112 void popList();
113
114 void processGraphicPrimitive2D(const primitive2d::GraphicPrimitive2D& rGraphicPrimitive);
115 void processControlPrimitive2D(const primitive2d::ControlPrimitive2D& rControlPrimitive);
117 const primitive2d::TextHierarchyFieldPrimitive2D& rFieldPrimitive);
119 const primitive2d::TextHierarchyLinePrimitive2D& rLinePrimitive);
121 const primitive2d::TextHierarchyBulletPrimitive2D& rBulletPrimitive);
123 const primitive2d::TextHierarchyParagraphPrimitive2D& rParagraphPrimitive);
125 const primitive2d::TextHierarchyBlockPrimitive2D& rBlockPrimitive);
127 const primitive2d::TextSimplePortionPrimitive2D& rTextCandidate);
129 const primitive2d::PolygonHairlinePrimitive2D& rHairlinePrimitive);
130 void
133 const primitive2d::PolygonStrokeArrowPrimitive2D& rStrokeArrowPrimitive);
135 const primitive2d::PolyPolygonGraphicPrimitive2D& rBitmapCandidate);
137 const primitive2d::PolyPolygonHatchPrimitive2D& rHatchCandidate);
139 const primitive2d::PolyPolygonGradientPrimitive2D& rGradientCandidate);
141 const primitive2d::PolyPolygonColorPrimitive2D& rPolygonCandidate);
142 void processMaskPrimitive2D(const primitive2d::MaskPrimitive2D& rMaskCandidate);
144 const primitive2d::UnifiedTransparencePrimitive2D& rUniTransparenceCandidate);
146 const primitive2d::TransparencePrimitive2D& rTransparenceCandidate);
147 void
150 const primitive2d::StructureTagPrimitive2D& rStructureTagCandidate);
151
153 double getTransformedLineWidth(double fWidth) const;
154
157
160
161 /* do not allow embedding SvtGraphicFills into each other,
162 use a counter to prevent that
163 */
165
168
169 /* hold the last unified transparence value to have it handy
170 on SvtGraphicStroke creation
171 */
173
174 /* break iterator support
175 made static so it only needs to be fetched once, even with many single
176 constructed VclMetafileProcessor2D. It's still incarnated on demand,
177 but exists for OOo runtime now by purpose.
178 */
180
181 /* vcl::PDFExtOutDevData support
182 For the first step, some extra actions at vcl::PDFExtOutDevData need to
183 be emulated with the VclMetafileProcessor2D. These are potentially temporarily
184 since PDF export may use PrimitiveSequences one day directly.
185 */
187
188 // Remember the current OutlineLevel. This is used when tagged PDF export
189 // is used to create/write valid structured list entries using PDF statements
190 // like '/L', '/LI', 'LBody' instead of simple '/P' (Paragraph).
191 // The value -1 means 'no OutlineLevel' and values >= 0 express the level.
195
196 std::stack<vcl::PDFWriter::StructElement> maListElements;
197
199
200protected:
201 /* the local processor for BasePrimitive2D-Implementation based primitives,
202 called from the common process()-implementation
203 */
204 virtual void processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) override;
205
206public:
209 OutputDevice& rOutDev);
210 virtual ~VclMetafileProcessor2D() override;
211};
212} // end of namespace processor2d::drawinglayer
213
214/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void processPolyPolygonGraphicPrimitive2D(const primitive2d::PolyPolygonGraphicPrimitive2D &rBitmapCandidate)
void processControlPrimitive2D(const primitive2d::ControlPrimitive2D &rControlPrimitive)
virtual void processBasePrimitive2D(const primitive2d::BasePrimitive2D &rCandidate) override
primitive2d::StructureTagPrimitive2D const * mpCurrentStructureTag
void processTextHierarchyFieldPrimitive2D(const primitive2d::TextHierarchyFieldPrimitive2D &rFieldPrimitive)
void impEndSvtGraphicStroke(SvtGraphicStroke const *pSvtGraphicStroke)
void processUnifiedTransparencePrimitive2D(const primitive2d::UnifiedTransparencePrimitive2D &rUniTransparenceCandidate)
void impStartSvtGraphicStroke(SvtGraphicStroke const *pSvtGraphicStroke)
void processPolyPolygonHatchPrimitive2D(const primitive2d::PolyPolygonHatchPrimitive2D &rHatchCandidate)
void impEndSvtGraphicFill(SvtGraphicFill const *pSvtGraphicFill)
double getTransformedLineWidth(double fWidth) const
Convert the fWidth to the same space as its coordinates.
void processGraphicPrimitive2D(const primitive2d::GraphicPrimitive2D &rGraphicPrimitive)
void processMaskPrimitive2D(const primitive2d::MaskPrimitive2D &rMaskCandidate)
void processObjectInfoPrimitive2D(const primitive2d::ObjectInfoPrimitive2D &rObjectInfoPrimitive2D)
void processStructureTagPrimitive2D(const primitive2d::StructureTagPrimitive2D &rStructureTagCandidate)
void impStartSvtGraphicFill(SvtGraphicFill const *pSvtGraphicFill)
basegfx::B2DPolyPolygon maClipPolyPolygon
the current clipping tools::PolyPolygon from MaskPrimitive2D
void processTextHierarchyBulletPrimitive2D(const primitive2d::TextHierarchyBulletPrimitive2D &rBulletPrimitive)
void processTextSimplePortionPrimitive2D(const primitive2d::TextSimplePortionPrimitive2D &rTextCandidate)
std::stack< vcl::PDFWriter::StructElement > maListElements
sal_uInt32 mnSvtGraphicStrokeCount
same for SvtGraphicStroke
static vcl::DeleteOnDeinit< css::uno::Reference< css::i18n::XBreakIterator > > mxBreakIterator
void popStructureElement(vcl::PDFWriter::StructElement eElem)
void processTextHierarchyLinePrimitive2D(const primitive2d::TextHierarchyLinePrimitive2D &rLinePrimitive)
std::unique_ptr< SvtGraphicStroke > impTryToCreateSvtGraphicStroke(const basegfx::B2DPolygon &rB2DPolygon, const basegfx::BColor *pColor, const attribute::LineAttribute *pLineAttribute, const attribute::StrokeAttribute *pStrokeAttribute, const attribute::LineStartEndAttribute *pStart, const attribute::LineStartEndAttribute *pEnd)
void processPolyPolygonGradientPrimitive2D(const primitive2d::PolyPolygonGradientPrimitive2D &rGradientCandidate)
void processTextHierarchyParagraphPrimitive2D(const primitive2d::TextHierarchyParagraphPrimitive2D &rParagraphPrimitive)
void processPolygonStrokePrimitive2D(const primitive2d::PolygonStrokePrimitive2D &rStrokePrimitive)
void impConvertFillGradientAttributeToVCLGradient(Gradient &o_rVCLGradient, const attribute::FillGradientAttribute &rFiGrAtt, bool bIsTransparenceGradient) const
void processTransparencePrimitive2D(const primitive2d::TransparencePrimitive2D &rTransparenceCandidate)
void processPolyPolygonColorPrimitive2D(const primitive2d::PolyPolygonColorPrimitive2D &rPolygonCandidate)
void processPolygonHairlinePrimitive2D(const primitive2d::PolygonHairlinePrimitive2D &rHairlinePrimitive)
void processTextHierarchyBlockPrimitive2D(const primitive2d::TextHierarchyBlockPrimitive2D &rBlockPrimitive)
VclMetafileProcessor2D(const geometry::ViewInformation2D &rViewInformation, OutputDevice &rOutDev)
constructor/destructor
void processPolygonStrokeArrowPrimitive2D(const primitive2d::PolygonStrokeArrowPrimitive2D &rStrokeArrowPrimitive)
tools::Rectangle impDumpToMetaFile(const primitive2d::Primitive2DContainer &rContent, GDIMetaFile &o_rContentMetafile)