22 Commits
0.3.1 ... 0.3.2

Author SHA1 Message Date
Tom A. Wagner
c1ec56e115 Release 0.3.2 2021-11-30 18:25:58 +01:00
Tom A. Wagner
110e9ef67f meson: Add dist script to vendor cargo dependencies for offline builds 2021-11-30 09:59:56 +01:00
Jan Beich
3c507683b7 build-aux: relax shebang in cargo.sh after 7b1b5ea336
/bin/sh: /bin/bash: not found
2021-11-27 21:57:03 +00:00
Thomas Rosendal
1d1f8bd3d7 Add instruction to add the flatpak remote 'flathub' 2021-11-25 07:59:45 +00:00
Sebastian Grabowski
b25f6f9abb Update the extension versions in flatpak build instructions to 21.08
The extensions need to match the SDK version, that was updated to
org.gnome.Sdk//41 in Commit e5e02b13. (Version 41 is based on
org.freedesktop.Sdk//21.08)
2021-11-24 17:03:23 +01:00
Tom A. Wagner
2d51ea677e ci: use more recent fd.o ci-templates 2021-11-24 16:11:16 +01:00
Tom A. Wagner
beb03d8b09 Update CI container for rust 1.56 2021-11-24 16:11:16 +01:00
Tom A. Wagner
502cf4476b gtk4dep: bump to 4.4 for fixed gtk_pick when using affine transform
This will be needed in a later commit for zooming in on the canvas using an affine (scaling) transformation matrix
2021-11-24 16:11:16 +01:00
Tom A. Wagner
eac973da15 Swap to rust 2021 edition and move rustc version check from meson.build to Cargo.toml 2021-11-24 16:11:16 +01:00
Tom A. Wagner
82a3e4f900 graphview: draw background automatically
This removes the manual painting of the background via cairo and adds the correct color to CSS instead,
which should hopefully improve performance as we do less cpu painting like this.
2021-11-24 16:11:16 +01:00
Suchipi
2cfc8e2e6f Update build instructions to match changes in e5e02b1387 2021-11-19 01:10:14 +00:00
Tom A. Wagner
e5e02b1387 flatpak: Update to gnome runtime 41 2021-11-17 19:49:52 +01:00
Tom A. Wagner
396363cef1 README: Update screenshot 2021-11-17 19:49:52 +01:00
Tom A. Wagner
c887d77f64 graphview: Use #808080 as link color
For good contrast in both dark and light mode, the link color is now a semi-light gray instead of complete black, which had bad contrast in dark mode and good constrast in light mode.

Later, we can seperate color palettes for light and dark mode, but only together with a dark mode toggle button or system-wide darkmode toggle.
2021-11-13 20:32:40 +01:00
Tom A. Wagner
54d7ca83ae graphview: Define link and grid colors in style.css
Previously, these were defined directly in the code,
but defining them in the css helps seperating theming and behaviour
and makes the colors easier to tweak.
2021-11-13 20:08:47 +01:00
Tom A. Wagner
7b1b5ea336 build: fix and improve cargo.sh
cargo.sh previously used bash features but only used `sh` in the shebang,
and also did not properly quote some variables to avoid splitting/globbing from happening.

Also, `-euo pilefail` is now set to avoid other errors that might come up.
2021-10-26 10:04:07 +02:00
Tom A. Wagner
729d4e1555 CI: Update container 2021-10-13 12:11:06 +02:00
Tom A. Wagner
ce6cab8134 Run rustfmt 2021-10-13 12:01:22 +02:00
Tom A. Wagner
8a552d0712 graphview: Add missing }; to fix build. 2021-10-13 11:56:46 +02:00
halfbro
f76235674c Add small control point offset to links that connect from right to left (loopbacks) 2021-10-13 09:11:10 +00:00
Tom A. Wagner
92dcfd61a1 Add gpl snippets to the start of each rust source file. 2021-10-03 11:27:36 +02:00
Tom A. Wagner
02e58e9bfa LICENSE: Replace outdated and edited GPL with the lastest stock version.
The old license file contained project specific edits, but editing the GPL text is disallowed by the fsf.
The new file also contains updated links.
2021-10-03 11:14:30 +02:00
20 changed files with 251 additions and 52 deletions

