Use a private GtkCellRendererText for rendering text in a wxDataViewCustomRenderer
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49325 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -152,6 +152,16 @@ protected:
 | 
				
			|||||||
private:
 | 
					private:
 | 
				
			||||||
    wxDC        *m_dc;
 | 
					    wxDC        *m_dc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:    
 | 
				
			||||||
 | 
					    // Internal, temporay for RenderText.
 | 
				
			||||||
 | 
					    GtkCellRenderer      *m_text_renderer;
 | 
				
			||||||
 | 
					    GdkWindow            *window;
 | 
				
			||||||
 | 
					    GtkWidget            *widget;
 | 
				
			||||||
 | 
					    void                 *background_area;
 | 
				
			||||||
 | 
					    void                 *cell_area;
 | 
				
			||||||
 | 
					    void                 *expose_area;
 | 
				
			||||||
 | 
					    int                   flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
protected:
 | 
					protected:
 | 
				
			||||||
    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
 | 
					    DECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer)
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -920,6 +920,13 @@ gtk_wx_cell_renderer_render (GtkCellRenderer      *renderer,
 | 
				
			|||||||
    GtkWxCellRenderer *wxrenderer = (GtkWxCellRenderer *) renderer;
 | 
					    GtkWxCellRenderer *wxrenderer = (GtkWxCellRenderer *) renderer;
 | 
				
			||||||
    wxDataViewCustomRenderer *cell = wxrenderer->cell;
 | 
					    wxDataViewCustomRenderer *cell = wxrenderer->cell;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cell->window = window;
 | 
				
			||||||
 | 
					    cell->widget = widget;
 | 
				
			||||||
 | 
					    cell->background_area = (void*) background_area;
 | 
				
			||||||
 | 
					    cell->cell_area = (void*) cell_area;
 | 
				
			||||||
 | 
					    cell->expose_area = (void*) expose_area;
 | 
				
			||||||
 | 
					    cell->flags = (int) flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GdkRectangle rect;
 | 
					    GdkRectangle rect;
 | 
				
			||||||
    gtk_wx_cell_renderer_get_size (renderer, widget, cell_area,
 | 
					    gtk_wx_cell_renderer_get_size (renderer, widget, cell_area,
 | 
				
			||||||
                                   &rect.x,
 | 
					                                   &rect.x,
 | 
				
			||||||
@@ -990,7 +997,7 @@ gtk_wx_cell_renderer_activate(
 | 
				
			|||||||
    GtkTreePath *treepath = gtk_tree_path_new_from_string( path );
 | 
					    GtkTreePath *treepath = gtk_tree_path_new_from_string( path );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GtkTreeIter iter;
 | 
					    GtkTreeIter iter;
 | 
				
			||||||
    cell->GetOwner()->GetOwner()->GetInternal()->get_iter( &iter, treepath );
 | 
					    cell->GetOwner()->GetOwner()->GtkGetInternal()->get_iter( &iter, treepath );
 | 
				
			||||||
    wxDataViewItem item( iter.user_data );
 | 
					    wxDataViewItem item( iter.user_data );
 | 
				
			||||||
    gtk_tree_path_free( treepath );
 | 
					    gtk_tree_path_free( treepath );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1434,7 +1441,7 @@ bool wxDataViewTextRenderer::SetValue( const wxVariant &value )
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    GValue gvalue = { 0, };
 | 
					    GValue gvalue = { 0, };
 | 
				
			||||||
    g_value_init( &gvalue, G_TYPE_STRING );
 | 
					    g_value_init( &gvalue, G_TYPE_STRING );
 | 
				
			||||||
    g_value_set_string( &gvalue, wxGTK_CONV_FONT( tmp, GetOwner()->GetOwner()->GetFont() ) );
 | 
					    g_value_set_string( &gvalue, wxGTK_CONV( tmp ) );
 | 
				
			||||||
    g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue );
 | 
					    g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue );
 | 
				
			||||||
    g_value_unset( &gvalue );
 | 
					    g_value_unset( &gvalue );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1446,8 +1453,7 @@ bool wxDataViewTextRenderer::GetValue( wxVariant &value ) const
 | 
				
			|||||||
    GValue gvalue = { 0, };
 | 
					    GValue gvalue = { 0, };
 | 
				
			||||||
    g_value_init( &gvalue, G_TYPE_STRING );
 | 
					    g_value_init( &gvalue, G_TYPE_STRING );
 | 
				
			||||||
    g_object_get_property( G_OBJECT(m_renderer), "text", &gvalue );
 | 
					    g_object_get_property( G_OBJECT(m_renderer), "text", &gvalue );
 | 
				
			||||||
    wxString tmp = wxGTK_CONV_BACK_FONT( g_value_get_string( &gvalue ),
 | 
					    wxString tmp = wxGTK_CONV_BACK( g_value_get_string( &gvalue ) );
 | 
				
			||||||
        wx_const_cast(wxDataViewTextRenderer*, this)->GetOwner()->GetOwner()->GetFont() );
 | 
					 | 
				
			||||||
    g_value_unset( &gvalue );
 | 
					    g_value_unset( &gvalue );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    value = tmp;
 | 
					    value = tmp;
 | 
				
			||||||
@@ -1668,6 +1674,7 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
 | 
				
			|||||||
    wxDataViewRenderer( varianttype, mode, align )
 | 
					    wxDataViewRenderer( varianttype, mode, align )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    m_dc = NULL;
 | 
					    m_dc = NULL;
 | 
				
			||||||
 | 
					    m_text_renderer = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (no_init)
 | 
					    if (no_init)
 | 
				
			||||||
        m_renderer = NULL;
 | 
					        m_renderer = NULL;
 | 
				
			||||||
@@ -1677,12 +1684,37 @@ wxDataViewCustomRenderer::wxDataViewCustomRenderer( const wxString &varianttype,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state )
 | 
					void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
    wxDataViewCtrl *view = GetOwner()->GetOwner();
 | 
					    wxDataViewCtrl *view = GetOwner()->GetOwner();
 | 
				
			||||||
    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
 | 
					    wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ?
 | 
				
			||||||
                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
 | 
					                        wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT) :
 | 
				
			||||||
                        view->GetForegroundColour();
 | 
					                        view->GetForegroundColour();
 | 
				
			||||||
    dc->SetTextForeground(col);
 | 
					    dc->SetTextForeground(col);
 | 
				
			||||||
    dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2));
 | 
					    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();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    GValue gvalue = { 0, };
 | 
				
			||||||
 | 
					    g_value_init( &gvalue, G_TYPE_STRING );
 | 
				
			||||||
 | 
					    g_value_set_string( &gvalue, wxGTK_CONV( text ) );
 | 
				
			||||||
 | 
					    g_object_set_property( G_OBJECT(m_text_renderer), "text", &gvalue );
 | 
				
			||||||
 | 
					    g_value_unset( &gvalue );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ((GdkRectangle*) cell_area)->x += xoffset;
 | 
				
			||||||
 | 
					    ((GdkRectangle*) cell_area)->width -= xoffset;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    gtk_cell_renderer_render( m_text_renderer,
 | 
				
			||||||
 | 
					        window,
 | 
				
			||||||
 | 
					        widget,
 | 
				
			||||||
 | 
					        (GdkRectangle*) background_area,
 | 
				
			||||||
 | 
					        (GdkRectangle*) cell_area,
 | 
				
			||||||
 | 
					        (GdkRectangle*) expose_area,
 | 
				
			||||||
 | 
					        (GtkCellRendererState) flags );
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    ((GdkRectangle*) cell_area)->x -= xoffset;
 | 
				
			||||||
 | 
					    ((GdkRectangle*) cell_area)->width += xoffset;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)
 | 
					bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)
 | 
				
			||||||
