Merge branch 'fix-grid-demo'

Fix colour of starts in the grid sample.

See https://github.com/wxWidgets/wxWidgets/pull/2019
This commit is contained in:
Vadim Zeitlin
2021-04-07 01:37:32 +02:00
5 changed files with 62 additions and 43 deletions

View File

@@ -228,6 +228,13 @@ public:
// create a new object which is the copy of this one
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.

View File

@@ -41,12 +41,6 @@ public:
{ return new wxGridCellStringRenderer; }
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
wxSize DoGetBestSize(const wxGridCellAttr& attr,
wxDC& dc,

View File

@@ -109,6 +109,23 @@ public:
wxDC& dc);
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.
*/

View File

@@ -162,6 +162,8 @@ public:
{
wxGridCellRenderer::Draw(grid, attr, dc, rect, row, col, isSelected);
SetTextColoursAndFont(grid, attr, dc, isSelected);
grid.DrawTextRectangle(dc, GetStarString(GetStarValue(grid, row, col)),
rect, attr);
}

View File

@@ -69,6 +69,42 @@ void wxGridCellRenderer::Draw(wxGrid& grid,
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
@@ -573,43 +609,6 @@ wxGridCellAutoWrapStringRenderer::GetBestWidth(wxGrid& grid,
// 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,
wxDC& dc,
const wxString& text)