130 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/peninfobase.h
 | |
| // Purpose:     Declaration of wxPenInfoBase class and related constants
 | |
| // Author:      Adrien Tétar, Vadim Zeitlin
 | |
| // Created:     2017-09-10
 | |
| // Copyright:   (c) 2017 Vadim Zeitlin <vadim@wxwidgets.org>
 | |
| // Licence:     wxWindows licence
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #ifndef _WX_PENINFOBASE_H_
 | |
| #define _WX_PENINFOBASE_H_
 | |
| 
 | |
| #include "wx/bitmap.h"
 | |
| #include "wx/colour.h"
 | |
| #include "wx/gdicmn.h"  // for wxDash
 | |
| 
 | |
| enum wxPenStyle
 | |
| {
 | |
|     wxPENSTYLE_INVALID = -1,
 | |
| 
 | |
|     wxPENSTYLE_SOLID = wxSOLID,
 | |
|     wxPENSTYLE_DOT = wxDOT,
 | |
|     wxPENSTYLE_LONG_DASH = wxLONG_DASH,
 | |
|     wxPENSTYLE_SHORT_DASH = wxSHORT_DASH,
 | |
|     wxPENSTYLE_DOT_DASH = wxDOT_DASH,
 | |
|     wxPENSTYLE_USER_DASH = wxUSER_DASH,
 | |
| 
 | |
|     wxPENSTYLE_TRANSPARENT = wxTRANSPARENT,
 | |
| 
 | |
|     wxPENSTYLE_STIPPLE_MASK_OPAQUE = wxSTIPPLE_MASK_OPAQUE,
 | |
|     wxPENSTYLE_STIPPLE_MASK = wxSTIPPLE_MASK,
 | |
|     wxPENSTYLE_STIPPLE = wxSTIPPLE,
 | |
| 
 | |
|     wxPENSTYLE_BDIAGONAL_HATCH = wxHATCHSTYLE_BDIAGONAL,
 | |
|     wxPENSTYLE_CROSSDIAG_HATCH = wxHATCHSTYLE_CROSSDIAG,
 | |
|     wxPENSTYLE_FDIAGONAL_HATCH = wxHATCHSTYLE_FDIAGONAL,
 | |
|     wxPENSTYLE_CROSS_HATCH = wxHATCHSTYLE_CROSS,
 | |
|     wxPENSTYLE_HORIZONTAL_HATCH = wxHATCHSTYLE_HORIZONTAL,
 | |
|     wxPENSTYLE_VERTICAL_HATCH = wxHATCHSTYLE_VERTICAL,
 | |
|     wxPENSTYLE_FIRST_HATCH = wxHATCHSTYLE_FIRST,
 | |
|     wxPENSTYLE_LAST_HATCH = wxHATCHSTYLE_LAST
 | |
| };
 | |
| 
 | |
| enum wxPenJoin
 | |
| {
 | |
|     wxJOIN_INVALID = -1,
 | |
| 
 | |
|     wxJOIN_BEVEL = 120,
 | |
|     wxJOIN_MITER,
 | |
|     wxJOIN_ROUND
 | |
| };
 | |
| 
 | |
| enum wxPenCap
 | |
| {
 | |
|     wxCAP_INVALID = -1,
 | |
| 
 | |
|     wxCAP_ROUND = 130,
 | |
|     wxCAP_PROJECTING,
 | |
|     wxCAP_BUTT
 | |
| };
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // wxPenInfoBase is a common base for wxPenInfo and wxGraphicsPenInfo
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| // This class uses CRTP, the template parameter is the derived class itself.
 | |
| template <class T>
 | |
| class wxPenInfoBase
 | |
| {
 | |
| public:
 | |
|     // Setters for the various attributes. All of them return the object itself
 | |
|     // so that the calls to them could be chained.
 | |
| 
 | |
|     T& Colour(const wxColour& colour)
 | |
|         { m_colour = colour; return This(); }
 | |
| 
 | |
|     T& Style(wxPenStyle style)
 | |
|         { m_style = style; return This(); }
 | |
|     T& Stipple(const wxBitmap& stipple)
 | |
|         { m_stipple = stipple; m_style = wxPENSTYLE_STIPPLE; return This(); }
 | |
|     T& Dashes(int nb_dashes, const wxDash *dash)
 | |
|         { m_nb_dashes = nb_dashes; m_dash = const_cast<wxDash*>(dash); return This(); }
 | |
|     T& Join(wxPenJoin join)
 | |
|         { m_join = join; return This(); }
 | |
|     T& Cap(wxPenCap cap)
 | |
|         { m_cap = cap; return This(); }
 | |
| 
 | |
|     // Accessors are mostly meant to be used by wxWidgets itself.
 | |
| 
 | |
|     wxColour GetColour() const { return m_colour; }
 | |
|     wxBitmap GetStipple() const { return m_stipple; }
 | |
|     wxPenStyle GetStyle() const { return m_style; }
 | |
|     wxPenJoin GetJoin() const { return m_join; }
 | |
|     wxPenCap GetCap() const { return m_cap; }
 | |
|     int GetDashes(wxDash **ptr) const { *ptr = m_dash; return m_nb_dashes; }
 | |
| 
 | |
|     int GetDashCount() const { return m_nb_dashes; }
 | |
|     wxDash* GetDash() const { return m_dash; }
 | |
| 
 | |
|     // Convenience
 | |
| 
 | |
|     bool IsTransparent() const { return m_style == wxPENSTYLE_TRANSPARENT; }
 | |
| 
 | |
| protected:
 | |
|     wxPenInfoBase(const wxColour& colour, wxPenStyle style)
 | |
|         : m_colour(colour)
 | |
|     {
 | |
|         m_nb_dashes = 0;
 | |
|         m_dash = NULL;
 | |
|         m_join = wxJOIN_ROUND;
 | |
|         m_cap = wxCAP_ROUND;
 | |
|         m_style = style;
 | |
|     }
 | |
| 
 | |
| private:
 | |
|     // Helper to return this object itself cast to its real type T.
 | |
|     T& This() { return static_cast<T&>(*this); }
 | |
| 
 | |
|     wxColour m_colour;
 | |
|     wxBitmap m_stipple;
 | |
|     wxPenStyle m_style;
 | |
|     wxPenJoin m_join;
 | |
|     wxPenCap m_cap;
 | |
| 
 | |
|     int m_nb_dashes;
 | |
|     wxDash* m_dash;
 | |
| };
 | |
| 
 | |
| #endif // _WX_PENINFOBASE_H_
 |