X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e992e06a71d90f1df597441af36f69ef390089a..b64e7047020ed19c55fb0179e849554d138d8b06:/src/gtk/renderer.cpp diff --git a/src/gtk/renderer.cpp b/src/gtk/renderer.cpp index 2802f9274a..86ebfa8b4a 100644 --- a/src/gtk/renderer.cpp +++ b/src/gtk/renderer.cpp @@ -43,7 +43,7 @@ class WXDLLEXPORT wxRendererGTK : public wxDelegateRendererNative { public: // draw the header control button (used by wxListCtrl) - virtual void DrawHeaderButton(wxWindow *win, + virtual int DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, int flags = 0, @@ -181,7 +181,7 @@ wxRendererGTK::GetTreeWidget() // list/tree controls drawing // ---------------------------------------------------------------------------- -void +int wxRendererGTK::DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, @@ -212,7 +212,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win, dc.LogicalToDeviceX(rect.x) - x_diff, rect.y, rect.width, rect.height ); - DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params); + return DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params); } // draw a ">" or "v" button @@ -510,22 +510,25 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow *win, wxASSERT_MSG( gdk_window, wxT("cannot use wxRendererNative on wxDC of this type") ); + int x_diff = 0; + if (win->GetLayoutDirection() == wxLayout_RightToLeft) + x_diff = rect.width; + GtkStateType state; if (flags & wxCONTROL_SELECTED) { - if (flags & wxCONTROL_FOCUSED) - state = GTK_STATE_SELECTED; - else - state = GTK_STATE_INSENSITIVE; + // the wxCONTROL_FOCUSED state is deduced + // directly from the m_wxwindow by GTK+ + state = GTK_STATE_SELECTED; - gtk_paint_flat_box( win->m_wxwindow->style, + gtk_paint_flat_box( win->m_widget->style, gdk_window, state, GTK_SHADOW_NONE, NULL, win->m_wxwindow, - "treeview", - dc.LogicalToDeviceX(rect.x), + "cell_even", + dc.LogicalToDeviceX(rect.x) - x_diff, dc.LogicalToDeviceY(rect.y), rect.width, rect.height ); @@ -533,8 +536,15 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow *win, if (flags & wxCONTROL_CURRENT) { - dc.SetPen( *wxBLACK_PEN ); - dc.SetBrush( *wxTRANSPARENT_BRUSH ); - dc.DrawRectangle( rect ); + gtk_paint_focus( win->m_widget->style, + gdk_window, + GTK_STATE_SELECTED, + NULL, + win->m_wxwindow, + "treeview", + dc.LogicalToDeviceX(rect.x), + dc.LogicalToDeviceY(rect.y), + rect.width, + rect.height ); } }