48 lines
1.9 KiB
C++
48 lines
1.9 KiB
C++
#pragma once
|
|
// tooltip — layout math + text helper behind the bank_panel's custom hover-delay tooltip. Button
|
|
// faces stay short; hovering pops a small tooltip with the full action name, "ReaSampler:"
|
|
// display prefix stripped. Custom LICE-kit draw, not the native Win32/SWELL tooltip control, for
|
|
// cross-platform uniformity with the rest of the kit.
|
|
|
|
#include <string>
|
|
|
|
namespace reasampler::ui {
|
|
|
|
// Zero-area means "do not draw" (degenerate inputs); caller checks empty() first.
|
|
struct TooltipBox {
|
|
int x = 0;
|
|
int y = 0;
|
|
int width = 0;
|
|
int height = 0;
|
|
|
|
bool empty() const { return width <= 0 || height <= 0; }
|
|
|
|
bool operator==(const TooltipBox& o) const {
|
|
return x == o.x && y == o.y && width == o.width && height == o.height;
|
|
}
|
|
};
|
|
|
|
// gap: vertical gap between anchor button and tooltip. padX/padY: text padding inside the box.
|
|
// margin: minimum clearance from client edges when clamping.
|
|
struct TooltipSpec {
|
|
int gap = 4;
|
|
int padX = 6;
|
|
int padY = 3;
|
|
int margin = 2;
|
|
};
|
|
|
|
// Strips the action display prefix (e.g. "ReaSampler: ") from a full action name for the
|
|
// tooltip face. If fullName doesn't start with prefix, returned unchanged (defensive). Empty
|
|
// prefix returns fullName unchanged.
|
|
std::string stripActionPrefix(const std::string& fullName, const std::string& prefix);
|
|
|
|
// Places a tooltip of size (textW + 2*padX) x (textH + 2*padY) for the anchor button rect,
|
|
// clamped inside the client rect. Prefers BELOW the anchor, centered; flips ABOVE if it would
|
|
// clip the bottom edge, then clamps to stay within `margin` of the client edges. Empty when the
|
|
// text extent or client is degenerate. textW/textH are measured by the shell before calling.
|
|
TooltipBox computeTooltip(int anchorX, int anchorY, int anchorW, int anchorH,
|
|
int textW, int textH, int clientW, int clientH,
|
|
const TooltipSpec& spec);
|
|
|
|
} // namespace reasampler::ui
|