[wxPython-users] The grid control -- problems and questions
Bob Klahn
cwdbeast at comcast.net
Tue Sep 4 03:55:24 PDT 2007
At 10:10 PM 9/3/2007, Robin wrote:
>Bob Klahn wrote:
>>The attached grid code features a custom renderer. In that
>>renderer, apart from drawing the given cell, I print the row, col,
>>and isSelected values to stdout, along with the number of the
>>current call to the draw routine (1, 2, 3, ...).
>>Some questions:
>> (1) How do I best avoid the excessive drawing that occurs
>> (a) when switching to another application and switching back?
>> (b) when resizing the test frame?
>
>Which platform are you on?
Windows XP SP2
>If on the Mac then I think there is code in wxGrid that always
>redraws all of the visible cells instead of optimizing it down as is
>done on the other platforms.
>Otherwise only those cells that intersect with whatever region the
>OS reports needs to be redrawn are painted.
Then, since
>The Grid class doesn't make use of any double buffering at all, and
>would probably need to be rearchitected to be able to do so, but in
>practice the method it does use is normally efficient enough.
>
>> (2) Note the rows that are redrawn as one clicks on different rows.
>> (a) When one clicks on the row immediately below the
>> current row,
>> (i) notice the color of the rightmost column
>> -- Why is that happening?
>> -- Why is it different when moving
>> from row 0 to row 1, versus
>> moving from row n to row n+1 where n <> 0 ?
>
>I don't notice any color problem so I'm not quite sure what you are
>talking about, but I do notice that you never specify in your
>renderer's Draw method what the text foreground color should be, so
>whatever it was set to previously in the DC will be used. Perhaps
>that is what you are seeing.
>
>
>> (ii) notice which rows are redrawn, and in what order
>> -- Why so many?
>> (b) When one clicks on any row not immediately below
>> the current row,
>> (i) notice that the color problem seen above
>> does not occur
>> -- Why not?
>> (ii) notice that fewer rows are redrawn
>> -- Why?
>
>IIRC, when a new cell selected then the cells around the old one are
>marked as needing refreshed because the cursor rectangle can overlap
>the other cells by 1 pixel, so those cells end up getting redrawn to
>be able to restore the border where the cursor used to be.
More information about the wxpython-users
mailing list