]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/pen.cpp
build fix (looking at buildbot)
[wxWidgets.git] / src / os2 / pen.cpp
index b26c80e4aba225fc1483efad7c1ed4b8a6eeb953..711a62a679fba745badbe59a45119d1aba032d0f 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        pen.cpp
+// Name:        src/os2/pen.cpp
 // Purpose:     wxPen
 // Author:      David Webster
 // Modified by:
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
-#ifndef WX_PRECOMP
-#include <stdio.h>
-#include "wx/setup.h"
-#include "wx/list.h"
-#include "wx/utils.h"
-#include "wx/app.h"
 #include "wx/pen.h"
+
+#ifndef WX_PRECOMP
+    #include <stdio.h>
+    #include "wx/list.h"
+    #include "wx/utils.h"
+    #include "wx/app.h"
+    #include "wx/log.h"
 #endif
 
 #include "wx/os2/private.h"
@@ -32,6 +33,8 @@ wxPenRefData::wxPenRefData()
     m_nWidth  = 1;
     m_nJoin   = wxJOIN_ROUND ;
     m_nCap    = wxCAP_ROUND ;
+    m_nbDash  = 0 ;
+    m_dash    = (wxDash*)NULL;
     m_hPen    = 0L;
 } // end of wxPenRefData::wxPenRefData
 
@@ -43,6 +46,8 @@ wxPenRefData::wxPenRefData(
     m_nWidth  = rData.m_nWidth;
     m_nJoin   = rData.m_nJoin;
     m_nCap    = rData.m_nCap;
+    m_nbDash  = rData.m_nbDash;
+    m_dash    = rData.m_dash;
     m_vColour = rData.m_vColour;
     m_hPen    = 0L;
 } // end of wxPenRefData::wxPenRefData
@@ -56,21 +61,17 @@ wxPenRefData::~wxPenRefData()
 //
 wxPen::wxPen()
 {
-    if ( wxThePenList )
-        wxThePenList->AddPen(this);
 } // end of wxPen::wxPen
 
 wxPen::~wxPen()
 {
-    if (wxThePenList)
-        wxThePenList->RemovePen(this);
 } // end of wxPen::wxPen
 
 // Should implement Create
 wxPen::wxPen(
   const wxColour&                   rColour
 , int                               nWidth
-, int                               nStyle
+, wxPenStyle                        nStyle
 )
 {
     m_refData = new wxPenRefData;
@@ -83,11 +84,22 @@ wxPen::wxPen(
     M_PENDATA->m_hPen    = 0L;
 
     RealizeResource();
-
-    if ( wxThePenList )
-        wxThePenList->AddPen(this);
 } // end of wxPen::wxPen
 
+wxPen::wxPen(const wxColour& colour, int width, wxBrushStyle style)
+{
+    m_refData = new wxPenRefData;
+
+    M_PENDATA->m_vColour = colour;
+    M_PENDATA->m_nWidth  = width;
+    M_PENDATA->m_nStyle  = (wxPenStyle)nStyle;
+    M_PENDATA->m_nJoin   = wxJOIN_ROUND ;
+    M_PENDATA->m_nCap    = wxCAP_ROUND ;
+    M_PENDATA->m_hPen    = 0L;
+
+    RealizeResource();
+}
+
 wxPen::wxPen(
   const wxBitmap&                   rStipple
 , int                               nWidth
@@ -103,11 +115,12 @@ wxPen::wxPen(
     M_PENDATA->m_hPen     = 0;
 
     RealizeResource();
-
-    if ( wxThePenList )
-        wxThePenList->AddPen(this);
 } // end of wxPen::wxPen
 
+int wx2os2PenStyle(
+  wxPenStyle                               nWxStyle
+);
+
 bool wxPen::RealizeResource()
 {
     BOOL                            bOk;
@@ -146,16 +159,16 @@ bool wxPen::RealizeResource()
         {
             vError = ::WinGetLastError(vHabmain);
             sError = wxPMErrorToStr(vError);
-            wxLogError("Unable to set current color table to RGB mode. Error: %s\n", sError);
-            return FALSE;
+            wxLogError(_T("Unable to set current color table to RGB mode. Error: %s\n"), sError.c_str());
+            return false;
         }
         if (M_PENDATA->m_nStyle == wxTRANSPARENT)
         {
-            return TRUE;
+            return true;
         }
 
-        COLORREF                    vPmColour = 0L;
-        USHORT                      uLineType = wx2os2PenStyle(M_PENDATA->m_nStyle);
+        COLORREF vPmColour = 0L;
+        USHORT   uLineType = (USHORT)wx2os2PenStyle(M_PENDATA->m_nStyle);
 
         vPmColour = M_PENDATA->m_vColour.GetPixel();
 
@@ -194,6 +207,8 @@ bool wxPen::RealizeResource()
         }
         m_vLineBundle.lColor     = (LONG)vPmColour;
         m_vLineBundle.usMixMode  = FM_OVERPAINT;
+        if (M_PENDATA->m_nWidth < 1)
+            M_PENDATA->m_nWidth = 1;
         m_vLineBundle.fxWidth    = M_PENDATA->m_nWidth;
         m_vLineBundle.lGeomWidth = M_PENDATA->m_nWidth;
         m_vLineBundle.usType     = uLineType;
@@ -210,8 +225,8 @@ bool wxPen::RealizeResource()
         {
             vError = ::WinGetLastError(vHabmain);
             sError = wxPMErrorToStr(vError);
-            wxLogError("Can't set Gpi attributes for a LINEBUNDLE. Error: %s\n", sError);
-            return FALSE;
+            wxLogError(_T("Can't set Gpi attributes for a LINEBUNDLE. Error: %s\n"), sError.c_str());
+            return false;
         }
 
         ULONG                           flAttrMask = 0L;
@@ -295,14 +310,15 @@ bool wxPen::RealizeResource()
         {
             vError = ::WinGetLastError(vHabmain);
             sError = wxPMErrorToStr(vError);
-            wxLogError("Can't set Gpi attributes for an AREABUNDLE. Error: %s\n", sError);
+            wxLogError(_T("Can't set Gpi attributes for an AREABUNDLE. Error: %s\n"), sError.c_str());
         }
-        return bOk;
+
+        return (bool)bOk;
     }
-    return FALSE;
+    return false;
 } // end of wxPen::RealizeResource
 
