113 if ( rLineInfo.IsDefault() )
139 const bool bLineWidthUsed(aInfo.GetWidth() > 1);
144 if(bDashUsed || bLineWidthUsed)
209 css::drawing::LineCap_BUTT,
233 const bool bLineWidthUsed(rInfo.GetWidth() > 1);
235 if (!bFuzzing && bDashUsed && aLinePolyPolygon.
count())
237 ::std::vector< double > fDotDashArray = rInfo.GetDotDashArray();
238 const double fAccumulated(::std::accumulate(fDotDashArray.begin(), fDotDashArray.end(), 0.0));
240 if(fAccumulated > 0.0)
244 for(
auto const& rPolygon : std::as_const(aLinePolyPolygon))
251 aResult.
append(aLineTarget);
254 aLinePolyPolygon = aResult;
258 if(bLineWidthUsed && aLinePolyPolygon.
count())
260 const double fHalfLineWidth((rInfo.GetWidth() * 0.5) + 0.5);
273 for(
auto const& rPolygon : std::as_const(aLinePolyPolygon))
279 rInfo.GetLineCap()));
282 aLinePolyPolygon.
clear();
288 if(aLinePolyPolygon.
count())
290 for(
auto const& rB2DPolygon : std::as_const(aLinePolyPolygon))
304 css::drawing::LineCap_BUTT,
321 if(aFillPolyPolygon.
count())
339 SAL_WARN(
"vcl.gdi",
"drawLine, skipping suspicious range of: "
340 << aRange <<
" for fuzzing performance");
345 if (bTryB2d && !bDone)
356 for(
auto const& rB2DPolygon : std::as_const(aFillPolyPolygon))
bool IsTransparent() const
virtual void InitClipRegion()
SAL_DLLPRIVATE bool is_double_buffered_window() const
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
void DrawLine(const Point &rStartPt, const Point &rEndPt)
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.
AntialiasingFlags mnAntialiasing
bool IsDeviceOutputNecessary() const
VclPtr< VirtualDevice > mpAlphaVDev
SAL_DLLPRIVATE basegfx::B2DHomMatrix ImplGetDeviceTransformation() const
Get device transformation.
DrawModeFlags GetDrawMode() const
const AllSettings & GetSettings() const
constexpr tools::Long Y() const
constexpr tools::Long X() const
virtual void SetROPLineColor(SalROPColor nROPColor)=0
virtual void SetLineColor()=0
void DrawLine(tools::Long nX1, tools::Long nY1, tools::Long nX2, tools::Long nY2, const OutputDevice &rOutDev)
virtual bool supportsOperation(OutDevSupportType) const =0
void DrawPolyLine(sal_uInt32 nPoints, Point const *pPtAry, const OutputDevice &rOutDev)
void DrawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32 *pPoints, const Point **pPtAry, const OutputDevice &rOutDev)
void DrawPolygon(sal_uInt32 nPoints, const Point *pPtAry, const OutputDevice &rOutDev)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
bool areControlPointsUsed() const
void transform(const basegfx::B2DHomMatrix &rMatrix)
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
constexpr ::Color COL_ALPHA_OPAQUE(0xff, 0xff, 0xff)
constexpr ::Color COL_TRANSPARENT(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
#define DBG_TESTSOLARMUTEX()
#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))
B2DPolygon adaptiveSubdivideByDistance(const B2DPolygon &rCandidate, double fDistanceBound, int nRecurseLimit)
void applyLineDashing(const B2DPolygon &rCandidate, const std::vector< double > &rDotDashArray, B2DPolyPolygon *pLineTarget, B2DPolyPolygon *pGapTarget, double fDotDashLength)
B2DRange getRange(const B2DPolygon &rCandidate)
constexpr double deg2rad(double v)
Color GetLineColor(Color const &rColor, DrawModeFlags nDrawMode, StyleSettings const &rStyleSettings)