8 Commits

Author SHA1 Message Date
gary a08e9e8444 Ensure dark mode support 2025-09-03 23:39:45 -05:00
gary 754e89da7a Fix .desktop file to work in GNOME 2025-09-03 23:00:36 -05:00
gary 873f0281c8 Add release notes 2025-09-03 21:22:37 -05:00
gary be97085609 Rename scenes to SlidesScene and NoSlidesScene 2025-09-03 21:22:23 -05:00
gary e054feb0f7 Bump version to 1.1.0 2025-09-03 21:16:35 -05:00
gary d8b040631e Add window icon 2025-09-03 21:13:28 -05:00
gary 0cd84cac2b Repath icons to match their linux install locations, add installer and desktop file 2025-09-03 21:00:35 -05:00
gary 9f57ba69ac Remove camera reboot, bump version to 1.0.0 2025-04-11 22:49:58 -05:00
18 changed files with 385 additions and 17 deletions
+8
View File
@@ -25,3 +25,11 @@ endif()
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
add_subdirectory(src)
install(
PROGRAMS
install.sh
DESTINATION
.
)
+27
View File
@@ -0,0 +1,27 @@
K1;3d1a77ec-265f-4905-2061-4f1003ee2189;O1;net.drinkingtea.nostalgia.core.Palette;4;{
"colorNames" :
[
"Color 1",
"Color 2",
"Color 3"
],
"pages" :
[
{
"colors" :
[
{
"b" : 10,
"g" : 5,
"r" : 5
},
{},
{
"b" : 31,
"g" : 31,
"r" : 31
}
]
}
]
}
+269
View File
@@ -0,0 +1,269 @@
K1;40f7b4ac-7f90-409e-80e0-64b59b594a63;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{
"bpp" : 4,
"defaultPalette" : "uuid://3d1a77ec-265f-4905-2061-4f1003ee2189",
"subsheet" :
{
"columns" : 2,
"name" : "Root",
"pixels" :
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
0,
0,
0,
0,
0,
2,
0,
0,
2,
0,
0,
0,
0,
2,
0,
0,
2,
0,
0,
0,
0,
0,
2,
2,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
0,
0,
0,
2,
0,
0,
0,
2,
0,
0,
2,
0,
0,
0,
0,
2,
0,
2,
0,
0,
0,
0,
0,
2,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
0,
0,
0,
0,
0,
0,
2,
0,
0,
0,
0,
0,
0,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
0,
2,
0,
0,
0,
0,
0,
2,
0,
0,
2,
0,
0,
0,
0,
2,
0,
0,
0,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
],
"rows" : 2
}
}
+18
View File
@@ -0,0 +1,18 @@
#! /usr/bin/env bash
set -eu
dist_dir=.
install -Dm 755 $dist_dir/bin/SlideController /usr/local/bin/SlideController
install -Dm 755 $dist_dir/share/applications/net.drinkingtea.sc9k.desktop /usr/share/applications/net.drinkingtea.sc9k.desktop
cp -r $dist_dir/share/ /usr/
if command -v gtk-update-icon-cache >/dev/null 2>&1; then
sudo gtk-update-icon-cache /usr/share/icons/hicolor
fi
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y qt6-gtk-platformtheme qgnomeplatform-qt6 adwaita-qt
fi
+5
View File
@@ -0,0 +1,5 @@
# 1.1.0
* Add Linux app icon, desktop file, and install script
* Rename MusicScene SlidesScene and SpeakerScene to NoSlidesScene
+27
View File
@@ -33,3 +33,30 @@ install(
BUNDLE DESTINATION .
)
install(
DIRECTORY
icons
DESTINATION
share
)
install(
FILES
net.drinkingtea.sc9k.desktop
DESTINATION
share/applications
)
if(UNIX)
qt_add_resources(
SlideController "app_images"
PREFIX "/"
FILES
icons/hicolor/16x16/apps/net.drinkingtea.sc9k.png
icons/hicolor/32x32/apps/net.drinkingtea.sc9k.png
icons/hicolor/64x64/apps/net.drinkingtea.sc9k.png
icons/hicolor/128x128/apps/net.drinkingtea.sc9k.png
icons/hicolor/256x256/apps/net.drinkingtea.sc9k.png
icons/hicolor/512x512/apps/net.drinkingtea.sc9k.png
)
endif()
+1 -1
View File
@@ -10,5 +10,5 @@
constexpr auto MaxCameraPresets = 9;
constexpr auto MaxViews = 9;
constexpr auto Version = "1.0-beta6";
constexpr auto Version = "1.1.0";
Binary file not shown.

