// This file is part of VSTGUI. It is subject to the license terms // in the LICENSE file found in the top-level directory of this // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE #pragma once #include "vstguifwd.h" #include namespace VSTGUI { //----------- // @brief Line Style //----------- class CLineStyle { public: using CoordVector = std::vector; enum LineCap { kLineCapButt = 0, kLineCapRound, kLineCapSquare }; enum LineJoin { kLineJoinMiter = 0, kLineJoinRound, kLineJoinBevel }; CLineStyle () = default; explicit CLineStyle (LineCap cap, LineJoin join = kLineJoinMiter, CCoord dashPhase = 0., uint32_t dashCount = 0, const CCoord* dashLengths = nullptr); CLineStyle (LineCap cap, LineJoin join, CCoord dashPhase, const CoordVector& dashLengths); CLineStyle (const CLineStyle& lineStyle); ~CLineStyle () noexcept = default; CLineStyle (LineCap cap, LineJoin join, CCoord dashPhase, CoordVector&& dashLengths) noexcept; CLineStyle (CLineStyle&& cls) noexcept; CLineStyle& operator= (CLineStyle&& cls) noexcept; LineCap getLineCap () const { return cap; } LineJoin getLineJoin () const { return join; } CCoord getDashPhase () const { return dashPhase; } uint32_t getDashCount () const { return static_cast (dashLengths.size ()); } CoordVector& getDashLengths () { return dashLengths; } const CoordVector& getDashLengths() const { return dashLengths; } void setLineCap (LineCap newCap) { cap = newCap; } void setLineJoin (LineJoin newJoin) { join = newJoin; } void setDashPhase (CCoord phase) { dashPhase = phase; } bool operator== (const CLineStyle& cls) const; bool operator!= (const CLineStyle& cls) const { return !(*this == cls); } CLineStyle& operator= (const CLineStyle& cls); protected: LineCap cap {kLineCapButt}; LineJoin join {kLineJoinMiter}; CCoord dashPhase {0.}; CoordVector dashLengths; }; extern const CLineStyle kLineSolid; extern const CLineStyle kLineOnOffDash; } // VSTGUI