Added dash support
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22565 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -65,6 +65,7 @@ public:
|
|||||||
wxBitmap *GetStipple() const;
|
wxBitmap *GetStipple() const;
|
||||||
|
|
||||||
WX_NSColor GetNSColor();
|
WX_NSColor GetNSColor();
|
||||||
|
int GetCocoaLineDash(const float **pattern);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __WX_COCOA_PEN_H__
|
#endif // __WX_COCOA_PEN_H__
|
||||||
|
121
src/cocoa/pen.mm
121
src/cocoa/pen.mm
@@ -27,27 +27,34 @@ public:
|
|||||||
int width = 1, int style = wxSOLID,
|
int width = 1, int style = wxSOLID,
|
||||||
const wxBitmap& stipple = wxNullBitmap);
|
const wxBitmap& stipple = wxNullBitmap);
|
||||||
wxPenRefData(const wxPenRefData& data);
|
wxPenRefData(const wxPenRefData& data);
|
||||||
~wxPenRefData() { Free(); }
|
~wxPenRefData() { FreeCocoaNSColor(); FreeCocoaDash(); }
|
||||||
|
|
||||||
void SetWidth(int Width) { m_width = Width; }
|
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 SetJoin(int Join) { m_join = Join; }
|
||||||
void SetCap(int Cap) { m_cap = Cap; }
|
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)
|
void SetDashes(int nb_dashes, const wxDash *Dash)
|
||||||
{
|
{
|
||||||
|
FreeCocoaDash();
|
||||||
m_nbDash = nb_dashes;
|
m_nbDash = nb_dashes;
|
||||||
m_dash = (wxDash *)Dash;
|
m_dash = (wxDash *)Dash;
|
||||||
}
|
}
|
||||||
void SetStipple(const wxBitmap& Stipple)
|
void SetStipple(const wxBitmap& Stipple)
|
||||||
{
|
{
|
||||||
Free();
|
FreeCocoaNSColor();
|
||||||
m_stipple = Stipple;
|
m_stipple = Stipple;
|
||||||
m_style = wxSTIPPLE;
|
m_style = wxSTIPPLE;
|
||||||
}
|
}
|
||||||
WX_NSColor GetNSColor();
|
WX_NSColor GetNSColor();
|
||||||
|
int GetCocoaLineDash(const float **pattern);
|
||||||
protected:
|
protected:
|
||||||
void Free();
|
void FreeCocoaNSColor();
|
||||||
|
void FreeCocoaDash();
|
||||||
|
|
||||||
int m_width;
|
int m_width;
|
||||||
int m_style;
|
int m_style;
|
||||||
@@ -58,11 +65,42 @@ protected:
|
|||||||
wxDash *m_dash;
|
wxDash *m_dash;
|
||||||
wxBitmap m_stipple;
|
wxBitmap m_stipple;
|
||||||
WX_NSColor m_cocoaNSColor;
|
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:
|
private:
|
||||||
// Don't allow assignment
|
// Don't allow assignment
|
||||||
wxPenRefData& operator=(const wxPenRefData& data);
|
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)
|
#define M_PENDATA ((wxPenRefData *)m_refData)
|
||||||
|
|
||||||
inline wxPenRefData::wxPenRefData(const wxColour& colour,
|
inline wxPenRefData::wxPenRefData(const wxColour& colour,
|
||||||
@@ -77,6 +115,7 @@ inline wxPenRefData::wxPenRefData(const wxColour& colour,
|
|||||||
m_dash = 0;
|
m_dash = 0;
|
||||||
m_stipple = stipple;
|
m_stipple = stipple;
|
||||||
m_cocoaNSColor = nil;
|
m_cocoaNSColor = nil;
|
||||||
|
m_cocoaDash = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline wxPenRefData::wxPenRefData(const wxPenRefData& data)
|
inline wxPenRefData::wxPenRefData(const wxPenRefData& data)
|
||||||
@@ -92,12 +131,18 @@ inline wxPenRefData::wxPenRefData(const wxPenRefData& data)
|
|||||||
m_cocoaNSColor = [data.m_cocoaNSColor retain];
|
m_cocoaNSColor = [data.m_cocoaNSColor retain];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void wxPenRefData::Free()
|
inline void wxPenRefData::FreeCocoaNSColor()
|
||||||
{
|
{
|
||||||
[m_cocoaNSColor release];
|
[m_cocoaNSColor release];
|
||||||
m_cocoaNSColor = nil;
|
m_cocoaNSColor = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void wxPenRefData::FreeCocoaDash()
|
||||||
|
{
|
||||||
|
delete m_cocoaDash;
|
||||||
|
m_cocoaDash = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
inline WX_NSColor wxPenRefData::GetNSColor()
|
inline WX_NSColor wxPenRefData::GetNSColor()
|
||||||
{
|
{
|
||||||
if(!m_cocoaNSColor)
|
if(!m_cocoaNSColor)
|
||||||
@@ -136,6 +181,61 @@ inline WX_NSColor wxPenRefData::GetNSColor()
|
|||||||
return m_cocoaNSColor;
|
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; i<count; i++)
|
||||||
|
m_cocoaDash[i] = m_dash[i];
|
||||||
|
}
|
||||||
|
*pattern = m_cocoaDash;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case wxTRANSPARENT:
|
||||||
|
case wxSTIPPLE:
|
||||||
|
case wxBDIAGONAL_HATCH:
|
||||||
|
case wxCROSSDIAG_HATCH:
|
||||||
|
case wxFDIAGONAL_HATCH:
|
||||||
|
case wxCROSS_HATCH:
|
||||||
|
case wxHORIZONTAL_HATCH:
|
||||||
|
case wxVERTICAL_HATCH:
|
||||||
|
case wxSOLID:
|
||||||
|
default:
|
||||||
|
count = 0;
|
||||||
|
if(pattern)
|
||||||
|
*pattern = NULL;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
// wxPen
|
// wxPen
|
||||||
// ========================================================================
|
// ========================================================================
|
||||||
@@ -258,3 +358,12 @@ WX_NSColor wxPen::GetNSColor()
|
|||||||
return (M_PENDATA ? M_PENDATA->GetNSColor() : nil);
|
return (M_PENDATA ? M_PENDATA->GetNSColor() : nil);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wxPen::GetCocoaLineDash(const float **pattern)
|
||||||
|
{
|
||||||
|
if(M_PENDATA)
|
||||||
|
return M_PENDATA->GetCocoaLineDash(pattern);
|
||||||
|
if(pattern)
|
||||||
|
*pattern = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user