forked from psemiletov/eko
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcvlevelmeter.cpp
More file actions
110 lines (74 loc) · 2.14 KB
/
cvlevelmeter.cpp
File metadata and controls
110 lines (74 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <QPainter>
#include <QPoint>
#include "cvlevelmeter.h"
#include "utils.h"
#include "db.h"
void CVLevelMeter::update_scale_image()
{
QImage im (scale_width, height(), QImage::Format_RGB32);
QPainter painter (&im);
painter.fillRect (0, 0, scale_width, height(), Qt::white);
painter.setPen (Qt::black);
painter.setFont (QFont ("Mono", 6));
int ten = get_value (height(), 5);
int percentage = 105;
float ff = 0.0f;
for (int y = 0; y < height(); y++)
{
if (! (y % ten))
{
percentage -= 5;
ff = (1.0 / 100) * percentage;
QPoint p1 (1, y);
QPoint p2 (scale_width, y);
painter.drawLine (p1, p2);
painter.drawText (QPoint (1, y), QString::number (float2db (ff), 'g', 2)); //dB
}
}
img_bar = im;
}
void CVLevelMeter::resizeEvent(QResizeEvent *event)
{
update_scale_image();
}
CVLevelMeter::CVLevelMeter (QWidget *parent)
{
peak_l = 0;
peak_r = 0;
scale_width = 42;
bars_width = 48;
setMinimumWidth (scale_width + bars_width);
resize (scale_width + bars_width, 256);
}
#define FALLOFF_COEF 0.05f
void CVLevelMeter::paintEvent (QPaintEvent *event)
{
if (pl > peak_l)
peak_l = pl;
else
peak_l -= FALLOFF_COEF;
if (pr > peak_r)
peak_r = pr;
else
peak_r -= FALLOFF_COEF;
if (peak_l < -1 || peak_l > 1)
peak_l = 0;
if (peak_r < -1 || peak_r > 1)
peak_r = 0;
QPainter painter (this);
int h = height();
int w = width();
painter.fillRect (scale_width, 0, w, h, Qt::white);
int lenl = h - (int)(peak_l * 1.0f * h);
int lenr = h - (int)(peak_r * 1.0f * h);
QPoint ltop (scale_width, h);
QPoint lbottom (scale_width + (w - scale_width) / 2, lenl);
QPoint rtop (scale_width + (w - scale_width) / 2, h);
QPoint rbottom (w, lenr);
QRect l (ltop, lbottom);
QRect r (rtop, rbottom);
painter.fillRect (l, Qt::green);
painter.fillRect (r, Qt::darkGreen);
painter.drawImage (1, 1, img_bar);
event->accept();
}