iconGrid: Create icon clones in a separate loop
For reasons not yet fully understood,
Main.uiGroup.add_actor takes around
10 milliseconds to complete.
Because of this, each
actor.opacity = 0 has a good chance of falling
on a different frame. And when it does,
_opacityChangedId also lands
on multiple different frames each incurring a separate relayout cycle.
It is this excessive number of relayouts that causes stuttering in the
icon grid animation (#2065 (closed)). But it is the slowness of
that causes the number to be excessive when it should be one.
By creating the clones and adding them to
uiGroup early, we then enable
the existing loop starting the animation to complete within a single frame.
And by completing within a single frame all the opacity changes land within
the same frame interval, thus incurring only a single relayout instead of
Closes: #2065 (closed)