X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=logicsignal.cpp;h=79a27ddd05c97996cc6f7332b3b6b3a7ab4e4058;hp=67d72bef8b7c741190cad954f84fddd9f42103ed;hb=215f9499495716d6a33b53b0fa9cac47f0e43fbd;hpb=131e801229c3cc899dd8a478d4491e384e57238e diff --git a/logicsignal.cpp b/logicsignal.cpp index 67d72bef..79a27ddd 100644 --- a/logicsignal.cpp +++ b/logicsignal.cpp @@ -24,6 +24,8 @@ #include +#include "extdef.h" + #include "logicdata.h" #include "logicdatasnapshot.h" #include "logicsignal.h" @@ -39,6 +41,19 @@ const float LogicSignal::EdgeColour[3] = {0.50f, 0.50f, 0.50f}; const float LogicSignal::HighColour[3] = {0.00f, 0.75f, 0.00f}; const float LogicSignal::LowColour[3] = {0.75f, 0.00f, 0.00f}; +const QColor LogicSignal::LogicSignalColours[10] = { + QColor(0x16, 0x19, 0x1A), // Black + QColor(0x8F, 0x52, 0x02), // Brown + QColor(0xCC, 0x00, 0x00), // Red + QColor(0xF5, 0x79, 0x00), // Orange + QColor(0xED, 0xD4, 0x00), // Yellow + QColor(0x73, 0xD2, 0x16), // Green + QColor(0x34, 0x65, 0xA4), // Blue + QColor(0x75, 0x50, 0x7B), // Violet + QColor(0x88, 0x8A, 0x85), // Grey + QColor(0xEE, 0xEE, 0xEC), // White +}; + LogicSignal::LogicSignal(QString name, shared_ptr data, int probe_index) : Signal(name), @@ -71,16 +86,16 @@ void LogicSignal::paint(QGLWidget &widget, const QRect &rect, const double pixels_offset = offset / scale; const double samplerate = _data->get_samplerate(); const double start_time = _data->get_start_time(); - const int64_t last_sample = (int64_t)snapshot->get_sample_count() - 1; + const int64_t last_sample = snapshot->get_sample_count() - 1; const double samples_per_pixel = samplerate * scale; - const int64_t start = min(max((int64_t)(samplerate * (offset - start_time)), - (int64_t)0), last_sample); - const int64_t end = min((int64_t)(start + samples_per_pixel * rect.width()), - last_sample); + const double start = samplerate * (offset - start_time); + const double end = start + samples_per_pixel * rect.width(); const int64_t quantization_length = 1LL << (int64_t)floorf( - max(logf(samples_per_pixel / Log2), 0.0f)); + max(logf((float)samples_per_pixel) / Log2, 0.0f)); - snapshot->get_subsampled_edges(edges, start, end, + snapshot->get_subsampled_edges(edges, + min(max((int64_t)floor(start), (int64_t)0), last_sample), + min(max((int64_t)ceil(end), (int64_t)0), last_sample), quantization_length, _probe_index); // Paint the edges @@ -166,3 +181,13 @@ void LogicSignal::paint_lines(Point2F *points, int count) glDeleteBuffers(1, &vbo_id); } + +QColor LogicSignal::get_colour() const +{ + return LogicSignalColours[_probe_index % countof(LogicSignalColours)]; +} + +int LogicSignal::get_nominal_offset(const QRect &rect) const +{ + return rect.bottom() - Margin; +}