The FPSMonitor was not performing well enough on RPI3, so I've decided to do it properly. Instead of redrawing the whole graph now only one bar is drawn on each frame. I've made that possible by introducing 2 new properties for surfaces which allowed to draw a scrolling buffer:
`clear` - T/F (Default: T) determines whether to clear the surface or leave the content from the previous frame.
`repeat` - T/F (Default: F) changes the wrapping mode from clamp_to_edge to repeat. Those properties are not exposed atm until I find some interesting usage scenarios for them, I've got some ideas, which I will post later.
AM now is able to detect the refresh rate of the monitor. it takes just 200ms on AM start, but it does not utilize any platform specific functions. I think it's a good trade-off. This is useful for calculating the target speed of frame based animations on displays other than 60Hz. The advantage of frame based animations over time based is that they remain smooth when the frame delta time varies significantly on artwork reloading but there is no skipped frames due to triple buffering.
FPSMonitor plugin updates:
- not fixed to 60Hz anymore
- added frame time graph.
- fixed scaling issues when layout width, or height was overridden
Changed the way the graph is drawn due to some reported problems under DRM. FPS Monitor previously used a trick with surface clones to retrieve a previous frame content which allowed to make a scrolling buffer. Now it's drawn using the conventional method with image clones which is also as fast as before.
* Improve multi-monitor support
Add configurable size & placement for artwork.
Ensure cross-fade completes when entering game.
* Improve MultiMon config labels
Change the MultiMon config labels to have 1-based monitor numbers
instead of 0-based.
* Allow artwork to remain during launch
Remove the clear so that multi-monitor artwork can remain during launch.
* Fix NES romlist crash
Fix crash for NES romlist parsing. For files ending in .nes, the
buff_ptr pointer gets modified, which caused the delete to be incorrect.
- The frontend now includes the "SpecificDisplay" plugin which can be
configured to show a specific display when particular custom input is
received.
- Exposed the fe.Display and fe.Filters arrays for plugin and layout
access from within the config menu
- scripts can now set fe.layout.preserve_aspect_ratio to true to have the
frontend preserve the overall aspect ratio for the layout
- Updated the RotationControl plugin to have a setting for this
- added 'fe.list.search_rule' property to squirrel, which can be used by
plugin scripts to apply a search rule to the currently displayed game
list. The search is cleared when the search_rule property is cleared, or
when the user navigates away from the current display or filter
- The KeyboardSearch plugin demonstrates this functionality
- Added '[Search]' to the available magic tags to allow layouts to display
the currently applied search
Layouts and plugins can use the fe.nv table to store values which will be
available the next time the layout or plugin is loaded. This table is shared
between all layouts and plugins.
- Added the fe.get_art() script command, which can be used to return the
appropriate artwork filenames for a game.
- Updated cools layout with an option for fanart background w/ fade
- Updated reflect layout to use fade for snaps
- Updated multimonitor plugin to use fade
- layouts get displayed on the primary monitor
- the fe.monitors array can be used in squirrel to interact with the
system's monitors. you can add_images etc. to each monitor
- updated Layout.md to describe monitor interface
- Added MultiMon plugin to throw up artworks on other monitors
- Added a framework for launching loader scripts when Attract-Mode can't
find one of its layouts in a layout directory. The only loader
available for now is for MALA.
- Added loader script for MALA layouts, with most features being supported.
Includes options for animating the MALA game list and for fade transitions.
- Updated documentation.
- fe.get_input_state() can now test if any control mapped to a
particular frontend action is pressed. For example
fe.get_input_state( "select" ) will return true if any button mapped to
game selection is pressed.
- transition and tick callback functions inside squirrel tables or class
instances can now be registered.
- Improvements for multiline text display in the frontend
- Added ability to run squirrel script functions from the config menus for
layouts, plugins and the screensaver.
- Added a plugin for history.dat viewing.
- Added a "submenu" module to simplify creating submenus in
layouts/plugins.
- Removed some deprecated script functions.
- Added a UtilityMenu plugin that can be configured to run up to six
different shell commands or other squirrel scripts. Included a script
(any_command.nut) that when run will prompt the user to enter the command
to run and will display the output in the frontend.
- Added the fe.list_dialog() and fe.edit_dialog() script functions which
allow scripts to prompt the user for input.
- Handle newline characters in text objects appropriately
- Load the blob, io, and system squirrel libraries for scripts
- Removed the "command" setting associated with plug-ins, The interface
for the "fe.plugin_command()" functions change as a result
- Added "fe.load_module()" script function
- The "Toggle Layout" action will now just toggle between layout scripts
beginning with "layout" in their name... so between "layout.nut" and
"layout.90.nut" for example
- Extended configurability of plugins to layouts and screensavers
- Attrac-Man Layout: player controls can now be configured from the UI
- Screen Saver: modes can now be configured by user