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:
@@ -151,7 +151,17 @@ 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