The code there was pretty wild, making clearly wrong assumptions (column size
doesn't, and AFAICS never did, include 20 pixel margin) and also was clearly
uncertain about what it was doing by trying to limit the number of iterations
to some arbitrary cutoff when it is pretty clear that the loop increasing the
width and decreasing the height on each iteration will reach the condition of
"width >= height*1.68" sooner or later.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74751
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
wxDC& dc,
int row, int col)
{
wxDC& dc,
int row, int col)
{
- wxCoord x,y, height , width = grid.GetColSize(col) -20;
- // for width, subtract 20 because ColSize includes a magin of 10 pixels
- // that we do not want here and because we always start with an increment
- // by 10 in the loop below.
- int count = 250; //Limit iterations..
+ const int lineHeight = dc.GetCharHeight();
- wxRect rect(0,0,width,10);
-
- // M is a nice large character 'y' gives descender!.
- dc.GetTextExtent(wxT("My"), &x, &y);
-
- do
- {
- width+=10;
- rect.SetWidth(width);
- height = y * (wx_truncate_cast(wxCoord, GetTextLines(grid,dc,attr,rect,row,col).GetCount()));
- count--;
// Search for a shape no taller than the golden ratio.
// Search for a shape no taller than the golden ratio.
- } while (count && (width < (height*1.68)) );
-
+ wxSize size;
+ for ( size.x = 10; ; size.x += 10 )
+ {
+ const size_t
+ numLines = GetTextLines(grid, dc, attr, size, row, col).size();
+ size.y = numLines * lineHeight;
+ if ( size.x >= size.y*1.68 )
+ break;
+ }
- return wxSize(width,height);
// ----------------------------------------------------------------------------
// wxGridCellStringRenderer
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// wxGridCellStringRenderer
// ----------------------------------------------------------------------------