Fix: File browser icons intersecting in thumbnail view
[blender.git] / source / blender / makesdna / DNA_layer_types.h
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 DNA
19  */
20
21 #ifndef __DNA_LAYER_TYPES_H__
22 #define __DNA_LAYER_TYPES_H__
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 #include "DNA_freestyle_types.h"
29 #include "DNA_listBase.h"
30
31 typedef struct Base {
32   struct Base *next, *prev;
33
34   /* Flags which are based on the collections flags evaluation, does not
35    * include flags from object's restrictions. */
36   short flag_from_collection;
37
38   /* Final flags, including both accumulated collection flags and object's
39    * restriction flags. */
40   short flag;
41
42   unsigned short local_view_bits;
43   short sx, sy;
44   char _pad1[6];
45   struct Object *object;
46   unsigned int lay DNA_DEPRECATED;
47   int flag_legacy;
48
49   /* Pointer to an original base. Is initialized for evaluated view layer.
50    * NOTE: Only allowed to be accessed from within active dependency graph. */
51   struct Base *base_orig;
52   void *_pad;
53 } Base;
54
55 typedef struct ViewLayerEngineData {
56   struct ViewLayerEngineData *next, *prev;
57   struct DrawEngineType *engine_type;
58   void *storage;
59   void (*free)(void *storage);
60 } ViewLayerEngineData;
61
62 typedef struct LayerCollection {
63   struct LayerCollection *next, *prev;
64   struct Collection *collection;
65   struct SceneCollection *scene_collection DNA_DEPRECATED;
66   short flag;
67   short runtime_flag;
68   char _pad[4];
69   /** Synced with collection->children. */
70   ListBase layer_collections;
71 } LayerCollection;
72
73 typedef struct ViewLayer {
74   struct ViewLayer *next, *prev;
75   /** MAX_NAME. */
76   char name[64];
77   short flag;
78   char _pad[6];
79   /** ObjectBase. */
80   ListBase object_bases;
81   /** Default allocated now. */
82   struct SceneStats *stats;
83   struct Base *basact;
84   /** LayerCollection. */
85   ListBase layer_collections;
86   LayerCollection *active_collection;
87
88   /* Old SceneRenderLayer data. */
89   int layflag;
90   /** Pass_xor has to be after passflag. */
91   int passflag;
92   float pass_alpha_threshold;
93   int samples;
94
95   struct Material *mat_override;
96   /** Equivalent to datablocks ID properties. */
97   struct IDProperty *id_properties;
98
99   struct FreestyleConfig freestyle_config;
100
101   /* Runtime data */
102   /** ViewLayerEngineData. */
103   ListBase drawdata;
104   struct Base **object_bases_array;
105   struct GHash *object_bases_hash;
106 } ViewLayer;
107
108 /* Base->flag */
109 enum {
110   /* User controlled flags. */
111   BASE_SELECTED = (1 << 0), /* Object is selected. */
112   BASE_HIDDEN = (1 << 8),   /* Object is hidden for editing. */
113
114   /* Runtime evaluated flags. */
115   BASE_VISIBLE = (1 << 1),    /* Object is enabled and visible. */
116   BASE_SELECTABLE = (1 << 2), /* Object can be selected. */
117   BASE_FROM_DUPLI = (1 << 3), /* Object comes from duplicator. */
118   /* BASE_DEPRECATED    = (1 << 4), */
119   BASE_FROM_SET = (1 << 5),         /* Object comes from set. */
120   BASE_ENABLED_VIEWPORT = (1 << 6), /* Object is enabled in viewport. */
121   BASE_ENABLED_RENDER = (1 << 7),   /* Object is enabled in final render */
122   /* BASE_DEPRECATED          = (1 << 9), */
123   BASE_HOLDOUT = (1 << 10),       /* Object masked out from render */
124   BASE_INDIRECT_ONLY = (1 << 11), /* Object only contributes indirectly to render */
125 };
126
127 /* LayerCollection->flag */
128 enum {
129   /* LAYER_COLLECTION_DEPRECATED0 = (1 << 0), */
130   /* LAYER_COLLECTION_DEPRECATED1 = (1 << 1), */
131   /* LAYER_COLLECTION_DEPRECATED2 = (1 << 2), */
132   /* LAYER_COLLECTION_DEPRECATED3 = (1 << 3), */
133   LAYER_COLLECTION_EXCLUDE = (1 << 4),
134   LAYER_COLLECTION_HOLDOUT = (1 << 5),
135   LAYER_COLLECTION_INDIRECT_ONLY = (1 << 6),
136   LAYER_COLLECTION_HIDE = (1 << 7),
137 };
138
139 /* Layer Collection->runtime_flag */
140 enum {
141   LAYER_COLLECTION_HAS_OBJECTS = (1 << 0),
142   LAYER_COLLECTION_VISIBLE = (1 << 1),
143 };
144
145 /* ViewLayer->flag */
146 enum {
147   VIEW_LAYER_RENDER = (1 << 0),
148   /* VIEW_LAYER_DEPRECATED  = (1 << 1), */
149   VIEW_LAYER_FREESTYLE = (1 << 2),
150 };
151
152 /****************************** Deprecated ******************************/
153
154 /* Compatibility with collections saved in early 2.8 versions,
155  * used in file reading and versioning code. */
156 #define USE_COLLECTION_COMPAT_28
157
158 typedef struct SceneCollection {
159   struct SceneCollection *next, *prev;
160   /** MAX_NAME. */
161   char name[64];
162   /** For UI. */
163   int active_object_index;
164   short flag;
165   char type;
166   char _pad;
167   /** (Object *)LinkData->data. */
168   ListBase objects;
169   /** Nested collections. */
170   ListBase scene_collections;
171 } SceneCollection;
172
173 #ifdef __cplusplus
174 }
175 #endif
176
177 #endif /* __DNA_LAYER_TYPES_H__ */