]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/tbarsmpl.cpp
workaround for MGL's weirdness: won't render rectangles of w=1 or h=1
[wxWidgets.git] / src / generic / tbarsmpl.cpp
index 53f382c4021c609cb56c3f8f2af02588b5a9396b..dd79b926b4ec3d110576f7151b4b9830f165c624 100644 (file)
@@ -85,6 +85,12 @@ public:
 
 IMPLEMENT_DYNAMIC_CLASS(wxToolBarSimple, wxToolBarBase)
 
+#if !wxUSE_TOOLBAR_NATIVE || defined(__WXUNIVERSAL__)
+    #include "wx/toolbar.h"
+
+    IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarSimple)
+#endif
+
 BEGIN_EVENT_TABLE(wxToolBarSimple, wxToolBarBase)
     EVT_SIZE(wxToolBarSimple::OnSize)
     EVT_SCROLL(wxToolBarSimple::OnScroll)
@@ -228,8 +234,7 @@ bool wxToolBarSimple::Create(wxWindow *parent,
         return FALSE;
 
     // Set it to grey (or other 3D face colour)
-    wxSystemSettings settings;
-    SetBackgroundColour(settings.GetSystemColour(wxSYS_COLOUR_3DFACE));
+    SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE));
 
     if ( GetWindowStyleFlag() & wxTB_VERTICAL )
     {
@@ -503,17 +508,19 @@ void wxToolBarSimple::DrawTool(wxDC& dc, wxToolBarToolBase *toolBase)
     PrepareDC(dc);
 
     wxPen dark_grey_pen(wxColour( 85,85,85 ), 1, wxSOLID);
-    wxPen white_pen("WHITE", 1, wxSOLID);
-    wxPen black_pen("BLACK", 1, wxSOLID);
+    wxPen white_pen(wxT("WHITE"), 1, wxSOLID);
+    wxPen black_pen(wxT("BLACK"), 1, wxSOLID);
 
     wxBitmap bitmap = tool->GetBitmap();
 
     if ( bitmap.Ok() )
     {
+#if wxUSE_PALETTE
 #ifndef __WXGTK__
         if (bitmap.GetPalette())
             memDC.SetPalette(*bitmap.GetPalette());
 #endif
+#endif // wxUSE_PALETTE
 
         int ax = (int)tool->m_x,
         ay = (int)tool->m_y,
@@ -546,9 +553,13 @@ void wxToolBarSimple::DrawTool(wxDC& dc, wxToolBarToolBase *toolBase)
                     &memDC, 0, 0);
         }
         memDC.SelectObject(wxNullBitmap);
+
+#if wxUSE_PALETTE
 #ifndef __WXGTK__
-        memDC.SetPalette(wxNullPalette);
+        if (bitmap.GetPalette())
+            memDC.SetPalette(wxNullPalette);
 #endif
+#endif // wxUSE_PALETTE
     }
     // No second bitmap, so draw a thick line around bitmap, or invert if mono
     else if ( tool->IsToggled() )
@@ -601,7 +612,7 @@ void wxToolBarSimple::DrawTool(wxDC& dc, wxToolBarToolBase *toolBase)
                 wxCoord y = tool->m_y;
                 wxCoord w = bitmap.GetWidth();
                 wxCoord h = bitmap.GetHeight();
-                wxPen thick_black_pen("BLACK", 3, wxSOLID);
+                wxPen thick_black_pen(wxT("BLACK"), 3, wxSOLID);
 
                 memDC.SelectObject(bitmap);
                 dc.SetClippingRegion(tool->m_x, tool->m_y, w, h);
@@ -682,7 +693,8 @@ void wxToolBarSimple::SpringUpButton(int id)
 
     if ( tool && tool->CanBeToggled() )
     {
-        tool->Toggle();
+        if (tool->IsToggled())
+            tool->Toggle();
 
         DrawTool(tool);
     }
