X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=vu_common.cpp;h=d4abab20326be1da7f3abf2615b0689336f723c0;hb=54067dbc70999d936adf9d263b5ff2b1efb4dfd0;hp=38aba4c736d02945c95db5c34af7d83b46d2e8ab;hpb=bf8537f35000b8385ae806c15d8524c20f9c6fda;p=nageru diff --git a/vu_common.cpp b/vu_common.cpp index 38aba4c..d4abab2 100644 --- a/vu_common.cpp +++ b/vu_common.cpp @@ -32,16 +32,16 @@ double lufs_to_pos(float level_lu, int height, float min_level, float max_level) return y; } -void draw_vu_meter(QPainter &painter, int width, int height, int margin, bool is_on, float min_level, float max_level) +void draw_vu_meter(QPainter &painter, int width, int height, int horizontal_margin, double segment_margin, bool is_on, float min_level, float max_level, bool flip) { - painter.fillRect(margin, 0, width - 2 * margin, height, Qt::black); + painter.fillRect(horizontal_margin, 0, width - 2 * horizontal_margin, height, Qt::black); for (int y = 0; y < height; ++y) { // Find coverage of “on” rectangles in this pixel row. double coverage = 0.0; for (int level = floor(min_level); level <= ceil(max_level); ++level) { - double min_y = lufs_to_pos(level + 1.0, height, min_level, max_level) + 1.0; - double max_y = lufs_to_pos(level, height, min_level, max_level) - 1.0; + double min_y = lufs_to_pos(level + 1.0, height, min_level, max_level) + segment_margin * 0.5; + double max_y = lufs_to_pos(level, height, min_level, max_level) - segment_margin * 0.5; min_y = std::max(min_y, y); min_y = std::min(min_y, y + 1); max_y = std::max(max_y, y); @@ -69,6 +69,7 @@ void draw_vu_meter(QPainter &painter, int width, int height, int margin, bool is int r = lrintf(255 * pow(on_r * coverage, 1.0 / 2.2)); int g = lrintf(255 * pow(on_g * coverage, 1.0 / 2.2)); int b = lrintf(255 * pow(on_b * coverage, 1.0 / 2.2)); - painter.fillRect(margin, y, width - 2 * margin, 1, QColor(r, g, b)); + int draw_y = flip ? (height - y - 1) : y; + painter.fillRect(horizontal_margin, draw_y, width - 2 * horizontal_margin, 1, QColor(r, g, b)); } }