Move SetTextColoursAndFont() to wxGridCellRenderer

Move this function from wxGridCellStringRenderer to its base class to
allow using it even in the classes not drawing any strings.

Also document it.
This commit is contained in:
Vadim Zeitlin
2021-04-06 22:46:37 +02:00
parent 0ff1bdec09
commit 317ad65079
4 changed files with 60 additions and 43 deletions

View File

@@ -228,6 +228,13 @@ public:
// create a new object which is the copy of this one // create a new object which is the copy of this one
virtual wxGridCellRenderer *Clone() const = 0; virtual wxGridCellRenderer *Clone() const = 0;
protected:
// set the text colours before drawing
void SetTextColoursAndFont(const wxGrid& grid,
const wxGridCellAttr& attr,
wxDC& dc,
bool isSelected);
}; };
// Smart pointer to wxGridCellRenderer, calling DecRef() on it automatically. // Smart pointer to wxGridCellRenderer, calling DecRef() on it automatically.

View File

@@ -41,12 +41,6 @@ public:
{ return new wxGridCellStringRenderer; } { return new wxGridCellStringRenderer; }
protected: protected:
// set the text colours before drawing
void SetTextColoursAndFont(const wxGrid& grid,
const wxGridCellAttr& attr,
wxDC& dc,
bool isSelected);
// calc the string extent for given string/font // calc the string extent for given string/font
wxSize DoGetBestSize(const wxGridCellAttr& attr, wxSize DoGetBestSize(const wxGridCellAttr& attr,
wxDC& dc, wxDC& dc,

View File

@@ -109,6 +109,23 @@ public:
wxDC& dc); wxDC& dc);
protected: protected:
/**
Helper function setting the correct colours and font.
This function can be useful in the derived classes Draw()
implementation as it takes care of setting the appropriate colours and
font for @a dc depending on the global @a grid attributes, cell
attributions specified in @a attr and whether @a isSelected is @true.
Simply call it before doing any drawing in the derived class version to
use consistent colours and font for all cells.
@since 3.1.5
*/
void SetTextColoursAndFont(const wxGrid& grid,
const wxGridCellAttr& attr,
wxDC& dc,
bool isSelected);
/** /**
The destructor is private because only DecRef() can delete us. The destructor is private because only DecRef() can delete us.
*/ */

View File

@@ -69,6 +69,42 @@ void wxGridCellRenderer::Draw(wxGrid& grid,
dc.DrawRectangle(rect); dc.DrawRectangle(rect);
} }
void wxGridCellRenderer::SetTextColoursAndFont(const wxGrid& grid,
const wxGridCellAttr& attr,
wxDC& dc,
bool isSelected)
{
dc.SetBackgroundMode( wxBRUSHSTYLE_TRANSPARENT );
// TODO some special colours for attr.IsReadOnly() case?
// different coloured text when the grid is disabled
if ( grid.IsThisEnabled() )
{
if ( isSelected )
{
wxColour clr;
if ( grid.HasFocus() )
clr = grid.GetSelectionBackground();
else
clr = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW);
dc.SetTextBackground( clr );
dc.SetTextForeground( grid.GetSelectionForeground() );
}
else
{
dc.SetTextBackground( attr.GetBackgroundColour() );
dc.SetTextForeground( attr.GetTextColour() );
}
}
else
{
dc.SetTextBackground(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT));
}
dc.SetFont( attr.GetFont() );
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxGridCellDateTimeRenderer // wxGridCellDateTimeRenderer
@@ -573,43 +609,6 @@ wxGridCellAutoWrapStringRenderer::GetBestWidth(wxGrid& grid,
// wxGridCellStringRenderer // wxGridCellStringRenderer
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void wxGridCellStringRenderer::SetTextColoursAndFont(const wxGrid& grid,
const wxGridCellAttr& attr,
wxDC& dc,
bool isSelected)
{
dc.SetBackgroundMode( wxBRUSHSTYLE_TRANSPARENT );
// TODO some special colours for attr.IsReadOnly() case?
// different coloured text when the grid is disabled
if ( grid.IsThisEnabled() )
{
if ( isSelected )
{
wxColour clr;
if ( grid.HasFocus() )
clr = grid.GetSelectionBackground();
else
clr = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW);
dc.SetTextBackground( clr );
dc.SetTextForeground( grid.GetSelectionForeground() );
}
else
{
dc.SetTextBackground( attr.GetBackgroundColour() );
dc.SetTextForeground( attr.GetTextColour() );
}
}
else
{
dc.SetTextBackground(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT));
}
dc.SetFont( attr.GetFont() );
}
wxSize wxGridCellStringRenderer::DoGetBestSize(const wxGridCellAttr& attr, wxSize wxGridCellStringRenderer::DoGetBestSize(const wxGridCellAttr& attr,
wxDC& dc, wxDC& dc,
const wxString& text) const wxString& text)