View File

@@ -1,6 +1,6 @@
include: include:
- project: 'freedesktop/ci-templates' # the project to include from - project: 'freedesktop/ci-templates' # the project to include from
ref: '98f557799157ebb0395cf11d40f01f61fbbace20' # git ref of that project ref: '34f4ade99434043f88e164933f570301fd18b125' # git ref of that project
file: '/templates/fedora.yml' # the actual file to include file: '/templates/fedora.yml' # the actual file to include
stages: stages:
@@ -15,9 +15,9 @@ variables:
# Version and tag for our current container # Version and tag for our current container
.fedora: .fedora:
variables: variables:
FDO_DISTRIBUTION_VERSION: '34' FDO_DISTRIBUTION_VERSION: '35'
# Update this to trigger a container rebuild # Update this to trigger a container rebuild
FDO_DISTRIBUTION_TAG: '2021-05-06.0' FDO_DISTRIBUTION_TAG: '2021-11-23.0'
build-fedora-container: build-fedora-container:
extends: extends:

2
Cargo.lock generated
View File

@@ -585,7 +585,7 @@ dependencies = [
[[package]] [[package]]
name = "helvum" name = "helvum"
version = "0.3.1" version = "0.3.2"
dependencies = [ dependencies = [
"env_logger 0.9.0", "env_logger 0.9.0",
"gtk4", "gtk4",

View File

@@ -1,8 +1,9 @@
[package] [package]
name = "helvum" name = "helvum"
version = "0.3.1" version = "0.3.2"
authors = ["Tom A. Wagner <tom.a.wagner@protonmail.com>"] authors = ["Tom A. Wagner <tom.a.wagner@protonmail.com>"]
edition = "2018" edition = "2021"
rust-version = "1.56"
license = "GPL-3.0-only" license = "GPL-3.0-only"
description = "A GTK patchbay for pipewire" description = "A GTK patchbay for pipewire"
repository = "https://gitlab.freedesktop.org/ryuukyu/helvum" repository = "https://gitlab.freedesktop.org/ryuukyu/helvum"

14
LICENSE
View File

@@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007 Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
@@ -631,8 +631,8 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found. the "copyright" line and a pointer to where the full notice is found.
Helvum <one line to give the program's name and a brief idea of what it does.>
Copyright (C) 2020 Ryuukyu Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -645,14 +645,14 @@ the "copyright" line and a pointer to where the full notice is found.
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail. Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode: notice like this when it starts in an interactive mode:
Helvum Copyright (C) 2020 Ryuukyu <program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details. under certain conditions; type `show c' for details.
@@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school, You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary. if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>. <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>. <https://www.gnu.org/licenses/why-not-lgpl.html>.

View File

@@ -17,9 +17,14 @@ More suggestions are welcome!
## Via flatpak (recommended) ## Via flatpak (recommended)
The recommended way to build is using flatpak, which will take care of all dependencies and avoid any problems that may come from different system configurations. The recommended way to build is using flatpak, which will take care of all dependencies and avoid any problems that may come from different system configurations.
First, install the required flatpak platform and SDK, if you dont have them already: If you don't have the flathub repo in your remote-list for flatpak you will need to add that first:
```shell ```shell
$ flatpak install org.gnome.{Platform,Sdk}//40 org.freedesktop.Sdk.Extension.rust-stable//20.08 $ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
```
Then install the required flatpak platform and SDK, if you dont have them already:
```shell
$ flatpak install org.gnome.{Platform,Sdk}//41 org.freedesktop.Sdk.Extension.rust-stable//21.08 org.freedesktop.Sdk.Extension.llvm12//21.08
``` ```
To compile and install as a flatpak, run To compile and install as a flatpak, run

13
build-aux/cargo.sh Normal file → Executable file
View File

@@ -1,4 +1,6 @@
#!/bin/sh #!/usr/bin/env bash
set -euo pipefail
export MESON_BUILD_ROOT="$1" export MESON_BUILD_ROOT="$1"
export MESON_SOURCE_ROOT="$2" export MESON_SOURCE_ROOT="$2"
@@ -9,12 +11,11 @@ if [[ $4 = "development" ]]
then then
echo "DEBUG MODE" echo "DEBUG MODE"
cargo build --manifest-path \ cargo build --manifest-path \
"$MESON_SOURCE_ROOT"/Cargo.toml && \ "$MESON_SOURCE_ROOT/Cargo.toml" && \
cp "$CARGO_TARGET_DIR"/debug/$5 $3 cp "$CARGO_TARGET_DIR/debug/$5" "$3"
else else
echo "RELEASE MODE" echo "RELEASE MODE"
cargo build --manifest-path \ cargo build --manifest-path \
"$MESON_SOURCE_ROOT"/Cargo.toml --release && \ "$MESON_SOURCE_ROOT/Cargo.toml" --release && \
cp "$CARGO_TARGET_DIR"/release/$5 $3 cp "$CARGO_TARGET_DIR/release/$5" "$3"
fi fi

12
build-aux/dist-vendor.sh Normal file
View File

@@ -0,0 +1,12 @@
#!/usr/bin/env bash
set -euo pipefail
export DIST="$1"
export SOURCE_ROOT="$2"
cd "$SOURCE_ROOT"
mkdir "$DIST"/.cargo
cargo vendor > $DIST/.cargo/config
# Move vendor into dist tarball directory
mv vendor "$DIST"

View File

@@ -1,10 +1,11 @@
{ {
"app-id": "org.freedesktop.ryuukyu.Helvum", "app-id": "org.freedesktop.ryuukyu.Helvum",
"runtime": "org.gnome.Platform", "runtime": "org.gnome.Platform",
"runtime-version": "40", "runtime-version": "41",
"sdk": "org.gnome.Sdk", "sdk": "org.gnome.Sdk",
"sdk-extensions": [ "sdk-extensions": [
"org.freedesktop.Sdk.Extension.rust-stable" "org.freedesktop.Sdk.Extension.rust-stable",
"org.freedesktop.Sdk.Extension.llvm12"
], ],
"command": "helvum", "command": "helvum",
"finish-args": [ "finish-args": [
@@ -15,7 +16,8 @@
"--filesystem=xdg-run/pipewire-0" "--filesystem=xdg-run/pipewire-0"
], ],
"build-options": { "build-options": {
"append-path": "/usr/lib/sdk/rust-stable/bin", "append-path": "/usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm12/bin",
"prepend-ld-library-path": "/usr/lib/sdk/llvm12/lib",
"build-args": [ "build-args": [
"--share=network" "--share=network"
] ]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -1,7 +1,7 @@
project( project(
'helvum', 'helvum',
'rust', 'rust',
version: '0.3.1', version: '0.3.2',
license: 'GPL-3.0', license: 'GPL-3.0',
meson_version: '>=0.50.0' meson_version: '>=0.50.0'
) )
@@ -9,15 +9,9 @@ project(
base_id = 'org.freedesktop.ryuukyu.Helvum' base_id = 'org.freedesktop.ryuukyu.Helvum'
dependency('glib-2.0', version: '>= 2.48') dependency('glib-2.0', version: '>= 2.48')
dependency('gtk4', version: '>= 4.0.0') dependency('gtk4', version: '>= 4.4.0')
dependency('libpipewire-0.3') dependency('libpipewire-0.3')
rust_version = meson.get_compiler('rust').version()
min_rust_version = '1.54.0'
if rust_version < min_rust_version
error('Rust version too old: Required version is ' + min_rust_version + ' but actual version is ' + rust_version)
endif
desktop_file_validate = find_program('desktop-file-validate', required: false) desktop_file_validate = find_program('desktop-file-validate', required: false)
cargo = find_program('cargo', required: true) cargo = find_program('cargo', required: true)
cargo_script = find_program('build-aux/cargo.sh') cargo_script = find_program('build-aux/cargo.sh')
@@ -27,6 +21,12 @@ bindir = prefix / get_option('bindir')
datadir = prefix / get_option('datadir') datadir = prefix / get_option('datadir')
iconsdir = datadir / 'icons' iconsdir = datadir / 'icons'
meson.add_dist_script(
'build-aux/dist-vendor.sh',
meson.build_root() / 'meson-dist' / meson.project_name() + '-' + meson.project_version(),
meson.source_root()
)
cargo_sources = files( cargo_sources = files(
'Cargo.toml', 'Cargo.toml',
'Cargo.lock', 'Cargo.lock',

View File

@@ -1,3 +1,22 @@
// application.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
use std::cell::RefCell; use std::cell::RefCell;
use gtk::{ use gtk::{

View File

@@ -1,3 +1,22 @@
// main.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
mod application; mod application;
mod pipewire_connection; mod pipewire_connection;
mod view; mod view;

View File

@@ -3,6 +3,7 @@ rust_sources = files(
'main.rs', 'main.rs',
'pipewire_connection.rs', 'pipewire_connection.rs',
'pipewire_connection/state.rs', 'pipewire_connection/state.rs',
'style.css',
'view/graph_view.rs', 'view/graph_view.rs',
'view/mod.rs', 'view/mod.rs',
'view/node.rs', 'view/node.rs',

View File

@@ -1,3 +1,22 @@
// pipewire_connection.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
mod state; mod state;
use std::{cell::RefCell, collections::HashMap, rc::Rc}; use std::{cell::RefCell, collections::HashMap, rc::Rc};

View File

@@ -1,3 +1,22 @@
// state.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
use std::collections::HashMap; use std::collections::HashMap;
use crate::MediaType; use crate::MediaType;

View File

@@ -1,14 +1,23 @@
@define-color audio rgb(50,100,240);
@define-color video rgb(200,200,0);
@define-color midi rgb(200,0,50);
@define-color graphview-link #808080;
.audio { .audio {
background: rgb(50,100,240); background: @audio;
color: black; color: black;
} }
.video { .video {
background: rgb(200,200,0); background: @video;
color: black; color: black;
} }
.midi { .midi {
background: rgb(200,0,50); background: @midi;
color: black; color: black;
} }
graphview {
background: @text_view_bg;
}

View File

@@ -1,3 +1,22 @@
// graph_view.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
use super::{Node, Port}; use super::{Node, Port};
use gtk::{ use gtk::{
@@ -35,6 +54,7 @@ mod imp {
fn class_init(klass: &mut Self::Class) { fn class_init(klass: &mut Self::Class) {
// The layout manager determines how child widgets are laid out. // The layout manager determines how child widgets are laid out.
klass.set_layout_manager_type::<gtk::FixedLayout>(); klass.set_layout_manager_type::<gtk::FixedLayout>();
klass.set_css_name("graphview");
} }
} }
@@ -104,24 +124,13 @@ mod imp {
Try to use relative units (em) and colours from the theme as much as possible. */ Try to use relative units (em) and colours from the theme as much as possible. */
let alloc = widget.allocation(); let alloc = widget.allocation();
let widget_bounds =
graphene::Rect::new(0.0, 0.0, alloc.width as f32, alloc.height as f32);
let background_cr = snapshot let background_cr = snapshot
.append_cairo(&graphene::Rect::new( .append_cairo(&widget_bounds)
0.0,
0.0,
alloc.width as f32,
alloc.height as f32,
))
.expect("Failed to get cairo context"); .expect("Failed to get cairo context");
// Try to replace the background color with a darker one from the theme.
if let Some(rgba) = widget.style_context().lookup_color("text_view_bg") {
background_cr.set_source_rgb(rgba.red.into(), rgba.green.into(), rgba.blue.into());
if let Err(e) = background_cr.paint() {
warn!("Failed to paint graphview background: {}", e);
};
} // TODO: else log colour not found
// Draw a nice grid on the background. // Draw a nice grid on the background.
background_cr.set_source_rgb(0.18, 0.18, 0.18); background_cr.set_source_rgb(0.18, 0.18, 0.18);
background_cr.set_line_width(0.2); // TODO: Set to 1px background_cr.set_line_width(0.2); // TODO: Set to 1px
@@ -156,8 +165,25 @@ mod imp {
alloc.height as f32, alloc.height as f32,
)) ))
.expect("Failed to get cairo context"); .expect("Failed to get cairo context");
link_cr.set_line_width(2.0); link_cr.set_line_width(2.0);
link_cr.set_source_rgb(0.0, 0.0, 0.0);
let gtk::gdk::RGBA {
red,
green,
blue,
alpha,
} = widget
.style_context()
.lookup_color("graphview-link")
.unwrap_or(gtk::gdk::RGBA {
red: 0.0,
green: 0.0,
blue: 0.0,
alpha: 0.0,
});
link_cr.set_source_rgba(red.into(), green.into(), blue.into(), alpha.into());
for (link, active) in self.links.borrow().values() { for (link, active) in self.links.borrow().values() {
if let Some((from_x, from_y, to_x, to_y)) = self.get_link_coordinates(link) { if let Some((from_x, from_y, to_x, to_y)) = self.get_link_coordinates(link) {
link_cr.move_to(from_x, from_y); link_cr.move_to(from_x, from_y);
@@ -169,15 +195,24 @@ mod imp {
link_cr.set_dash(&[10.0, 5.0], 0.0); link_cr.set_dash(&[10.0, 5.0], 0.0);
} }
// If the output port is farther right than the input port and they have
// a similar y coordinate, apply a y offset to the control points
// so that the curve sticks out a bit.
let y_control_offset = if from_x > to_x {
f64::max(0.0, 25.0 - (from_y - to_y).abs())
} else {
0.0
};
// Place curve control offset by half the x distance between the two points. // Place curve control offset by half the x distance between the two points.
// This makes the curve scale well for varying distances between the two ports, // This makes the curve scale well for varying distances between the two ports,
// especially when the output port is farther right than the input port. // especially when the output port is farther right than the input port.
let half_x_dist = f64::abs(from_x - to_x) / 2.0; let half_x_dist = f64::abs(from_x - to_x) / 2.0;
link_cr.curve_to( link_cr.curve_to(
from_x + half_x_dist, from_x + half_x_dist,
from_y, from_y - y_control_offset,
to_x - half_x_dist, to_x - half_x_dist,
to_y, to_y - y_control_offset,
to_x, to_x,
to_y, to_y,
); );

View File

@@ -1,3 +1,22 @@
// mod.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
//! The view presented to the user. //! The view presented to the user.
//! //!
//! This module contains gtk widgets needed to present the graphical user interface. //! This module contains gtk widgets needed to present the graphical user interface.

View File

@@ -1,3 +1,22 @@
// node.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
use gtk::{glib, prelude::*, subclass::prelude::*}; use gtk::{glib, prelude::*, subclass::prelude::*};
use pipewire::spa::Direction; use pipewire::spa::Direction;

View File

@@ -1,3 +1,22 @@
// port.rs
//
// Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-only
use gtk::{ use gtk::{
gdk, gdk,
glib::{self, clone, subclass::Signal}, glib::{self, clone, subclass::Signal},