+wxGDIRefData *wxPen::CreateGDIRefData() const
+{
+ return new wxPenRefData;
+}
+
+wxGDIRefData *wxPen::CloneGDIRefData(const wxGDIRefData *data) const
+{
+ return new wxPenRefData(*wx_static_cast(const wxPenRefData *, data));
+}
+
+bool wxPen::operator==(const wxPen& pen) const
+{
+ const wxPenRefData *penData = (wxPenRefData *)pen.m_refData;
+
+ // an invalid pen is only equal to another invalid pen
+ return m_refData ? penData && *M_PENDATA == *penData : !penData;
+}
+
+wxColour& wxPen::GetColour() const
+{
+ return (M_PENDATA ? M_PENDATA->m_colour : wxNullColour);
+}
+
+int wxPen::GetWidth() const
+{
+ return (M_PENDATA ? M_PENDATA->m_width : 0);
+}
+
+wxPenStyle wxPen::GetStyle() const
+{
+ return (M_PENDATA ? M_PENDATA->m_style : wxPENSTYLE_SOLID);
+}
+
+wxPenJoin wxPen::GetJoin() const
+{
+ return (M_PENDATA ? M_PENDATA->m_join : wxJOIN_INVALID);
+}
+
+wxPenCap wxPen::GetCap() const
+{
+ return (M_PENDATA ? M_PENDATA->m_cap : wxCAP_INVALID);
+}
+
+int wxPen::GetDashes(wxDash **ptr) const
+{
+ *ptr = (M_PENDATA ? M_PENDATA->m_dash : (wxDash*) NULL); return (M_PENDATA ? M_PENDATA->m_nbDash : 0);
+}
+
+wxBitmap *wxPen::GetStipple() const
+{
+ return (M_PENDATA ? (& M_PENDATA->m_stipple) : (wxBitmap*) NULL);
+}
+