After

Width:  |  Height:  |  Size: 140 B

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 B

+10
View File
@@ -19,6 +19,16 @@ int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QApplication::setOrganizationName("DrinkingTea");
QApplication::setApplicationName("Slide Controller 9000");
#ifdef __linux
QIcon icon;
icon.addFile(":/icons/hicolor/16x16/apps/net.drinkingtea.sc9k.png");
icon.addFile(":/icons/hicolor/32x32/apps/net.drinkingtea.sc9k.png");
icon.addFile(":/icons/hicolor/64x64/apps/net.drinkingtea.sc9k.png");
icon.addFile(":/icons/hicolor/128x128/apps/net.drinkingtea.sc9k.png");
icon.addFile(":/icons/hicolor/256x256/apps/net.drinkingtea.sc9k.png");
icon.addFile(":/icons/hicolor/512x512/apps/net.drinkingtea.sc9k.png");
QApplication::setWindowIcon(icon);
#endif
MainWindow w;
w.show();
return QApplication::exec();
-12
View File
@@ -121,18 +121,6 @@ void MainWindow::setupMenu() {
});
menu->addAction(cameraPresetAct);
}
menu->addSeparator();
auto const rebootAct = new QAction(tr("&Reboot"), this);
connect(rebootAct, &QAction::triggered, &m_cameraClient, [this] {
QMessageBox confirm(this);
confirm.setText(tr("Are you sure you want to reboot the camera? This will take about 20 seconds."));
confirm.addButton(tr("&No"), QMessageBox::ButtonRole::NoRole);
confirm.addButton(tr("&Yes"), QMessageBox::ButtonRole::YesRole);
if (confirm.exec()) {
m_cameraClient.reboot();
}
});
menu->addAction(rebootAct);
}
// help menu
{
+14
View File
@@ -0,0 +1,14 @@
[Desktop Entry]
Name=Slide Controller 9000
Comment=Slide and Live Stream Coordinator
GenericName=Slide and Live Stream Coordinator
X-GNOME-FullName=Slide Controller 9000
Type=Application
Exec=env QT_QPA_PLATFORMTHEME=gnome /usr/local/bin/SlideController
Terminal=false
X-MultipleArgs=false
Icon=net.drinkingtea.sc9k
Categories=Multimedia
Keywords=slide;controller;sc9k
StartupWMClass=SlideController
StartupNotify=false
+4 -4
View File
@@ -26,18 +26,18 @@ void OBSClient::setScene(QString const&scene) {
}
void OBSClient::showSlides() {
setScene("MusicScene");
setScene(SceneSlides);
}
void OBSClient::hideSlides() {
setScene("SpeakerScene");
setScene(SceneNoSlides);
}
void OBSClient::setSlidesVisible(bool state) {
if (state) {
setScene("MusicScene");
setScene(SceneSlides);
} else {
setScene("SpeakerScene");
setScene(SceneNoSlides);
}
}
+2
View File
@@ -17,6 +17,8 @@
class OBSClient: public QObject {
Q_OBJECT
private:
static constexpr auto SceneSlides = "SlidesScene";
static constexpr auto SceneNoSlides = "NoSlidesScene";
QString m_baseUrl;
QNetworkAccessManager *m_nam = new QNetworkAccessManager(this);
QNetworkAccessManager *m_pollingNam = new QNetworkAccessManager(this);