Blender V5.0
channels.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include <cstring>
10
11#include "MEM_guardedalloc.h"
12
13#include "DNA_listBase.h"
14#include "DNA_sequence_types.h"
15
16#include "BLI_listbase.h"
17#include "BLI_string_utf8.h"
18
19#include "BLT_translation.hh"
20
21#include "sequencer.hh"
22
23#include "SEQ_channels.hh"
24#include "SEQ_sequencer.hh"
25
26namespace blender::seq {
27
29{
30 return ed ? ed->current_channels() : nullptr;
31}
32
34{
35 /* Allocate channels. Channel 0 is never used, but allocated to prevent off by 1 issues. */
36 for (int i = 0; i < MAX_CHANNELS + 1; i++) {
37 SeqTimelineChannel *channel = MEM_callocN<SeqTimelineChannel>("seq timeline channel");
38 SNPRINTF_UTF8(channel->name, DATA_("Channel %d"), i);
39 channel->index = i;
40 BLI_addtail(channels, channel);
41 }
42}
43
44void channels_duplicate(ListBase *channels_dst, ListBase *channels_src)
45{
46 LISTBASE_FOREACH (SeqTimelineChannel *, channel, channels_src) {
47 SeqTimelineChannel *channel_duplicate = static_cast<SeqTimelineChannel *>(
48 MEM_dupallocN(channel));
49 BLI_addtail(channels_dst, channel_duplicate);
50 }
51}
52
53void channels_free(ListBase *channels)
54{
55 LISTBASE_FOREACH_MUTABLE (SeqTimelineChannel *, channel, channels) {
56 MEM_freeN(channel);
57 }
58}
59
60SeqTimelineChannel *channel_get_by_index(const ListBase *channels, const int channel_index)
61{
62 return static_cast<SeqTimelineChannel *>(BLI_findlink(channels, channel_index));
63}
64
65char *channel_name_get(ListBase *channels, const int channel_index)
66{
67 SeqTimelineChannel *channel = channel_get_by_index(channels, channel_index);
68 return channel->name;
69}
70
72{
73 return channel->index;
74}
75
77{
78 return (channel->flag & SEQ_CHANNEL_LOCK) != 0;
79}
80
82{
83 return (channel->flag & SEQ_CHANNEL_MUTE) != 0;
84}
85
87{
88 Strip *strip_owner = lookup_meta_by_strip(ed, strip);
89 if (strip_owner != nullptr) {
90 return &strip_owner->channels;
91 }
92
93 return &ed->channels;
94}
95
96} // namespace blender::seq
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:534
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:111
#define SNPRINTF_UTF8(dst, format,...)
#define DATA_(msgid)
These structs are the foundation for all linked lists in the library system.
@ SEQ_CHANNEL_MUTE
@ SEQ_CHANNEL_LOCK
Read Guarded memory(de)allocation.
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
void * MEM_dupallocN(const void *vmemh)
Definition mallocn.cc:143
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
Strip * lookup_meta_by_strip(Editing *ed, const Strip *key)
SeqTimelineChannel * channel_get_by_index(const ListBase *channels, const int channel_index)
Definition channels.cc:60
ListBase * channels_displayed_get(const Editing *ed)
Definition channels.cc:28
bool channel_is_locked(const SeqTimelineChannel *channel)
Definition channels.cc:76
int channel_index_get(const SeqTimelineChannel *channel)
Definition channels.cc:71
void channels_ensure(ListBase *channels)
Definition channels.cc:33
constexpr int MAX_CHANNELS
char * channel_name_get(ListBase *channels, const int channel_index)
Definition channels.cc:65
void channels_duplicate(ListBase *channels_dst, ListBase *channels_src)
Definition channels.cc:44
ListBase * get_channels_by_strip(Editing *ed, const Strip *strip)
Definition channels.cc:86
void channels_free(ListBase *channels)
Definition channels.cc:53
bool channel_is_muted(const SeqTimelineChannel *channel)
Definition channels.cc:81
ListBase channels
i
Definition text_draw.cc:230