Skip to content

Commit 748d9b8

Browse files
authored
Merge pull request #133 from scratchcpp/mute
Add API for muting audio
2 parents c9d7d1c + c094926 commit 748d9b8

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

src/ProjectPlayer.qml

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ ProjectScene {
1414
property alias fps: loader.fps
1515
property alias turboMode: loader.turboMode
1616
property alias cloneLimit: loader.cloneLimit
17-
property alias spriteFencing: loader.spriteFencing
17+
property alias spriteFencing: loader.spriteFencing
18+
property alias mute: loader.mute
1819
property bool showLoadingProgress: true
1920
readonly property bool loading: priv.loading
2021
readonly property int downloadedAssets: loader.downloadedAssets

src/projectloader.cpp

+21
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ void ProjectLoader::load()
249249
m_engine->setStageHeight(m_stageHeight);
250250
m_engine->setCloneLimit(m_cloneLimit);
251251
m_engine->setSpriteFencingEnabled(m_spriteFencing);
252+
m_engine->setGlobalVolume(m_mute ? 0 : 100);
252253

253254
m_engine->aboutToRender().connect(&ProjectLoader::redraw, this);
254255
m_engine->monitorAdded().connect(&ProjectLoader::addMonitor, this);
@@ -522,6 +523,26 @@ void ProjectLoader::setSpriteFencing(bool newSpriteFencing)
522523
emit spriteFencingChanged();
523524
}
524525

526+
bool ProjectLoader::mute() const
527+
{
528+
return m_mute;
529+
}
530+
531+
void ProjectLoader::setMute(bool newMute)
532+
{
533+
if (m_mute == newMute)
534+
return;
535+
536+
m_mute = newMute;
537+
m_engineMutex.lock();
538+
539+
if (m_engine)
540+
m_engine->setGlobalVolume(newMute ? 0 : 100);
541+
542+
m_engineMutex.unlock();
543+
emit muteChanged();
544+
}
545+
525546
unsigned int ProjectLoader::downloadedAssets() const
526547
{
527548
return m_downloadedAssets;

src/projectloader.h

+6
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class ProjectLoader : public QObject
3535
Q_PROPERTY(unsigned int stageHeight READ stageHeight WRITE setStageHeight NOTIFY stageHeightChanged)
3636
Q_PROPERTY(int cloneLimit READ cloneLimit WRITE setCloneLimit NOTIFY cloneLimitChanged)
3737
Q_PROPERTY(bool spriteFencing READ spriteFencing WRITE setSpriteFencing NOTIFY spriteFencingChanged)
38+
Q_PROPERTY(bool mute READ mute WRITE setMute NOTIFY muteChanged)
3839
Q_PROPERTY(unsigned int downloadedAssets READ downloadedAssets NOTIFY downloadedAssetsChanged)
3940
Q_PROPERTY(unsigned int assetCount READ assetCount NOTIFY assetCountChanged)
4041

@@ -84,6 +85,9 @@ class ProjectLoader : public QObject
8485
bool spriteFencing() const;
8586
void setSpriteFencing(bool newSpriteFencing);
8687

88+
bool mute() const;
89+
void setMute(bool newMute);
90+
8791
unsigned int downloadedAssets() const;
8892

8993
unsigned int assetCount() const;
@@ -103,6 +107,7 @@ class ProjectLoader : public QObject
103107
void stageHeightChanged();
104108
void cloneLimitChanged();
105109
void spriteFencingChanged();
110+
void muteChanged();
106111
void downloadedAssetsChanged();
107112
void assetCountChanged();
108113
void cloneCreated(SpriteModel *model);
@@ -143,6 +148,7 @@ class ProjectLoader : public QObject
143148
unsigned int m_stageHeight = 360;
144149
int m_cloneLimit = 300;
145150
bool m_spriteFencing = true;
151+
bool m_mute = false;
146152
std::atomic<unsigned int> m_downloadedAssets = 0;
147153
std::atomic<unsigned int> m_assetCount = 0;
148154
std::atomic<bool> m_stopLoading = false;

test/projectloader/projectloader_test.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -324,3 +324,23 @@ TEST_F(ProjectLoaderTest, SpriteFencing)
324324
ASSERT_EQ(spy.count(), 1);
325325
ASSERT_TRUE(loader.spriteFencing());
326326
}
327+
328+
TEST_F(ProjectLoaderTest, Mute)
329+
{
330+
ProjectLoader loader;
331+
EngineMock engine;
332+
loader.setEngine(&engine);
333+
ASSERT_FALSE(loader.mute());
334+
335+
EXPECT_CALL(engine, setGlobalVolume(0));
336+
QSignalSpy spy(&loader, SIGNAL(muteChanged()));
337+
loader.setMute(true);
338+
ASSERT_EQ(spy.count(), 1);
339+
ASSERT_TRUE(loader.mute());
340+
341+
EXPECT_CALL(engine, setGlobalVolume(100));
342+
spy.clear();
343+
loader.setMute(false);
344+
ASSERT_EQ(spy.count(), 1);
345+
ASSERT_FALSE(loader.mute());
346+
}

0 commit comments

Comments
 (0)