DarkOneJSP3 v0.9.37 - Render Blender 🖥️
DarkOneJSP3 v0.9.37
This release focuses on rendering performance, lower allocation overhead, improved resource management and final hardening of the shared bottom-area Custom colour controls.
It includes all changes made since v0.9.29.
Rendering and performance improvements
JS Playlist
- Removed repeated native playlist-manager calls from the visible-row paint path.
- Cached playlist selection, playback state and the currently playing item.
- Reused visible row objects during sequential scrolling.
- Cached resolved column geometry until the layout changes.
- Cached group-header measurements until their fonts or content change.
- Retained full rebuilding for structural playlist changes, sorting and large jumps.
These changes reduce JavaScript allocation, native API traffic and garbage collection during scrolling.
Control panels
- Reused existing button objects during window resizing.
- Added geometry updates instead of recreating complete button collections.
- Reused the volume-knob object while updating its dimensions.
- Cached unchanged control-panel fonts.
- Continued rebuilding resources when style, scaling or font properties genuinely change.
Dot Matrix Display
- Replaced repeatedly rebuilt composite time, bitrate and track-number images with direct draws from cached Direct2D sprite sheets.
- Removed the recurring dispose-and-recreate cycle for complete numeric display images.
- Cached Display fonts and value-label measurements until their effective settings change.
- Fixed a startup regression caused by a remaining reference to the retired composite-image cache API.
- Added validation comparing Display API calls against methods actually exposed by
Object_DisplaySystem.js.
InfoStack
- Added a cached render model containing:
- Visible tabs
- Resolved labels
- Tab rectangles
- Background colour
- Accent colour
- Paint and hit-testing operations now reuse the cached model.
- The cache is invalidated only when layout, visibility, labels, colours or dimensions change.
Queue Viewer
- Replaced repeated visible-row selection searches with a constant-time lookup.
- Reduced large source scans to approximately 5 ms work slices.
- Added a 5 ms yield between scan slices.
- Reduced elapsed-time checks by processing items in small batches.
Playlist Manager
- Removed
plman.PlaylistCountreads from the paint path. - Uses the playlist count maintained by existing callbacks.
Album Art
- Deferred blurred artwork generation until a blur-using layout actually requests it.
- Coalesced repeated blur requests into one deferred operation.
- Avoided blur generation for layouts that do not display it.
- Added cancellation and explicit disposal for pending blur sources, timers and active Direct2D bitmaps.
- Preserved compatibility with older saved AllMusic review entries.
Bottom-area Custom colour controls
The Custom colour options now work correctly for:
- Bottom area background
- Bottom area side divider colour
The final implementation:
- Converts stored opaque ARGB colours to signed 32-bit integers only when calling the native JScript Panel colour picker.
- Preserves the existing unsigned colour format used by rendering, saved properties and runtime-state files.
- Uses one shared command-dispatch path for fixed and Custom colour selections.
- Keeps the previous mode and colour unchanged when the picker is cancelled.
- Keeps the previous state unchanged if the native picker fails.
- Rejects invalid, fractional, infinite or out-of-range picker results.
- Logs contextual picker errors instead of silently ignoring them.
- Guarantees popup-menu cleanup with
try/finally. - Preserves compatibility with older saved panel entries through a validated local fallback.
- Uses the canonical shared colour helper for current Control Panel entries.
Menu and runtime hardening
- Added an end-to-end test that constructs and executes the real DarkOne Tools popup hierarchy.
- Tests the actual Custom command IDs used by the live menus.
- Verifies signed picker arguments and selected-colour persistence.
- Verifies runtime-state file updates.
- Tests cancellation and native picker failure.
- Confirms every generated popup-menu object is disposed exactly once.
- Removed redundant Custom-only dispatch and unsuccessful deferred-picker code.
- Synchronised the project and standalone Enhanced Sample Library colour helpers.
Documentation and package updates
- Revised the main README.
- Replaced the main and Album Notes screenshots with WebP assets.
- Updated validation tooling and static checks.
- Refreshed the supplied maintainer-exported FCL.
- Updated the evergreen GitHub Wiki for the current implementation.
- Consolidated the Custom colour investigation into one concise history entry rather than listing each superseded test build separately.
Compatibility and upgrading
Merge the new package over the previous installation and restart foobar2000.
Existing:
- Panel properties
- Bottom-area colours
- Divider colours
- Runtime state
- Playlist settings
- Album Art selections
- Display settings
- Caches and source preferences
are retained.
No panel-script reimport is required for the functional changes.
The supplied FCL has been refreshed. Importing it is optional for existing installations, but it can be used when creating a new layout or when you want the latest maintainer-exported panel configuration.
Validation
The completed release passed the expanded release-hardening suite:
- 200 project files audited
- Zero validation warnings
- JavaScript preprocessing and syntax validation passed
- Rendering-cache and row-reuse tests passed
- Control-panel resize-reuse tests passed
- Direct Dot Matrix sprite rendering tested
- InfoStack render-model caching tested
- Queue Viewer scan-budget and selection tests passed
- Lazy Album Art blur lifecycle tested
- Display API compatibility validated
- Real DarkOne Tools menu hierarchy tested
- Custom background and divider colour selection tested
- Signed native colour-picker arguments tested
- Picker cancellation and failure behaviour tested
- Runtime-state persistence tested
- Exactly-once popup disposal tested
- Compatibility mirrors verified
- Clean extracted archive passed the full validator
- No runtime, temporary, backup or compiled files included
- ZIP integrity and archive-path safety passed
Tested with:
- foobar2000 v2.25.10 x64 portable
- JScript Panel 3.8.5
- JSplitter 4.1.12