]> git.saurik.com Git - wxWidgets.git/commitdiff
Correct text position in wxDataViewCustomRenderer::RenderText() in wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 10 Nov 2009 17:41:50 +0000 (17:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 10 Nov 2009 17:41:50 +0000 (17:41 +0000)
It simply ignored the passed in rectangle meaning that the text was always
drawn at the top left corner of the cell rectangle.

Also more code cleanup: collect all render call parameters in a single struct
and provide a public function to set them all at once instead of making them
public.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62595 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/dvrenderers.h
include/wx/gtk/private/gdkconv.h
src/gtk/dataview.cpp

index 7f6cb0777ec943ca791ec0084826cc85e22efbf0..9b3ac57e65934620735cfa63f310556d9b1214b8 100644 (file)
@@ -114,24 +114,39 @@ public:
                             wxDC *dc,
                             int state);
 
-protected:
+    // store GTK render call parameters for possible later use
+    void GTKStashRenderParams(GdkWindow *window,
+                              GtkWidget *widget,
+                              GdkRectangle *background_area,
+                              GdkRectangle *expose_area,
+                              int flags)
+    {
+        m_renderParams.window = window;
+        m_renderParams.widget = widget;
+        m_renderParams.background_area = background_area;
+        m_renderParams.expose_area = expose_area;
+        m_renderParams.flags = flags;
+    }
 
+protected:
     bool Init(wxDataViewCellMode mode, int align);
 
 private:
     wxDC        *m_dc;
 
-public:
-    // Internal, temporary for RenderText.
     GtkCellRenderer      *m_text_renderer;
-    GdkWindow            *window;
-    GtkWidget            *widget;
-    GdkRectangle         *background_area;
-    GdkRectangle         *cell_area;
-    GdkRectangle         *expose_area;
-    int                   flags;
 
-protected:
+    // parameters of the original render() call stored so that we could pass
+    // them forward to m_text_renderer if our RenderText() is called
+    struct GTKRenderParams
+    {
+        GdkWindow            *window;
+        GtkWidget            *widget;
+        GdkRectangle         *background_area;
+        GdkRectangle         *expose_area;
+        int                   flags;
+    } m_renderParams;
+
     DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
 };
 
index 9b188849705591e40fc76891d7a129b5abe07d6d..e87dd86df06239252724dd1993b65b568f9f23d4 100644 (file)
@@ -19,6 +19,14 @@ inline wxRect wxRectFromGDKRect(const GdkRectangle *r)
     return wxRect(r->x, r->y, r->width, r->height);
 }
 
+inline void wxRectToGDKRect(const wxRect& rect, GdkRectangle& r)
+{
+    r.x = rect.x;
+    r.y = rect.y;
+    r.width = rect.width;
+    r.height = rect.height;
+}
+
 } // namespace wxGTKImpl
 
 #endif // _GTK_PRIVATE_GDKCONV_H_
index eca967e963325e303e6ff65bd84d092271a55c94..3871c0891e8fc7beacaf1edd4af6db8ab582393b 100644 (file)
@@ -1225,12 +1225,8 @@ gtk_wx_cell_renderer_render (GtkCellRenderer      *renderer,
     GtkWxCellRenderer *wxrenderer = (GtkWxCellRenderer *) renderer;
     wxDataViewCustomRenderer *cell = wxrenderer->cell;
 
-    cell->window = window;
-    cell->widget = widget;
-    cell->background_area = background_area;
-    cell->cell_area = cell_area;
-    cell->expose_area = expose_area;
-    cell->flags = flags;
+    cell->GTKStashRenderParams(window, widget,
+                               background_area, expose_area, flags);
 
     wxRect rect(wxRectFromGDKRect(cell_area));
     rect = rect.Deflate(renderer->xpad, renderer->ypad);
@@ -2033,17 +2029,12 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
         Init(mode, align);
 }
 
-void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset,
-                                           wxRect WXUNUSED(cell), wxDC *WXUNUSED(dc), int WXUNUSED(state) )
+void wxDataViewCustomRenderer::RenderText( const wxString &text,
+                                           int xoffset,
+                                           wxRect cell,
+                                           wxDC *WXUNUSED(dc),
+                                           int WXUNUSED(state) )
 {
-#if 0
-    wxDataViewCtrl *view = GetOwner()->GetOwner();
-    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
-                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
-                        view->GetForegroundColour();
-    dc->SetTextForeground(col);
-    dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
-#else
     if (!m_text_renderer)
         m_text_renderer = gtk_cell_renderer_text_new();
 
@@ -2053,20 +2044,18 @@ void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset,
     g_object_set_property( G_OBJECT(m_text_renderer), "text", &gvalue );
     g_value_unset( &gvalue );
 
-    cell_area->x += xoffset;
-    cell_area->width -= xoffset;
+    GdkRectangle cell_area;
+    wxRectToGDKRect(cell, cell_area);
+    cell_area.x += xoffset;
+    cell_area.width -= xoffset;
 
     gtk_cell_renderer_render( m_text_renderer,
-        window,
-        widget,
-        background_area,
-        cell_area,
-        expose_area,
-        (GtkCellRendererState) flags );
-
-    cell_area->x -= xoffset;
-    cell_area->width += xoffset;
-#endif
+        m_renderParams.window,
+        m_renderParams.widget,
+        m_renderParams.background_area,
+        &cell_area,
+        m_renderParams.expose_area,
+        (GtkCellRendererState) m_renderParams.flags );
 }
 
 bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)