Files
test/source/blender/blenkernel/intern/speaker.cc
Bastien Montagne df0efda0d6 Refactor: IDTypeInfo: Add info about 'potentially used IDTypes'.
This data was 'hidden' away in a util in
`lib_query.cc`, which made it hard to discover and keep up-to-date.

However, as shown by e.g. #108407, critical low-level features in ID
management code, such as remapping, now rely on this information being
valid.

Also simplify `BKE_library_id_can_use_filter_id` and
`BKE_library_id_can_use_idtype` to make them more generic, relying on
IDTypeInfo to retrieve IDtype-specific info.

No behavioral changes expected here.
2024-02-15 19:45:10 +01:00

89 lines
2.0 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup bke
*/
#include "DNA_defaults.h"
#include "DNA_sound_types.h"
#include "DNA_speaker_types.h"
#include "BLI_utildefines.h"
#include "BLT_translation.hh"
#include "BKE_idtype.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_speaker.h"
#include "BLO_read_write.hh"
#include <cstring>
static void speaker_init_data(ID *id)
{
Speaker *speaker = (Speaker *)id;
BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(speaker, id));
MEMCPY_STRUCT_AFTER(speaker, DNA_struct_default_get(Speaker), id);
}
static void speaker_foreach_id(ID *id, LibraryForeachIDData *data)
{
Speaker *speaker = (Speaker *)id;
BKE_LIB_FOREACHID_PROCESS_IDSUPER(data, speaker->sound, IDWALK_CB_USER);
}
static void speaker_blend_write(BlendWriter *writer, ID *id, const void *id_address)
{
Speaker *spk = (Speaker *)id;
/* write LibData */
BLO_write_id_struct(writer, Speaker, id_address, &spk->id);
BKE_id_blend_write(writer, &spk->id);
}
IDTypeInfo IDType_ID_SPK = {
/*id_code*/ ID_SPK,
/*id_filter*/ FILTER_ID_SPK,
/*dependencies_id_types*/ FILTER_ID_SO,
/*main_listbase_index*/ INDEX_ID_SPK,
/*struct_size*/ sizeof(Speaker),
/*name*/ "Speaker",
/*name_plural*/ N_("speakers"),
/*translation_context*/ BLT_I18NCONTEXT_ID_SPEAKER,
/*flags*/ IDTYPE_FLAGS_APPEND_IS_REUSABLE,
/*asset_type_info*/ nullptr,
/*init_data*/ speaker_init_data,
/*copy_data*/ nullptr,
/*free_data*/ nullptr,
/*make_local*/ nullptr,
/*foreach_id*/ speaker_foreach_id,
/*foreach_cache*/ nullptr,
/*foreach_path*/ nullptr,
/*owner_pointer_get*/ nullptr,
/*blend_write*/ speaker_blend_write,
/*blend_read_data*/ nullptr,
/*blend_read_after_liblink*/ nullptr,
/*blend_read_undo_preserve*/ nullptr,
/*lib_override_apply_post*/ nullptr,
};
void *BKE_speaker_add(Main *bmain, const char *name)
{
Speaker *spk;
spk = static_cast<Speaker *>(BKE_id_new(bmain, ID_SPK, name));
return spk;
}