skin_engine: hold option for the peak meter bars

The %pL and %pR bars followed every drop of the level, and had nothing
like the peak marker of the built-in peak meter. With the new "hold"
bar option a bar falls back at the peak meter's release rate, and the
highest level is held for the peak hold time, both from the same
settings as the built-in meter (peak_meter_get_times()). Without the
option the bars are as before.

The held peak is a block ending at the held level, 1 pixel thick or as
many as the optional number after "hold" says (eg. "hold, 4"). On a bar
with a fill image the block is drawn from the same part of the image,
so a bar drawn as LED segments holds a whole segment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Change-Id: I5c6262ba02b7d2df6c5f80f15d4a1d4354ef8e26
This commit is contained in:
Marcin Bukat 2026-10-07 11:51:13 +02:00 • committed by Solomon Peachy
parent 70c5a4e9e9
commit 7d090f24b9
6 changed files with 139 additions and 2 deletions

View file

@ -810,6 +810,13 @@ display cycling round the defined sublines. See
specify an image.
\item[nobar] -- don't draw the bar or its frame (for use with the
``slider'' option).
\item[hold] -- for the peak meter bars (\config{\%pL}, \config{\%pR}):
the bar falls back at the peak meter's release rate instead of
following each drop, and the highest level is held for the peak hold
time. The next param may be a number, the thickness of the held peak in
pixels (default 1). With a fill image the held peak is drawn from that
part of the image, so for a bar drawn as LED segments set it to the size
of one segment.
\opt{touchscreen}{
\item[notouch] -- don't create the touchregion for progress/volume bars.
\item[touchlabel] -- the next option sets the label of the bar touch area, for linking with the \%Tl tag.