+    // draw arrow on button
+    gtk_paint_arrow
+    (
+        button->style,
+        gdk_window,
+        state,
+        flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+        NULL,
+        button,
+        "arrow",
+        GTK_ARROW_DOWN,
+        FALSE,
+        rect.x + arrowX,
+        rect.y + arrowY,
+        arrowWidth,
+        arrowHeight
+    );
+}
+
+void
+wxRendererGTK::DrawComboBoxDropButton(wxWindow *win,
+                                      wxDC& dc,
+                                      const wxRect& rect,
+                                      int flags)
+{
+    DrawPushButton(win,dc,rect,flags);
+    DrawDropArrow(win,dc,rect);
+}
+
+void
+wxRendererGTK::DrawCheckBox(wxWindow *WXUNUSED(win),
+                            wxDC& dc,
+                            const wxRect& rect,
+                            int flags )
+{
+    GtkWidget *button = GetCheckButtonWidget();
+
+    // for reason why we do this, see DrawDropArrow
+    GdkWindow* gdk_window = dc.GetGDKWindow();
+    wxASSERT_MSG( gdk_window,
+                  wxT("cannot use wxRendererNative on wxDC of this type") );
+
+    GtkStateType state;
+
+    if ( flags & wxCONTROL_PRESSED )
+        state = GTK_STATE_ACTIVE;
+    else if ( flags & wxCONTROL_DISABLED )
+        state = GTK_STATE_INSENSITIVE;
+    else if ( flags & wxCONTROL_CURRENT )
+        state = GTK_STATE_PRELIGHT;
+    else
+        state = GTK_STATE_NORMAL;
+
+    gtk_paint_check
+    (
+        button->style,
+        gdk_window,
+        state,
+        flags & wxCONTROL_CHECKED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+        NULL,
+        button,
+        "cellcheck",
+        dc.LogicalToDeviceX(rect.x)+2,
+        dc.LogicalToDeviceY(rect.y)+3,
+        13, 13
+    );
+}
+
+void
+wxRendererGTK::DrawPushButton(wxWindow *WXUNUSED(win),
+                              wxDC& dc,
+                              const wxRect& rect,
+                              int flags)
+{
+    GtkWidget *button = GetButtonWidget();
+
+    // for reason why we do this, see DrawDropArrow
+    GdkWindow* gdk_window = dc.GetGDKWindow();
+    wxASSERT_MSG( gdk_window,
+                  wxT("cannot use wxRendererNative on wxDC of this type") );
+
+    // draw button
+    GtkStateType state;
+
+    if ( flags & wxCONTROL_PRESSED )
+        state = GTK_STATE_ACTIVE;
+    else if ( flags & wxCONTROL_DISABLED )
+        state = GTK_STATE_INSENSITIVE;
+    else if ( flags & wxCONTROL_CURRENT )
+        state = GTK_STATE_PRELIGHT;
+    else
+        state = GTK_STATE_NORMAL;
+
+    gtk_paint_box
+    (
+        button->style,
+        gdk_window,
+        state,
+        flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT,
+        NULL,
+        button,
+        "button",
+        rect.x, rect.y, rect.width, rect.height
+    );