Skip to content

DarkOneJSP3 v0.9.29 - Unified Derriere ∞

Choose a tag to compare

@Pav-Osmolski Pav-Osmolski released this 06 Aug 09:59
· 4 commits to main since this release

DarkOneJSP3 v0.9.29

This release consolidates the improvements developed from v0.9.20 through v0.9.29, with a strong focus on Album Art responsiveness, unified bottom-area appearance controls, Display/Waveform integration, cross-component synchronisation, factory-reset reliability and release hardening.

Album Art performance

Mouse-wheel navigation through Album Art types has been optimised to prevent repeated synchronous image decoding while scrolling.

  • Added an 80 ms trailing debounce to mouse-wheel artwork selection.

  • Rapid wheel movement now loads only the final selected artwork.

  • Avoids decoding and converting intermediate images that are never displayed.

  • Writes the selected artwork type only after wheel activity settles.

  • Preserves immediate keyboard and context-menu selection.

  • Cancels pending artwork changes when:

    • The track or metadata changes
    • Another immediate selection occurs
    • The script reloads or unloads
  • Avoids unnecessary reloads when a complete wheel cycle returns to the currently displayed artwork.

  • Explicitly disposes active normal and blurred Direct2D bitmaps during script unload.

  • Updated the sample identity to:

    Album Art - Enhanced v0.1.0
    

Shared bottom-area appearance controls

Added one shared appearance configuration for the complete lower interface.

Available from any of the three bottom JScript panels:

DarkOne Tools
└── Appearance
    ├── Bottom area background
    └── Bottom area side divider colour

Bottom area background

One setting now controls:

  • Bottom-left control panel
  • Bottom-right control panel
  • Centre Display panel
  • Bottom Controls JSplitter backing
  • Display/Waveform JSplitter host when Automatic is selected
  • Exposed lower-left, spacer and hidden-waveform regions

Available modes:

  • Transparent / inherit parent
  • Black
  • DarkOne grey
  • DarkOne dark grey
  • Columns UI global background
  • Custom colour

The default remains:

DarkOne grey — #202020

Bottom area side divider colour

One setting controls both lower vertical side-divider strips.

Available modes:

  • Transparent / inherit background
  • Black
  • DarkOne grey
  • DarkOne dark grey
  • Columns UI global background
  • Custom colour

The default remains:

DarkOne dark grey — #181818

The Quick Search border and interior remain independent and unchanged.

Unified inherited appearance

The previous literal transparency behaviour exposed different native JScript Panel and JSplitter surfaces, producing inconsistent shades across the bottom area.

Transparent / inherit parent now resolves uniformly to:

#181818
DOJSP3.colours.separator

This resolved inherited colour is applied consistently across:

  • All three bottom JScript panels
  • Bottom Controls backing
  • Display/Waveform host
  • Display track-information caches
  • Inactive Display elements
  • Exposed areas beneath transparent divider strips

The complete background mapping is now:

Transparent / inherit parent → #181818
Black                        → #000000
DarkOne grey                 → #202020
DarkOne dark grey            → #181818
Columns UI global background → current Columns UI background
Custom colour                → selected custom colour

Display/Waveform Host background

Added:

Automatic - Bottom area background

as the default Display/Waveform Host background mode.

Automatic follows the effective shared Bottom area background, including:

  • Transparent / inherited colour
  • Black
  • DarkOne grey
  • DarkOne dark grey
  • Columns UI global background
  • Custom colour

All existing fixed Host background modes remain available and retain their original property values.

Existing installations with an explicitly saved Host background will keep that selection. Choose Automatic once to enable shared synchronisation.

Cross-component synchronisation

JScript Panel 3 and JSplitter do not share a reliable cross-component notification domain, so the shared appearance system now uses a small runtime state bridge.

Persistent state is stored at:

js_data\darkonejsp3.bottom-area-state.txt
  • The three JScript panels communicate immediately through their shared JScript Panel notification domain.
  • The Bottom Controls JSplitter is the sole continuous file poller.
  • Visible appearance changes are checked every 100 ms.
  • Average JSplitter update delay is approximately 50 ms.
  • No additional Display/Waveform poller is required.
  • Existing state from older test builds is migrated automatically.
  • Runtime state files are excluded from release packages and source control.

Factory-reset hardening

Factory reset now reaches both JScript Panel and JSplitter-owned settings.

A short-lived reset-command bridge is used:

js_data\darkonejsp3.reset-command.txt
  • The Bottom Controls host consumes the command.
  • It rebroadcasts the reset inside the JSplitter notification domain.
  • Commands use unique identifiers.
  • Expired or duplicate commands are rejected.
  • Reset commands are checked every 500 ms.
  • Processed command files are removed or cleared.
  • Write failures are logged instead of failing silently.
  • Appearance and behaviour reset scopes are now classified correctly.

The following option is now correctly treated as behaviour:

Force blank waveform when playback stops

Runtime and efficiency hardening

  • Reduced the shared-state system from four continuous pollers to one.
  • Prevented repeated state-file reads during window resizing.
  • Applied persisted colours unconditionally before the first panel paint.
  • Removed duplicate appearance updates and unnecessary repaints.
  • Divider-only changes no longer rebuild:
    • Button colours
    • Volume-knob resources
    • Display text caches
  • Removed obsolete JSplitter notification plumbing from the earlier experimental implementation.
  • Removed unused JScript polling and snapshot code.
  • Aligned background-menu command mappings across shared helpers.
  • Added diagnostics for both exceptions and failed WriteTextFile() results.
  • Added one delayed retry for failed bottom-area state writes.
  • Kept runtime-generated files outside the maintained project source tree.

Compatibility

No Columns UI layout changes are required.

Existing:

  • Panel properties
  • Colours
  • Caches
  • Scroll settings
  • Album Art selections
  • Display/Waveform settings

are retained.

No panel-script reimport is required for the shared bottom-area changes.

To display the updated Album Art sample name and version in the foobar2000 console, manually load:

user-components-x64/foo_jscript_panel3/samples/Album Art.txt

The supplied FCL has been updated.

Documentation

The GitHub Wiki has been updated for v0.9.29 with:

  • Album Art performance guidance
  • Shared bottom-area appearance controls
  • Automatic Display/Waveform background behaviour
  • Unified inherited-colour behaviour
  • Runtime state architecture
  • Factory-reset bridge details
  • Updated troubleshooting
  • Expanded FAQ content
  • Complete release history through v0.9.29
  • JSplitter 4.1.12 references

Validation

The completed release passed an expanded hardening suite:

  • 200 project files audited
  • Zero validation warnings
  • All six background modes tested across JScript Panel and JSplitter hosts
  • Full divider-colour mode coverage
  • First-paint persistence tested
  • Restart persistence tested
  • Isolated JScript Panel and JSplitter communication tested
  • One-time panel initialisation tested
  • Repeated-resize behaviour tested
  • Divider-only update efficiency tested
  • Automatic and fixed Display/Waveform modes tested
  • Transparent inherited rendering tested
  • Factory-reset propagation tested across both component hosts
  • Appearance and behaviour reset scopes tested
  • Expired and duplicate reset commands tested
  • State-write failure and retry handling tested
  • 100 ms appearance and 500 ms reset cadence tested
  • Album Art wheel debounce tested
  • Album Art unload bitmap disposal tested
  • Clean extracted archive passed the complete validator
  • All packaged files matched the validated source tree
  • No runtime state, reset-command, temporary or compiled files included
  • ZIP integrity and archive-path safety passed

Tested successfully with:

  • foobar2000 v2.25.10 x64 portable
  • JScript Panel 3.8.5
  • JSplitter 4.1.12