40 sal_uInt16 nPoints = rPoly.
GetSize();
78 css::drawing::LineCap_BUTT,
113 if ( rLineInfo.IsDefault() )
121 auto eLineStyle = rLineInfo.GetStyle();
132 rLineInfo.GetWidth(),
133 rLineInfo.GetLineJoin(),
134 rLineInfo.GetLineCap(),
138 SAL_WARN(
"vcl.gdi",
"Unknown LineStyle: " <<
static_cast<int>(eLineStyle));
152 css::drawing::LineCap eLineCap,
153 double fMiterMinimumAngle)
160 if( fLineWidth != 0.0 )
161 aLineInfo.SetWidth( fLineWidth );
163 aLineInfo.SetLineJoin(eLineJoin);
164 aLineInfo.SetLineCap(eLineCap);
206 if(fLineWidth >= 2.5 &&
207 rB2DPolygon.
count() &&
208 rB2DPolygon.
count() <= 1000)
210 const double fHalfLineWidth((fLineWidth * 0.5) + 0.5);
216 fMiterMinimumAngle));
226 for(
auto const& rPolygon : aAreaPolyPolygon)
239 for(
auto const& rPolygon : aAreaPolyPolygon)
251 if( fLineWidth != 0.0 )
252 aLineInfo.SetWidth( fLineWidth );
260 sal_uInt16 nPoints(rPoly.
GetSize());
281 const bool bLineWidthUsed(aInfo.GetWidth() > 1);
283 if (bDashUsed || bLineWidthUsed)
312 double fTransparency,
313 const std::vector< double >* pStroke,
315 css::drawing::LineCap eLineCap,
316 double fMiterMinimumAngle)
319 pStroke, eLineJoin, eLineCap, fMiterMinimumAngle))
327 if( fLineWidth != 0.0 )
328 aLineInfo.SetWidth( fLineWidth );
330 aLineInfo.SetLineJoin(eLineJoin);
331 aLineInfo.SetLineCap(eLineCap);
345 double fTransparency,
346 const std::vector< double >* pStroke,
348 css::drawing::LineCap eLineCap,
349 double fMiterMinimumAngle)
354 if(!rB2DPolygon.
count())
381 const double fAdjustedTransparency =
mpAlphaVDev ? 0 : fTransparency;
386 fAdjustedTransparency,
399 fTransparency, pStroke, eLineJoin, eLineCap,
virtual void InitClipRegion()
SAL_DLLPRIVATE bool is_double_buffered_window() const
void DrawPolyLine(const tools::Polygon &rPoly)
Render the given polygon as a line stroke.
SAL_DLLPRIVATE void InitLineColor()
RasterOp GetRasterOp() const
SAL_DLLPRIVATE tools::Rectangle ImplLogicToDevicePixel(const tools::Rectangle &rLogicRect) const
Convert a logical rectangle to a rectangle in physical device pixel units.
virtual bool AcquireGraphics() const =0
Acquire a graphics device that the output device uses to draw on.
SAL_DLLPRIVATE bool ImplIsRecordLayout() const
SAL_DLLPRIVATE void InitFillColor()
SAL_DLLPRIVATE void drawLine(basegfx::B2DPolyPolygon aLinePolyPolygon, const LineInfo &rInfo)
Helper for line geometry paint with support for graphic expansion (pattern and fat_to_area)
SalGraphics * mpGraphics
Graphics context to draw on.
SAL_DLLPRIVATE void drawPolyLine(const tools::Polygon &rPoly, const LineInfo &rLineInfo)
SAL_DLLPRIVATE void ImplDrawPolyPolygonWithB2DPolyPolygon(const basegfx::B2DPolyPolygon &rB2DPolyPoly)
bool DrawPolyLineDirect(const basegfx::B2DHomMatrix &rObjectTransform, const basegfx::B2DPolygon &rB2DPolygon, double fLineWidth=0.0, double fTransparency=0.0, const std::vector< double > *=nullptr, basegfx::B2DLineJoin eLineJoin=basegfx::B2DLineJoin::NONE, css::drawing::LineCap eLineCap=css::drawing::LineCap_BUTT, double fMiterMinimumAngle=basegfx::deg2rad(15.0))
AntialiasingFlags mnAntialiasing
bool IsDeviceOutputNecessary() const
bool DrawPolyLineDirectInternal(const basegfx::B2DHomMatrix &rObjectTransform, const basegfx::B2DPolygon &rB2DPolygon, double fLineWidth=0.0, double fTransparency=0.0, const std::vector< double > *=nullptr, basegfx::B2DLineJoin eLineJoin=basegfx::B2DLineJoin::NONE, css::drawing::LineCap eLineCap=css::drawing::LineCap_BUTT, double fMiterMinimumAngle=basegfx::deg2rad(15.0))
VclPtr< VirtualDevice > mpAlphaVDev
SAL_DLLPRIVATE basegfx::B2DHomMatrix ImplGetDeviceTransformation() const
Get device transformation.
virtual bool supportsOperation(OutDevSupportType) const =0
void DrawPolyLine(sal_uInt32 nPoints, Point const *pPtAry, const OutputDevice &rOutDev)
bool DrawPolyLineBezier(sal_uInt32 nPoints, const Point *pPtAry, const PolyFlags *pFlgAry, const OutputDevice &rOutDev)
#define SAL_WARN(area, stream)
B2DPolyPolygon createAreaGeometry(const B2DPolygon &rCandidate, double fHalfLineWidth, B2DLineJoin eJoin, css::drawing::LineCap eCap, double fMaxAllowedAngle=basegfx::deg2rad(12.5), double fMaxPartOfEdge=0.4, double fMiterMinimumAngle=basegfx::deg2rad(15.0), basegfx::triangulator::B2DTriangleVector *pTriangles=nullptr)
constexpr double deg2rad(double v)