Workspace: Move engines to workspace and Properties Editor cleanup
[blender.git] / source / blender / makesdna / DNA_layer_types.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Dalai Felinto
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file DNA_layer_types.h
24  *  \ingroup DNA
25  */
26
27 #ifndef __DNA_LAYER_TYPES_H__
28 #define __DNA_LAYER_TYPES_H__
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #include "DNA_listBase.h"
35
36 typedef struct Base {
37         struct Base *next, *prev;
38         short flag;
39         short refcount;
40         short sx, sy;
41         struct Object *object;
42         unsigned int lay;
43         int flag_legacy;
44         struct IDProperty *collection_properties; /* used by depsgraph, flushed from collection-tree */
45 } Base;
46
47 typedef struct CollectionOverride {
48         struct CollectionOverride *next, *prev;
49         char name[64]; /* MAX_NAME */
50         /* TODO proper data */
51 } CollectionOverride;
52
53 typedef struct SceneLayerEngineData {
54         struct SceneLayerEngineData *next, *prev;
55         struct DrawEngineType *engine_type;
56         void *storage;
57         void (*free)(void *storage);
58 } SceneLayerEngineData;
59
60 typedef struct LayerCollection {
61         struct LayerCollection *next, *prev;
62         struct SceneCollection *scene_collection;
63         short flag;
64         /* TODO(sergey): Get rid of this once we've got CoW in DEG, */
65         short flag_evaluated;
66         short pad[2];
67         ListBase object_bases;      /* (ObjectBase *)LinkData->data - synced with collection->objects and collection->filter_objects */
68         ListBase overrides;
69         ListBase layer_collections; /* synced with collection->collections */
70         struct IDProperty *properties;  /* overrides */
71         struct IDProperty *properties_evaluated;
72 } LayerCollection;
73
74 typedef struct SceneLayer {
75         struct SceneLayer *next, *prev;
76         char name[64]; /* MAX_NAME */
77         short active_collection;
78         short flag;
79         short pad[2];
80         ListBase object_bases;      /* ObjectBase */
81         struct SceneStats *stats;   /* default allocated now */
82         struct Base *basact;
83         ListBase layer_collections; /* LayerCollection */
84         struct IDProperty *properties;  /* overrides */
85         struct IDProperty *properties_evaluated;
86
87         /* Runtime data */
88         ListBase drawdata;    /* SceneLayerEngineData */
89 } SceneLayer;
90
91 typedef struct SceneCollection {
92         struct SceneCollection *next, *prev;
93         char name[64]; /* MAX_NAME */
94         char filter[64]; /* MAX_NAME */
95         int active_object_index; /* for UI */
96         int pad;
97         ListBase objects;           /* (Object *)LinkData->data */
98         ListBase filter_objects;    /* (Object *)LinkData->data */
99         ListBase scene_collections; /* nested collections */
100 } SceneCollection;
101
102 /* Base->flag */
103 enum {
104         BASE_SELECTED         = (1 << 0),
105         BASE_VISIBLED         = (1 << 1),
106         BASE_SELECTABLED      = (1 << 2),
107         BASE_FROMDUPLI        = (1 << 3),
108         BASE_DIRTY_ENGINE_SETTINGS = (1 << 4),
109         BASE_FROM_SET         = (1 << 5), /* To be set only by the depsgraph */
110 };
111
112 /* LayerCollection->flag */
113 enum {
114         COLLECTION_VISIBLE    = (1 << 0),
115         COLLECTION_SELECTABLE = (1 << 1),
116         COLLECTION_DISABLED   = (1 << 2),
117 };
118
119 /* SceneLayer->flag */
120 enum {
121         SCENE_LAYER_RENDER = (1 << 0),
122         SCENE_LAYER_ENGINE_DIRTY  = (1 << 1),
123 };
124
125
126 /* *************************************************************** */
127 /* Engine Settings */
128
129 /* CollectionEngineSettings->type */
130 typedef enum CollectionEngineSettingsType {
131         COLLECTION_MODE_NONE = 0,
132         COLLECTION_MODE_OBJECT = 1,
133         COLLECTION_MODE_EDIT = 2,
134         COLLECTION_MODE_PAINT_WEIGHT = 5,
135         COLLECTION_MODE_PAINT_VERTEX = 6,
136 } CollectionModeSettingsType;
137
138 /* *************************************************************** */
139
140
141 #ifdef __cplusplus
142 }
143 #endif
144
145 #endif  /* __DNA_LAYER_TYPES_H__ */
146