]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/gdicmn.cpp
wxDbGrid additions
[wxWidgets.git] / src / common / gdicmn.cpp
index 4e35df6256aef91de8f62dfdce132dc50c971454..c6b57f5f99b384ba1024ad559af7f09a3ce87519 100644 (file)
@@ -36,6 +36,7 @@
 #include "wx/app.h"
 #include "wx/dc.h"
 #include "wx/utils.h"
+#include "wx/settings.h"
 
 #include "wx/log.h"
 #include <string.h>
@@ -135,6 +136,9 @@ wxColourDatabase::~wxColourDatabase ()
       delete col;
       node = next;
     }
+#ifdef __WXPM__
+    delete [] m_palTable;
+#endif
 }
 
 // Colour database stuff
@@ -224,11 +228,22 @@ void wxColourDatabase::Initialize ()
         {wxT("MEDIUM GREY"), 100, 100, 100},
     };
 
-    for ( size_t n = 0; n < WXSIZEOF(wxColourTable); n++ )
+    size_t      n;
+
+    for ( n = 0; n < WXSIZEOF(wxColourTable); n++ )
     {
         const wxColourDesc& cc = wxColourTable[n];
         Append(cc.name, new wxColour(cc.r,cc.g,cc.b));
     }
+#ifdef __WXPM__
+    m_palTable = new long[n];
+    for ( n = 0; n < WXSIZEOF(wxColourTable); n++ )
+    {
+        const wxColourDesc& cc = wxColourTable[n];
+        m_palTable[n] = OS2RGB(cc.r,cc.g,cc.b);
+    }
+    m_nSize = n;
+#endif
 }
 
 /*
@@ -360,13 +375,20 @@ void wxInitializeStockObjects ()
 #endif
 
   // why under MSW fonts shouldn't have the standard system size?
+/*
 #ifdef __WXMSW__
   static const int sizeFont = 10;
 #else
+#endif
+*/
+#if defined(__WXPM__) || defined(__WXMAC__)
   static const int sizeFont = 12;
+  wxNORMAL_FONT = new wxFont (sizeFont, wxMODERN, wxNORMAL, wxNORMAL);
+#else
+  wxNORMAL_FONT = new wxFont(wxSystemSettings::GetSystemFont(wxSYS_DEFAULT_GUI_FONT));
+  static const int sizeFont = wxNORMAL_FONT->GetPointSize();
 #endif
 
-  wxNORMAL_FONT = new wxFont (sizeFont, wxMODERN, wxNORMAL, wxNORMAL);
   wxSMALL_FONT = new wxFont (sizeFont - 2, wxSWISS, wxNORMAL, wxNORMAL);
   wxITALIC_FONT = new wxFont (sizeFont, wxROMAN, wxITALIC, wxNORMAL);
   wxSWISS_FONT = new wxFont (sizeFont, wxSWISS, wxNORMAL, wxNORMAL);
