From 1f631557e0eb3c640ac296ad44c7aeaef269d957 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Mon, 4 Aug 2003 06:16:15 +0000 Subject: [PATCH] Added dash support git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22565 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cocoa/pen.h | 1 + src/cocoa/pen.mm | 121 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 116 insertions(+), 6 deletions(-) diff --git a/include/wx/cocoa/pen.h b/include/wx/cocoa/pen.h index 6756e78083..01d4ef5d91 100644 --- a/include/wx/cocoa/pen.h +++ b/include/wx/cocoa/pen.h @@ -65,6 +65,7 @@ public: wxBitmap *GetStipple() const; WX_NSColor GetNSColor(); + int GetCocoaLineDash(const float **pattern); }; #endif // __WX_COCOA_PEN_H__ diff --git a/src/cocoa/pen.mm b/src/cocoa/pen.mm index 02fb79cb31..5446e50d4c 100644 --- a/src/cocoa/pen.mm +++ b/src/cocoa/pen.mm @@ -27,27 +27,34 @@ public: int width = 1, int style = wxSOLID, const wxBitmap& stipple = wxNullBitmap); wxPenRefData(const wxPenRefData& data); - ~wxPenRefData() { Free(); } + ~wxPenRefData() { FreeCocoaNSColor(); FreeCocoaDash(); } void SetWidth(int Width) { m_width = Width; } - void SetStyle(int Style) { m_style = Style; } + void SetStyle(int Style) + { FreeCocoaNSColor(); + FreeCocoaDash(); + m_style = Style; + } void SetJoin(int Join) { m_join = Join; } void SetCap(int Cap) { m_cap = Cap; } - void SetColour(const wxColour& col) { Free(); m_colour = col; } + void SetColour(const wxColour& col) { FreeCocoaNSColor(); m_colour = col; } void SetDashes(int nb_dashes, const wxDash *Dash) { + FreeCocoaDash(); m_nbDash = nb_dashes; m_dash = (wxDash *)Dash; } void SetStipple(const wxBitmap& Stipple) { - Free(); + FreeCocoaNSColor(); m_stipple = Stipple; m_style = wxSTIPPLE; } WX_NSColor GetNSColor(); + int GetCocoaLineDash(const float **pattern); protected: - void Free(); + void FreeCocoaNSColor(); + void FreeCocoaDash(); int m_width; int m_style; @@ -58,11 +65,42 @@ protected: wxDash *m_dash; wxBitmap m_stipple; WX_NSColor m_cocoaNSColor; + float *m_cocoaDash; + + // Predefined dash patterns + static const int scm_countDot; + static const float scm_patternDot[]; + static const int scm_countLongDash; + static const float scm_patternLongDash[]; + static const int scm_countShortDash; + static const float scm_patternShortDash[]; + static const int scm_countDotDash; + static const float scm_patternDotDash[]; private: // Don't allow assignment wxPenRefData& operator=(const wxPenRefData& data); }; +const int wxPenRefData::scm_countDot = 1; +const float wxPenRefData::scm_patternDot[] = { + 1.0 +}; +const int wxPenRefData::scm_countLongDash = 1; +const float wxPenRefData::scm_patternLongDash[] = { + 10.0 +}; +const int wxPenRefData::scm_countShortDash = 1; +const float wxPenRefData::scm_patternShortDash[] = { + 5.0 +}; +const int wxPenRefData::scm_countDotDash = 4; +const float wxPenRefData::scm_patternDotDash[] = { + 1.0 +, 1.0 +, 5.0 +, 1.0 +}; + #define M_PENDATA ((wxPenRefData *)m_refData) inline wxPenRefData::wxPenRefData(const wxColour& colour, @@ -77,6 +115,7 @@ inline wxPenRefData::wxPenRefData(const wxColour& colour, m_dash = 0; m_stipple = stipple; m_cocoaNSColor = nil; + m_cocoaDash = NULL; } inline wxPenRefData::wxPenRefData(const wxPenRefData& data) @@ -92,12 +131,18 @@ inline wxPenRefData::wxPenRefData(const wxPenRefData& data) m_cocoaNSColor = [data.m_cocoaNSColor retain]; } -inline void wxPenRefData::Free() +inline void wxPenRefData::FreeCocoaNSColor() { [m_cocoaNSColor release]; m_cocoaNSColor = nil; } +inline void wxPenRefData::FreeCocoaDash() +{ + delete m_cocoaDash; + m_cocoaDash = NULL; +} + inline WX_NSColor wxPenRefData::GetNSColor() { if(!m_cocoaNSColor) @@ -136,6 +181,61 @@ inline WX_NSColor wxPenRefData::GetNSColor() return m_cocoaNSColor; } +int wxPenRefData::GetCocoaLineDash(const float **pattern) +{ + int count; + switch( m_style ) + { + case wxDOT: + count = scm_countDot; + if(pattern) + *pattern = scm_patternDot; + break; + case wxLONG_DASH: + count = scm_countLongDash; + if(pattern) + *pattern = scm_patternLongDash; + break; + case wxSHORT_DASH: + count = scm_countShortDash; + if(pattern) + *pattern = scm_patternShortDash; + break; + case wxDOT_DASH: + count = scm_countDotDash; + if(pattern) + *pattern = scm_patternDotDash; + break; + case wxUSER_DASH: + count = m_nbDash; + if(pattern) + { + if(!m_cocoaDash) + { + m_cocoaDash = new float[count]; + for(int i=0; iGetNSColor() : nil); } +int wxPen::GetCocoaLineDash(const float **pattern) +{ + if(M_PENDATA) + return M_PENDATA->GetCocoaLineDash(pattern); + if(pattern) + *pattern = NULL; + return 0; +} + -- 2.45.2