Skip to content

feat: add customizable PyUI screensaver#92

Open
vigstudio wants to merge 1 commit into
chrisj951:mainfrom
vigstudio:feature/pyui-screensaver-customization
Open

feat: add customizable PyUI screensaver#92
vigstudio wants to merge 1 commit into
chrisj951:mainfrom
vigstudio:feature/pyui-screensaver-customization

Conversation

@vigstudio

Copy link
Copy Markdown
Contributor

Summary

Adds a full screensaver customization system to PyUI with background images, GIF support, RGB color picker, visual widget layout editor, battery styles, and bundled fonts.

Features

  • Background image/GIF picker - scans user folder, theme folder, and default
  • RGB color picker - R/G/B sliders with live preview (A save, B cancel)
  • Visual widget layout editor - D-pad move, L1/R1 size, L2/R2 palette color, START RGB, Y font/battery style, X toggle, SELECT widget switch
  • 5 battery styles - percent, blocks, bar, pill, segments
  • 8 bundled fonts - PressStart2P, VT323, Silkscreen, PixelifySans, Orbitron, Audiowide, BungeeShade, EmilysCandy
  • Overlay - configurable opacity/color/blur
  • GIF animation - frame-by-frame rendering via IMG_LoadAnimation (no texture cache to save RAM)
  • Render target fix - screensaver renders to render_canvas then Display.present() (no bars)
  • Top/bottom bar hidden during screensaver via _present_without_bars()
  • Wake input does not pass through to menus
  • In-game guard - _game_running flag prevents screensaver during gameplay

Files Changed

  • New: display/screensaver.py (444 lines) - ScreenSaver class
  • New: menus/settings/screensaver_settings_menu.py (450 lines) - Settings UI
  • New: hemes/screensaver.png - Default retro synthwave background
  • New: onts/ - 8 TTF files
  • New: docs/pyui-screensaver-customization.md - Install/usage docs
  • Modified: controller/controller.py - idle timeout, _try_start_screensaver
  • Modified: display/display.py - blank_screen, restore_from_blank, set_page_bg guard
  • Modified: hemes/theme.py - screensaver getter methods
  • Modified: utils/py_ui_config.py - get_screensaver_timeout_sec
  • Modified: �iews/*.py - screensaver render guards
  • Modified: menus/games/in_game_menu_listener.py - _game_running flag
  • Modified: menus/settings/extra_settings_menu.py - screensaver menu entry

Device Verified

  • CPU low, PyUI RSS ~91-105MB, no errors in log after fixes
  • Screensaver activates after idle timeout, wakes on any input
  • In-game flag prevents screensaver during gameplay

Docs

  • docs/pyui-screensaver-customization.md - full install and usage guide
  • docs/pyui-screensaver-style-preview.png - style preview contact sheet

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant