Fix T67459: Dope Editor, muting channels with shortcut doesn't work
[blender.git] / source / blender / blenkernel / intern / speaker.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 /** \file
18  * \ingroup bke
19  */
20
21 #include "DNA_object_types.h"
22 #include "DNA_sound_types.h"
23 #include "DNA_speaker_types.h"
24
25 #include "BLI_math.h"
26 #include "BLI_utildefines.h"
27
28 #include "BKE_animsys.h"
29 #include "BKE_library.h"
30 #include "BKE_main.h"
31 #include "BKE_speaker.h"
32
33 void BKE_speaker_init(Speaker *spk)
34 {
35   BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(spk, id));
36
37   spk->attenuation = 1.0f;
38   spk->cone_angle_inner = 360.0f;
39   spk->cone_angle_outer = 360.0f;
40   spk->cone_volume_outer = 1.0f;
41   spk->distance_max = FLT_MAX;
42   spk->distance_reference = 1.0f;
43   spk->flag = 0;
44   spk->pitch = 1.0f;
45   spk->sound = NULL;
46   spk->volume = 1.0f;
47   spk->volume_max = 1.0f;
48   spk->volume_min = 0.0f;
49 }
50
51 void *BKE_speaker_add(Main *bmain, const char *name)
52 {
53   Speaker *spk;
54
55   spk = BKE_libblock_alloc(bmain, ID_SPK, name, 0);
56
57   BKE_speaker_init(spk);
58
59   return spk;
60 }
61
62 /**
63  * Only copy internal data of Speaker ID from source
64  * to already allocated/initialized destination.
65  * You probably never want to use that directly,
66  * use #BKE_id_copy or #BKE_id_copy_ex for typical needs.
67  *
68  * WARNING! This function will not handle ID user count!
69  *
70  * \param flag: Copying options (see BKE_library.h's LIB_ID_COPY_... flags for more).
71  */
72 void BKE_speaker_copy_data(Main *UNUSED(bmain),
73                            Speaker *UNUSED(spk_dst),
74                            const Speaker *UNUSED(spk_src),
75                            const int UNUSED(flag))
76 {
77   /* Nothing to do! */
78 }
79
80 Speaker *BKE_speaker_copy(Main *bmain, const Speaker *spk)
81 {
82   Speaker *spk_copy;
83   BKE_id_copy(bmain, &spk->id, (ID **)&spk_copy);
84   return spk_copy;
85 }
86
87 void BKE_speaker_make_local(Main *bmain, Speaker *spk, const bool lib_local)
88 {
89   BKE_id_make_local_generic(bmain, &spk->id, true, lib_local);
90 }
91
92 void BKE_speaker_free(Speaker *spk)
93 {
94   BKE_animdata_free((ID *)spk, false);
95 }