Blender V4.5
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.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->displayed_channels;
31}
32
34{
35 ed->displayed_channels = channels;
36}
37
39{
40 /* Allocate channels. Channel 0 is never used, but allocated to prevent off by 1 issues. */
41 for (int i = 0; i < MAX_CHANNELS + 1; i++) {
42 SeqTimelineChannel *channel = MEM_callocN<SeqTimelineChannel>("seq timeline channel");
43 SNPRINTF(channel->name, DATA_("Channel %d"), i);
44 channel->index = i;
45 BLI_addtail(channels, channel);
46 }
47}
48
49void channels_duplicate(ListBase *channels_dst, ListBase *channels_src)
50{
51 LISTBASE_FOREACH (SeqTimelineChannel *, channel, channels_src) {
52 SeqTimelineChannel *channel_duplicate = static_cast<SeqTimelineChannel *>(
53 MEM_dupallocN(channel));
54 BLI_addtail(channels_dst, channel_duplicate);
55 }
56}
57
58void channels_free(ListBase *channels)
59{
60 LISTBASE_FOREACH_MUTABLE (SeqTimelineChannel *, channel, channels) {
61 MEM_freeN(channel);
62 }
63}
64
65SeqTimelineChannel *channel_get_by_index(const ListBase *channels, const int channel_index)
66{
67 return static_cast<SeqTimelineChannel *>(BLI_findlink(channels, channel_index));
68}
69
70char *channel_name_get(ListBase *channels, const int channel_index)
71{
72 SeqTimelineChannel *channel = channel_get_by_index(channels, channel_index);
73 return channel->name;
74}
75
77{
78 return channel->index;
79}
80
82{
83 return (channel->flag & SEQ_CHANNEL_LOCK) != 0;
84}
85
87{
88 return (channel->flag & SEQ_CHANNEL_MUTE) != 0;
89}
90
92{
93 Strip *strip_owner = lookup_meta_by_strip(ed, strip);
94 if (strip_owner != nullptr) {
95 return &strip_owner->channels;
96 }
97
98 return &ed->channels;
99}
100
101} // 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(dst, format,...)
Definition BLI_string.h:599
#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
void channels_displayed_set(Editing *ed, ListBase *channels)
Definition channels.cc:33
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:65
ListBase * channels_displayed_get(const Editing *ed)
Definition channels.cc:28
bool channel_is_locked(const SeqTimelineChannel *channel)
Definition channels.cc:81
int channel_index_get(const SeqTimelineChannel *channel)
Definition channels.cc:76
void channels_ensure(ListBase *channels)
Definition channels.cc:38
constexpr int MAX_CHANNELS
char * channel_name_get(ListBase *channels, const int channel_index)
Definition channels.cc:70
void channels_duplicate(ListBase *channels_dst, ListBase *channels_src)
Definition channels.cc:49
ListBase * get_channels_by_strip(Editing *ed, const Strip *strip)
Definition channels.cc:91
void channels_free(ListBase *channels)
Definition channels.cc:58
bool channel_is_muted(const SeqTimelineChannel *channel)
Definition channels.cc:86
ListBase channels
i
Definition text_draw.cc:230