1/////////////////////////////////////////////////////////////////////////////
2// Name:        src/dfb/pen.cpp
3// Purpose:     wxPen class implementation
4// Author:      Vaclav Slavik
5// Created:     2006-08-04
6// RCS-ID:      $Id: pen.cpp 41751 2006-10-08 21:56:55Z VZ $
7// Copyright:   (c) 2006 REA Elektronik GmbH
8// Licence:     wxWindows licence
9/////////////////////////////////////////////////////////////////////////////
10
11// For compilers that support precompilation, includes "wx.h".
12#include "wx/wxprec.h"
13
14#ifdef __BORLANDC__
15    #pragma hdrstop
16#endif
17
18#include "wx/pen.h"
19
20#ifndef WX_PRECOMP
21    #include "wx/bitmap.h"
22    #include "wx/colour.h"
23#endif
24
25//-----------------------------------------------------------------------------
26// wxPen
27//-----------------------------------------------------------------------------
28
29class wxPenRefData: public wxObjectRefData
30{
31public:
32    wxPenRefData(const wxColour& clr = wxNullColour, int style = wxSOLID)
33    {
34        m_colour = clr;
35        SetStyle(style);
36    }
37
38    wxPenRefData(const wxPenRefData& data)
39        : m_style(data.m_style), m_colour(data.m_colour) {}
40
41    void SetStyle(int style)
42    {
43        if ( style != wxSOLID && style != wxTRANSPARENT )
44        {
45            wxFAIL_MSG( _T("only wxSOLID and wxTRANSPARENT styles are supported") );
46            style = wxSOLID;
47        }
48
49        m_style = style;
50    }
51
52    int            m_style;
53    wxColour       m_colour;
54};
55
56//-----------------------------------------------------------------------------
57
58#define M_PENDATA ((wxPenRefData *)m_refData)
59
60IMPLEMENT_DYNAMIC_CLASS(wxPen, wxGDIObject)
61
62wxPen::wxPen(const wxColour &colour, int width, int style)
63{
64    wxASSERT_MSG( width <= 1, _T("only width=0,1 are supported") );
65
66    m_refData = new wxPenRefData(colour, style);
67}
68
69wxPen::wxPen(const wxBitmap& WXUNUSED(stipple), int WXUNUSED(width))
70{
71    wxFAIL_MSG( _T("stipple pens not supported") );
72
73    m_refData = new wxPenRefData();
74}
75
76bool wxPen::operator==(const wxPen& pen) const
77{
78#warning "this is incorrect (MGL too)"
79    return m_refData == pen.m_refData;
80}
81
82void wxPen::SetColour(const wxColour &colour)
83{
84    AllocExclusive();
85    M_PENDATA->m_colour = colour;
86}
87
88void wxPen::SetDashes(int WXUNUSED(number_of_dashes), const wxDash *WXUNUSED(dash))
89{
90    wxFAIL_MSG( _T("SetDashes not implemented") );
91}
92
93void wxPen::SetColour(unsigned char red, unsigned char green, unsigned char blue)
94{
95    AllocExclusive();
96    M_PENDATA->m_colour.Set(red, green, blue);
97}
98
99void wxPen::SetCap(int WXUNUSED(capStyle))
100{
101    wxFAIL_MSG( _T("SetCap not implemented") );
102}
103
104void wxPen::SetJoin(int WXUNUSED(joinStyle))
105{
106    wxFAIL_MSG( _T("SetJoin not implemented") );
107}
108
109void wxPen::SetStyle(int style)
110{
111    AllocExclusive();
112    M_PENDATA->SetStyle(style);
113}
114
115void wxPen::SetStipple(const wxBitmap& WXUNUSED(stipple))
116{
117    wxFAIL_MSG( _T("SetStipple not implemented") );
118}
119
120void wxPen::SetWidth(int width)
121{
122    wxASSERT_MSG( width <= 1, _T("only width=0,1 are implemented") );
123}
124
125int wxPen::GetDashes(wxDash **ptr) const
126{
127    wxFAIL_MSG( _T("GetDashes not implemented") );
128
129    *ptr = NULL;
130    return 0;
131}
132
133int wxPen::GetDashCount() const
134{
135    wxFAIL_MSG( _T("GetDashCount not implemented") );
136
137    return 0;
138}
139
140wxDash* wxPen::GetDash() const
141{
142    wxFAIL_MSG( _T("GetDash not implemented") );
143
144    return NULL;
145}
146
147int wxPen::GetCap() const
148{
149    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
150
151    wxFAIL_MSG( _T("GetCap not implemented") );
152    return -1;
153}
154
155int wxPen::GetJoin() const
156{
157    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
158
159    wxFAIL_MSG( _T("GetJoin not implemented") );
160    return -1;
161}
162
163int wxPen::GetStyle() const
164{
165    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
166
167    return M_PENDATA->m_style;
168}
169
170int wxPen::GetWidth() const
171{
172    wxCHECK_MSG( Ok(), -1, wxT("invalid pen") );
173
174    return 1;
175}
176
177wxColour &wxPen::GetColour() const
178{
179    wxCHECK_MSG( Ok(), wxNullColour, wxT("invalid pen") );
180
181    return M_PENDATA->m_colour;
182}
183
184wxBitmap *wxPen::GetStipple() const
185{
186    wxCHECK_MSG( Ok(), NULL, wxT("invalid pen") );
187
188    wxFAIL_MSG( _T("GetStipple not implemented") );
189    return NULL;
190}
191
192bool wxPen::IsOk() const
193{
194    return ((m_refData) && M_PENDATA->m_colour.Ok());
195}
196
197wxObjectRefData *wxPen::CreateRefData() const
198{
199    return new wxPenRefData;
200}
201
202wxObjectRefData *wxPen::CloneRefData(const wxObjectRefData *data) const
203{
204    return new wxPenRefData(*(wxPenRefData *)data);
205}
206