adafruit / Adafruit_CircuitPython_DisplayIO_Layout

A Circuitpython helper library for display element layout using displayio.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Zero animation time for `SwitchRound` causes `ZeroDivisionError`

The-Compiler opened this issue · comments

The docs claim that it's possible to set animation_time to zero:

animation: Set animation_time to the duration (in seconds) it will take to transition the switch, set zero if you want it to snap into position immediately

However, the code doesn't actually handle that case, thus leading to a ZeroDivisionError here:

position = (elapsed_time) / self._animation_time # fraction from 0 to 1

Traceback:

Traceback (most recent call last):
  [...]
  File "adafruit_displayio_layout/widgets/switch_round.py", line 830, in value
  File "adafruit_displayio_layout/widgets/switch_round.py", line 792, in selected
  File "adafruit_displayio_layout/widgets/switch_round.py", line 767, in _animate_switch

Adding this a good first issue so maybe someone will pick it up for Hacktoberfest. The fix is to make sure that if the animation time is zero that the animation process is skipped. This should look something like a check to see if _animation_time is zero, and if it is, calculate the final position, and avoid dividing by the animation time entirely.

I'll pick this up soon-ish if no one does soon!

Can you specify which files are involved?
I can work on this then.

@The-Debarghya See the file I linked in my issue description - that _animate_switch method should be the only place needing a change. Often, changes will also require corresponding doc or tests changes. However, in this case, the docs are already correct, and there seem to be no existing tests (so I'm assuming you won't be expected to add a new one for this change).

Ok thanks, I'm trying to fix this.

Fixed via #76