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.
30 lines
1.9 KiB
XML
30 lines
1.9 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- SPDX-License-Identifier: MIT -->
|
|
<!-- SPDX-FileCopyrightText: 2026 Martino Ferrari -->
|
|
<!--
|
|
The icons this app had to draw for itself, compiled into the binary so there is still
|
|
exactly one file to run. `gtk_icon_theme_add_resource_path()` wants the tree an icon theme
|
|
has, so the prefix is followed by `<size>/<context>`; `scalable` is the one that means
|
|
"an SVG, use it at any size", and `apps` is where an application icon belongs.
|
|
|
|
Every file carries `preprocess="xml-stripblanks"`, which makes glib-compile-resources pipe
|
|
it through xmllint. That is the only thing that catches a malformed SVG: librsvg refuses
|
|
such a file outright, but the icon *name* still resolves, so `gtk_icon_theme_has_icon()`
|
|
returns true and the icon simply draws nothing. No runtime GTK call can tell the two apart
|
|
(`lookup_icon()` never returns NULL and always reports the size it was asked for), so the
|
|
check belongs here, where a malformed SVG fails the build with a file and line number
|
|
(plus a caret under the offending character) instead.
|
|
-->
|
|
<gresources>
|
|
<gresource prefix="/org/udpscope/icons">
|
|
<file preprocess="xml-stripblanks">scalable/actions/udpscope-trigger-symbolic.svg</file>
|
|
<file preprocess="xml-stripblanks">scalable/actions/udpscope-cursors-symbolic.svg</file>
|
|
<file preprocess="xml-stripblanks">scalable/actions/udpscope-measure-symbolic.svg</file>
|
|
<file preprocess="xml-stripblanks">scalable/actions/udpscope-math-symbolic.svg</file>
|
|
<file preprocess="xml-stripblanks">scalable/actions/udpscope-events-symbolic.svg</file>
|
|
<file preprocess="xml-stripblanks">scalable/actions/udpscope-resize-rows-symbolic.svg</file>
|
|
<file preprocess="xml-stripblanks">scalable/apps/org.udpscope.app.svg</file>
|
|
<file preprocess="xml-stripblanks">scalable/apps/org.udpscope.app-symbolic.svg</file>
|
|
</gresource>
|
|
</gresources>
|