blob: 3bcf42ff2061c02843b5b3bc021418453d2ce442 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup edasset
*/
#include "BKE_idtype.h"
#include "BLI_listbase.h"
#include "DNA_asset_types.h"
#include "ED_asset_filter.h"
#include "ED_asset_handle.h"
bool ED_asset_filter_matches_asset(const AssetFilterSettings *filter, const AssetHandle *asset)
{
ID_Type asset_type = ED_asset_handle_get_id_type(asset);
uint64_t asset_id_filter = BKE_idtype_idcode_to_idfilter(asset_type);
if ((filter->id_types & asset_id_filter) == 0) {
return false;
}
/* Not very efficient (O(n^2)), could be improved quite a bit. */
LISTBASE_FOREACH (const AssetTag *, filter_tag, &filter->tags) {
AssetMetaData *asset_data = ED_asset_handle_get_metadata(asset);
AssetTag *matched_tag = (AssetTag *)BLI_findstring(
&asset_data->tags, filter_tag->name, offsetof(AssetTag, name));
if (matched_tag == nullptr) {
return false;
}
}
/* Successfully passed through all filters. */
return true;
}
|