@@ -498,27 +520,35 @@ void wxPenList::RemovePen (wxPen * pen)
 
 wxPen *wxPenList::FindOrCreatePen (const wxColour& colour, int width, int style)
 {
-  for (wxNode * node = First (); node; node = node->Next ())
+    for (wxNode * node = First (); node; node = node->Next ())
     {
-      wxPen *each_pen = (wxPen *) node->Data ();
-      if (each_pen &&
-          each_pen->GetVisible() &&
-          each_pen->GetWidth () == width &&
-          each_pen->GetStyle () == style &&
-          each_pen->GetColour ().Red () == colour.Red () &&
-          each_pen->GetColour ().Green () == colour.Green () &&
-          each_pen->GetColour ().Blue () == colour.Blue ())
-        return each_pen;
+        wxPen *each_pen = (wxPen *) node->Data ();
+        if (each_pen &&
+                each_pen->GetVisible() &&
+                each_pen->GetWidth () == width &&
+                each_pen->GetStyle () == style &&
+                each_pen->GetColour ().Red () == colour.Red () &&
+                each_pen->GetColour ().Green () == colour.Green () &&
+                each_pen->GetColour ().Blue () == colour.Blue ())
+            return each_pen;
     }
-  wxPen *pen = new wxPen (colour, width, style);
 
-  // Yes, we can return a pointer to this in a later FindOrCreatePen call,
-  // because we created it within FindOrCreatePen. Safeguards against
-  // returning a pointer to an automatic variable and hanging on to it
-  // (dangling pointer).
-  pen->SetVisible(TRUE);
+    wxPen *pen = new wxPen (colour, width, style);
+    if ( !pen->Ok() )
+    {
+        // don't save the invalid pens in the list
+        delete pen;
 
-  return pen;
+        return NULL;
+    }
+
+    // Yes, we can return a pointer to this in a later FindOrCreatePen call,
+    // because we created it within FindOrCreatePen. Safeguards against
+    // returning a pointer to an automatic variable and hanging on to it
+    // (dangling pointer).
+    pen->SetVisible(TRUE);
+
+    return pen;
 }
 
 wxBrushList::~wxBrushList ()
@@ -541,27 +571,35 @@ void wxBrushList::AddBrush (wxBrush * brush)
 
 wxBrush *wxBrushList::FindOrCreateBrush (const wxColour& colour, int style)
 {
-  for (wxNode * node = First (); node; node = node->Next ())
+    for (wxNode * node = First (); node; node = node->Next ())
     {
-      wxBrush *each_brush = (wxBrush *) node->Data ();
-      if (each_brush &&
-          each_brush->GetVisible() &&
-          each_brush->GetStyle () == style &&
-          each_brush->GetColour ().Red () == colour.Red () &&
-          each_brush->GetColour ().Green () == colour.Green () &&
-          each_brush->GetColour ().Blue () == colour.Blue ())
-        return each_brush;
+        wxBrush *each_brush = (wxBrush *) node->Data ();
+        if (each_brush &&
+                each_brush->GetVisible() &&
+                each_brush->GetStyle () == style &&
+                each_brush->GetColour ().Red () == colour.Red () &&
+                each_brush->GetColour ().Green () == colour.Green () &&
+                each_brush->GetColour ().Blue () == colour.Blue ())
+            return each_brush;
     }
 
-  // Yes, we can return a pointer to this in a later FindOrCreateBrush call,
-  // because we created it within FindOrCreateBrush. Safeguards against
-  // returning a pointer to an automatic variable and hanging on to it
-  // (dangling pointer).
-  wxBrush *brush = new wxBrush (colour, style);
+    wxBrush *brush = new wxBrush (colour, style);
+
+    if ( !brush->Ok() )
+    {
+        // don't put the brushes we failed to create into the list
+        delete brush;
+
+        return NULL;
+    }
 
-  brush->SetVisible(TRUE);
+    brush->SetVisible(TRUE);
 
-  return brush;
+    // Yes, we can return a pointer to this in a later FindOrCreateBrush call,
+    // because we created it within FindOrCreateBrush. Safeguards against
+    // returning a pointer to an automatic variable and hanging on to it
+    // (dangling pointer).
+    return brush;
 }
 
 void wxBrushList::RemoveBrush (wxBrush * brush)
@@ -685,6 +723,20 @@ wxSize wxGetDisplaySize()
     return wxSize(x, y);
 }
 
+wxRect wxGetClientDisplayRect()
+{
+    int x, y, width, height;
+    wxClientDisplayRect(&x, &y, &width, &height);  // call plat-specific version
+    return wxRect(x, y, width, height);
+}
+
+wxSize wxGetDisplaySizeMM()
+{
+    int x, y;
+    wxDisplaySizeMM(& x, & y);
+    return wxSize(x, y);
+}
+
 wxResourceCache::~wxResourceCache ()
 {
     wxNode *node = First ();