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

asset_filter.cc « intern « asset « editors « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
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;
}