I would like to display many (appx. 1,000 to 15,000) images – each of which has some processing – alongside other information in a scrollable view. Based on the GTK documentation, GtkColumnView seemed to be just the right widget suited for this (but I am open if anyone knows a better solution).
But on my current attempt GtkColumnView is creating and populating about a 70-100 items, of which only about 2 or 3 actually fit on screen at a time… this makes initial display, as well as scrolling, pretty slow… like up to 30 seconds between updates when dragging the scrollbar.
Any suggestions how to tell GtkColumnView how many items (rows) to create?
There is an open bug listview: Have an easy way to get visible items (#4688) · Issues · GNOME / gtk · GitLab for tracking which items are visible, but it’s still “in design”…
If all your rows have the same height, and if you know its value and the number of items, then maybe you can use the scrollbar’s adjustment to guess what’s displayed, and load the corresponding images in priority.
Or do you think maybe hooking into the snapshot() mechanism would be a good idea for this? I didn’t find good documentation for that yet, but as far as I can tell that only gets called when things are actually getting around to be drawn on screen? Because then I could move my costly processing into that phase/layer, and then my processing would only run for the items that are actually getting displayed? Any pointers on how would I do that?
Yeah, using snapshot() to detect if your widget is in the visible area could be an interesting lead.
A possible way to proceed (untested):
declare a new widget (let’s call it MyPicture), inheriting from GtkPicture, and override its snapshot virtual method
populate the columnview with MyPicture widgets, using a placeholder image
in the custom snapshot method, call the parent GtkPicture::snapshot with the same params, and trigger an asynchronous computation of your image, once done update the MyImage with the new data