[graphics/krita/krita/6.0] libs/ui/animation: Hide audio checkbox for image animation formats

Carsten Hartenfels <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 7ba37605f14c979da38bc5d43709afd74ba36bfa by Carsten Hartenfels.
Committed on 27/07/2026 at 17:19.
Pushed by hartenfels into branch 'krita/6.0'.

Hide audio checkbox for image animation formats

Because they don't support audio, hence it makes no sense to prompt the
user if they want to include it.

M  +5    -0    libs/ui/animation/KisAndroidMediaEncoderRunnable.cpp
M  +19   -0    libs/ui/animation/KisDlgAnimationRenderer.cpp
M  +2    -0    libs/ui/animation/KisDlgAnimationRenderer.h
M  +5    -0    libs/ui/animation/KisLibavMediaEncoderRunnable.cpp
M  +1    -0    libs/ui/animation/KisMediaEncoderWrapper.h

https://invent.kde.org/graphics/krita/-/commit/7ba37605f14c979da38bc5d43709afd74ba36bfa

diff --git a/libs/ui/animation/KisAndroidMediaEncoderRunnable.cpp b/libs/ui/animation/KisAndroidMediaEncoderRunnable.cpp
index 9bea0460824..7175f5d7acb 100644
--- a/libs/ui/animation/KisAndroidMediaEncoderRunnable.cpp
+++ b/libs/ui/animation/KisAndroidMediaEncoderRunnable.cpp
@@ -96,6 +96,11 @@ public:
         return extensionForFormatId(m_formatId);
     }
 
+    bool supportsAudio() const override
+    {
+        return true;
+    }
+
     QWidget *createPreferencesWidget(const QVariantMap &preferences) const override
     {
         KisAndroidMediaEncoderPreferencesWidget *pw = new KisAndroidMediaEncoderPreferencesWidget;
diff --git a/libs/ui/animation/KisDlgAnimationRenderer.cpp b/libs/ui/animation/KisDlgAnimationRenderer.cpp
index b113ec203b3..366ceaf53b9 100644
--- a/libs/ui/animation/KisDlgAnimationRenderer.cpp
+++ b/libs/ui/animation/KisDlgAnimationRenderer.cpp
@@ -144,6 +144,7 @@ KisDlgAnimationRenderer::KisDlgAnimationRenderer(KisDocument *doc, QWidget *pare
 
         connect(m_page->shouldExportOnlyImageSequence, SIGNAL(toggled(bool)), this, SLOT(slotExportTypeChanged()));
         connect(m_page->shouldExportOnlyVideo, SIGNAL(toggled(bool)), this, SLOT(slotExportTypeChanged()));
+        connect(m_page->cmbRenderType, SIGNAL(currentIndexChanged(int)), SLOT(slotRenderTypeChanged()));
 
         connect(m_page->intFramesPerSecond, SIGNAL(valueChanged(int)), SLOT(slotCheckWarnings()));
         connect(m_page->intWidth, SIGNAL(valueChanged(int)), SLOT(slotCheckWarnings()));
@@ -337,6 +338,7 @@ void KisDlgAnimationRenderer::initializeRenderSettings(const KisDocument &doc, c
 
     bool hasAudioLoaded = doc.getAudioTracks().count() > 0;
     m_page->chkIncludeAudio->setChecked(hasAudioLoaded);
+    slotRenderTypeChanged();
 }
 
 #ifndef Q_OS_ANDROID
@@ -493,6 +495,16 @@ bool KisDlgAnimationRenderer::looksLikeGif(const QString &videoType)
 #endif
 }
 
+bool KisDlgAnimationRenderer::supportsAudio(const QString &videoType)
+{
+#ifdef Q_OS_ANDROID
+    KisMediaEncoderFormat *format = KisMediaEncoderWrapper::getFormatByKey(videoType);
+    return format && format->supportsAudio();
+#else
+    return !videoType.startsWith(QStringLiteral("image/"));
+#endif
+}
+
 #ifndef Q_OS_ANDROID
 void KisDlgAnimationRenderer::setFFmpegPath(const QString& path) {
     // Let's START with the assumption that user-specified ffmpeg path is invalid
@@ -962,6 +974,13 @@ void KisDlgAnimationRenderer::slotExportTypeChanged()
     slotCheckWarnings();
 }
 
+void KisDlgAnimationRenderer::slotRenderTypeChanged()
+{
+    m_page->chkIncludeAudio->setVisible(m_page->cmbRenderType->count() != 0
+                                        && supportsAudio(m_page->cmbRenderType->currentData().toString()));
+    m_page->adjustSize();
+}
+
 void KisDlgAnimationRenderer::slotLockAspectRatioDimensionsWidth(int width)
 {
     Q_UNUSED(width);
diff --git a/libs/ui/animation/KisDlgAnimationRenderer.h b/libs/ui/animation/KisDlgAnimationRenderer.h
index 85e2e9e2275..ce397e77a33 100644
--- a/libs/ui/animation/KisDlgAnimationRenderer.h
+++ b/libs/ui/animation/KisDlgAnimationRenderer.h
@@ -65,6 +65,7 @@ private Q_SLOTS:
     void slotLockAspectRatioDimensionsHeight(int height);
 
     void slotExportTypeChanged();
+    void slotRenderTypeChanged();
 #ifndef Q_OS_ANDROID
     void setFFmpegPath(const QString& path);
 #endif
@@ -119,6 +120,7 @@ private:
     static void saveLastUsedConfiguration(QString configurationID, KisPropertiesConfigurationSP config);
 
     static bool looksLikeGif(const QString &videoType);
+    static bool supportsAudio(const QString &videoType);
 
 private:
     KisImageSP m_image;
diff --git a/libs/ui/animation/KisLibavMediaEncoderRunnable.cpp b/libs/ui/animation/KisLibavMediaEncoderRunnable.cpp
index eee0053c7ff..715884825d6 100644
--- a/libs/ui/animation/KisLibavMediaEncoderRunnable.cpp
+++ b/libs/ui/animation/KisLibavMediaEncoderRunnable.cpp
@@ -81,6 +81,11 @@ public:
         return extensionForFormatId(m_formatId);
     }
 
+    bool supportsAudio() const override
+    {
+        return false;
+    }
+
     QString formatName() const
     {
         switch (m_formatId) {
diff --git a/libs/ui/animation/KisMediaEncoderWrapper.h b/libs/ui/animation/KisMediaEncoderWrapper.h
index 1c7a481271d..30e4a22b0ec 100644
--- a/libs/ui/animation/KisMediaEncoderWrapper.h
+++ b/libs/ui/animation/KisMediaEncoderWrapper.h
@@ -33,6 +33,7 @@ public:
     virtual QString key() const = 0;
     virtual QString title() const = 0;
     virtual QString extension() const = 0;
+    virtual bool supportsAudio() const = 0;
 
     virtual QWidget *createPreferencesWidget(const QVariantMap &preferences) const = 0;
     virtual void resetPreferencesWidget(QWidget *widget) const = 0;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.