@@ -789,63 +801,51 @@ int wxToolBarSimple::CalcScrollInc(wxScrollEvent& event)
     int orient = event.GetOrientation();
 
     int nScrollInc = 0;
-    switch (event.GetEventType())
+    if (event.GetEventType() == wxEVT_SCROLL_TOP)
     {
-        case wxEVT_SCROLL_TOP:
-            {
-                if (orient == wxHORIZONTAL)
-                    nScrollInc = - m_xScrollPosition;
-                else
-                    nScrollInc = - m_yScrollPosition;
-                break;
-            }
-        case wxEVT_SCROLL_BOTTOM:
-            {
-                if (orient == wxHORIZONTAL)
-                    nScrollInc = m_xScrollLines - m_xScrollPosition;
-                else
-                    nScrollInc = m_yScrollLines - m_yScrollPosition;
-                break;
-            }
-        case wxEVT_SCROLL_LINEUP:
-            {
-                nScrollInc = -1;
-                break;
-            }
-        case wxEVT_SCROLL_LINEDOWN:
-            {
-                nScrollInc = 1;
-                break;
-            }
-        case wxEVT_SCROLL_PAGEUP:
-            {
-                if (orient == wxHORIZONTAL)
-                    nScrollInc = -GetScrollPageSize(wxHORIZONTAL);
-                else
-                    nScrollInc = -GetScrollPageSize(wxVERTICAL);
-                break;
-            }
-        case wxEVT_SCROLL_PAGEDOWN:
-            {
-                if (orient == wxHORIZONTAL)
-                    nScrollInc = GetScrollPageSize(wxHORIZONTAL);
-                else
-                    nScrollInc = GetScrollPageSize(wxVERTICAL);
-                break;
-            }
-        case wxEVT_SCROLL_THUMBTRACK:
-            {
-                if (orient == wxHORIZONTAL)
-                    nScrollInc = pos - m_xScrollPosition;
-                else
-                    nScrollInc = pos - m_yScrollPosition;
-                break;
-            }
-        default:
-            {
-                break;
-            }
+            if (orient == wxHORIZONTAL)
+                nScrollInc = - m_xScrollPosition;
+            else
+                nScrollInc = - m_yScrollPosition;
+    } else
+    if (event.GetEventType() == wxEVT_SCROLL_BOTTOM)
+    {
+            if (orient == wxHORIZONTAL)
+                nScrollInc = m_xScrollLines - m_xScrollPosition;
+            else
+                nScrollInc = m_yScrollLines - m_yScrollPosition;
+    } else
+    if (event.GetEventType() == wxEVT_SCROLL_LINEUP)
+    {
+            nScrollInc = -1;
+    } else
+    if (event.GetEventType() == wxEVT_SCROLL_LINEDOWN)
+    {
+            nScrollInc = 1;
+    } else
+    if (event.GetEventType() == wxEVT_SCROLL_PAGEUP)
+    {
+            if (orient == wxHORIZONTAL)
+                nScrollInc = -GetScrollPageSize(wxHORIZONTAL);
+            else
+                nScrollInc = -GetScrollPageSize(wxVERTICAL);
+    } else
+    if (event.GetEventType() == wxEVT_SCROLL_PAGEDOWN)
+    {
+            if (orient == wxHORIZONTAL)
+                nScrollInc = GetScrollPageSize(wxHORIZONTAL);
+            else
+                nScrollInc = GetScrollPageSize(wxVERTICAL);
+    } else
+    if ((event.GetEventType() == wxEVT_SCROLL_THUMBTRACK) ||
+        (event.GetEventType() == wxEVT_SCROLL_THUMBRELEASE))
+    {
+            if (orient == wxHORIZONTAL)
+                nScrollInc = pos - m_xScrollPosition;
+            else
+                nScrollInc = pos - m_yScrollPosition;
     }
+    
     if (orient == wxHORIZONTAL)
     {
         int w, h;