]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/pen.cpp
fixed incorrect GetTextExtent for wxTELETYPE font
[wxWidgets.git] / src / os2 / pen.cpp
index 1e3ced2a3a484c777157da7da10c70737831a760..1e99b340b287a0c579d6bfb1f6f5fb76eb8935c1 100644 (file)
@@ -1,25 +1,30 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        pen.cpp
 // Purpose:     wxPen
-// Author:      AUTHOR
+// Author:      David Webster
 // Modified by:
-// Created:     ??/??/98
+// Created:     10/10/99
 // RCS-ID:      $Id$
-// Copyright:   (c) AUTHOR
-// Licence:    wxWindows licence
+// Copyright:   (c) David Webster
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "pen.h"
-#endif
+// 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"
+#endif
+
+#include "wx/os2/private.h"
+#include "assert.h"
 
-#if !USE_SHARED_LIBRARIES
 IMPLEMENT_DYNAMIC_CLASS(wxPen, wxGDIObject)
-#endif
 
 wxPenRefData::wxPenRefData()
 {
@@ -28,10 +33,8 @@ wxPenRefData::wxPenRefData()
     m_join = wxJOIN_ROUND ;
     m_cap = wxCAP_ROUND ;
     m_nbDash = 0 ;
-    m_dash = 0 ;
-/* TODO: null data
+    m_dash = (wxPMDash*)NULL;
     m_hPen = 0;
-*/
 }
 
 wxPenRefData::wxPenRefData(const wxPenRefData& data)
@@ -73,13 +76,22 @@ wxPen::wxPen(const wxColour& col, int Width, int Style)
     m_refData = new wxPenRefData;
 
     M_PENDATA->m_colour = col;
+//  M_PENDATA->m_stipple = NULL;
     M_PENDATA->m_width = Width;
     M_PENDATA->m_style = Style;
     M_PENDATA->m_join = wxJOIN_ROUND ;
     M_PENDATA->m_cap = wxCAP_ROUND ;
     M_PENDATA->m_nbDash = 0 ;
-    M_PENDATA->m_dash = 0 ;
-
+    M_PENDATA->m_dash = (wxPMDash*)NULL;
+    M_PENDATA->m_hPen = 0 ;
+
+// TODO:
+/*
+    if ((Style == wxDOT) || (Style == wxLONG_DASH) ||
+        (Style == wxSHORT_DASH) || (Style == wxDOT_DASH) ||
+        (Style == wxUSER_DASH))
+        M_PENDATA->m_width = 1;
+*/
     RealizeResource();
 
     if ( wxThePenList )
@@ -96,7 +108,8 @@ wxPen::wxPen(const wxBitmap& stipple, int Width)
     M_PENDATA->m_join = wxJOIN_ROUND ;
     M_PENDATA->m_cap = wxCAP_ROUND ;
     M_PENDATA->m_nbDash = 0 ;
-    M_PENDATA->m_dash = 0 ;
+    M_PENDATA->m_dash = (wxPMDash*)NULL;
+    M_PENDATA->m_hPen = 0 ;
 
     RealizeResource();
 
@@ -104,19 +117,49 @@ wxPen::wxPen(const wxBitmap& stipple, int Width)
         wxThePenList->AddPen(this);
 }
 
+bool wxPen::RealizeResource()
+{
+    // TODO: create actual pen
+    return FALSE;
+}
+
+WXHANDLE wxPen::GetResourceHandle()
+{
+    if ( !M_PENDATA )
+        return 0;
+    else
+        return (WXHANDLE)M_PENDATA->m_hPen;
+}
+
+bool wxPen::FreeResource(bool force)
+{
+    if (M_PENDATA && (M_PENDATA->m_hPen != 0))
+    {
+// TODO:        DeleteObject((HPEN) M_PENDATA->m_hPen);
+        M_PENDATA->m_hPen = 0;
+        return TRUE;
+    }
+    else return FALSE;
+}
+
+bool wxPen::IsFree() const
+{
+  return (M_PENDATA && M_PENDATA->m_hPen == 0);
+}
+
 void wxPen::Unshare()
 {
-       // Don't change shared data
-       if (!m_refData)
+    // Don't change shared data
+    if (!m_refData)
     {
-               m_refData = new wxPenRefData();
-       }
+        m_refData = new wxPenRefData();
+    }
     else
     {
-               wxPenRefData* ref = new wxPenRefData(*(wxPenRefData*)m_refData);
-               UnRef();
-               m_refData = ref;
-       }
+        wxPenRefData* ref = new wxPenRefData(*(wxPenRefData*)m_refData);
+        UnRef();
+        m_refData = ref;
+    }
 }
 
 void wxPen::SetColour(const wxColour& col)
@@ -124,7 +167,7 @@ void wxPen::SetColour(const wxColour& col)
     Unshare();
 
     M_PENDATA->m_colour = col;
-  
+
     RealizeResource();
 }
 
@@ -133,7 +176,7 @@ void wxPen::SetColour(unsigned char r, unsigned char g, unsigned char b)
     Unshare();
 
     M_PENDATA->m_colour.Set(r, g, b);
-  
+
     RealizeResource();
 }
 
@@ -161,7 +204,7 @@ void wxPen::SetStipple(const wxBitmap& Stipple)
 
     M_PENDATA->m_stipple = Stipple;
     M_PENDATA->m_style = wxSTIPPLE;
-  
+
     RealizeResource();
 }
 
@@ -170,8 +213,8 @@ void wxPen::SetDashes(int nb_dashes, const wxDash *Dash)
     Unshare();
 
     M_PENDATA->m_nbDash = nb_dashes;
-    M_PENDATA->m_dash = (wxDash *)Dash;
-  
+    M_PENDATA->m_dash = (wxPMDash *)Dash;
+
     RealizeResource();
 }
 
@@ -193,10 +236,48 @@ void wxPen::SetCap(int Cap)
     RealizeResource();
 }
 
-bool wxPen::RealizeResource()
+int wx2os2PenStyle(int wx_style)
 {
-    // TODO: create actual pen
-    return FALSE;
+    int cstyle = 0;
+// TODO:
+/*
+    switch (wx_style)
+    {
+       case wxDOT:
+           cstyle = PS_DOT;
+       break;
+
+       case wxDOT_DASH:
+          cstyle = PS_DASHDOT;
+          break;
+
+       case wxSHORT_DASH:
+       case wxLONG_DASH:
+           cstyle = PS_DASH;
+          break;
+
+       case wxTRANSPARENT:
+           cstyle = PS_NULL;
+          break;
+
+       case wxUSER_DASH:
+#ifdef __WIN32__
+           // Win32s doesn't have PS_USERSTYLE
+          if (wxGetOsVersion()==wxWINDOWS_NT || wxGetOsVersion()==wxWIN95)
+              cstyle = PS_USERSTYLE;
+          else
+               cstyle = PS_DOT; // We must make a choice... This is mine!
+#else
+           cstyle = PS_DASH;
+#endif
+           break;
+       case wxSOLID:
+       default:
+           cstyle = PS_SOLID;
+           break;
+   }
+*/
+   return cstyle;
 }