mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-09-27 17:58:47 +00:00
* ui: blur media by resampling the preview, not a per-frame effect Modifier.blur put a BlurEffect on a display-sized graphics layer, so the Gaussian was re-evaluated on every frame the media was drawn. It also requires RenderEffect, which Android applies only from API 31, so below Android 12 media was drawn unblurred while the setting read as on. A blur and a downscale discard the same thing - detail finer than their radius - so the preview is now resampled to about one pixel per radius and stretched back. That runs once when the item composes, needs no RenderEffect, and removes the detail irreversibly rather than convolving it. The first resampling step bounds both sides, so no image, however shaped, can produce a large intermediate. While the blur hides the media the file is also left unread, so an image scrolled past is no longer read, decoded at its full size and kept in the image cache only to be hidden again. blurHidesMedia() is the single definition that both the drawing and the loading decision use, so they cannot disagree about whether the media is on screen. * plans: blur media by resampling the preview * ui: shorten comments in media blur * ui: smooth the media blur and match its strength to the old one Stretching the resampled preview straight to the screen showed its pixel grid. Double it back up until its longest side is at least half the reference width before drawing, so the last stretch is short and the tents compose into a bell. The reference width moves from 360 to 400: fitted against Gaussians, 360 blurred 5-75% more than Modifier.blur did, 400 is within 10% at every setting.