Files
reasampler/src/core/ui/card_meta.h
T

49 lines
2.3 KiB
C++

#pragma once
// card_meta — formatting for the bank card's decorative metadata overlay: capture length as
// bars.beats.subdivisions (bottom-left, musical) and seconds.milliseconds (bottom-right,
// wall-clock). Both are non-interactive; bank_panel draws them via the kit.
#include <string>
#include "core/ui/rect.h"
namespace reasampler::ui {
// Both card overlay strips — the name line across the top, the length read-out along the
// bottom — are this tall, with this much horizontal inset.
inline constexpr int kCardStripHeight = 12;
inline constexpr int kCardStripPad = 3;
// The strip the card's name line occupies: across the top of the cell, drawn OVER the
// waveform exactly as the length read-out is drawn over it at the bottom, rather than a
// reserved non-drawing band — kCardStripHeight (12px) is a small slice of the shipping 84px
// cell, and the overlay matches the bottom read-out's existing convention rather than
// introducing a second layout rule. The draw site scrims behind the text so it stays legible
// over the waveform's accent fill (`kCardNameScrimAlpha`, `theme.h`). Empty when the cell has
// no room for both strips plus a waveform worth looking at — the caller draws nothing rather
// than burying the card under text.
Rect cardNameStrip(const Rect& cell);
// Musical length inputs, taken straight off a Sample's capture-time stamp. tempoBpm 0 = unknown;
// timeSigNum/Denom 0 = unstamped.
struct MusicalLength {
double lengthSeconds = 0.0;
double tempoBpm = 0.0;
int timeSigNum = 0;
int timeSigDenom = 0;
};
// bars.beats.subdivisions from a capture-time tempo + meter stamp.
//
// 1-based, zero-padded to two subdivision digits: "1.1.00" is a bar-aligned/zero-length capture,
// "2.3.50" is 1 bar + 2 beats + half a beat. Unstamped meter or unknown tempo (tempoBpm <= 0)
// returns "" — no musical read-out is derivable, caller keeps the s.ms read-out. Subdivision is
// 0..99 (hundredths of a beat), floored — a display quantum, not tick-accurate PPQ.
std::string formatBarsBeats(const MusicalLength& m);
// seconds.milliseconds from a wall-clock length (always derivable, meter-independent).
// "S.mmm", rounded to nearest ms. Negative length clamps to "0.000".
std::string formatSecondsMs(double lengthSeconds);
} // namespace reasampler::ui