mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-20 13:46:30 +01:00
allow to en/disable shade and LED meter style
This commit is contained in:
parent
efb16a6faa
commit
fa332f31fa
3 changed files with 38 additions and 25 deletions
|
|
@ -257,6 +257,7 @@ LevelMeter::setup_meters (int len, int initial_width, int thin_width)
|
||||||
uint32_t c[10];
|
uint32_t c[10];
|
||||||
uint32_t b[4];
|
uint32_t b[4];
|
||||||
float stp[4];
|
float stp[4];
|
||||||
|
int styleflags = 3;
|
||||||
b[0] = ARDOUR_UI::config()->canvasvar_MeterBackgroundBot.get();
|
b[0] = ARDOUR_UI::config()->canvasvar_MeterBackgroundBot.get();
|
||||||
b[1] = ARDOUR_UI::config()->canvasvar_MeterBackgroundTop.get();
|
b[1] = ARDOUR_UI::config()->canvasvar_MeterBackgroundTop.get();
|
||||||
b[2] = 0x991122ff; // red highlight gradient Bot
|
b[2] = 0x991122ff; // red highlight gradient Bot
|
||||||
|
|
@ -337,6 +338,7 @@ LevelMeter::setup_meters (int len, int initial_width, int thin_width)
|
||||||
stp[3] = 115.0 * meter_deflect_vu(-18); // +2
|
stp[3] = 115.0 * meter_deflect_vu(-18); // +2
|
||||||
b[0] = 0x80806dff;
|
b[0] = 0x80806dff;
|
||||||
b[1] = 0xc0c0a3ff;
|
b[1] = 0xc0c0a3ff;
|
||||||
|
styleflags = 1;
|
||||||
break;
|
break;
|
||||||
default: // PEAK, RMS
|
default: // PEAK, RMS
|
||||||
stp[1] = 77.5; // 115 * log_meter(-10)
|
stp[1] = 77.5; // 115 * log_meter(-10)
|
||||||
|
|
@ -365,7 +367,8 @@ LevelMeter::setup_meters (int len, int initial_width, int thin_width)
|
||||||
c[0], c[1], c[2], c[3], c[4],
|
c[0], c[1], c[2], c[3], c[4],
|
||||||
c[5], c[6], c[7], c[8], c[9],
|
c[5], c[6], c[7], c[8], c[9],
|
||||||
b[0], b[1], b[2], b[3],
|
b[0], b[1], b[2], b[3],
|
||||||
stp[0], stp[1], stp[2], stp[3]
|
stp[0], stp[1], stp[2], stp[3],
|
||||||
|
styleflags
|
||||||
);
|
);
|
||||||
meters[n].width = width;
|
meters[n].width = width;
|
||||||
meters[n].length = len;
|
meters[n].length = len;
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,8 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
|
||||||
int bgc0, int bgc1,
|
int bgc0, int bgc1,
|
||||||
int bgh0, int bgh1,
|
int bgh0, int bgh1,
|
||||||
float stp0, float stp1,
|
float stp0, float stp1,
|
||||||
float stp2, float stp3
|
float stp2, float stp3,
|
||||||
|
int styleflags
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
orientation = o;
|
orientation = o;
|
||||||
|
|
@ -88,6 +89,8 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
|
||||||
_stp[2] = stp2;
|
_stp[2] = stp2;
|
||||||
_stp[3] = stp3;
|
_stp[3] = stp3;
|
||||||
|
|
||||||
|
_styleflags = styleflags;
|
||||||
|
|
||||||
set_events (BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK);
|
set_events (BUTTON_PRESS_MASK|BUTTON_RELEASE_MASK);
|
||||||
|
|
||||||
pixrect.x = 1;
|
pixrect.x = 1;
|
||||||
|
|
@ -96,7 +99,7 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
|
||||||
if (!len) {
|
if (!len) {
|
||||||
len = 250;
|
len = 250;
|
||||||
}
|
}
|
||||||
fgpattern = request_vertical_meter(dimen, len, _clr, _stp, true);
|
fgpattern = request_vertical_meter(dimen, len, _clr, _stp, _styleflags);
|
||||||
bgpattern = request_vertical_background (dimen, len, _bgc, false);
|
bgpattern = request_vertical_background (dimen, len, _bgc, false);
|
||||||
pixheight = len;
|
pixheight = len;
|
||||||
pixwidth = dimen;
|
pixwidth = dimen;
|
||||||
|
|
@ -116,7 +119,7 @@ FastMeter::~FastMeter ()
|
||||||
|
|
||||||
Cairo::RefPtr<Cairo::Pattern>
|
Cairo::RefPtr<Cairo::Pattern>
|
||||||
FastMeter::generate_meter_pattern (
|
FastMeter::generate_meter_pattern (
|
||||||
int width, int height, int *clr, float *stp, bool shade)
|
int width, int height, int *clr, float *stp, int styleflags)
|
||||||
{
|
{
|
||||||
guint8 r,g,b,a;
|
guint8 r,g,b,a;
|
||||||
double knee;
|
double knee;
|
||||||
|
|
@ -177,7 +180,7 @@ FastMeter::generate_meter_pattern (
|
||||||
cairo_pattern_add_color_stop_rgb (pat, 1.0,
|
cairo_pattern_add_color_stop_rgb (pat, 1.0,
|
||||||
r/255.0, g/255.0, b/255.0);
|
r/255.0, g/255.0, b/255.0);
|
||||||
|
|
||||||
if (shade && !no_rgba_overlay) {
|
if ((styleflags & 1) && !no_rgba_overlay) {
|
||||||
cairo_pattern_t* shade_pattern = cairo_pattern_create_linear (0.0, 0.0, width, 0.0);
|
cairo_pattern_t* shade_pattern = cairo_pattern_create_linear (0.0, 0.0, width, 0.0);
|
||||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 0, 1.0, 1.0, 1.0, 0.2);
|
cairo_pattern_add_color_stop_rgba (shade_pattern, 0, 1.0, 1.0, 1.0, 0.2);
|
||||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 1, 0.0, 0.0, 0.0, 0.3);
|
cairo_pattern_add_color_stop_rgba (shade_pattern, 1, 0.0, 0.0, 0.0, 0.3);
|
||||||
|
|
@ -190,6 +193,7 @@ FastMeter::generate_meter_pattern (
|
||||||
cairo_rectangle (tc, 0, 0, width, height);
|
cairo_rectangle (tc, 0, 0, width, height);
|
||||||
cairo_fill (tc);
|
cairo_fill (tc);
|
||||||
|
|
||||||
|
if (styleflags & 2) { // LED stripes
|
||||||
cairo_save (tc);
|
cairo_save (tc);
|
||||||
cairo_set_line_width(tc, 1.0);
|
cairo_set_line_width(tc, 1.0);
|
||||||
cairo_set_source_rgba(tc, .1, .1, .1, .5);
|
cairo_set_source_rgba(tc, .1, .1, .1, .5);
|
||||||
|
|
@ -200,6 +204,7 @@ FastMeter::generate_meter_pattern (
|
||||||
cairo_stroke (tc);
|
cairo_stroke (tc);
|
||||||
}
|
}
|
||||||
cairo_restore (tc);
|
cairo_restore (tc);
|
||||||
|
}
|
||||||
|
|
||||||
cairo_set_source (tc, shade_pattern);
|
cairo_set_source (tc, shade_pattern);
|
||||||
cairo_rectangle (tc, 0, 0, width, height);
|
cairo_rectangle (tc, 0, 0, width, height);
|
||||||
|
|
@ -270,7 +275,7 @@ FastMeter::generate_meter_background (
|
||||||
|
|
||||||
Cairo::RefPtr<Cairo::Pattern>
|
Cairo::RefPtr<Cairo::Pattern>
|
||||||
FastMeter::request_vertical_meter(
|
FastMeter::request_vertical_meter(
|
||||||
int width, int height, int *clr, float *stp, bool shade)
|
int width, int height, int *clr, float *stp, int styleflags)
|
||||||
{
|
{
|
||||||
if (height < min_pattern_metric_size)
|
if (height < min_pattern_metric_size)
|
||||||
height = min_pattern_metric_size;
|
height = min_pattern_metric_size;
|
||||||
|
|
@ -281,7 +286,7 @@ FastMeter::request_vertical_meter(
|
||||||
stp[0], stp[1], stp[2], stp[3],
|
stp[0], stp[1], stp[2], stp[3],
|
||||||
clr[0], clr[1], clr[2], clr[3],
|
clr[0], clr[1], clr[2], clr[3],
|
||||||
clr[4], clr[5], clr[6], clr[7],
|
clr[4], clr[5], clr[6], clr[7],
|
||||||
clr[8], clr[9]);
|
clr[8], clr[9], styleflags);
|
||||||
|
|
||||||
Pattern10Map::iterator i;
|
Pattern10Map::iterator i;
|
||||||
if ((i = vm_pattern_cache.find (key)) != vm_pattern_cache.end()) {
|
if ((i = vm_pattern_cache.find (key)) != vm_pattern_cache.end()) {
|
||||||
|
|
@ -290,7 +295,7 @@ FastMeter::request_vertical_meter(
|
||||||
// TODO flush pattern cache if it gets too large
|
// TODO flush pattern cache if it gets too large
|
||||||
|
|
||||||
Cairo::RefPtr<Cairo::Pattern> p = generate_meter_pattern (
|
Cairo::RefPtr<Cairo::Pattern> p = generate_meter_pattern (
|
||||||
width, height, clr, stp, shade);
|
width, height, clr, stp, styleflags);
|
||||||
vm_pattern_cache[key] = p;
|
vm_pattern_cache[key] = p;
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
|
|
@ -361,7 +366,7 @@ FastMeter::on_size_allocate (Gtk::Allocation &alloc)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pixheight != h) {
|
if (pixheight != h) {
|
||||||
fgpattern = request_vertical_meter (request_width, h, _clr, _stp, true);
|
fgpattern = request_vertical_meter (request_width, h, _clr, _stp, _styleflags);
|
||||||
bgpattern = request_vertical_background (request_width, h, highlight ? _bgh : _bgc, highlight);
|
bgpattern = request_vertical_background (request_width, h, highlight ? _bgh : _bgc, highlight);
|
||||||
pixheight = h - 2;
|
pixheight = h - 2;
|
||||||
pixwidth = request_width - 2;
|
pixwidth = request_width - 2;
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,8 @@ class FastMeter : public Gtk::DrawingArea {
|
||||||
float stp0 = 55.0, // log_meter(-18);
|
float stp0 = 55.0, // log_meter(-18);
|
||||||
float stp1 = 77.5, // log_meter(-9);
|
float stp1 = 77.5, // log_meter(-9);
|
||||||
float stp2 = 92.5, // log_meter(-3); // 95.0, // log_meter(-2);
|
float stp2 = 92.5, // log_meter(-3); // 95.0, // log_meter(-2);
|
||||||
float stp3 = 100.0
|
float stp3 = 100.0,
|
||||||
|
int styleflags = 3
|
||||||
);
|
);
|
||||||
virtual ~FastMeter ();
|
virtual ~FastMeter ();
|
||||||
|
|
||||||
|
|
@ -79,6 +80,7 @@ private:
|
||||||
int _clr[10];
|
int _clr[10];
|
||||||
int _bgc[2];
|
int _bgc[2];
|
||||||
int _bgh[2];
|
int _bgh[2];
|
||||||
|
int _styleflags;
|
||||||
|
|
||||||
Orientation orientation;
|
Orientation orientation;
|
||||||
GdkRectangle pixrect;
|
GdkRectangle pixrect;
|
||||||
|
|
@ -99,14 +101,14 @@ private:
|
||||||
static bool no_rgba_overlay;
|
static bool no_rgba_overlay;
|
||||||
|
|
||||||
static Cairo::RefPtr<Cairo::Pattern> generate_meter_pattern (
|
static Cairo::RefPtr<Cairo::Pattern> generate_meter_pattern (
|
||||||
int w, int h, int *clr, float *stp, bool shade);
|
int, int, int *, float *, int);
|
||||||
static Cairo::RefPtr<Cairo::Pattern> request_vertical_meter (
|
static Cairo::RefPtr<Cairo::Pattern> request_vertical_meter (
|
||||||
int w, int h, int *clr, float *stp, bool shade);
|
int, int, int *, float *, int);
|
||||||
|
|
||||||
static Cairo::RefPtr<Cairo::Pattern> generate_meter_background (
|
static Cairo::RefPtr<Cairo::Pattern> generate_meter_background (
|
||||||
int w, int h, int *bgc, bool shade);
|
int, int, int *, bool);
|
||||||
static Cairo::RefPtr<Cairo::Pattern> request_vertical_background (
|
static Cairo::RefPtr<Cairo::Pattern> request_vertical_background (
|
||||||
int w, int h, int *bgc, bool shade);
|
int, int, int *, bool);
|
||||||
|
|
||||||
struct Pattern10MapKey {
|
struct Pattern10MapKey {
|
||||||
Pattern10MapKey (
|
Pattern10MapKey (
|
||||||
|
|
@ -114,20 +116,23 @@ private:
|
||||||
float stp0, float stp1, float stp2, float stp3,
|
float stp0, float stp1, float stp2, float stp3,
|
||||||
int c0, int c1, int c2, int c3,
|
int c0, int c1, int c2, int c3,
|
||||||
int c4, int c5, int c6, int c7,
|
int c4, int c5, int c6, int c7,
|
||||||
int c8, int c9
|
int c8, int c9, int st
|
||||||
)
|
)
|
||||||
: dim(w, h)
|
: dim(w, h)
|
||||||
, stp(stp0, stp1, stp2, stp3)
|
, stp(stp0, stp1, stp2, stp3)
|
||||||
, cols(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)
|
, cols(c0, c1, c2, c3, c4, c5, c6, c7, c8, c9)
|
||||||
|
, style(st)
|
||||||
{}
|
{}
|
||||||
inline bool operator<(const Pattern10MapKey& rhs) const {
|
inline bool operator<(const Pattern10MapKey& rhs) const {
|
||||||
return (dim < rhs.dim)
|
return (dim < rhs.dim)
|
||||||
|| (dim == rhs.dim && stp < rhs.stp)
|
|| (dim == rhs.dim && stp < rhs.stp)
|
||||||
|| (dim == rhs.dim && stp == rhs.stp && cols < rhs.cols);
|
|| (dim == rhs.dim && stp == rhs.stp && cols < rhs.cols)
|
||||||
|
|| (dim == rhs.dim && stp == rhs.stp && cols == rhs.cols && style < rhs.style);
|
||||||
}
|
}
|
||||||
boost::tuple<int, int> dim;
|
boost::tuple<int, int> dim;
|
||||||
boost::tuple<float, float, float, float> stp;
|
boost::tuple<float, float, float, float> stp;
|
||||||
boost::tuple<int, int, int, int, int, int, int, int, int, int> cols;
|
boost::tuple<int, int, int, int, int, int, int, int, int, int> cols;
|
||||||
|
int style;
|
||||||
};
|
};
|
||||||
typedef std::map<Pattern10MapKey, Cairo::RefPtr<Cairo::Pattern> > Pattern10Map;
|
typedef std::map<Pattern10MapKey, Cairo::RefPtr<Cairo::Pattern> > Pattern10Map;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue