diff --git a/CHANGELOG.md b/CHANGELOG.md index d8440e5..d4458c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ Every release of Effector, newest first. The version lives in one place, the `project()` line of `CMakeLists.txt`, and each release is a `vX.Y.Z` tag on the commit that made it. The interface shows this file under Changelog in its menu. +## [0.5.3] - 2026-09-26 + +### Added +- Effector has its own icon, an E split into its colour channels, in the app + menu, the dock and About Effector; a one-colour version goes with it for + panels. + ## [0.5.2] - 2026-09-26 ### Changed diff --git a/CMakeLists.txt b/CMakeLists.txt index d940029..4e4af18 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.20) -project(effector VERSION 0.5.2 LANGUAGES CXX) +project(effector VERSION 0.5.3 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -70,6 +70,9 @@ add_library(effector_gui STATIC ) target_link_libraries(effector_gui PUBLIC effector_core PkgConfig::GTKMM) target_compile_options(effector_gui PRIVATE -Wall -Wextra -Wpedantic) +# Where a build that was never installed finds its own icon (see app.cpp). +target_compile_definitions(effector_gui PRIVATE + EFFECTOR_SOURCE_ICON_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data/icons") # --- application -------------------------------------------------------------- add_executable(effector src/main.cpp) @@ -79,6 +82,8 @@ target_compile_options(effector PRIVATE -Wall -Wextra -Wpedantic) install(TARGETS effector RUNTIME DESTINATION bin) # The launcher entry, so the interface shows up in the desktop's app menu. install(FILES data/org.effector.Effector.desktop DESTINATION share/applications) +# The icon it names, in full colour and as a one-colour symbolic for panels. +install(DIRECTORY data/icons/hicolor DESTINATION share/icons) # --- tests -------------------------------------------------------------------- include(CTest) diff --git a/data/icons/hicolor/scalable/apps/org.effector.Effector.svg b/data/icons/hicolor/scalable/apps/org.effector.Effector.svg new file mode 100644 index 0000000..e35d808 --- /dev/null +++ b/data/icons/hicolor/scalable/apps/org.effector.Effector.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/icons/hicolor/symbolic/apps/org.effector.Effector-symbolic.svg b/data/icons/hicolor/symbolic/apps/org.effector.Effector-symbolic.svg new file mode 100644 index 0000000..1be1541 --- /dev/null +++ b/data/icons/hicolor/symbolic/apps/org.effector.Effector-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/data/org.effector.Effector.desktop b/data/org.effector.Effector.desktop index 0e5ff3b..9291f53 100644 --- a/data/org.effector.Effector.desktop +++ b/data/org.effector.Effector.desktop @@ -4,7 +4,7 @@ Name=Effector GenericName=Image Effects Comment=Cascade glitch and collage effects over your photographs Exec=effector %F -Icon=applications-graphics +Icon=org.effector.Effector Terminal=false Categories=Graphics;2DGraphics;RasterGraphics;GTK; MimeType=image/jpeg;image/png;image/webp;image/tiff;image/bmp; diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD index 3b5e066..9390d56 100644 --- a/packaging/arch/PKGBUILD +++ b/packaging/arch/PKGBUILD @@ -2,7 +2,7 @@ # so pkgver must follow the project() line of CMakeLists.txt (the version core # test checks it). From this folder: makepkg -si pkgname=effector -pkgver=0.5.2 +pkgver=0.5.3 pkgrel=1 pkgdesc='Image effects app: a GTK4 interface and a headless CLI over pluggable effects' arch=('x86_64' 'aarch64') diff --git a/src/gui/app.cpp b/src/gui/app.cpp index 8a3b4db..32c108c 100644 --- a/src/gui/app.cpp +++ b/src/gui/app.cpp @@ -13,6 +13,14 @@ int runGui(const Options& initial, int argc, char** argv) { auto app = Gtk::Application::create("org.effector.Effector", Gio::Application::Flags::NON_UNIQUE); + app->signal_startup().connect([] { + // An installed Effector finds its icon in the hicolor theme; one run + // straight from the build tree falls back to the copy in the sources. + const char* icon = "org.effector.Effector"; + auto theme = Gtk::IconTheme::get_for_display(Gdk::Display::get_default()); + if (!theme->has_icon(icon)) theme->add_search_path(EFFECTOR_SOURCE_ICON_DIR); + Gtk::Window::set_default_icon_name(icon); + }); return app->make_window_and_run(0, nullptr, initial); } diff --git a/src/gui/window.cpp b/src/gui/window.cpp index ac2d50c..c259e83 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -2220,7 +2220,7 @@ void EffectorWindow::showAbout() { aboutDialog_->set_program_name("Effector"); aboutDialog_->set_version(std::string(kVersion)); aboutDialog_->set_comments("Image effects, cascaded through a chain."); - aboutDialog_->set_logo_icon_name("applications-graphics"); + aboutDialog_->set_logo_icon_name("org.effector.Effector"); aboutDialog_->set_copyright("Copyright © 2026 Si"); aboutDialog_->set_license_type(Gtk::License::GPL_3_0); }