Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-09-10 18:31:18 +0300
committerJacques Lucke <jacques@blender.org>2020-09-10 18:31:18 +0300
commit0c7e77d416cac85d6b50778115d8cae4c3d64a6c (patch)
tree69f86021fea53d821f0497474d6735b014c82246 /source/blender/blenkernel/intern/speaker.c
parentbe5cbbabcea555fc5ba3ac84922342ad2fb71dd4 (diff)
Refactor: move Speaker .blend I/O to IDTypeInfo callbacks
Diffstat (limited to 'source/blender/blenkernel/intern/speaker.c')
-rw-r--r--source/blender/blenkernel/intern/speaker.c49
1 files changed, 45 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/speaker.c b/source/blender/blenkernel/intern/speaker.c
index 8f403792c46..0a8b4baf826 100644
--- a/source/blender/blenkernel/intern/speaker.c
+++ b/source/blender/blenkernel/intern/speaker.c
@@ -28,12 +28,15 @@
#include "BLT_translation.h"
+#include "BKE_anim_data.h"
#include "BKE_idtype.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_main.h"
#include "BKE_speaker.h"
+#include "BLO_read_write.h"
+
static void speaker_init_data(ID *id)
{
Speaker *speaker = (Speaker *)id;
@@ -50,6 +53,44 @@ static void speaker_foreach_id(ID *id, LibraryForeachIDData *data)
BKE_LIB_FOREACHID_PROCESS(data, speaker->sound, IDWALK_CB_USER);
}
+static void speaker_blend_write(BlendWriter *writer, ID *id, const void *id_address)
+{
+ Speaker *spk = (Speaker *)id;
+ if (spk->id.us > 0 || BLO_write_is_undo(writer)) {
+ /* write LibData */
+ BLO_write_id_struct(writer, Speaker, id_address, &spk->id);
+ BKE_id_blend_write(writer, &spk->id);
+
+ if (spk->adt) {
+ BKE_animdata_blend_write(writer, spk->adt);
+ }
+ }
+}
+
+static void speaker_blend_read_data(BlendDataReader *reader, ID *id)
+{
+ Speaker *spk = (Speaker *)id;
+ BLO_read_data_address(reader, &spk->adt);
+ BKE_animdata_blend_read_data(reader, spk->adt);
+
+#if 0
+ spk->sound = newdataadr(fd, spk->sound);
+ direct_link_sound(fd, spk->sound);
+#endif
+}
+
+static void speaker_blend_read_lib(BlendLibReader *reader, ID *id)
+{
+ Speaker *spk = (Speaker *)id;
+ BLO_read_id_address(reader, spk->id.lib, &spk->sound);
+}
+
+static void speaker_blend_read_expand(BlendExpander *expander, ID *id)
+{
+ Speaker *spk = (Speaker *)id;
+ BLO_expand(expander, spk->sound);
+}
+
IDTypeInfo IDType_ID_SPK = {
.id_code = ID_SPK,
.id_filter = FILTER_ID_SPK,
@@ -67,10 +108,10 @@ IDTypeInfo IDType_ID_SPK = {
.foreach_id = speaker_foreach_id,
.foreach_cache = NULL,
- .blend_write = NULL,
- .blend_read_data = NULL,
- .blend_read_lib = NULL,
- .blend_read_expand = NULL,
+ .blend_write = speaker_blend_write,
+ .blend_read_data = speaker_blend_read_data,
+ .blend_read_lib = speaker_blend_read_lib,
+ .blend_read_expand = speaker_blend_read_expand,
};
void *BKE_speaker_add(Main *bmain, const char *name)