From 62265c2c67bd9ee1c78e57700277dc0baf2f14d6 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 10 Nov 2009 17:41:11 +0000 Subject: [PATCH] Allow custom wxDataViewCtrl renderers to easily use attributes. Set up the DC passed to wxDataViewCustomRenderer::Render() to use the font and colour defined by the item attribute by default so that any calls to RenderText() from it will use them automatically. Also added public wxDataViewCustomRenderer::GetAttr() to allow retrieving the attribute explicitly in Render(). The column using custom renderer in the dataview sample now works as expected in the generic version; the native ones will be corrected in the upcoming commits. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62590 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/dvrenderers.h | 42 ++++++- include/wx/generic/dvrenderer.h | 48 -------- include/wx/generic/dvrenderers.h | 33 +----- include/wx/gtk/dvrenderers.h | 12 +- include/wx/osx/dvrenderers.h | 6 - interface/wx/dataview.h | 17 ++- src/common/datavcmn.cpp | 107 ++++++++++++++++++ src/generic/datavgen.cpp | 182 +++++-------------------------- src/gtk/dataview.cpp | 2 +- src/osx/carbon/dataview.cpp | 2 +- src/osx/cocoa/dataview.mm | 4 +- src/osx/dataview_osx.cpp | 9 -- 12 files changed, 201 insertions(+), 263 deletions(-) diff --git a/include/wx/dvrenderers.h b/include/wx/dvrenderers.h index 94a4330dcb..a534f76d8f 100644 --- a/include/wx/dvrenderers.h +++ b/include/wx/dvrenderers.h @@ -109,13 +109,16 @@ public: void SetOwner( wxDataViewColumn *owner ) { m_owner = owner; } wxDataViewColumn* GetOwner() const { return m_owner; } - // renderer properties: + // renderer value and attributes: SetValue() and SetAttr() are called + // before a cell is rendered using this renderer + virtual bool SetValue(const wxVariant& value) = 0; + virtual bool GetValue(wxVariant& value) const = 0; - virtual bool SetValue( const wxVariant& WXUNUSED(value) ) = 0; - virtual bool GetValue( wxVariant& WXUNUSED(value) ) const = 0; + virtual void SetAttr(const wxDataViewItemAttr& WXUNUSED(attr)) { } wxString GetVariantType() const { return m_variantType; } + // renderer properties: virtual void SetMode( wxDataViewCellMode mode ) = 0; virtual wxDataViewCellMode GetMode() const = 0; @@ -204,6 +207,12 @@ public: } + // Render the item using the current value (returned by GetValue()). + virtual bool Render(wxRect cell, wxDC *dc, int state) = 0; + + // Return the size of the item appropriate to its current value. + virtual wxSize GetSize() const = 0; + // Define virtual function which are called when the item is activated // (double-clicked or Enter is pressed on it), clicked or the user starts // to drag it: by default they all simply return false indicating that the @@ -230,7 +239,34 @@ public: { return false; } + // Helper which can be used by Render() implementation in the derived + // classes: it will draw the text in the same manner as the standard + // renderers do. + virtual void RenderText(const wxString& text, + int xoffset, + wxRect cell, + wxDC *dc, + int state); + + + // Override the base class virtual method to simply store the attribute so + // that it can be accessed using GetAttr() from Render() if needed. + virtual void SetAttr(const wxDataViewItemAttr& attr) { m_attr = attr; } + const wxDataViewItemAttr& GetAttr() const { return m_attr; } + + + // Implementation only from now on + + // Retrieve the DC to use for drawing. This is implemented in derived + // platform-specific classes. + virtual wxDC *GetDC() = 0; + + // Prepare DC to use attributes and call Render(). + void WXCallRender(wxRect rect, wxDC *dc, int state); + private: + wxDataViewItemAttr m_attr; + wxDECLARE_NO_COPY_CLASS(wxDataViewCustomRendererBase); }; diff --git a/include/wx/generic/dvrenderer.h b/include/wx/generic/dvrenderer.h index 6726b0fef3..d0fd15bab6 100644 --- a/include/wx/generic/dvrenderer.h +++ b/include/wx/generic/dvrenderer.h @@ -24,43 +24,8 @@ public: int align = wxDVR_DEFAULT_ALIGNMENT ); virtual ~wxDataViewRenderer(); - // these methods are used to draw the cell contents, Render() doesn't care - // about the attributes while RenderWithAttr() does -- override it if you - // want to take the attributes defined for this cell into account, otherwise - // overriding Render() is enough - virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0; - - // NB: RenderWithAttr() also has more standard parameter order and types - virtual bool - RenderWithAttr(wxDC& dc, - const wxRect& rect, - int align, // combination of horizontal and vertical - const wxDataViewItemAttr *attr, // may be NULL if none - int state); - - virtual wxSize GetSize() const = 0; virtual wxDC *GetDC(); - // Draw the text using the provided attributes - void RenderText(wxDC& dc, - const wxRect& rect, - int align, - const wxString& text, - const wxDataViewItemAttr *attr, // may be NULL if none - int state, - int xoffset = 0); - - // Overload using standard attributes - void RenderText(const wxString& text, - int xoffset, - wxRect cell, - wxDC *dc, - int state) - { - RenderText(*dc, cell, wxALIGN_NOT, text, NULL, state, xoffset); - } - - virtual void SetAlignment( int align ); virtual int GetAlignment() const; @@ -75,7 +40,6 @@ public: { return m_mode; } // implementation - int CalculateAlignment() const; // this is a replacement for dynamic_cast in the // code checking whether the renderer is interested in mouse events, it's @@ -89,18 +53,6 @@ public: // never be called virtual wxDataViewCustomRenderer *WXGetAsCustom() { return NULL; } -protected: - // This is just a convenience for the derived classes overriding - // RenderWithAttr() to avoid repeating the same wxFAIL_MSG() in all of them - bool DummyRender(wxRect WXUNUSED(cell), - wxDC * WXUNUSED(dc), - int WXUNUSED(state)) - { - wxFAIL_MSG("shouldn't be called at all, use RenderWithAttr() instead"); - - return false; - } - private: int m_align; wxDataViewCellMode m_mode; diff --git a/include/wx/generic/dvrenderers.h b/include/wx/generic/dvrenderers.h index 61592258ca..14669694d2 100644 --- a/include/wx/generic/dvrenderers.h +++ b/include/wx/generic/dvrenderers.h @@ -44,17 +44,8 @@ public: bool SetValue( const wxVariant &value ); bool GetValue( wxVariant &value ) const; - virtual bool RenderWithAttr(wxDC& dc, - const wxRect& rect, - int align, - const wxDataViewItemAttr *attr, - int state); - virtual bool Render(wxRect cell, wxDC *dc, int state) - { - return DummyRender(cell, dc, state); - } - - wxSize GetSize() const; + virtual bool Render(wxRect cell, wxDC *dc, int state); + virtual wxSize GetSize() const; // in-place editing virtual bool HasEditorCtrl() const; @@ -135,15 +126,7 @@ public: bool SetValue( const wxVariant &value ); bool GetValue( wxVariant& value ) const; - virtual bool RenderWithAttr(wxDC& dc, - const wxRect& rect, - int align, - const wxDataViewItemAttr *attr, - int state); - virtual bool Render(wxRect cell, wxDC *dc, int state) - { - return DummyRender(cell, dc, state); - } + virtual bool Render(wxRect cell, wxDC *dc, int state); virtual wxSize GetSize() const; private: @@ -168,15 +151,7 @@ public: bool SetValue( const wxVariant &value ); bool GetValue( wxVariant &value ) const; - virtual bool RenderWithAttr(wxDC& dc, - const wxRect& rect, - int align, - const wxDataViewItemAttr *attr, - int state); - virtual bool Render(wxRect cell, wxDC *dc, int state) - { - return DummyRender(cell, dc, state); - } + virtual bool Render(wxRect cell, wxDC *dc, int state); virtual wxSize GetSize() const; virtual bool HasEditorCtrl() const { return true; } diff --git a/include/wx/gtk/dvrenderers.h b/include/wx/gtk/dvrenderers.h index 667de363b9..74c866ed40 100644 --- a/include/wx/gtk/dvrenderers.h +++ b/include/wx/gtk/dvrenderers.h @@ -100,15 +100,15 @@ public: virtual ~wxDataViewCustomRenderer(); - virtual bool Render( wxRect cell, wxDC *dc, int state ) = 0; - - void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state ); - - virtual wxSize GetSize() const = 0; - // Create DC on request virtual wxDC *GetDC(); + // override the base class function to use GTK text cell renderer + virtual void RenderText(const wxString& text, + int xoffset, + wxRect cell, + wxDC *dc, + int state); protected: diff --git a/include/wx/osx/dvrenderers.h b/include/wx/osx/dvrenderers.h index b25ca48e5a..5e99532df4 100644 --- a/include/wx/osx/dvrenderers.h +++ b/include/wx/osx/dvrenderers.h @@ -24,12 +24,6 @@ public: virtual ~wxDataViewCustomRenderer(); - void RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state ); - - virtual wxSize GetSize() const = 0; - - virtual bool Render(wxRect cell, wxDC* dc, int state) = 0; - // implementation only // ------------------- diff --git a/interface/wx/dataview.h b/interface/wx/dataview.h index 454511d0af..2cadb8f90c 100644 --- a/interface/wx/dataview.h +++ b/interface/wx/dataview.h @@ -1435,9 +1435,20 @@ public: const wxVariant& value); /** - Create DC on request. Internal. - */ - virtual wxDC* GetDC(); + Return the attribute to be used for rendering. + + This function may be called from Render() implementation to use the + attributes defined for the item if the renderer supports them. + + Notice that when Render() is called, the wxDC object passed to it is + already set up to use the correct attributes (e.g. its font is set to + bold or italic version if wxDataViewItemAttr::GetBold() or GetItalic() + returns true) so it may not be necessary to call it explicitly if you + only want to render text using the items attributes. + + @since 2.9.1 + */ + const wxDataViewItemAttr& GetAttr() const; /** Return size required to show content. diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 8f259b41bf..bd62828c65 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -694,6 +694,113 @@ bool wxDataViewRendererBase::FinishEditing() return true; } +// ---------------------------------------------------------------------------- +// wxDataViewCustomRendererBase +// ---------------------------------------------------------------------------- + +void +wxDataViewCustomRendererBase::WXCallRender(wxRect rectCell, wxDC *dc, int state) +{ + wxCHECK_RET( dc, "no DC to draw on in custom renderer?" ); + + // adjust the rectangle ourselves to account for the alignment + wxRect rectItem = rectCell; + const int align = GetAlignment(); + if ( align != wxDVR_DEFAULT_ALIGNMENT ) + { + const wxSize size = GetSize(); + + // take alignment into account only if there is enough space, otherwise + // show as much contents as possible + // + // notice that many existing renderers (e.g. wxDataViewSpinRenderer) + // return hard-coded size which can be more than they need and if we + // trusted their GetSize() we'd draw the text out of cell bounds + // entirely + + if ( size.x >= 0 && size.x < rectCell.width ) + { + if ( align & wxALIGN_CENTER_HORIZONTAL ) + rectItem.x += (rectCell.width - size.x)/2; + else if ( align & wxALIGN_RIGHT ) + rectItem.x += rectCell.width - size.x; + // else: wxALIGN_LEFT is the default + + rectItem.width = size.x; + } + + if ( size.y >= 0 && size.y < rectCell.height ) + { + if ( align & wxALIGN_CENTER_VERTICAL ) + rectItem.y += (rectCell.height - size.y)/2; + else if ( align & wxALIGN_BOTTOM ) + rectItem.y += rectCell.height - size.y; + // else: wxALIGN_TOP is the default + + rectItem.height = size.y; + } + } + + + // set up the DC attributes + + // override custom foreground with the standard one for the selected items + // because we currently don't allow changing the selection background and + // custom colours may be unreadable on it + wxColour col; + if ( state & wxDATAVIEW_CELL_SELECTED ) + col = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); + else if ( m_attr.HasColour() ) + col = m_attr.GetColour(); + else // use default foreground + col = GetOwner()->GetOwner()->GetForegroundColour(); + + wxDCTextColourChanger changeFg(*dc, col); + + wxDCFontChanger changeFont(*dc); + if ( m_attr.HasFont() ) + { + wxFont font(dc->GetFont()); + if ( m_attr.GetBold() ) + font.MakeBold(); + if ( m_attr.GetItalic() ) + font.MakeItalic(); + + changeFont.Set(font); + } + + Render(rectItem, dc, state); +} + +void +wxDataViewCustomRendererBase::RenderText(const wxString& text, + int xoffset, + wxRect rect, + wxDC *dc, + int WXUNUSED(state)) +{ + wxRect rectText = rect; + rectText.x += xoffset; + rectText.width -= xoffset; + + // check if we want to ellipsize the text if it doesn't fit + wxString ellipsizedText; + if ( GetEllipsizeMode() != wxELLIPSIZE_NONE ) + { + ellipsizedText = wxControl::Ellipsize + ( + text, + *dc, + GetEllipsizeMode(), + rect.width, + wxELLIPSIZE_FLAGS_NONE + ); + } + + dc->DrawLabel(ellipsizedText.empty() ? text : ellipsizedText, + rectText, GetAlignment()); +} + //----------------------------------------------------------------------------- // wxDataViewEditorCtrlEvtHandler //----------------------------------------------------------------------------- diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index fcfbbd77fc..dc0f58a4fe 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -644,123 +644,6 @@ int wxDataViewRenderer::GetAlignment() const return m_align; } -int wxDataViewRenderer::CalculateAlignment() const -{ - if (m_align == wxDVR_DEFAULT_ALIGNMENT) - { - if (GetOwner() == NULL) - return wxALIGN_LEFT | wxALIGN_CENTRE_VERTICAL; - - return GetOwner()->GetAlignment() | wxALIGN_CENTRE_VERTICAL; - } - - return m_align; -} - -bool -wxDataViewRenderer::RenderWithAttr(wxDC& dc, - const wxRect& cell_rect, - int align, - const wxDataViewItemAttr *WXUNUSED(attr), - int state) -{ - // adjust the rectangle ourselves to account for the alignment - - wxRect item_rect = cell_rect; - if ( align ) - { - const wxSize size = GetSize(); - - // take alignment into account only if there is enough space, otherwise - // show as much contents as possible - // - // notice that many existing renderers (e.g. wxDataViewSpinRenderer) - // return hard-coded size which can be more than they need and if we - // trusted their GetSize() we'd draw the text out of cell bounds - // entirely - - if ( size.x < cell_rect.width ) - { - if (align & wxALIGN_CENTER_HORIZONTAL) - item_rect.x += (cell_rect.width - size.x)/2; - else if (align & wxALIGN_RIGHT) - item_rect.x += cell_rect.width - size.x; - // else: wxALIGN_LEFT is the default - - item_rect.width = size.x; - } - - if ( size.y < cell_rect.height ) - { - if (align & wxALIGN_CENTER_VERTICAL) - item_rect.y += (cell_rect.height - size.y)/2; - else if (align & wxALIGN_BOTTOM) - item_rect.y += cell_rect.height - size.y; - // else: wxALIGN_TOP is the default - - item_rect.height = size.y; - } - } - - return Render(item_rect, &dc, state); -} - -void -wxDataViewRenderer::RenderText(wxDC& dc, - const wxRect& rect, - int align, - const wxString& text, - const wxDataViewItemAttr *attr, - int state, - int xoffset) -{ - // override custom foreground with the standard one for the selected items - // because we currently don't allow changing the selection background and - // custom colours may be unreadable on it - wxColour col; - if ( state & wxDATAVIEW_CELL_SELECTED ) - col = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); - else if ( attr && attr->HasColour() ) - col = attr->GetColour(); - else // use default foreground - col = GetOwner()->GetOwner()->GetForegroundColour(); - - wxDCTextColourChanger changeFg(dc, col); - - wxDCFontChanger changeFont(dc); - if ( attr && attr->HasFont() ) - { - wxFont font(dc.GetFont()); - if ( attr->GetBold() ) - font.MakeBold(); - if ( attr->GetItalic() ) - font.MakeItalic(); - - changeFont.Set(font); - } - - wxRect rectText = rect; - rectText.x += xoffset; - rectText.width -= xoffset; - - // check if we want to ellipsize the text if it doesn't fit - wxString ellipsizedText; - if ( GetEllipsizeMode() != wxELLIPSIZE_NONE ) - { - ellipsizedText = wxControl::Ellipsize - ( - text, - dc, - GetEllipsizeMode(), - rect.width, - wxELLIPSIZE_FLAGS_NONE - ); - } - - dc.DrawLabel(ellipsizedText.empty() ? text : ellipsizedText, - rectText, align); -} - // --------------------------------------------------------- // wxDataViewCustomRenderer // --------------------------------------------------------- @@ -823,14 +706,9 @@ bool wxDataViewTextRenderer::GetValueFromEditorCtrl( wxControl *editor, wxVarian return true; } -bool -wxDataViewTextRenderer::RenderWithAttr(wxDC& dc, - const wxRect& rect, - int align, - const wxDataViewItemAttr *attr, - int state) +bool wxDataViewTextRenderer::Render(wxRect rect, wxDC *dc, int state) { - RenderText(dc, rect, align, m_text, attr, state); + RenderText(m_text, 0, rect, dc, state); return true; } @@ -976,24 +854,23 @@ bool wxDataViewProgressRenderer::GetValue( wxVariant &value ) const return true; } -bool wxDataViewProgressRenderer::RenderWithAttr(wxDC& dc, - const wxRect& rect, - int WXUNUSED(align), - const wxDataViewItemAttr *attr, - int WXUNUSED(state)) +bool +wxDataViewProgressRenderer::Render(wxRect rect, wxDC *dc, int WXUNUSED(state)) { - // deflat the rect to leave a small border between bars in adjacent rows + // deflate the rect to leave a small border between bars in adjacent rows wxRect bar = rect.Deflate(0, 1); - dc.SetBrush( *wxTRANSPARENT_BRUSH ); - dc.SetPen( *wxBLACK_PEN ); - dc.DrawRectangle( bar ); + dc->SetBrush( *wxTRANSPARENT_BRUSH ); + dc->SetPen( *wxBLACK_PEN ); + dc->DrawRectangle( bar ); bar.width = (int)(bar.width * m_value / 100.); - dc.SetPen( *wxTRANSPARENT_PEN ); - dc.SetBrush( attr && attr->HasColour() ? wxBrush(attr->GetColour()) - : *wxBLUE_BRUSH ); - dc.DrawRectangle( bar ); + dc->SetPen( *wxTRANSPARENT_PEN ); + + const wxDataViewItemAttr& attr = GetAttr(); + dc->SetBrush( attr.HasColour() ? wxBrush(attr.GetColour()) + : *wxBLUE_BRUSH ); + dc->DrawRectangle( bar ); return true; } @@ -1138,23 +1015,18 @@ bool wxDataViewIconTextRenderer::GetValue( wxVariant& WXUNUSED(value) ) const return false; } -bool -wxDataViewIconTextRenderer::RenderWithAttr(wxDC& dc, - const wxRect& rect, - int align, - const wxDataViewItemAttr *attr, - int state) +bool wxDataViewIconTextRenderer::Render(wxRect rect, wxDC *dc, int state) { int xoffset = 0; const wxIcon& icon = m_value.GetIcon(); if ( icon.IsOk() ) { - dc.DrawIcon(icon, rect.x, rect.y + (rect.height - icon.GetHeight())/2); + dc->DrawIcon(icon, rect.x, rect.y + (rect.height - icon.GetHeight())/2); xoffset = icon.GetWidth()+4; } - RenderText(dc, rect, align, m_value.GetText(), attr, state, xoffset); + RenderText(m_value.GetText(), xoffset, rect, dc, state); return true; } @@ -1640,15 +1512,15 @@ wxBitmap wxDataViewMainWindow::CreateItemBitmap( unsigned int row, int &indent ) model->GetValue( value, item, column->GetModelColumn()); cell->SetValue( value ); + wxDataViewItemAttr attr; + model->GetAttr(item, column->GetModelColumn(), attr); + cell->SetAttr(attr); + wxRect item_rect(x, 0, width, height); item_rect.Deflate(PADDING_RIGHTLEFT, 0); // dc.SetClippingRegion( item_rect ); - wxDataViewItemAttr attr; - const bool - hasAttr = model->GetAttr(item, column->GetModelColumn(), attr); - cell->RenderWithAttr(dc, item_rect, cell->CalculateAlignment(), - hasAttr ? &attr : NULL, 0); + cell->WXCallRender(item_rect, &dc, 0); // dc.DestroyClippingRegion(); x += width; @@ -1840,6 +1712,10 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) model->GetValue( value, dataitem, col->GetModelColumn()); cell->SetValue( value ); + wxDataViewItemAttr attr; + model->GetAttr(dataitem, col->GetModelColumn(), attr); + cell->SetAttr(attr); + // update cell_rect cell_rect.y = GetLineStart( item ); cell_rect.height = GetLineHeight( item ); @@ -1910,11 +1786,7 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) // make its own renderer and thus we cannot be sure of that. wxDCClipper clip(dc, item_rect); - wxDataViewItemAttr attr; - const bool - hasAttr = model->GetAttr(dataitem, col->GetModelColumn(), attr); - cell->RenderWithAttr(dc, item_rect, cell->CalculateAlignment(), - hasAttr ? &attr : NULL, state); + cell->WXCallRender(item_rect, &dc, state); } cell_rect.x += cell_rect.width; diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index cf0ab2efeb..26a3f53f28 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -1268,7 +1268,7 @@ gtk_wx_cell_renderer_render (GtkCellRenderer *renderer, state |= wxDATAVIEW_CELL_INSENSITIVE; if (flags & GTK_CELL_RENDERER_FOCUSED) state |= wxDATAVIEW_CELL_FOCUSED; - cell->Render( renderrect, dc, state ); + cell->WXCallRender( renderrect, dc, state ); } } diff --git a/src/osx/carbon/dataview.cpp b/src/osx/carbon/dataview.cpp index 5abd1ecd48..ebac02b079 100644 --- a/src/osx/carbon/dataview.cpp +++ b/src/osx/carbon/dataview.cpp @@ -1701,7 +1701,7 @@ wxMacDataViewDataBrowserListViewControl::DataBrowserDrawItemProc(DataBrowserItem { // make sure that 'Render' can draw only in the allowed area: dc->SetClippingRegion(content.left,content.top,content.right-content.left+1,content.bottom-content.top+1); - (void) (dataViewCustomRendererPtr->Render( cellrect, dc, + (void) (dataViewCustomRendererPtr->WXCallRender( cellrect, dc, ((state == kDataBrowserItemIsSelected) ? wxDATAVIEW_CELL_SELECTED : 0))); dc->DestroyClippingRegion(); // probably not necessary } diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index 3951253a5c..f9ab19374e 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -1108,8 +1108,8 @@ outlineView:(NSOutlineView*)outlineView [[self backgroundColor] set]; NSRectFill(cellFrame); - // TODO: attributes support - renderer->Render(wxFromNSRect(controlView, cellFrame), renderer->GetDC(), 0); + wxDC * const dc = renderer->GetDC(); + renderer->WXCallRender(wxFromNSRect(controlView, cellFrame), dc, 0); renderer->SetDC(NULL); } diff --git a/src/osx/dataview_osx.cpp b/src/osx/dataview_osx.cpp index 9ffcb8af46..bde6716c21 100644 --- a/src/osx/dataview_osx.cpp +++ b/src/osx/dataview_osx.cpp @@ -303,15 +303,6 @@ wxDataViewCustomRenderer::~wxDataViewCustomRenderer() delete m_DCPtr; } -void wxDataViewCustomRenderer::RenderText( const wxString &text, int xoffset, wxRect cell, wxDC *dc, int state ) -{ - wxDataViewCtrl *view = GetOwner()->GetOwner(); - - wxColour col = (state & wxDATAVIEW_CELL_SELECTED) ? *wxWHITE : view->GetForegroundColour(); - dc->SetTextForeground(col); - dc->DrawText( text, cell.x + xoffset, cell.y + ((cell.height - dc->GetCharHeight()) / 2)); -} - wxDC* wxDataViewCustomRenderer::GetDC() { if ((m_DCPtr == NULL) && (GetOwner() != NULL) && (GetOwner()->GetOwner() != NULL)) -- 2.45.2