TextureGroup / Texture

Smooth asynchronous user interfaces for iOS apps.
https://texturegroup.org/
Other
8.02k stars 1.29k forks source link

Always use the correct representation when drawing image #2044

Open bdolman opened 3 years ago

bdolman commented 3 years ago

Before this change, the image asset (which may contain multiple reps of an image for differing traits) was only consulted when the trait collection changed. But in cases where display was scheduled on the node and the trait collection had not changed, the image node ends up with the default representation instead.

An example of this:

You have an image asset with two versions: light (default) and dark. The device is currently in dark mode The image is being presented in an item in a collection node.

  1. Item node is first added to hierarchy. Trait collection doesn't match so regenerateFromImageAsset=true.
  2. Dark image is rendered, as expected
  3. Item node is scrolled off screen
  4. Item is scrolled back on screen
  5. This triggers display on the item node
  6. Trait collection has NOT changed so regenerateFromImageAsset=false
  7. So, imageAsset is not consulted and default (Light) image is rendered

After looking at this a lot, I don’t see any reason why we need the regenerateFromImageAsset flag at all (introduced in #1663). Whenever the image node is displayed we need to make sure we are generating the correct representation.

CLAassistant commented 3 years ago

CLA assistant check
All committers have signed the CLA.