On 5/20/19 3:29 PM, Gabriel Ivăncescu wrote:
On 5/20/19 3:24 PM, Nikolay Sivov wrote:
On 4/22/19 3:32 PM, Gabriel Ivăncescu wrote:
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
Currently the early break happens only with single-column listboxes. This makes it so that it works properly with multi-column listboxes as well.
dlls/comctl32/listbox.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/dlls/comctl32/listbox.c b/dlls/comctl32/listbox.c index bd9cffd..69fa56a 100644 --- a/dlls/comctl32/listbox.c +++ b/dlls/comctl32/listbox.c @@ -1149,6 +1149,7 @@ static LRESULT LISTBOX_Paint( LB_DESCR *descr, HDC hdc ) rect.right += descr->column_width; rect.top = 0; col_pos = descr->page_size - 1; + if (rect.left >= descr->width) break; } else {
How does this work for RTL case?Existing optimization for single column case is testing in vertical direction, so it's not the same.
Hi Nikolay,
I think it works fine since the coordinates are mirrored (i.e. increasing means going left). Because the code already does rect.right += descr->column_width; just above that, so that line would be wrong already if it didn't work in RTL. (it would paint items in the wrong order)
Fair enough. I tried it briefly before replying and it showed some artifacts when resizing, that does not happen in LTR. Turns out it glitches without your patch as well.