summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-09-25 15:01:26 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-09-27 14:59:32 -0500
commit29b80725559c8fd60ae51bf33270963e647d0c1c (patch)
treeb4e29a4467c3234b95e55bf0554d54550fe562c5 /libs
parent85c1523611f401a318df4547e2b6f84e0b0d5af8 (diff)
add canvas-based Meter object
Diffstat (limited to 'libs')
-rw-r--r--libs/canvas/canvas/meter.h (renamed from libs/surfaces/push2/meter.h)31
-rw-r--r--libs/canvas/meter.cc (renamed from libs/surfaces/push2/meter.cc)47
-rw-r--r--libs/canvas/wscript1
3 files changed, 72 insertions, 7 deletions
diff --git a/libs/surfaces/push2/meter.h b/libs/canvas/canvas/meter.h
index 720baacf6c..3a1a46cab2 100644
--- a/libs/surfaces/push2/meter.h
+++ b/libs/canvas/canvas/meter.h
@@ -29,9 +29,11 @@
#include "canvas/item.h"
-namespace ArdourSurface {
+namespace ArdourCanvas {
-class Meter : public ArdourCanvas::Item {
+class Canvas;
+
+class Meter : public Item {
public:
enum Orientation {
Horizontal,
@@ -53,6 +55,22 @@ class Meter : public ArdourCanvas::Item {
float stp3 = 100.0,
int styleflags = 3
);
+
+ Meter (ArdourCanvas::Canvas* canvas,
+ long hold_cnt, unsigned long width, Orientation, int len=0,
+ int clr0=0x008800ff, int clr1=0x008800ff,
+ int clr2=0x00ff00ff, int clr3=0x00ff00ff,
+ int clr4=0xffaa00ff, int clr5=0xffaa00ff,
+ int clr6=0xffff00ff, int clr7=0xffff00ff,
+ int clr8=0xff0000ff, int clr9=0xff0000ff,
+ int bgc0=0x333333ff, int bgc1=0x444444ff,
+ int bgh0=0x991122ff, int bgh1=0x551111ff,
+ float stp0 = 55.0, // log_meter(-18);
+ float stp1 = 77.5, // log_meter(-9);
+ float stp2 = 92.5, // log_meter(-3); // 95.0, // log_meter(-2);
+ float stp3 = 100.0,
+ int styleflags = 3
+ );
virtual ~Meter ();
static void flush_pattern_cache();
@@ -95,6 +113,15 @@ class Meter : public ArdourCanvas::Item {
float current_user_level;
bool highlight;
+ void init (int clr0, int clr1, int clr2, int clr3,
+ int clr4, int clr5, int clr6, int clr7,
+ int clr8, int clr9,
+ int bgc0, int bgc1,
+ int bgh0, int bgh1,
+ float stp0, float stp1,
+ float stp2, float stp3,
+ int dimen, int len);
+
void vertical_expose (ArdourCanvas::Rect const & area, Cairo::RefPtr<Cairo::Context> context) const;
void queue_vertical_redraw (float old_level);
diff --git a/libs/surfaces/push2/meter.cc b/libs/canvas/meter.cc
index 7744168f05..d71370ad48 100644
--- a/libs/surfaces/push2/meter.cc
+++ b/libs/canvas/meter.cc
@@ -31,16 +31,14 @@
#include <gtkmm2ext/rgb_macros.h>
#include "canvas/canvas.h"
-#include "canvas/utils.h"
#include "canvas/colors.h"
-
-#include "meter.h"
+#include "canvas/meter.h"
+#include "canvas/utils.h"
using namespace Glib;
-using namespace Gtkmm2ext;
using namespace std;
using namespace ArdourCanvas;
-using namespace ArdourSurface;
+using namespace Gtkmm2ext;
int Meter::min_pattern_metric_size = 16;
int Meter::max_pattern_metric_size = 1024;
@@ -74,6 +72,45 @@ Meter::Meter (Item* parent, long hold, unsigned long dimen, Orientation o, int l
, current_peak(0)
, highlight(false)
{
+ init (clr0, clr1, clr2, clr3, clr4, clr5, clr6, clr7, clr8, clr9, bgc0, bgc1, bgh0, bgh1, stp0, stp1, stp2, stp3, dimen, len);
+}
+
+Meter::Meter (Canvas* canvas, long hold, unsigned long dimen, Orientation o, int len,
+ int clr0, int clr1, int clr2, int clr3,
+ int clr4, int clr5, int clr6, int clr7,
+ int clr8, int clr9,
+ int bgc0, int bgc1,
+ int bgh0, int bgh1,
+ float stp0, float stp1,
+ float stp2, float stp3,
+ int styleflags
+ )
+ : Item (canvas)
+ , pixheight(0)
+ , pixwidth(0)
+ , _styleflags(styleflags)
+ , orientation(o)
+ , hold_cnt(hold)
+ , hold_state(0)
+ , bright_hold(false)
+ , current_level(0)
+ , current_peak(0)
+ , highlight(false)
+{
+ init (clr0, clr1, clr2, clr3, clr4, clr5, clr6, clr7, clr8, clr9, bgc0, bgc1, bgh0, bgh1, stp0, stp1, stp2, stp3, dimen, len);
+}
+
+void
+Meter::init (int clr0, int clr1, int clr2, int clr3,
+ int clr4, int clr5, int clr6, int clr7,
+ int clr8, int clr9,
+ int bgc0, int bgc1,
+ int bgh0, int bgh1,
+ float stp0, float stp1,
+ float stp2, float stp3,
+ int dimen,
+ int len)
+{
last_peak_rect.width = 0;
last_peak_rect.height = 0;
last_peak_rect.x = 0;
diff --git a/libs/canvas/wscript b/libs/canvas/wscript
index 0038b783c6..fa6dabb080 100644
--- a/libs/canvas/wscript
+++ b/libs/canvas/wscript
@@ -46,6 +46,7 @@ canvas_sources = [
'line.cc',
'line_set.cc',
'lookup_table.cc',
+ 'meter.cc',
'outline.cc',
'pixbuf.cc',
'poly_item.cc',