tidbyt / pixlet

Build apps for pixel-based displays ✨
https://tidbyt.com
Apache License 2.0
756 stars 107 forks source link

Marquee Widget speed - feature request #153

Open danrods opened 2 years ago

danrods commented 2 years ago

I'm not sure if this is exactly the best place to put this, happy to put this anywhere needed.

It's difficult to include a screenshot for this but I noticed when I use the Marquee widget, especially in vertical mode that it scrolls so fast I can barely make out what it says. A possible feature request would be to allow fine-tuning the speed of the marquee to make it easier to read.

I'm not sure exactly how to do it or I would open a PR for this, but I can imagine the issue is the number of frames used is too low when its animated? Any help would be appreciated!

danrods commented 2 years ago

Note, I've tried setting the box bigger so it has longer to scroll but there is a breaking point where there is a long break between the text showing up because of empty frames. before and after the text. Still a little flimsy, having a native option would be less error prone and give a better experience

render.Box(
                    height=22,
                    child=render.Marquee(
                         width=64,
                         height=23,
                         child=render.Box(
                             height=256,
                             child=render.WrappedText(content=<insert long text>,
                                                      color="#fde333",
                                                      font="6x13"
                                                      )
                         ),
                         scroll_direction="vertical"
                    )

                )
vlauffer commented 2 years ago

I've found that adding a delay parameter to the root will change the speed of the scroll. Here's an example:

def main():
    return render.Root(
        delay = 100,
        child = render.Marquee(
            width = 64, 
            height = 32,
            scroll_direction = 'vertical',
            child = render.WrappedText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
        ),

    )

A couple things to be aware of:

Haven't dug super deep into the Marquee code so not sure why this happens, but this is what works in my project and I hope it works in yours too!

LukiLeu commented 2 years ago
  • a delay value of 11 seems like the fastest possible scroll speed
  • any value below 11 seems to cause problems (when testing on tidbyt hardware instead of computer with value 1, noticed that the screen never moves on to next app)
  • The higher the value (11 and up), the slower the scroll speed gets.

Just some notes here: The delay value is in milliseconds. I guess if the animation speed is faster than the TidByt refresh rate (just a wild guess), it might break the app cycling. Note that this delay value is valid for all used marquee and animation schemas in your app (if used multiple)