@@ -1704,6 +1736,9 @@ wxDataViewCustomRenderer::~wxDataViewCustomRenderer()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    if (m_dc)
 | 
					    if (m_dc)
 | 
				
			||||||
        delete m_dc;
 | 
					        delete m_dc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (m_text_renderer)
 | 
				
			||||||
 | 
					        gtk_object_sink( GTK_OBJECT(m_text_renderer) );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxDC *wxDataViewCustomRenderer::GetDC()
 | 
					wxDC *wxDataViewCustomRenderer::GetDC()
 | 
				
			||||||
@@ -1741,8 +1776,7 @@ wxDataViewProgressRenderer::wxDataViewProgressRenderer( const wxString &label,
 | 
				
			|||||||
        GValue gvalue = { 0, };
 | 
					        GValue gvalue = { 0, };
 | 
				
			||||||
        g_value_init( &gvalue, G_TYPE_STRING );
 | 
					        g_value_init( &gvalue, G_TYPE_STRING );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // FIXME: font encoding support
 | 
					        g_value_set_string( &gvalue, wxGTK_CONV(m_label) );
 | 
				
			||||||
        g_value_set_string( &gvalue, wxGTK_CONV_SYS(m_label) );
 | 
					 | 
				
			||||||
        g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue );
 | 
					        g_object_set_property( G_OBJECT(m_renderer), "text", &gvalue );
 | 
				
			||||||
        g_value_unset( &gvalue );
 | 
					        g_value_unset( &gvalue );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user