]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/renderer.cpp
Commited Bryan Petty's blind fix patch.
[wxWidgets.git] / src / gtk / renderer.cpp
index 53ab9e764bb6d50857a3486c010ffc5297c980a7..7a7beefbd2a71ee52daa9b677525150bbfc0b34f 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        gtk/renderer.cpp
+// Name:        src/gtk/renderer.cpp
 // Purpose:     implementation of wxRendererNative for wxGTK
 // Author:      Vadim Zeitlin
 // Modified by:
 #endif
 
 #include "wx/renderer.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/window.h"
+    #include "wx/dcclient.h"
+    #include "wx/settings.h"
+#endif
+
 #include <gtk/gtk.h>
 #include "wx/gtk/win_gtk.h"
 
-#include "wx/window.h"
-#include "wx/dc.h"
-#include "wx/dcclient.h"
-#include "wx/settings.h"
-
 // RR: After a correction to the orientation of the sash
 //     this doesn't seem to be required anymore and it
 //     seems to confuse some themes so USE_ERASE_RECT=0
@@ -78,16 +80,21 @@ public:
                                const wxRect& rect,
                                int flags = 0);
 
-    virtual void DrawCheckButton(wxWindow *win,
-                                 wxDC& dc,
-                                 const wxRect& rect,
-                                 int flags = 0);
+    virtual void DrawCheckBox(wxWindow *win,
+                              wxDC& dc,
+                              const wxRect& rect,
+                              int flags = 0);
 
     virtual void DrawPushButton(wxWindow *win,
                                 wxDC& dc,
                                 const wxRect& rect,
                                 int flags = 0);
 
+    virtual void DrawItemSelectionRect(wxWindow *win,
+                                       wxDC& dc,
+                                       const wxRect& rect,
+                                       int flags = 0);
+
     virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
 
 private:
@@ -98,8 +105,8 @@ private:
 
     // used by DrawTreeItemButton()
     static GtkWidget *GetTreeWidget();
-    
-    // used by DrawCheckButton()
+
+    // used by DrawCheckBox()
     static GtkWidget *GetCheckButtonWidget();
 };
 
@@ -197,7 +204,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win,
         NULL,
         button,
         "button",
-        dc.XLOG2DEV(rect.x) -1, rect.y -1, rect.width +2, rect.height +2
+        dc.LogicalToDeviceX(rect.x), rect.y, rect.width, rect.height
     );
 }
 
@@ -431,18 +438,18 @@ wxRendererGTK::DrawComboBoxDropButton(wxWindow *win,
     DrawDropArrow(win,dc,rect);
 }
 
-void 
-wxRendererGTK::DrawCheckButton(wxWindow *win,
-                                 wxDC& dc,
-                                 const wxRect& rect,
-                                 int flags )
+void
+wxRendererGTK::DrawCheckBox(wxWindow *win,
+                            wxDC& dc,
+                            const wxRect& rect,
+                            int flags )
 {
     GtkWidget *button = GetCheckButtonWidget();
 
     // for reason why we do this, see DrawDropArrow
     wxWindowDC& wdc = (wxWindowDC&)dc;
     wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) );
-    
+
     GtkStateType state;
 
     if ( flags & wxCONTROL_PRESSED )
@@ -453,7 +460,7 @@ wxRendererGTK::DrawCheckButton(wxWindow *win,
         state = GTK_STATE_PRELIGHT;
     else
         state = GTK_STATE_NORMAL;
-    
+
     gtk_paint_check
     (
         button->style,
@@ -463,7 +470,9 @@ wxRendererGTK::DrawCheckButton(wxWindow *win,
         NULL,
         button,
         "cellcheck",
-        rect.x, rect.y, 13, 13
+        dc.LogicalToDeviceX(rect.x)+2,
+        dc.LogicalToDeviceY(rect.y)+3,
+        13, 13
     );
 }
 
@@ -503,3 +512,38 @@ wxRendererGTK::DrawPushButton(wxWindow *win,
         rect.x, rect.y, rect.width, rect.height
     );
 }
+
+void
+wxRendererGTK::DrawItemSelectionRect(wxWindow *win,
+                                     wxDC& dc,
+                                     const wxRect& rect,
+                                     int flags )
+{
+    GtkStateType state;
+    if (flags & wxCONTROL_SELECTED)
+    {
+        if (flags & wxCONTROL_FOCUSED)
+            state = GTK_STATE_SELECTED;
+        else
+            state = GTK_STATE_INSENSITIVE;
+
+        gtk_paint_flat_box( win->m_wxwindow->style,
+                        GTK_PIZZA(win->m_wxwindow)->bin_window,
+                        state,
+                        GTK_SHADOW_NONE,
+                        NULL,
+                        win->m_wxwindow,
+                        "treeview",
+                        dc.LogicalToDeviceX(rect.x),
+                        dc.LogicalToDeviceY(rect.y),
+                        rect.width,
+                        rect.height );
+    }
+
+    if (flags & wxCONTROL_CURRENT)
+    {
+        dc.SetPen( *wxBLACK_PEN );
+        dc.SetBrush( *wxTRANSPARENT_BRUSH );
+        dc.DrawRectangle( rect );
+    }
+}