udpscope: an oscilloscope view for a UDPStreamer source
GTK4 and libadwaita. It receives one UDP stream through the vendored udpsclient, buffers it in a large ring, and draws it with the vendored plotter: a trigger with a pre/post event window, a pause that freezes the window, cursors, measurements, math channels in a node editor, an event cache, named configurations, preferences, and an export of the visible window to .npy/.csv. Waveform files can be opened and analysed in place. The interface is two threads -- a producer that owns the socket and the GTK main thread that owns every widget and the GL context -- sharing one model under one mutex, with samples crossing through lock-free rings. deps/plotter is a submodule pinned to the commit this tree builds against; deps/udpsclient is vendored in place. docs/claude/ documents the rules that cost a defect to learn, and SPECS.md is the requirement document.
This commit is contained in:
1 parent
8f54841c2c
commit
0e256764d5
41 files changed
+2081
-154
No files matched your search
@@ -252,9 +252,23 @@ void RowSet::install(Row& r, int /*row_index*/, plot::Plot& p) {
|
||||
// `Figure::link_x()` refuses a member whose x axis still follows on its own.
|
||||
}
|
||||
|
||||
void RowSet::set_row_weights(std::vector<float> weights) {
|
||||
// The count is not checked here: `apply_row_weights()` sizes it to the rows that exist, so a layout
|
||||
// with rows added or removed keeps working instead of silently losing its sizing.
|
||||
row_weights_ = std::move(weights);
|
||||
if (figure_ != nullptr) apply_row_weights();
|
||||
}
|
||||
|
||||
void RowSet::apply_row_weights() {
|
||||
if (row_weights_.empty() || figure_ == nullptr) return;
|
||||
row_weights_.resize(static_cast<std::size_t>(rows_), 1.0f);
|
||||
(void)figure_->set_row_weights(row_weights_);
|
||||
}
|
||||
|
||||
void RowSet::rebuild_all() {
|
||||
figure_ = std::make_unique<plot::Figure>(static_cast<plot::u32>(rows_));
|
||||
figure_->set_row_gap(kRowGap);
|
||||
apply_row_weights();
|
||||
x_group_ = figure_->add_x_link();
|
||||
for (int i = 0; i < kMaxRows; ++i) {
|
||||
Row& r = row(i);
|
||||
|
||||
Reference in new issue
Block a user