-WXHANDLE wxPen::GetResourceHandle()
+WXHANDLE wxPen::GetResourceHandle() const
 {
     if (!M_PENDATA)
         return 0;
@@ -310,16 +326,14 @@ WXHANDLE wxPen::GetResourceHandle()
         return (WXHANDLE)M_PENDATA->m_hPen;
 } // end of wxPen::GetResourceHandle
 
-bool wxPen::FreeResource(
-  bool                              bForce
-)
+bool wxPen::FreeResource( bool WXUNUSED(bForce) )
 {
     if (M_PENDATA && (M_PENDATA->m_hPen != 0))
     {
         M_PENDATA->m_hPen = 0;
-        return TRUE;
+        return true;
     }
-    else return FALSE;
+    else return false;
 } // end of wxPen::FreeResource
 
 bool wxPen::IsFree() const
@@ -327,46 +341,33 @@ bool wxPen::IsFree() const
     return (M_PENDATA && M_PENDATA->m_hPen == 0);
 }
 
-void wxPen::Unshare()
+wxGDIRefData* wxPen::CreateGDIRefData() const
 {
-    // Don't change shared data
-    if (!m_refData)
-    {
-        m_refData = new wxPenRefData();
-    }
-    else
-    {
-        wxPenRefData* ref = new wxPenRefData(*(wxPenRefData*)m_refData);
-        UnRef();
-        m_refData = ref;
-    }
-} // end of wxPen::Unshare
+    return new wxPenRefData;
+}
 
-void wxPen::SetColour(
-  const wxColour&                   rColour
-)
+wxGDIRefData* wxPen::CloneGDIRefData(const wxGDIRefData* data) const
 {
-    Unshare();
+    return new wxPenRefData(*wx_static_cast(const wxPenRefData*, data));
+}
+
+void wxPen::SetColour( const wxColour& rColour )
+{
+    AllocExclusive();
     M_PENDATA->m_vColour = rColour;
     RealizeResource();
 } // end of wxPen::SetColour
 
-void wxPen::SetColour(
-  unsigned char                     cRed
-, unsigned char                     cGreen
-, unsigned char                     cBlue
-)
+void wxPen::SetColour( unsigned char cRed, unsigned char cGreen, unsigned char cBlue)
 {
-    Unshare();
+    AllocExclusive();
     M_PENDATA->m_vColour.Set(cRed, cGreen, cBlue);
     RealizeResource();
 } // end of wxPen::SetColour
 
-void wxPen::SetPS(
-  HPS                               hPS
-)
+void wxPen::SetPS( HPS hPS )
 {
-    Unshare();
+    AllocExclusive();
     if (M_PENDATA->m_hPen)
         ::GpiDestroyPS(M_PENDATA->m_hPen);
     M_PENDATA->m_hPen = hPS;
@@ -377,16 +378,16 @@ void wxPen::SetWidth(
   int                               nWidth
 )
 {
-    Unshare();
+    AllocExclusive();
     M_PENDATA->m_nWidth = nWidth;
     RealizeResource();
 } // end of wxPen::SetWidth
 
 void wxPen::SetStyle(
-  int                               nStyle
+  wxPenStyle                               nStyle
 )
 {
-    Unshare();
+    AllocExclusive();
     M_PENDATA->m_nStyle = nStyle;
     RealizeResource();
 } // end of wxPen::SetStyle
@@ -395,16 +396,14 @@ void wxPen::SetStipple(
   const wxBitmap&                   rStipple
 )
 {
-    Unshare();
+    AllocExclusive();
     M_PENDATA->m_vStipple = rStipple;
     M_PENDATA->m_nStyle = wxSTIPPLE;
     RealizeResource();
 } // end of wxPen::SetStipple
 
-void wxPen::SetDashes(
-  int                               nNbDashes
-, const wxDash*                     pDash
-)
+void wxPen::SetDashes( int WXUNUSED(nNbDashes),
+                       const wxDash* WXUNUSED(pDash) )
 {
     //
     // Does nothing under OS/2
@@ -412,25 +411,25 @@ void wxPen::SetDashes(
 } // end of wxPen::SetDashes
 
 void wxPen::SetJoin(
-  int                               nJoin
+  wxPenJoin                               nJoin
 )
 {
-    Unshare();
+    AllocExclusive();
     M_PENDATA->m_nJoin = nJoin;
     RealizeResource();
 } // end of wxPen::SetJoin
 
 void wxPen::SetCap(
-  int                               nCap
+  wxPenCap                               nCap
 )
 {
-    Unshare();
+    AllocExclusive();
     M_PENDATA->m_nCap = nCap;
     RealizeResource();
 } // end of wxPen::SetCap
 
 int wx2os2PenStyle(
-  int                               nWxStyle
+  wxPenStyle                               nWxStyle
 )
 {
     int                             nPMStyle = 0;
@@ -468,5 +467,3 @@ int wx2os2PenStyle(
     }
     return nPMStyle;
 } // end of wx2os2PenStyle
-
-