Hi all,
In the latest days, I encountered flickering problems caused by non-integer bounds of system windows again. For me, the following fails reproducibly in different images:
SystemWindow new openInWorld extent: (24214/31)@(11565/31).
If I hover and unhover the window a few times, its contents are drawn badly and incompletely like this:
[cid:c4d513fa-a423-45b7-9cda-1182a88d7d4a]
* As you can see, the issue also affects other morphs in the same region (in the screenshot I am hovering the implementors button of the background browser).
* The issue only occurs with very complex fractions, so the extent 500 @ 300 / 2 would not be a problem (at least in my image). I could not reproduce it using floats.
* The situation can be also reproduced by composing a few morphs manually, but the more submorphs there, the higher the flickering rate appears to be.
* [World imageForm] does not contain any abnormalities, maybe the problem is related to the damage recording?
I would like to solve this bug, but I'm not sure where the problem actually arises. In general, should morphs be allowed to have non-integer bounds? This could be useful e. g. for exact animations, but we already have some rounding that (unfortunately) rule out this use case:
* #position: appears to round the delta value for movement
* #extent: and #bounds: do no rounding at all.
Should we maybe apply some rounding or at least truncating there? Or just convert the arguments using #asFloat before?
Or do you have any idea how one could debug the problem?
(For relevancy: I often call Preferences >> #changeFontSize:, and each time all windows are drawn badly until I round their bounds. This can indeed be quite annoying:
[cid:e830eb65-4369-445c-acec-b060b136e348])
Looking forward to your help!
Best,
Christoph