diff options
-rw-r--r-- | src/media.c | 8 | ||||
-rw-r--r-- | src/media.h | 1 | ||||
-rw-r--r-- | src/ui/documentwidget.c | 14 |
3 files changed, 22 insertions, 1 deletions
diff --git a/src/media.c b/src/media.c index c0d6d3de..dcda0664 100644 --- a/src/media.c +++ b/src/media.c | |||
@@ -24,6 +24,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ | |||
24 | #include "gmdocument.h" | 24 | #include "gmdocument.h" |
25 | #include "ui/window.h" | 25 | #include "ui/window.h" |
26 | #include "audio/player.h" | 26 | #include "audio/player.h" |
27 | #include "app.h" | ||
27 | 28 | ||
28 | #include <the_Foundation/ptrarray.h> | 29 | #include <the_Foundation/ptrarray.h> |
29 | #include <stb_image.h> | 30 | #include <stb_image.h> |
@@ -214,8 +215,9 @@ void setData_Media(iMedia *d, iGmLinkId linkId, const iString *mime, const iBloc | |||
214 | updateSourceData_Player(audio->player, NULL, NULL, complete_PlayerUpdate); | 215 | updateSourceData_Player(audio->player, NULL, NULL, complete_PlayerUpdate); |
215 | } | 216 | } |
216 | pushBack_PtrArray(&d->audio, audio); | 217 | pushBack_PtrArray(&d->audio, audio); |
217 | /* TEST: Start playing right away. */ | 218 | /* Start playing right away. */ |
218 | start_Player(audio->player); | 219 | start_Player(audio->player); |
220 | postCommandf_App("media.player.started player:%p", audio->player); | ||
219 | } | 221 | } |
220 | } | 222 | } |
221 | } | 223 | } |
@@ -231,6 +233,10 @@ iMediaId findLinkImage_Media(const iMedia *d, iGmLinkId linkId) { | |||
231 | return 0; | 233 | return 0; |
232 | } | 234 | } |
233 | 235 | ||
236 | size_t numAudio_Media(const iMedia *d) { | ||
237 | return size_PtrArray(&d->audio); | ||
238 | } | ||
239 | |||
234 | iMediaId findLinkAudio_Media(const iMedia *d, iGmLinkId linkId) { | 240 | iMediaId findLinkAudio_Media(const iMedia *d, iGmLinkId linkId) { |
235 | /* TODO: use a hash */ | 241 | /* TODO: use a hash */ |
236 | iConstForEach(PtrArray, i, &d->audio) { | 242 | iConstForEach(PtrArray, i, &d->audio) { |
diff --git a/src/media.h b/src/media.h index c19ad8ae..9db6659d 100644 --- a/src/media.h +++ b/src/media.h | |||
@@ -60,6 +60,7 @@ iMediaId findLinkImage_Media (const iMedia *, uint16_t linkId); | |||
60 | iBool imageInfo_Media (const iMedia *, iMediaId imageId, iGmImageInfo *info_out); | 60 | iBool imageInfo_Media (const iMedia *, iMediaId imageId, iGmImageInfo *info_out); |
61 | SDL_Texture * imageTexture_Media (const iMedia *, iMediaId imageId); | 61 | SDL_Texture * imageTexture_Media (const iMedia *, iMediaId imageId); |
62 | 62 | ||
63 | size_t numAudio_Media (const iMedia *); | ||
63 | iMediaId findLinkAudio_Media (const iMedia *, uint16_t linkId); | 64 | iMediaId findLinkAudio_Media (const iMedia *, uint16_t linkId); |
64 | iBool audioInfo_Media (const iMedia *, iMediaId audioId, iGmAudioInfo *info_out); | 65 | iBool audioInfo_Media (const iMedia *, iMediaId audioId, iGmAudioInfo *info_out); |
65 | iPlayer * audioPlayer_Media (const iMedia *, iMediaId audioId); | 66 | iPlayer * audioPlayer_Media (const iMedia *, iMediaId audioId); |
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index b977e4d9..573cd3e3 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c | |||
@@ -1421,6 +1421,18 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) | |||
1421 | else if (equal_Command(cmd, "media.updated") || equal_Command(cmd, "media.finished")) { | 1421 | else if (equal_Command(cmd, "media.updated") || equal_Command(cmd, "media.finished")) { |
1422 | return handleMediaCommand_DocumentWidget_(d, cmd); | 1422 | return handleMediaCommand_DocumentWidget_(d, cmd); |
1423 | } | 1423 | } |
1424 | else if (equal_Command(cmd, "media.player.started")) { | ||
1425 | /* When one media player starts, pause the others that may be playing. */ | ||
1426 | const iPlayer *startedPlr = pointerLabel_Command(cmd, "player"); | ||
1427 | const iMedia * media = media_GmDocument(d->doc); | ||
1428 | const size_t num = numAudio_Media(media); | ||
1429 | for (size_t id = 1; id <= num; id++) { | ||
1430 | iPlayer *plr = audioPlayer_Media(media, id); | ||
1431 | if (plr != startedPlr) { | ||
1432 | setPaused_Player(plr, iTrue); | ||
1433 | } | ||
1434 | } | ||
1435 | } | ||
1424 | else if (equal_Command(cmd, "document.stop") && document_App() == d) { | 1436 | else if (equal_Command(cmd, "document.stop") && document_App() == d) { |
1425 | if (d->request) { | 1437 | if (d->request) { |
1426 | postCommandf_App( | 1438 | postCommandf_App( |
@@ -2064,6 +2076,8 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e | |||
2064 | if (!isFinished_GmRequest(req->req)) { | 2076 | if (!isFinished_GmRequest(req->req)) { |
2065 | cancel_GmRequest(req->req); | 2077 | cancel_GmRequest(req->req); |
2066 | removeMediaRequest_DocumentWidget_(d, linkId); | 2078 | removeMediaRequest_DocumentWidget_(d, linkId); |
2079 | /* Note: Some of the audio IDs have changed now, layout must | ||
2080 | be redone. */ | ||
2067 | } | 2081 | } |
2068 | } | 2082 | } |
2069 | redoLayout_GmDocument(d->doc); | 2083 | redoLayout_GmDocument(d->doc); |