]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/vlbox.cpp
no real changes but replace manual calls to Set{Text,Bk}Color() with matching calls...
[wxWidgets.git] / src / generic / vlbox.cpp
index 9c9b8d06c87bed6f9429bc1cab8140cc4490c2ed..f30f2d9db3827362c5037775f99968800e235253 100644 (file)
@@ -355,29 +355,40 @@ void wxVListBox::OnDrawSeparator(wxDC& WXUNUSED(dc),
 {
 }
 
-void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
+bool
+wxVListBox::DoDrawSolidBackground(const wxColour& col,
+                                  wxDC& dc,
+                                  const wxRect& rect,
+                                  size_t n) const
 {
-    if ( m_colBgSel.IsOk() )
+    if ( !col.IsOk() )
+        return false;
+
+    // we need to render selected and current items differently
+    const bool isSelected = IsSelected(n),
+               isCurrent = IsCurrent(n);
+    if ( isSelected || isCurrent )
     {
-        // we need to render selected and current items differently
-        const bool isSelected = IsSelected(n),
-                   isCurrent = IsCurrent(n);
-        if ( isSelected || isCurrent )
+        if ( isSelected )
         {
-            if ( isSelected )
-            {
-                dc.SetBrush(wxBrush(m_colBgSel, wxSOLID));
-            }
-            else // !selected
-            {
-                dc.SetBrush(*wxTRANSPARENT_BRUSH);
-            }
-            dc.SetPen(*(isCurrent ? wxBLACK_PEN : wxTRANSPARENT_PEN));
-            dc.DrawRectangle(rect);
+            dc.SetBrush(wxBrush(col, wxBRUSHSTYLE_SOLID));
+        }
+        else // !selected
+        {
+            dc.SetBrush(*wxTRANSPARENT_BRUSH);
         }
-        //else: do nothing for the normal items
+        dc.SetPen(*(isCurrent ? wxBLACK_PEN : wxTRANSPARENT_PEN));
+        dc.DrawRectangle(rect);
     }
-    else // use wxRendererNative for a more native look&feel:
+    //else: do nothing for the normal items
+
+    return true;
+}
+
+void wxVListBox::OnDrawBackground(wxDC& dc, const wxRect& rect, size_t n) const
+{
+    // use wxRendererNative for more native look unless we use custom bg colour
+    if ( !DoDrawSolidBackground(m_colBgSel, dc, rect, n) )
     {
         int flags = 0;
         if ( IsSelected(n) )
@@ -602,13 +613,7 @@ void wxVListBox::OnKeyDown(wxKeyEvent& event)
         case WXK_TAB:
             // Since we are using wxWANTS_CHARS we need to send navigation
             // events for the tabs on MSW
-            {
-                wxNavigationKeyEvent ne;
-                ne.SetDirection(!event.ShiftDown());
-                ne.SetCurrentFocus(this);
-                ne.SetEventObject(this);
-                GetParent()->GetEventHandler()->ProcessEvent(ne);
-            }
+            HandleAsNavigationKey(event);
             // fall through to default
 #endif
         default:
@@ -634,7 +639,7 @@ void wxVListBox::OnLeftDown(wxMouseEvent& event)
 {
     SetFocus();
 
-    int item = HitTest(event.GetPosition());
+    int item = VirtualHitTest(event.GetPosition().y);
 
     if ( item != wxNOT_FOUND )
     {
@@ -657,7 +662,7 @@ void wxVListBox::OnLeftDown(wxMouseEvent& event)
 
 void wxVListBox::OnLeftDClick(wxMouseEvent& eventMouse)
 {
-    int item = HitTest(eventMouse.GetPosition());
+    int item = VirtualHitTest(eventMouse.GetPosition().y);
     if ( item != wxNOT_FOUND )
     {