Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
85e249cb32 | ||
|
|
c54aed2e14 | ||
|
|
6da232debf | ||
|
|
96c61e43d2 | ||
|
|
872ef7890d | ||
|
|
76ad8d11d7 | ||
|
|
4075b66865 | ||
|
|
96182826e4 | ||
|
|
e1fbb0cf49 | ||
|
|
3653f2bb11 | ||
|
|
56523f1b30 | ||
|
|
7818bed159 | ||
|
|
c1ec56e115 | ||
|
|
110e9ef67f | ||
|
|
3c507683b7 | ||
|
|
1d1f8bd3d7 | ||
|
|
b25f6f9abb | ||
|
|
2d51ea677e | ||
|
|
beb03d8b09 | ||
|
|
502cf4476b | ||
|
|
eac973da15 | ||
|
|
82a3e4f900 | ||
|
|
2cfc8e2e6f | ||
|
|
e5e02b1387 | ||
|
|
396363cef1 | ||
|
|
c887d77f64 | ||
|
|
54d7ca83ae | ||
|
|
7b1b5ea336 | ||
|
|
729d4e1555 | ||
|
|
ce6cab8134 | ||
|
|
8a552d0712 | ||
|
|
f76235674c | ||
|
|
92dcfd61a1 | ||
|
|
02e58e9bfa |
@@ -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:
|
||||||
@@ -10,14 +10,14 @@ stages:
|
|||||||
- extras
|
- extras
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
FDO_UPSTREAM_REPO: 'ryuukyu/helvum'
|
FDO_UPSTREAM_REPO: 'pipewire/helvum'
|
||||||
|
|
||||||
# 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:
|
||||||
|
|||||||
318
Cargo.lock
generated
@@ -13,18 +13,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ansi_term"
|
name = "ansi_term"
|
||||||
version = "0.11.0"
|
version = "0.12.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
|
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.44"
|
version = "1.0.53"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"
|
checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arrayvec"
|
name = "arrayvec"
|
||||||
@@ -51,15 +51,15 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bindgen"
|
name = "bindgen"
|
||||||
version = "0.59.1"
|
version = "0.59.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "453c49e5950bb0eb63bb3df640e31618846c89d5b7faa54040d76e98e0134375"
|
checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cexpr",
|
"cexpr",
|
||||||
"clang-sys",
|
"clang-sys",
|
||||||
"clap",
|
"clap",
|
||||||
"env_logger 0.8.4",
|
"env_logger",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"lazycell",
|
"lazycell",
|
||||||
"log",
|
"log",
|
||||||
@@ -80,9 +80,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitvec"
|
name = "bitvec"
|
||||||
version = "0.19.5"
|
version = "0.19.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321"
|
checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"funty",
|
"funty",
|
||||||
"radium",
|
"radium",
|
||||||
@@ -92,9 +92,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cairo-rs"
|
name = "cairo-rs"
|
||||||
version = "0.14.7"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9164355c892b026d6257e696dde5f3cb39beb3718297f0f161b562fe2ee3ab86"
|
checksum = "b869e97a87170f96762f9f178eae8c461147e722ba21dd8814105bf5716bf14a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cairo-sys-rs",
|
"cairo-sys-rs",
|
||||||
@@ -105,28 +105,28 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cairo-sys-rs"
|
name = "cairo-sys-rs"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80"
|
checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys",
|
"glib-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 3.2.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.70"
|
version = "1.0.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0"
|
checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cexpr"
|
name = "cexpr"
|
||||||
version = "0.5.0"
|
version = "0.6.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "db507a7679252d2276ed0dd8113c6875ec56d3089f9225b2b42c30cc1f8e5c89"
|
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"nom",
|
"nom 7.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -161,9 +161,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clang-sys"
|
name = "clang-sys"
|
||||||
version = "1.2.2"
|
version = "1.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "10612c0ec0e0a1ff0e97980647cb058a6e7aedb913d01d009c406b8b7d0b26ee"
|
checksum = "fa66045b9cb23c2e9c1520732030608b02ee07e5cfaa5a521ec15ded7fa24c90"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glob",
|
"glob",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -172,9 +172,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap"
|
name = "clap"
|
||||||
version = "2.33.3"
|
version = "2.34.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
|
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term",
|
"ansi_term",
|
||||||
"atty",
|
"atty",
|
||||||
@@ -197,19 +197,6 @@ version = "1.6.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
|
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "env_logger"
|
|
||||||
version = "0.8.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
|
|
||||||
dependencies = [
|
|
||||||
"atty",
|
|
||||||
"humantime",
|
|
||||||
"log",
|
|
||||||
"regex",
|
|
||||||
"termcolor",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "env_logger"
|
name = "env_logger"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@@ -225,9 +212,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "errno"
|
name = "errno"
|
||||||
version = "0.2.7"
|
version = "0.2.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe"
|
checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"errno-dragonfly",
|
"errno-dragonfly",
|
||||||
"libc",
|
"libc",
|
||||||
@@ -262,24 +249,24 @@ checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-channel"
|
name = "futures-channel"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888"
|
checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-core"
|
name = "futures-core"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
|
checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-executor"
|
name = "futures-executor"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c"
|
checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
@@ -288,23 +275,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-io"
|
name = "futures-io"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377"
|
checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-task"
|
name = "futures-task"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99"
|
checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-util"
|
name = "futures-util"
|
||||||
version = "0.3.17"
|
version = "0.3.19"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
|
checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
@@ -314,10 +300,11 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gdk-pixbuf"
|
name = "gdk-pixbuf"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f"
|
checksum = "172dfe1d9dfb62936bf7ad3ede2913a1b21b1e3db56990e46e00789201de9070"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
"gdk-pixbuf-sys",
|
"gdk-pixbuf-sys",
|
||||||
"gio",
|
"gio",
|
||||||
"glib",
|
"glib",
|
||||||
@@ -326,22 +313,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gdk-pixbuf-sys"
|
name = "gdk-pixbuf-sys"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590"
|
checksum = "413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gio-sys",
|
"gio-sys",
|
||||||
"glib-sys",
|
"glib-sys",
|
||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 3.2.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gdk4"
|
name = "gdk4"
|
||||||
version = "0.3.0"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4c0f7f98ad25b81ac9462f74a091b0e4c0983ed1e74d19a38230c772b4dcef81"
|
checksum = "319c74160dbe3e29cc1bf36ae4a08b9072f352b751e9e3e5501b3aa3ca633f66"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cairo-rs",
|
"cairo-rs",
|
||||||
@@ -355,26 +342,26 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gdk4-sys"
|
name = "gdk4-sys"
|
||||||
version = "0.3.0"
|
version = "0.4.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "262a79666b42e1884577f11a050439a964b95dec55343ac6ace7930e1415fa18"
|
checksum = "48a39e34abe35ee2cf54a1e29dd983accecd113ad30bdead5050418fa92f2a1b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cairo-sys-rs",
|
"cairo-sys-rs",
|
||||||
"gdk-pixbuf-sys",
|
"gdk-pixbuf-sys",
|
||||||
"gio-sys",
|
"gio-sys",
|
||||||
"glib-sys",
|
"glib-sys",
|
||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"graphene-sys",
|
|
||||||
"libc",
|
"libc",
|
||||||
"pango-sys",
|
"pango-sys",
|
||||||
"system-deps 4.0.0",
|
"pkg-config",
|
||||||
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gio"
|
name = "gio"
|
||||||
version = "0.14.6"
|
version = "0.15.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f3a29d8062af72045518271a2cd98b4e1617ce43f5b4223ad0fb9a0eff8f718c"
|
checksum = "4f80391bd2ac4981a3433137691211775bbb37c5347f8cfb7c0980187e0300c5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
@@ -389,22 +376,22 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gio-sys"
|
name = "gio-sys"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa"
|
checksum = "04b57719ccaacf2a0d9c79f151be629f3a3ef3991658ee2af0bb66287e4ea86c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys",
|
"glib-sys",
|
||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 3.2.0",
|
"system-deps 6.0.0",
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glib"
|
name = "glib"
|
||||||
version = "0.14.5"
|
version = "0.15.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d4a930b7208e6e0ab839eea5f65ac2b82109f729621430d47fe905e2e09d33f4"
|
checksum = "4a703581e2538fe699c5476cf26b456d694c5272b6e999d3ab47711c5eaa2dd2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
@@ -415,18 +402,20 @@ dependencies = [
|
|||||||
"glib-sys",
|
"glib-sys",
|
||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"libc",
|
"libc",
|
||||||
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glib-macros"
|
name = "glib-macros"
|
||||||
version = "0.14.1"
|
version = "0.15.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518"
|
checksum = "e58b262ff65ef771003873cea8c10e0fe854f1c508d48d62a4111a1ff163f7d1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"heck",
|
"heck 0.4.0",
|
||||||
"proc-macro-crate",
|
"proc-macro-crate",
|
||||||
"proc-macro-error",
|
"proc-macro-error",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -436,12 +425,12 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "glib-sys"
|
name = "glib-sys"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae"
|
checksum = "c668102c6e15e0a7f6b99b59f602c2e806967bb86414f617b77e19b1de5b3fac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 3.2.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -452,20 +441,20 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gobject-sys"
|
name = "gobject-sys"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5"
|
checksum = "6edb1f0b3e4c08e2a0a490d1082ba9e902cdff8ff07091e85c6caec60d17e2ab"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys",
|
"glib-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 3.2.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "graphene-rs"
|
name = "graphene-rs"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f1460a39f06e491e6112f27e71e51435c833ba370723224dd1743dfd1f201f19"
|
checksum = "7c54f9fbbeefdb62c99f892dfca35f83991e2cb5b46a8dc2a715e58612f85570"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glib",
|
"glib",
|
||||||
"graphene-sys",
|
"graphene-sys",
|
||||||
@@ -474,21 +463,21 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "graphene-sys"
|
name = "graphene-sys"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e7d23fb7a9547e5f072a7e0cd49cd648fedeb786d122b106217511980cbb8962"
|
checksum = "03f311acb023cf7af5537f35de028e03706136eead7f25a31e8fd26f5011e0b3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys",
|
"glib-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
"system-deps 3.2.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gsk4"
|
name = "gsk4"
|
||||||
version = "0.3.0"
|
version = "0.4.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "20b71f2e2cc699c2e0fbfa22899eeaffd84f9c1dc01e9263deac8664eec22dc0"
|
checksum = "0672c63e4101e19d5e9cb4a0aed8b3278e9573529bd0b6a86d9c748c71bd9882"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cairo-rs",
|
"cairo-rs",
|
||||||
@@ -502,9 +491,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gsk4-sys"
|
name = "gsk4-sys"
|
||||||
version = "0.3.0"
|
version = "0.4.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "30468aff80e4faadf22f9ba164ea17511a69a9995d7a13827a13424ef47b2472"
|
checksum = "e31d21d7ce02ba261bb24c50c4ab238a10b41a2c97c32afffae29471b7cca69b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cairo-sys-rs",
|
"cairo-sys-rs",
|
||||||
"gdk4-sys",
|
"gdk4-sys",
|
||||||
@@ -513,14 +502,14 @@ dependencies = [
|
|||||||
"graphene-sys",
|
"graphene-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"pango-sys",
|
"pango-sys",
|
||||||
"system-deps 4.0.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gtk4"
|
name = "gtk4"
|
||||||
version = "0.3.0"
|
version = "0.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "906f9308d15789d96a736881582181d710ae0937197119df459f3d2b46ef6776"
|
checksum = "d6f9e36fb6db3d70edf5cea9f4a20928c1d08ed3f27697cfd2d21ca3d8ac4a2d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cairo-rs",
|
"cairo-rs",
|
||||||
@@ -541,13 +530,11 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gtk4-macros"
|
name = "gtk4-macros"
|
||||||
version = "0.3.0"
|
version = "0.4.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4d0d008cdf23214c697482415dd20f666bdf3cc9f5e803b017223c17c5b59a6e"
|
checksum = "573db42bb64973a4d5f718b73caa7204285a1a665308a23b11723d0ee56ec305"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"heck",
|
|
||||||
"itertools",
|
|
||||||
"proc-macro-crate",
|
"proc-macro-crate",
|
||||||
"proc-macro-error",
|
"proc-macro-error",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
@@ -557,9 +544,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gtk4-sys"
|
name = "gtk4-sys"
|
||||||
version = "0.3.0"
|
version = "0.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d06be0a6322aa77dd372f726e97efbcbb192d9a824a414a8874f238effd7747c"
|
checksum = "c47c075e8f795c38f6e9a47b51a73eab77b325f83c0154979ed4d4245c36490d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cairo-sys-rs",
|
"cairo-sys-rs",
|
||||||
"gdk-pixbuf-sys",
|
"gdk-pixbuf-sys",
|
||||||
@@ -571,7 +558,7 @@ dependencies = [
|
|||||||
"gsk4-sys",
|
"gsk4-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"pango-sys",
|
"pango-sys",
|
||||||
"system-deps 4.0.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -583,11 +570,17 @@ dependencies = [
|
|||||||
"unicode-segmentation",
|
"unicode-segmentation",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heck"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "helvum"
|
name = "helvum"
|
||||||
version = "0.3.1"
|
version = "0.3.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"env_logger 0.9.0",
|
"glib",
|
||||||
"gtk4",
|
"gtk4",
|
||||||
"log",
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
@@ -611,9 +604,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.10.1"
|
version = "0.10.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf"
|
checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
@@ -645,15 +638,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.103"
|
version = "0.2.115"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6"
|
checksum = "0a8d982fa7a96a000f6ec4cfe966de9703eccde29750df2bb8949da91b0e818d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libloading"
|
name = "libloading"
|
||||||
version = "0.7.0"
|
version = "0.7.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a"
|
checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"winapi",
|
"winapi",
|
||||||
@@ -671,7 +664,7 @@ dependencies = [
|
|||||||
"errno",
|
"errno",
|
||||||
"libc",
|
"libc",
|
||||||
"libspa-sys",
|
"libspa-sys",
|
||||||
"nom",
|
"nom 6.2.1",
|
||||||
"system-deps 3.2.0",
|
"system-deps 3.2.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -702,13 +695,19 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memoffset"
|
name = "memoffset"
|
||||||
version = "0.6.4"
|
version = "0.6.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
|
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "minimal-lexical"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nix"
|
name = "nix"
|
||||||
version = "0.14.1"
|
version = "0.14.1"
|
||||||
@@ -736,16 +735,27 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "once_cell"
|
name = "nom"
|
||||||
version = "1.8.0"
|
version = "7.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
|
checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
"minimal-lexical",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "once_cell"
|
||||||
|
version = "1.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pango"
|
name = "pango"
|
||||||
version = "0.14.3"
|
version = "0.15.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e1fc88307d9797976ea62722ff2ec5de3fae279c6e20100ed3f49ca1a4bf3f96"
|
checksum = "79211eff430c29cc38c69e0ab54bc78fa1568121ca9737707eee7f92a8417a94"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"glib",
|
"glib",
|
||||||
@@ -756,14 +766,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pango-sys"
|
name = "pango-sys"
|
||||||
version = "0.14.0"
|
version = "0.15.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe"
|
checksum = "7022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"glib-sys",
|
"glib-sys",
|
||||||
"gobject-sys",
|
"gobject-sys",
|
||||||
"libc",
|
"libc",
|
||||||
"system-deps 3.2.0",
|
"system-deps 6.0.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -783,9 +793,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.7"
|
version = "0.2.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
|
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-utils"
|
name = "pin-utils"
|
||||||
@@ -824,9 +834,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pkg-config"
|
name = "pkg-config"
|
||||||
version = "0.3.20"
|
version = "0.3.24"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb"
|
checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro-crate"
|
name = "proc-macro-crate"
|
||||||
@@ -864,18 +874,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.29"
|
version = "1.0.36"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
|
checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.9"
|
version = "1.0.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
|
checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
]
|
]
|
||||||
@@ -920,9 +930,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ryu"
|
name = "ryu"
|
||||||
version = "1.0.5"
|
version = "1.0.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
|
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver"
|
name = "semver"
|
||||||
@@ -944,9 +954,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.130"
|
version = "1.0.136"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
|
checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shlex"
|
name = "shlex"
|
||||||
@@ -966,15 +976,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "slab"
|
name = "slab"
|
||||||
version = "0.4.4"
|
version = "0.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590"
|
checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.7.0"
|
version = "1.8.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
|
checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "static_assertions"
|
name = "static_assertions"
|
||||||
@@ -1000,7 +1010,7 @@ version = "0.21.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
|
checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck 0.3.3",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn",
|
"syn",
|
||||||
@@ -1008,9 +1018,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.77"
|
version = "1.0.86"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0"
|
checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -1025,27 +1035,27 @@ checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"cfg-expr 0.8.1",
|
"cfg-expr 0.8.1",
|
||||||
"heck",
|
"heck 0.3.3",
|
||||||
"itertools",
|
"itertools",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
"strum",
|
"strum",
|
||||||
"strum_macros",
|
"strum_macros",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"toml",
|
"toml",
|
||||||
"version-compare",
|
"version-compare 0.0.11",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "system-deps"
|
name = "system-deps"
|
||||||
version = "4.0.0"
|
version = "6.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6c1889ab44c2a423ba9ba4d64cd04989b25c0280ca7ade813f05368418722a04"
|
checksum = "7b1487aaddaacbc5d60a2a507ba1617c5ca66c57dd0dd07d0c5efd5b693841d4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-expr 0.9.0",
|
"cfg-expr 0.9.0",
|
||||||
"heck",
|
"heck 0.3.3",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
"toml",
|
"toml",
|
||||||
"version-compare",
|
"version-compare 0.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1074,18 +1084,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.29"
|
version = "1.0.30"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88"
|
checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror-impl",
|
"thiserror-impl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror-impl"
|
name = "thiserror-impl"
|
||||||
version = "1.0.29"
|
version = "1.0.30"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c"
|
checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -1138,10 +1148,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
|
checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version-compare"
|
||||||
version = "0.9.3"
|
version = "0.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
|
checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "version_check"
|
||||||
|
version = "0.9.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "void"
|
name = "void"
|
||||||
@@ -1151,10 +1167,12 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "which"
|
name = "which"
|
||||||
version = "3.1.1"
|
version = "4.2.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
|
checksum = "2a5a7e487e921cf220206864a94a89b6c6905bfc19f1057fa26a4cb360e5c1d2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
11
Cargo.toml
@@ -1,11 +1,12 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "helvum"
|
name = "helvum"
|
||||||
version = "0.3.1"
|
version = "0.3.3"
|
||||||
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/pipewire/helvum"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
keywords = ["pipewire", "gtk", "patchbay", "gui", "utility"]
|
keywords = ["pipewire", "gtk", "patchbay", "gui", "utility"]
|
||||||
categories = ["gui", "multimedia"]
|
categories = ["gui", "multimedia"]
|
||||||
@@ -14,9 +15,9 @@ categories = ["gui", "multimedia"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
pipewire = "0.4"
|
pipewire = "0.4"
|
||||||
gtk = { version = "0.3", package = "gtk4" }
|
gtk = { version = "0.4.1", package = "gtk4" }
|
||||||
|
glib = { version = "0.15.1", features = ["log"] }
|
||||||
|
|
||||||
log = "0.4.11"
|
log = "0.4.11"
|
||||||
env_logger = "0.9.0"
|
|
||||||
|
|
||||||
once_cell = "1.7.2"
|
once_cell = "1.7.2"
|
||||||
|
|||||||
14
LICENSE
@@ -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>.
|
||||||
|
|||||||
24
README.md
@@ -14,22 +14,25 @@ More suggestions are welcome!
|
|||||||
|
|
||||||
# Building
|
# Building
|
||||||
|
|
||||||
## Via flatpak (recommended)
|
## Via flatpak
|
||||||
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.
|
If you don't have the flathub repo in your remote-list for flatpak you will need to add that first:
|
||||||
|
|
||||||
First, install the required flatpak platform and SDK, if you dont have them already:
|
|
||||||
```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
|
||||||
```
|
```
|
||||||
|
|
||||||
To compile and install as a flatpak, run
|
Then install the required flatpak platform and SDK, if you dont have them already:
|
||||||
```shell
|
```shell
|
||||||
$ flatpak-builder --install flatpak-build/ build-aux/org.freedesktop.ryuukyu.Helvum.json
|
$ 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, clone the project, change to the project directory, and run:
|
||||||
|
```shell
|
||||||
|
$ flatpak-builder --install flatpak-build/ build-aux/org.pipewire.Helvum.json
|
||||||
```
|
```
|
||||||
|
|
||||||
You can then run the app via
|
You can then run the app via
|
||||||
```shell
|
```shell
|
||||||
$ flatpak run org.freedesktop.ryuukyu.Helvum
|
$ flatpak run org.pipewire.Helvum
|
||||||
```
|
```
|
||||||
|
|
||||||
## Manually
|
## Manually
|
||||||
@@ -51,6 +54,9 @@ $ meson install
|
|||||||
in the repository root.
|
in the repository root.
|
||||||
This will install the compiled project files into `/usr/local`.
|
This will install the compiled project files into `/usr/local`.
|
||||||
|
|
||||||
# License
|
# License and Credits
|
||||||
Helvum is distributed under the terms of the GPL3 license.
|
Helvum is distributed under the terms of the GPL3 license.
|
||||||
See LICENSE for more information.
|
See LICENSE for more information.
|
||||||
|
|
||||||
|
Parts of the build system were taken from the [gtk-rust-template](https://gitlab.gnome.org/World/Rust/gtk-rust-template) project,
|
||||||
|
which is provided under the terms of the [MIT license](https://gitlab.gnome.org/World/Rust/gtk-rust-template/-/blob/master/LICENSE.md).
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
export MESON_BUILD_ROOT="$1"
|
|
||||||
export MESON_SOURCE_ROOT="$2"
|
|
||||||
export CARGO_TARGET_DIR="$MESON_BUILD_ROOT"/target
|
|
||||||
export CARGO_HOME="$MESON_BUILD_ROOT"/cargo-home
|
|
||||||
|
|
||||||
if [[ $4 = "development" ]]
|
|
||||||
then
|
|
||||||
echo "DEBUG MODE"
|
|
||||||
cargo build --manifest-path \
|
|
||||||
"$MESON_SOURCE_ROOT"/Cargo.toml && \
|
|
||||||
cp "$CARGO_TARGET_DIR"/debug/$5 $3
|
|
||||||
else
|
|
||||||
echo "RELEASE MODE"
|
|
||||||
cargo build --manifest-path \
|
|
||||||
"$MESON_SOURCE_ROOT"/Cargo.toml --release && \
|
|
||||||
cp "$CARGO_TARGET_DIR"/release/$5 $3
|
|
||||||
fi
|
|
||||||
|
|
||||||
12
build-aux/dist-vendor.sh
Normal 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"
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
from os import environ, path
|
|
||||||
from subprocess import call
|
|
||||||
|
|
||||||
if not environ.get('DESTDIR', ''):
|
|
||||||
PREFIX = environ.get('MESON_INSTALL_PREFIX', '/usr/local')
|
|
||||||
DATA_DIR = path.join(PREFIX, 'share')
|
|
||||||
print('Updating icon cache...')
|
|
||||||
call(['gtk-update-icon-cache', '-qtf', path.join(DATA_DIR, 'icons/hicolor')])
|
|
||||||
print("Updating desktop database...")
|
|
||||||
call(["update-desktop-database", path.join(DATA_DIR, 'applications')])
|
|
||||||
@@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"app-id": "org.freedesktop.ryuukyu.Helvum",
|
"app-id": "org.pipewire.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"
|
||||||
]
|
]
|
||||||
|
Before Width: | Height: | Size: 589 B After Width: | Height: | Size: 589 B |
@@ -10,7 +10,7 @@
|
|||||||
id="svg11300"
|
id="svg11300"
|
||||||
sodipodi:version="0.32"
|
sodipodi:version="0.32"
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||||
sodipodi:docname="org.freedesktop.ryuukyu.Helvum.Source.svg"
|
sodipodi:docname="org.pipewire.Helvum.Source.svg"
|
||||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||||
version="1.0"
|
version="1.0"
|
||||||
style="display:inline;enable-background:new"
|
style="display:inline;enable-background:new"
|
||||||
|
Before Width: | Height: | Size: 187 KiB After Width: | Height: | Size: 187 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
@@ -22,3 +22,28 @@ install_data(
|
|||||||
desktop_file,
|
desktop_file,
|
||||||
install_dir: datadir / 'applications'
|
install_dir: datadir / 'applications'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
appdata_conf = configuration_data()
|
||||||
|
appdata_conf.set('app-id', base_id)
|
||||||
|
appdata_file = configure_file(
|
||||||
|
input: '@0@.metainfo.xml.in'.format(base_id),
|
||||||
|
output: '@BASENAME@',
|
||||||
|
configuration: appdata_conf
|
||||||
|
)
|
||||||
|
|
||||||
|
# Validate Appdata
|
||||||
|
if appstream_util.found()
|
||||||
|
test(
|
||||||
|
'validate-appdata',
|
||||||
|
appstream_util,
|
||||||
|
args: [
|
||||||
|
'validate', '--nonet', appdata_file
|
||||||
|
],
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
|
||||||
|
install_data(
|
||||||
|
appdata_file,
|
||||||
|
install_dir: datadir / 'metainfo'
|
||||||
|
)
|
||||||
|
|||||||
40
data/org.pipewire.Helvum.metainfo.xml.in
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com> -->
|
||||||
|
<component type="desktop-application">
|
||||||
|
<id>@app-id@</id>
|
||||||
|
<metadata_license>CC-BY-SA-4.0</metadata_license>
|
||||||
|
<project_license>GPL-3.0-only</project_license>
|
||||||
|
<name>Helvum</name>
|
||||||
|
<summary>Patchbay for PipeWire</summary>
|
||||||
|
<description>
|
||||||
|
<p>
|
||||||
|
Helvum is a graphical patchbay for PipeWire.
|
||||||
|
It allows creating and removing connections between applications and/or devices to reroute
|
||||||
|
flow of audio, video and MIDI data to where it is needed.
|
||||||
|
</p>
|
||||||
|
</description>
|
||||||
|
<screenshots>
|
||||||
|
<screenshot type="default">
|
||||||
|
<image>https://gitlab.freedesktop.org/pipewire/helvum/-/raw/main/docs/screenshot.png</image>
|
||||||
|
</screenshot>
|
||||||
|
</screenshots>
|
||||||
|
<launchable type="desktop-id">@app-id@.desktop</launchable>
|
||||||
|
<url type="homepage">https://gitlab.freedesktop.org/pipewire/helvum</url>
|
||||||
|
<url type="bugtracker">https://gitlab.freedesktop.org/pipewire/helvum/-/issues</url>
|
||||||
|
<content_rating type="oars-1.0" />
|
||||||
|
<releases>
|
||||||
|
<release version="0.3.3" date="2022-01-28" />
|
||||||
|
<release version="0.3.2" date="2021-11-30" />
|
||||||
|
<release version="0.3.1" date="2021-09-30" />
|
||||||
|
<release version="0.3.0" date="2021-08-08" />
|
||||||
|
<release version="0.2.1" date="2021-06-06" />
|
||||||
|
<release version="0.2.0" date="2021-05-21" />
|
||||||
|
<release version="0.1.0" date="2021-01-12" />
|
||||||
|
</releases>
|
||||||
|
<kudos>
|
||||||
|
<kodu>HiDpiIcon</kodu>
|
||||||
|
<kudo>ModernToolkit</kudo>
|
||||||
|
</kudos>
|
||||||
|
<developer_name>Tom A. Wagner</developer_name>
|
||||||
|
<update_contact>tom.a.wagner@protonmail.com</update_contact>
|
||||||
|
</component>
|
||||||
22
docs/making_a_release.md
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Making a release
|
||||||
|
|
||||||
|
The following describes the process of making a new release:
|
||||||
|
|
||||||
|
1. In `data/org.pipewire.Helvum.metainfo.xml.in`,
|
||||||
|
add a new `<release>` tag to the releases section with the appropriate version and date.
|
||||||
|
|
||||||
|
2. In `meson.build` and `Cargo.toml`, bumb the projects version to the new version.
|
||||||
|
|
||||||
|
3. Ensure cargo dependencies are up-to-date by running `cargo outdated` (may require running `cargo install cargo-outdated`) and updating outdated dependencies (including the versions specified in `Cargo.lock`).
|
||||||
|
|
||||||
|
4. Commit the changes with the a message of the format "Release x.y.z"
|
||||||
|
|
||||||
|
5. Add a tag to the release with the new version and a description from describing the changes as a message (run `git tag -a x.y.z`, then write the message)
|
||||||
|
|
||||||
|
6. Make a **new** meson build directory and run `meson dist`.
|
||||||
|
Two files should be created in a `meson-dist` subdirectory:
|
||||||
|
|
||||||
|
`helvum-x.y.z.tar.xz` and
|
||||||
|
`helvum-x.y.z.tar.xz.sha256sum`
|
||||||
|
|
||||||
|
7. Push the new commit and tag to upstream, then create a new release on gitlab from the new tag, the description from the tags message formatted as markdown, and also add the two files from step 6 to the description.
|
||||||
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 65 KiB |
32
meson.build
@@ -1,38 +1,38 @@
|
|||||||
project(
|
project(
|
||||||
'helvum',
|
'helvum',
|
||||||
'rust',
|
'rust',
|
||||||
version: '0.3.1',
|
version: '0.3.3',
|
||||||
license: 'GPL-3.0',
|
license: 'GPL-3.0',
|
||||||
meson_version: '>=0.50.0'
|
meson_version: '>=0.59.0'
|
||||||
)
|
)
|
||||||
|
|
||||||
base_id = 'org.freedesktop.ryuukyu.Helvum'
|
gnome = import('gnome')
|
||||||
|
|
||||||
dependency('glib-2.0', version: '>= 2.48')
|
base_id = 'org.pipewire.Helvum'
|
||||||
dependency('gtk4', version: '>= 4.0.0')
|
|
||||||
|
dependency('glib-2.0', version: '>= 2.66')
|
||||||
|
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)
|
||||||
|
appstream_util = find_program('appstream-util', required: false)
|
||||||
cargo = find_program('cargo', required: true)
|
cargo = find_program('cargo', required: true)
|
||||||
cargo_script = find_program('build-aux/cargo.sh')
|
|
||||||
|
|
||||||
prefix = get_option('prefix')
|
prefix = get_option('prefix')
|
||||||
bindir = prefix / get_option('bindir')
|
bindir = prefix / get_option('bindir')
|
||||||
datadir = prefix / get_option('datadir')
|
datadir = prefix / get_option('datadir')
|
||||||
iconsdir = datadir / 'icons'
|
iconsdir = datadir / 'icons'
|
||||||
|
|
||||||
cargo_sources = files(
|
meson.add_dist_script(
|
||||||
'Cargo.toml',
|
'build-aux/dist-vendor.sh',
|
||||||
'Cargo.lock',
|
meson.project_build_root() / 'meson-dist' / meson.project_name() + '-' + meson.project_version(),
|
||||||
|
meson.project_source_root()
|
||||||
)
|
)
|
||||||
|
|
||||||
subdir('src')
|
subdir('src')
|
||||||
subdir('data')
|
subdir('data')
|
||||||
|
|
||||||
meson.add_install_script('build-aux/meson_post_install.py')
|
gnome.post_install(
|
||||||
|
gtk_update_icon_cache: true,
|
||||||
|
update_desktop_database: true,
|
||||||
|
)
|
||||||
|
|||||||
@@ -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::{
|
||||||
@@ -6,7 +25,7 @@ use gtk::{
|
|||||||
prelude::*,
|
prelude::*,
|
||||||
subclass::prelude::*,
|
subclass::prelude::*,
|
||||||
};
|
};
|
||||||
use log::{info, warn};
|
use log::info;
|
||||||
use pipewire::{channel::Sender, spa::Direction};
|
use pipewire::{channel::Sender, spa::Direction};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@@ -37,10 +56,10 @@ mod imp {
|
|||||||
impl ObjectImpl for Application {}
|
impl ObjectImpl for Application {}
|
||||||
impl ApplicationImpl for Application {
|
impl ApplicationImpl for Application {
|
||||||
fn activate(&self, app: &Self::Type) {
|
fn activate(&self, app: &Self::Type) {
|
||||||
let scrollwindow = gtk::ScrolledWindowBuilder::new()
|
let scrollwindow = gtk::ScrolledWindow::builder()
|
||||||
.child(&self.graphview)
|
.child(&self.graphview)
|
||||||
.build();
|
.build();
|
||||||
let window = gtk::ApplicationWindowBuilder::new()
|
let window = gtk::ApplicationWindow::builder()
|
||||||
.application(app)
|
.application(app)
|
||||||
.default_width(1280)
|
.default_width(1280)
|
||||||
.default_height(720)
|
.default_height(720)
|
||||||
@@ -82,9 +101,8 @@ impl Application {
|
|||||||
gtk_receiver: Receiver<PipewireMessage>,
|
gtk_receiver: Receiver<PipewireMessage>,
|
||||||
pw_sender: Sender<GtkMessage>,
|
pw_sender: Sender<GtkMessage>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
let app: Application =
|
let app: Application = glib::Object::new(&[("application-id", &"org.pipewire.Helvum")])
|
||||||
glib::Object::new(&[("application-id", &"org.freedesktop.ryuukyu.Helvum")])
|
.expect("Failed to create new Application");
|
||||||
.expect("Failed to create new Application");
|
|
||||||
|
|
||||||
let imp = imp::Application::from_instance(&app);
|
let imp = imp::Application::from_instance(&app);
|
||||||
imp.pw_sender
|
imp.pw_sender
|
||||||
@@ -151,7 +169,7 @@ impl Application {
|
|||||||
let port = view::Port::new(id, name, direction, media_type);
|
let port = view::Port::new(id, name, direction, media_type);
|
||||||
|
|
||||||
// Create or delete a link if the widget emits the "port-toggled" signal.
|
// Create or delete a link if the widget emits the "port-toggled" signal.
|
||||||
if let Err(e) = port.connect_local(
|
port.connect_local(
|
||||||
"port_toggled",
|
"port_toggled",
|
||||||
false,
|
false,
|
||||||
clone!(@weak self as app => @default-return None, move |args| {
|
clone!(@weak self as app => @default-return None, move |args| {
|
||||||
@@ -163,9 +181,7 @@ impl Application {
|
|||||||
|
|
||||||
None
|
None
|
||||||
}),
|
}),
|
||||||
) {
|
);
|
||||||
warn!("Failed to connect to \"port-toggled\" signal: {}", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
imp.graphview.add_port(node_id, id, port);
|
imp.graphview.add_port(node_id, id, port);
|
||||||
}
|
}
|
||||||
|
|||||||
39
src/main.rs
@@ -1,11 +1,28 @@
|
|||||||
|
// 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;
|
||||||
|
|
||||||
use gtk::{
|
use glib::PRIORITY_DEFAULT;
|
||||||
glib::{self, PRIORITY_DEFAULT},
|
use gtk::prelude::*;
|
||||||
prelude::*,
|
|
||||||
};
|
|
||||||
use pipewire::spa::Direction;
|
use pipewire::spa::Direction;
|
||||||
|
|
||||||
/// Messages sent by the GTK thread to notify the pipewire thread.
|
/// Messages sent by the GTK thread to notify the pipewire thread.
|
||||||
@@ -77,8 +94,20 @@ pub struct PipewireLink {
|
|||||||
pub port_to: u32,
|
pub port_to: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GLIB_LOGGER: glib::GlibLogger = glib::GlibLogger::new(
|
||||||
|
glib::GlibLoggerFormat::Structured,
|
||||||
|
glib::GlibLoggerDomain::CrateTarget,
|
||||||
|
);
|
||||||
|
|
||||||
|
fn init_glib_logger() {
|
||||||
|
log::set_logger(&GLIB_LOGGER).expect("Failed to set logger");
|
||||||
|
|
||||||
|
// Glib does not have a "Trace" log level, so only print messages "Debug" or higher priority.
|
||||||
|
log::set_max_level(log::LevelFilter::Debug);
|
||||||
|
}
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
env_logger::init();
|
init_glib_logger();
|
||||||
gtk::init()?;
|
gtk::init()?;
|
||||||
|
|
||||||
// Aquire main context so that we can attach the gtk channel later.
|
// Aquire main context so that we can attach the gtk channel later.
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
rust_sources = files(
|
cargo_options = [ '--manifest-path', meson.project_source_root() / 'Cargo.toml' ]
|
||||||
'application.rs',
|
cargo_options += [ '--target-dir', meson.project_build_root() / 'src' ]
|
||||||
'main.rs',
|
|
||||||
'pipewire_connection.rs',
|
if get_option('profile') == 'default'
|
||||||
'pipewire_connection/state.rs',
|
cargo_options += [ '--release' ]
|
||||||
'view/graph_view.rs',
|
rust_target = 'release'
|
||||||
'view/mod.rs',
|
message('Building in release mode')
|
||||||
'view/node.rs',
|
else
|
||||||
'view/port.rs',
|
rust_target = 'debug'
|
||||||
)
|
message('Building in debug mode')
|
||||||
|
endif
|
||||||
|
|
||||||
|
cargo_env = [ 'CARGO_HOME=' + meson.project_build_root() / 'cargo-home' ]
|
||||||
|
|
||||||
custom_target(
|
custom_target(
|
||||||
'cargo-build',
|
'cargo-build',
|
||||||
build_by_default: true,
|
build_by_default: true,
|
||||||
input: [
|
build_always_stale: true,
|
||||||
cargo_sources,
|
|
||||||
rust_sources
|
|
||||||
],
|
|
||||||
output: meson.project_name(),
|
output: meson.project_name(),
|
||||||
console: true,
|
console: true,
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: bindir,
|
install_dir: bindir,
|
||||||
command: [
|
command: [
|
||||||
cargo_script,
|
'env',
|
||||||
meson.build_root(),
|
cargo_env,
|
||||||
meson.source_root(),
|
cargo, 'build',
|
||||||
'@OUTPUT@',
|
cargo_options,
|
||||||
get_option('profile'),
|
'&&',
|
||||||
meson.project_name(),
|
'cp', 'src' / rust_target / meson.project_name(), '@OUTPUT@',
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +70,6 @@ mod imp {
|
|||||||
let mut drag_state = drag_state.borrow_mut();
|
let mut drag_state = drag_state.borrow_mut();
|
||||||
let widget = drag_controller
|
let widget = drag_controller
|
||||||
.widget()
|
.widget()
|
||||||
.expect("drag-begin event has no widget")
|
|
||||||
.dynamic_cast::<Self::Type>()
|
.dynamic_cast::<Self::Type>()
|
||||||
.expect("drag-begin event is not on the GraphView");
|
.expect("drag-begin event is not on the GraphView");
|
||||||
// pick() should at least return the widget itself.
|
// pick() should at least return the widget itself.
|
||||||
@@ -62,12 +81,8 @@ mod imp {
|
|||||||
} else if let Some(target) = target.ancestor(Node::static_type()) {
|
} else if let Some(target) = target.ancestor(Node::static_type()) {
|
||||||
// The user targeted a Node without targeting a specific Port.
|
// The user targeted a Node without targeting a specific Port.
|
||||||
// Drag the Node around the screen.
|
// Drag the Node around the screen.
|
||||||
if let Some((x, y)) = widget.get_node_position(&target) {
|
let (x, y) = widget.get_node_position(&target);
|
||||||
Some((target, x, y))
|
Some((target, x, y))
|
||||||
} else {
|
|
||||||
error!("Failed to obtain position of dragged node, drag aborted.");
|
|
||||||
None
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -77,7 +92,6 @@ mod imp {
|
|||||||
clone!(@strong drag_state => move |drag_controller, x, y| {
|
clone!(@strong drag_state => move |drag_controller, x, y| {
|
||||||
let widget = drag_controller
|
let widget = drag_controller
|
||||||
.widget()
|
.widget()
|
||||||
.expect("drag-update event has no widget")
|
|
||||||
.dynamic_cast::<Self::Type>()
|
.dynamic_cast::<Self::Type>()
|
||||||
.expect("drag-update event is not on the GraphView");
|
.expect("drag-update event is not on the GraphView");
|
||||||
let drag_state = drag_state.borrow();
|
let drag_state = drag_state.borrow();
|
||||||
@@ -104,37 +118,24 @@ 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(&widget_bounds);
|
||||||
.append_cairo(&graphene::Rect::new(
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
alloc.width as f32,
|
|
||||||
alloc.height as f32,
|
|
||||||
))
|
|
||||||
.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
|
||||||
let mut y = 0.0;
|
let mut y = 0.0;
|
||||||
while y < alloc.height.into() {
|
while y < alloc.height().into() {
|
||||||
background_cr.move_to(0.0, y);
|
background_cr.move_to(0.0, y);
|
||||||
background_cr.line_to(alloc.width.into(), y);
|
background_cr.line_to(alloc.width().into(), y);
|
||||||
y += 20.0; // TODO: Change to em;
|
y += 20.0; // TODO: Change to em;
|
||||||
}
|
}
|
||||||
let mut x = 0.0;
|
let mut x = 0.0;
|
||||||
while x < alloc.width.into() {
|
while x < alloc.width().into() {
|
||||||
background_cr.move_to(x, 0.0);
|
background_cr.move_to(x, 0.0);
|
||||||
background_cr.line_to(x, alloc.height.into());
|
background_cr.line_to(x, alloc.height().into());
|
||||||
x += 20.0; // TODO: Change to em;
|
x += 20.0; // TODO: Change to em;
|
||||||
}
|
}
|
||||||
if let Err(e) = background_cr.stroke() {
|
if let Err(e) = background_cr.stroke() {
|
||||||
@@ -148,16 +149,27 @@ mod imp {
|
|||||||
.for_each(|node| self.instance().snapshot_child(node, snapshot));
|
.for_each(|node| self.instance().snapshot_child(node, snapshot));
|
||||||
|
|
||||||
// Draw all links
|
// Draw all links
|
||||||
let link_cr = snapshot
|
let link_cr = snapshot.append_cairo(&graphene::Rect::new(
|
||||||
.append_cairo(&graphene::Rect::new(
|
0.0,
|
||||||
0.0,
|
0.0,
|
||||||
0.0,
|
alloc.width() as f32,
|
||||||
alloc.width as f32,
|
alloc.height() as f32,
|
||||||
alloc.height as f32,
|
));
|
||||||
))
|
|
||||||
.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 rgba = widget
|
||||||
|
.style_context()
|
||||||
|
.lookup_color("graphview-link")
|
||||||
|
.unwrap_or_else(|| gtk::gdk::RGBA::new(0.0, 0.0, 0.0, 0.0));
|
||||||
|
|
||||||
|
link_cr.set_source_rgba(
|
||||||
|
rgba.red().into(),
|
||||||
|
rgba.green().into(),
|
||||||
|
rgba.blue().into(),
|
||||||
|
rgba.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 +181,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,
|
||||||
);
|
);
|
||||||
@@ -204,34 +225,26 @@ mod imp {
|
|||||||
// so we manually calculate the needed offsets here.
|
// so we manually calculate the needed offsets here.
|
||||||
|
|
||||||
let from_port = &nodes.get(&link.node_from)?.get_port(link.port_from)?;
|
let from_port = &nodes.get(&link.node_from)?.get_port(link.port_from)?;
|
||||||
let gtk::Allocation {
|
|
||||||
x: mut fx,
|
|
||||||
y: mut fy,
|
|
||||||
width: fw,
|
|
||||||
height: fh,
|
|
||||||
} = from_port.allocation();
|
|
||||||
let from_node = from_port
|
let from_node = from_port
|
||||||
.ancestor(Node::static_type())
|
.ancestor(Node::static_type())
|
||||||
.expect("Port is not a child of a node");
|
.expect("Port is not a child of a node");
|
||||||
let gtk::Allocation { x: fnx, y: fny, .. } = from_node.allocation();
|
let from_x = from_node.allocation().x()
|
||||||
fx += fnx + fw;
|
+ from_port.allocation().x()
|
||||||
fy += fny + (fh / 2);
|
+ from_port.allocation().width();
|
||||||
|
let from_y = from_node.allocation().y()
|
||||||
|
+ from_port.allocation().y()
|
||||||
|
+ (from_port.allocation().height() / 2);
|
||||||
|
|
||||||
let to_port = &nodes.get(&link.node_to)?.get_port(link.port_to)?;
|
let to_port = &nodes.get(&link.node_to)?.get_port(link.port_to)?;
|
||||||
let gtk::Allocation {
|
|
||||||
x: mut tx,
|
|
||||||
y: mut ty,
|
|
||||||
height: th,
|
|
||||||
..
|
|
||||||
} = to_port.allocation();
|
|
||||||
let to_node = to_port
|
let to_node = to_port
|
||||||
.ancestor(Node::static_type())
|
.ancestor(Node::static_type())
|
||||||
.expect("Port is not a child of a node");
|
.expect("Port is not a child of a node");
|
||||||
let gtk::Allocation { x: tnx, y: tny, .. } = to_node.allocation();
|
let to_x = to_node.allocation().x() + to_port.allocation().x();
|
||||||
tx += tnx;
|
let to_y = to_node.allocation().y()
|
||||||
ty += tny + (th / 2);
|
+ to_port.allocation().y()
|
||||||
|
+ (to_port.allocation().height() / 2);
|
||||||
|
|
||||||
Some((fx.into(), fy.into(), tx.into(), ty.into()))
|
Some((from_x.into(), from_y.into(), to_x.into(), to_y.into()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -264,8 +277,8 @@ impl GraphView {
|
|||||||
.nodes
|
.nodes
|
||||||
.borrow()
|
.borrow()
|
||||||
.values()
|
.values()
|
||||||
.filter_map(|node| {
|
.map(|node| {
|
||||||
// Map nodes to locations, discard nodes without location
|
// Map nodes to their locations
|
||||||
self.get_node_position(&node.clone().upcast())
|
self.get_node_position(&node.clone().upcast())
|
||||||
})
|
})
|
||||||
.filter(|(x2, _)| {
|
.filter(|(x2, _)| {
|
||||||
@@ -339,9 +352,7 @@ impl GraphView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Get the position of the specified node inside the graphview.
|
/// Get the position of the specified node inside the graphview.
|
||||||
///
|
pub(super) fn get_node_position(&self, node: >k::Widget) -> (f32, f32) {
|
||||||
/// Returns `None` if the node is not in the graphview.
|
|
||||||
pub(super) fn get_node_position(&self, node: >k::Widget) -> Option<(f32, f32)> {
|
|
||||||
let layout_manager = self
|
let layout_manager = self
|
||||||
.layout_manager()
|
.layout_manager()
|
||||||
.expect("Failed to get layout manager")
|
.expect("Failed to get layout manager")
|
||||||
@@ -349,13 +360,12 @@ impl GraphView {
|
|||||||
.expect("Failed to cast to FixedLayout");
|
.expect("Failed to cast to FixedLayout");
|
||||||
|
|
||||||
let node = layout_manager
|
let node = layout_manager
|
||||||
.layout_child(node)?
|
.layout_child(node)
|
||||||
.dynamic_cast::<gtk::FixedLayoutChild>()
|
.dynamic_cast::<gtk::FixedLayoutChild>()
|
||||||
.expect("Could not cast to FixedLayoutChild");
|
.expect("Could not cast to FixedLayoutChild");
|
||||||
let transform = node
|
node.transform()
|
||||||
.transform()
|
.expect("Failed to obtain transform from layout child")
|
||||||
.expect("Failed to obtain transform from layout child");
|
.to_translate()
|
||||||
Some(transform.to_translate())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn move_node(&self, node: >k::Widget, x: f32, y: f32) {
|
pub(super) fn move_node(&self, node: >k::Widget, x: f32, y: f32) {
|
||||||
@@ -372,7 +382,6 @@ impl GraphView {
|
|||||||
|
|
||||||
layout_manager
|
layout_manager
|
||||||
.layout_child(node)
|
.layout_child(node)
|
||||||
.expect("Could not get layout child")
|
|
||||||
.dynamic_cast::<gtk::FixedLayoutChild>()
|
.dynamic_cast::<gtk::FixedLayoutChild>()
|
||||||
.expect("Could not cast to FixedLayoutChild")
|
.expect("Could not cast to FixedLayoutChild")
|
||||||
.set_transform(&transform);
|
.set_transform(&transform);
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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},
|
||||||
@@ -11,14 +30,14 @@ use crate::MediaType;
|
|||||||
|
|
||||||
/// A helper struct for linking a output port to an input port.
|
/// A helper struct for linking a output port to an input port.
|
||||||
/// It carries the output ports id.
|
/// It carries the output ports id.
|
||||||
#[derive(Clone, Debug, glib::GBoxed)]
|
#[derive(Clone, Debug, glib::Boxed)]
|
||||||
#[gboxed(type_name = "HelvumForwardLink")]
|
#[boxed_type(name = "HelvumForwardLink")]
|
||||||
struct ForwardLink(u32);
|
struct ForwardLink(u32);
|
||||||
|
|
||||||
/// A helper struct for linking an input to an output port.
|
/// A helper struct for linking an input to an output port.
|
||||||
/// It carries the input ports id.
|
/// It carries the input ports id.
|
||||||
#[derive(Clone, Debug, glib::GBoxed)]
|
#[derive(Clone, Debug, glib::Boxed)]
|
||||||
#[gboxed(type_name = "HelvumReversedLink")]
|
#[boxed_type(name = "HelvumReversedLink")]
|
||||||
struct ReversedLink(u32);
|
struct ReversedLink(u32);
|
||||||
|
|
||||||
mod imp {
|
mod imp {
|
||||||
@@ -104,7 +123,7 @@ impl Port {
|
|||||||
// FIXME: We should protect against different media types, e.g. it should not be possible to drop a video port on an audio port.
|
// FIXME: We should protect against different media types, e.g. it should not be possible to drop a video port on an audio port.
|
||||||
|
|
||||||
// The port will simply provide its pipewire id to the drag target.
|
// The port will simply provide its pipewire id to the drag target.
|
||||||
let drag_src = gtk::DragSourceBuilder::new()
|
let drag_src = gtk::DragSource::builder()
|
||||||
.content(&gdk::ContentProvider::for_value(&match direction {
|
.content(&gdk::ContentProvider::for_value(&match direction {
|
||||||
Direction::Input => ReversedLink(id).to_value(),
|
Direction::Input => ReversedLink(id).to_value(),
|
||||||
Direction::Output => ForwardLink(id).to_value(),
|
Direction::Output => ForwardLink(id).to_value(),
|
||||||
@@ -136,9 +155,7 @@ impl Port {
|
|||||||
// Get the callback registered in the widget and call it
|
// Get the callback registered in the widget and call it
|
||||||
drop_target
|
drop_target
|
||||||
.widget()
|
.widget()
|
||||||
.expect("Drop target has no widget")
|
.emit_by_name::<()>("port-toggled", &[&source_id, &this.id()]);
|
||||||
.emit_by_name("port-toggled", &[&source_id, &this.id()])
|
|
||||||
.expect("Failed to send signal");
|
|
||||||
} else {
|
} else {
|
||||||
warn!("Invalid type dropped on ingoing port");
|
warn!("Invalid type dropped on ingoing port");
|
||||||
}
|
}
|
||||||
@@ -154,9 +171,7 @@ impl Port {
|
|||||||
// Get the callback registered in the widget and call it
|
// Get the callback registered in the widget and call it
|
||||||
drop_target
|
drop_target
|
||||||
.widget()
|
.widget()
|
||||||
.expect("Drop target has no widget")
|
.emit_by_name::<()>("port-toggled", &[&this.id(), &target_id]);
|
||||||
.emit_by_name("port-toggled", &[&this.id(), &target_id])
|
|
||||||
.expect("Failed to send signal");
|
|
||||||
} else {
|
} else {
|
||||||
warn!("Invalid type dropped on outgoing port");
|
warn!("Invalid type dropped on outgoing port");
|
||||||
}
|
}
|
||||||
|
|||||||