Fix clipping of cell contents in wxGrid

Use wxDCClipper, now that it doesn't lose the previously set clipping
region any more, in wxGridCellStringRenderer::Draw() to ensure that we
don't overflow the area allocated for the cell.

Closes #17872.
This commit is contained in:
jonkraber
2017-12-24 15:43:20 +01:00
committed by Vadim Zeitlin
parent ba719c576e
commit 7f52ff751f
2 changed files with 5 additions and 4 deletions

View File

@@ -1871,7 +1871,10 @@ void wxGrid::Render( wxDC& dc,
dc.DrawRectangle( pointOffSet, sizeCells ); dc.DrawRectangle( pointOffSet, sizeCells );
// draw cells // draw cells
{
wxDCClipper clipper( dc, wxRect(pointOffSet, sizeCells) );
DrawGridCellArea( dc, renderCells ); DrawGridCellArea( dc, renderCells );
}
// draw grid lines // draw grid lines
if ( style & wxGRID_DRAW_CELL_LINES ) if ( style & wxGRID_DRAW_CELL_LINES )

View File

@@ -630,8 +630,7 @@ void wxGridCellStringRenderer::Draw(wxGrid& grid,
for (int i = col + cell_cols; i <= col_end; i++) for (int i = col + cell_cols; i <= col_end; i++)
{ {
clip.width = grid.GetColSize(i) - 1; clip.width = grid.GetColSize(i) - 1;
dc.DestroyClippingRegion(); wxDCClipper clipper(dc, clip);
dc.SetClippingRegion(clip);
SetTextColoursAndFont(grid, attr, dc, SetTextColoursAndFont(grid, attr, dc,
grid.IsInSelection(row,i)); grid.IsInSelection(row,i));
@@ -644,7 +643,6 @@ void wxGridCellStringRenderer::Draw(wxGrid& grid,
rect = rectCell; rect = rectCell;
rect.Inflate(-1); rect.Inflate(-1);
rect.width++; rect.width++;
dc.DestroyClippingRegion();
} }
} }