Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesrna / intern / rna_internal.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): Blender Foundation (2008).
19  *
20  * ***** END GPL LICENSE BLOCK *****
21  */
22
23 /** \file blender/makesrna/intern/rna_internal.h
24  *  \ingroup RNA
25  */
26
27 #ifndef __RNA_INTERNAL_H__
28 #define __RNA_INTERNAL_H__
29
30 #include "BLI_utildefines.h"
31
32 #include "rna_internal_types.h"
33
34 #include "UI_resources.h"
35
36 #define RNA_MAGIC ((int)~0)
37
38 struct Depsgraph;
39 struct FreestyleSettings;
40 struct ID;
41 struct IDOverrideStatic;
42 struct IDOverrideStaticProperty;
43 struct IDOverrideStaticPropertyOperation;
44 struct IDProperty;
45 struct Main;
46 struct Mesh;
47 struct Object;
48 struct ReportList;
49 struct SDNA;
50 struct ViewLayer;
51
52 /* Data structures used during define */
53
54 typedef struct ContainerDefRNA {
55         void *next, *prev;
56
57         ContainerRNA *cont;
58         ListBase properties;
59 } ContainerDefRNA;
60
61 typedef struct FunctionDefRNA {
62         ContainerDefRNA cont;
63
64         FunctionRNA *func;
65         const char *srna;
66         const char *call;
67         const char *gencall;
68 } FunctionDefRNA;
69
70 typedef struct PropertyDefRNA {
71         struct PropertyDefRNA *next, *prev;
72
73         struct ContainerRNA *cont;
74         struct PropertyRNA *prop;
75
76         /* struct */
77         const char *dnastructname;
78         const char *dnastructfromname;
79         const char *dnastructfromprop;
80
81         /* property */
82         const char *dnaname;
83         const char *dnatype;
84         int dnaarraylength;
85         int dnapointerlevel;
86
87         /* for finding length of array collections */
88         const char *dnalengthstructname;
89         const char *dnalengthname;
90         int dnalengthfixed;
91
92         int booleanbit, booleannegative;
93
94         /* not to be confused with PROP_ENUM_FLAG
95          * this only allows one of the flags to be set at a time, clearing all others */
96         int enumbitflags;
97 } PropertyDefRNA;
98
99 typedef struct StructDefRNA {
100         ContainerDefRNA cont;
101
102         struct StructRNA *srna;
103         const char *filename;
104
105         const char *dnaname;
106
107         /* for derived structs to find data in some property */
108         const char *dnafromname;
109         const char *dnafromprop;
110
111         ListBase functions;
112 } StructDefRNA;
113
114 typedef struct AllocDefRNA {
115         struct AllocDefRNA *next, *prev;
116         void *mem;
117 } AllocDefRNA;
118
119 typedef struct BlenderDefRNA {
120         struct SDNA *sdna;
121         ListBase structs;
122         ListBase allocs;
123         struct StructRNA *laststruct;
124         int error, silent, preprocess, verify, animate;
125 } BlenderDefRNA;
126
127 extern BlenderDefRNA DefRNA;
128
129 /* Define functions for all types */
130 #ifndef __RNA_ACCESS_H__
131 extern BlenderRNA BLENDER_RNA;
132 #endif
133
134 void RNA_def_ID(struct BlenderRNA *brna);
135 void RNA_def_action(struct BlenderRNA *brna);
136 void RNA_def_animation(struct BlenderRNA *brna);
137 void RNA_def_animviz(struct BlenderRNA *brna);
138 void RNA_def_armature(struct BlenderRNA *brna);
139 void RNA_def_actuator(struct BlenderRNA *brna);
140 void RNA_def_boid(struct BlenderRNA *brna);
141 void RNA_def_brush(struct BlenderRNA *brna);
142 void RNA_def_cachefile(struct BlenderRNA *brna);
143 void RNA_def_camera(struct BlenderRNA *brna);
144 void RNA_def_cloth(struct BlenderRNA *brna);
145 void RNA_def_collections(struct BlenderRNA *brna);
146 void RNA_def_color(struct BlenderRNA *brna);
147 void RNA_def_constraint(struct BlenderRNA *brna);
148 void RNA_def_context(struct BlenderRNA *brna);
149 void RNA_def_controller(struct BlenderRNA *brna);
150 void RNA_def_curve(struct BlenderRNA *brna);
151 void RNA_def_depsgraph(struct BlenderRNA *brna);
152 void RNA_def_dynamic_paint(struct BlenderRNA *brna);
153 void RNA_def_fluidsim(struct BlenderRNA *brna);
154 void RNA_def_fcurve(struct BlenderRNA *brna);
155 void RNA_def_gpencil(struct BlenderRNA *brna);
156 void RNA_def_greasepencil_modifier(struct BlenderRNA *brna);
157 void RNA_def_shader_fx(struct BlenderRNA *brna);
158 void RNA_def_image(struct BlenderRNA *brna);
159 void RNA_def_key(struct BlenderRNA *brna);
160 void RNA_def_light(struct BlenderRNA *brna);
161 void RNA_def_lattice(struct BlenderRNA *brna);
162 void RNA_def_linestyle(struct BlenderRNA *brna);
163 void RNA_def_main(struct BlenderRNA *brna);
164 void RNA_def_material(struct BlenderRNA *brna);
165 void RNA_def_mesh(struct BlenderRNA *brna);
166 void RNA_def_meta(struct BlenderRNA *brna);
167 void RNA_def_modifier(struct BlenderRNA *brna);
168 void RNA_def_nla(struct BlenderRNA *brna);
169 void RNA_def_nodetree(struct BlenderRNA *brna);
170 void RNA_def_object(struct BlenderRNA *brna);
171 void RNA_def_object_force(struct BlenderRNA *brna);
172 void RNA_def_packedfile(struct BlenderRNA *brna);
173 void RNA_def_palette(struct BlenderRNA *brna);
174 void RNA_def_particle(struct BlenderRNA *brna);
175 void RNA_def_pose(struct BlenderRNA *brna);
176 void RNA_def_lightprobe(struct BlenderRNA *brna);
177 void RNA_def_render(struct BlenderRNA *brna);
178 void RNA_def_rigidbody(struct BlenderRNA *brna);
179 void RNA_def_rna(struct BlenderRNA *brna);
180 void RNA_def_scene(struct BlenderRNA *brna);
181 void RNA_def_view_layer(struct BlenderRNA *brna);
182 void RNA_def_screen(struct BlenderRNA *brna);
183 void RNA_def_sculpt_paint(struct BlenderRNA *brna);
184 void RNA_def_sensor(struct BlenderRNA *brna);
185 void RNA_def_sequencer(struct BlenderRNA *brna);
186 void RNA_def_smoke(struct BlenderRNA *brna);
187 void RNA_def_space(struct BlenderRNA *brna);
188 void RNA_def_speaker(struct BlenderRNA *brna);
189 void RNA_def_test(struct BlenderRNA *brna);
190 void RNA_def_text(struct BlenderRNA *brna);
191 void RNA_def_texture(struct BlenderRNA *brna);
192 void RNA_def_timeline_marker(struct BlenderRNA *brna);
193 void RNA_def_sound(struct BlenderRNA *brna);
194 void RNA_def_ui(struct BlenderRNA *brna);
195 void RNA_def_userdef(struct BlenderRNA *brna);
196 void RNA_def_vfont(struct BlenderRNA *brna);
197 void RNA_def_wm(struct BlenderRNA *brna);
198 void RNA_def_wm_gizmo(struct BlenderRNA *brna);
199 void RNA_def_workspace(struct BlenderRNA *brna);
200 void RNA_def_world(struct BlenderRNA *brna);
201 void RNA_def_movieclip(struct BlenderRNA *brna);
202 void RNA_def_tracking(struct BlenderRNA *brna);
203 void RNA_def_mask(struct BlenderRNA *brna);
204
205 /* Common Define functions */
206
207 void rna_def_animdata_common(struct StructRNA *srna);
208
209 bool rna_AnimaData_override_apply(
210         struct Main *bmain,
211         struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage,
212         struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage,
213         const int len_local, const int len_reference, const int len_storage,
214         struct PointerRNA *ptr_item_local, struct PointerRNA *ptr_item_reference, struct PointerRNA *ptr_item_storage,
215         struct IDOverrideStaticPropertyOperation *opop);
216
217 void rna_def_animviz_common(struct StructRNA *srna);
218 void rna_def_motionpath_common(struct StructRNA *srna);
219
220 void rna_def_bone_curved_common(struct StructRNA *srna, bool is_posebone);
221
222 void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
223 void rna_def_mtex_common(struct BlenderRNA *brna, struct StructRNA *srna, const char *begin, const char *activeget,
224                          const char *activeset, const char *activeeditable, const char *structname,
225                          const char *structname_slots, const char *update, const char *update_index);
226 void rna_def_texpaint_slots(struct BlenderRNA *brna, struct StructRNA *srna);
227 void rna_def_view_layer_common(struct StructRNA *srna, int scene);
228
229 void rna_def_actionbone_group_common(struct StructRNA *srna, int update_flag, const char *update_cb);
230 void rna_ActionGroup_colorset_set(struct PointerRNA *ptr, int value);
231 bool rna_ActionGroup_is_custom_colorset_get(struct PointerRNA *ptr);
232
233 void rna_ID_name_get(struct PointerRNA *ptr, char *value);
234 int rna_ID_name_length(struct PointerRNA *ptr);
235 void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
236 struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
237 struct IDProperty *rna_ID_idprops(struct PointerRNA *ptr, bool create);
238 void rna_ID_fake_user_set(struct PointerRNA *ptr, bool value);
239 void **rna_ID_instance(PointerRNA *ptr);
240 struct IDProperty *rna_PropertyGroup_idprops(struct PointerRNA *ptr, bool create);
241 void rna_PropertyGroup_unregister(struct Main *bmain, struct StructRNA *type);
242 struct StructRNA *rna_PropertyGroup_register(struct Main *bmain, struct ReportList *reports, void *data,
243                                              const char *identifier, StructValidateFunc validate,
244                                              StructCallbackFunc call, StructFreeFunc free);
245 struct StructRNA *rna_PropertyGroup_refine(struct PointerRNA *ptr);
246
247 void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
248 int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index);
249 void rna_object_vgroup_name_index_set(struct PointerRNA *ptr, const char *value, short *index);
250 void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
251 void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
252 void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
253 PointerRNA rna_object_shapekey_index_get(struct ID *id, int value);
254 int rna_object_shapekey_index_set(struct ID *id, PointerRNA value, int current);
255
256 /* ViewLayer related functions defined in rna_scene.c but required in rna_layer.c */
257 void rna_def_freestyle_settings(struct BlenderRNA *brna);
258 struct PointerRNA rna_FreestyleLineSet_linestyle_get(struct PointerRNA *ptr);
259 void rna_FreestyleLineSet_linestyle_set(struct PointerRNA *ptr, struct PointerRNA value);
260 struct FreestyleLineSet *rna_FreestyleSettings_lineset_add(
261         struct ID *id, struct FreestyleSettings *config, struct Main *bmain, const char *name);
262 void rna_FreestyleSettings_lineset_remove(
263         struct ID *id, struct FreestyleSettings *config, struct ReportList *reports, struct PointerRNA *lineset_ptr);
264 struct PointerRNA rna_FreestyleSettings_active_lineset_get(struct PointerRNA *ptr);
265 void rna_FreestyleSettings_active_lineset_index_range(
266         struct PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax);
267 int rna_FreestyleSettings_active_lineset_index_get(struct PointerRNA *ptr);
268 void rna_FreestyleSettings_active_lineset_index_set(struct PointerRNA *ptr, int value);
269 struct FreestyleModuleConfig *rna_FreestyleSettings_module_add(struct ID *id, struct FreestyleSettings *config);
270 void rna_FreestyleSettings_module_remove(
271         struct ID *id, struct FreestyleSettings *config, struct ReportList *reports, struct PointerRNA *module_ptr);
272
273 void rna_Scene_use_view_map_cache_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
274 void rna_Scene_glsl_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
275 void rna_Scene_freestyle_update(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
276 void rna_ViewLayer_name_set(struct PointerRNA *ptr, const char *value);
277 void rna_ViewLayer_pass_update(struct Main *bmain, struct Scene *activescene, struct PointerRNA *ptr);
278
279 /* named internal so as not to conflict with obj.update() rna func */
280 void rna_Object_internal_update_data(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
281 void rna_Mesh_update_draw(struct Main *bmain, struct Scene *scene, struct PointerRNA *ptr);
282 void rna_TextureSlot_update(struct bContext *C, struct PointerRNA *ptr);
283
284 /* basic poll functions for object types */
285 bool rna_Armature_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
286 bool rna_Camera_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
287 bool rna_Curve_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
288 bool rna_GPencil_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
289 bool rna_Light_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
290 bool rna_Lattice_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
291 bool rna_Mesh_object_poll(struct PointerRNA *ptr, struct PointerRNA value);
292
293 /* basic poll functions for actions (to prevent actions getting set in wrong places) */
294 bool rna_Action_id_poll(struct PointerRNA *ptr, struct PointerRNA value);
295 bool rna_Action_actedit_assign_poll(struct PointerRNA *ptr, struct PointerRNA value);
296
297 /* Grease Pencil datablock polling functions - for filtering GP Object vs Annotation datablocks */
298 bool rna_GPencil_datablocks_annotations_poll(struct PointerRNA *ptr, const struct PointerRNA value);
299 bool rna_GPencil_datablocks_obdata_poll(struct PointerRNA *ptr, const struct PointerRNA value);
300
301 char *rna_TextureSlot_path(struct PointerRNA *ptr);
302 char *rna_Node_ImageUser_path(struct PointerRNA *ptr);
303
304 /* API functions */
305
306 void RNA_api_action(StructRNA *srna);
307 void RNA_api_armature_edit_bone(StructRNA *srna);
308 void RNA_api_bone(StructRNA *srna);
309 void RNA_api_camera(StructRNA *srna);
310 void RNA_api_curve(StructRNA *srna);
311 void RNA_api_curve_nurb(StructRNA *srna);
312 void RNA_api_fcurves(StructRNA *srna);
313 void RNA_api_drivers(StructRNA *srna);
314 void RNA_api_image_packed_file(struct StructRNA *srna);
315 void RNA_api_image(struct StructRNA *srna);
316 void RNA_api_lattice(struct StructRNA *srna);
317 void RNA_api_operator(struct StructRNA *srna);
318 void RNA_api_macro(struct StructRNA *srna);
319 void RNA_api_gizmo(struct StructRNA *srna);
320 void RNA_api_gizmogroup(struct StructRNA *srna);
321 void RNA_api_keyconfig(struct StructRNA *srna);
322 void RNA_api_keyconfigs(struct StructRNA *srna);
323 void RNA_api_keyingset(struct StructRNA *srna);
324 void RNA_api_keymap(struct StructRNA *srna);
325 void RNA_api_keymaps(struct StructRNA *srna);
326 void RNA_api_keymapitem(struct StructRNA *srna);
327 void RNA_api_keymapitems(struct StructRNA *srna);
328 void RNA_api_main(struct StructRNA *srna);
329 void RNA_api_material(StructRNA *srna);
330 void RNA_api_mesh(struct StructRNA *srna);
331 void RNA_api_meta(struct StructRNA *srna);
332 void RNA_api_object(struct StructRNA *srna);
333 void RNA_api_object_base_legacy(struct StructRNA *srna);
334 void RNA_api_pose(struct StructRNA *srna);
335 void RNA_api_pose_channel(struct StructRNA *srna);
336 void RNA_api_scene(struct StructRNA *srna);
337 void RNA_api_scene_render(struct StructRNA *srna);
338 void RNA_api_sequence_strip(StructRNA *srna);
339 void RNA_api_text(struct StructRNA *srna);
340 void RNA_api_ui_layout(struct StructRNA *srna);
341 void RNA_api_window(struct StructRNA *srna);
342 void RNA_api_wm(struct StructRNA *srna);
343 void RNA_api_space_node(struct StructRNA *srna);
344 void RNA_api_space_text(struct StructRNA *srna);
345 void RNA_api_region_view3d(struct StructRNA *srna);
346 void RNA_api_sensor(struct StructRNA *srna);
347 void RNA_api_controller(struct StructRNA *srna);
348 void RNA_api_actuator(struct StructRNA *srna);
349 void RNA_api_texture(struct StructRNA *srna);
350 void RNA_api_environment_map(struct StructRNA *srna);
351 void RNA_api_sequences(BlenderRNA *brna, PropertyRNA *cprop);
352 void RNA_api_sequence_elements(BlenderRNA *brna, PropertyRNA *cprop);
353 void RNA_api_sound(struct StructRNA *srna);
354 void RNA_api_vfont(struct StructRNA *srna);
355 void RNA_api_workspace(struct StructRNA *srna);
356 void RNA_api_workspace_tool(struct StructRNA *srna);
357
358 /* main collection functions */
359 void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop);
360 void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop);
361 void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop);
362 void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop);
363 void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop);
364 void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop);
365 void RNA_def_main_lights(BlenderRNA *brna, PropertyRNA *cprop);
366 void RNA_def_main_libraries(BlenderRNA *brna, PropertyRNA *cprop);
367 void RNA_def_main_screens(BlenderRNA *brna, PropertyRNA *cprop);
368 void RNA_def_main_window_managers(BlenderRNA *brna, PropertyRNA *cprop);
369 void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop);
370 void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop);
371 void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop);
372 void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop);
373 void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop);
374 void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop);
375 void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop);
376 void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop);
377 void RNA_def_main_collections(BlenderRNA *brna, PropertyRNA *cprop);
378 void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop);
379 void RNA_def_main_speakers(BlenderRNA *brna, PropertyRNA *cprop);
380 void RNA_def_main_sounds(BlenderRNA *brna, PropertyRNA *cprop);
381 void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop);
382 void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop);
383 void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop);
384 void RNA_def_main_palettes(BlenderRNA *brna, PropertyRNA *cprop);
385 void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop);
386 void RNA_def_main_movieclips(BlenderRNA *brna, PropertyRNA *cprop);
387 void RNA_def_main_masks(BlenderRNA *brna, PropertyRNA *cprop);
388 void RNA_def_main_linestyles(BlenderRNA *brna, PropertyRNA *cprop);
389 void RNA_def_main_cachefiles(BlenderRNA *brna, PropertyRNA *cprop);
390 void RNA_def_main_paintcurves(BlenderRNA *brna, PropertyRNA *cprop);
391 void RNA_def_main_workspaces(BlenderRNA *brna, PropertyRNA *cprop);
392 void RNA_def_main_lightprobes(BlenderRNA *brna, PropertyRNA *cprop);
393
394 /* ID Properties */
395
396 extern StringPropertyRNA rna_PropertyGroupItem_string;
397 extern IntPropertyRNA rna_PropertyGroupItem_int;
398 extern IntPropertyRNA rna_PropertyGroupItem_int_array;
399 extern FloatPropertyRNA rna_PropertyGroupItem_float;
400 extern FloatPropertyRNA rna_PropertyGroupItem_float_array;
401 extern PointerPropertyRNA rna_PropertyGroupItem_group;
402 extern PointerPropertyRNA rna_PropertyGroupItem_id;
403 extern CollectionPropertyRNA rna_PropertyGroupItem_collection;
404 extern CollectionPropertyRNA rna_PropertyGroupItem_idp_array;
405 extern FloatPropertyRNA rna_PropertyGroupItem_double;
406 extern FloatPropertyRNA rna_PropertyGroupItem_double_array;
407
408 #ifndef __RNA_ACCESS_H__
409 extern StructRNA RNA_PropertyGroupItem;
410 extern StructRNA RNA_PropertyGroup;
411 #endif
412
413 struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
414 struct PropertyRNA *rna_ensure_property_realdata(struct PropertyRNA **prop, struct PointerRNA *ptr);
415
416 /* Override default callbacks. */
417 /* Default override callbacks for all types. */
418 /* TODO: Maybe at some point we'll want to write that in direct RNA-generated code instead
419  *       (like we do for default get/set/etc.)?
420  *       Not obvious though, those are fairly more complicated than basic SDNA access.
421  */
422 int rna_property_override_diff_default(
423         struct Main *bmain,
424         struct PointerRNA *ptr_a, struct PointerRNA *ptr_b,
425         struct PropertyRNA *prop_a, struct PropertyRNA *prop_b,
426         const int len_a, const int len_b,
427         const int mode,
428         struct IDOverrideStatic *override, const char *rna_path,
429         const int flags, bool *r_override_changed);
430
431 bool rna_property_override_store_default(
432         struct Main *bmain,
433         struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage,
434         struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage,
435         const int len_local, const int len_reference, const int len_storage,
436         struct IDOverrideStaticPropertyOperation *opop);
437
438 bool rna_property_override_apply_default(
439         struct Main *bmain,
440         struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage,
441         struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage,
442         const int len_dst, const int len_src, const int len_storage,
443         struct PointerRNA *ptr_item_dst, struct PointerRNA *ptr_item_src, struct PointerRNA *ptr_item_storage,
444         struct IDOverrideStaticPropertyOperation *opop);
445
446
447 /* Builtin Property Callbacks */
448
449 void rna_builtin_properties_begin(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr);
450 void rna_builtin_properties_next(struct CollectionPropertyIterator *iter);
451 PointerRNA rna_builtin_properties_get(struct CollectionPropertyIterator *iter);
452 PointerRNA rna_builtin_type_get(struct PointerRNA *ptr);
453 int rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr);
454
455 /* Iterators */
456
457 void rna_iterator_listbase_begin(struct CollectionPropertyIterator *iter, struct ListBase *lb, IteratorSkipFunc skip);
458 void rna_iterator_listbase_next(struct CollectionPropertyIterator *iter);
459 void *rna_iterator_listbase_get(struct CollectionPropertyIterator *iter);
460 void rna_iterator_listbase_end(struct CollectionPropertyIterator *iter);
461 PointerRNA rna_listbase_lookup_int(PointerRNA *ptr, StructRNA *type, struct ListBase *lb, int index);
462
463 void rna_iterator_array_begin(struct CollectionPropertyIterator *iter, void *ptr, int itemsize, int length,
464                               bool free_ptr, IteratorSkipFunc skip);
465 void rna_iterator_array_next(struct CollectionPropertyIterator *iter);
466 void *rna_iterator_array_get(struct CollectionPropertyIterator *iter);
467 void *rna_iterator_array_dereference_get(struct CollectionPropertyIterator *iter);
468 void rna_iterator_array_end(struct CollectionPropertyIterator *iter);
469 PointerRNA rna_array_lookup_int(PointerRNA *ptr, StructRNA *type, void *data, int itemsize, int length, int index);
470
471 /* Duplicated code since we can't link in blenlib */
472
473 void rna_addtail(struct ListBase *listbase, void *vlink);
474 void rna_freelinkN(struct ListBase *listbase, void *vlink);
475 void rna_freelistN(struct ListBase *listbase);
476 PropertyDefRNA *rna_findlink(ListBase *listbase, const char *identifier);
477
478 StructDefRNA *rna_find_struct_def(StructRNA *srna);
479 FunctionDefRNA *rna_find_function_def(FunctionRNA *func);
480 PropertyDefRNA *rna_find_parameter_def(PropertyRNA *parm);
481 PropertyDefRNA *rna_find_struct_property_def(StructRNA *srna, PropertyRNA *prop);
482
483 /* Pointer Handling */
484
485 PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *type, void *data);
486
487 /* Functions */
488
489 int rna_parameter_size(struct PropertyRNA *parm);
490
491 struct Mesh *rna_Main_meshes_new_from_object(
492         struct Main *bmain, struct ReportList *reports, struct Depsgraph *depsgraph,
493         struct Object *ob, bool apply_modifiers, bool calc_undeformed);
494
495 /* XXX, these should not need to be defined here~! */
496 struct MTex *rna_mtex_texture_slots_add(struct ID *self, struct bContext *C, struct ReportList *reports);
497 struct MTex *rna_mtex_texture_slots_create(struct ID *self, struct bContext *C, struct ReportList *reports, int index);
498 void rna_mtex_texture_slots_clear(struct ID *self, struct bContext *C, struct ReportList *reports, int index);
499
500
501 int rna_IDMaterials_assign_int(struct PointerRNA *ptr, int key, const struct PointerRNA *assign_ptr);
502
503 const char *rna_translate_ui_text(
504         const char *text, const char *text_ctxt, struct StructRNA *type, struct PropertyRNA *prop, bool translate);
505
506 /* Internal functions that cycles uses so we need to declare (tsk tsk) */
507 void rna_RenderLayer_rect_set(PointerRNA *ptr, const float *values);
508 void rna_RenderPass_rect_set(PointerRNA *ptr, const float *values);
509
510 #ifdef RNA_RUNTIME
511 #  ifdef __GNUC__
512 #    pragma GCC diagnostic ignored "-Wredundant-decls"
513 #  endif
514 #endif
515
516 /* C11 for compile time range checks */
517 #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
518 #  define USE_RNA_RANGE_CHECK
519 #  define TYPEOF_MAX(x) \
520         _Generic((x), \
521                 bool: 1, \
522                 char: CHAR_MAX, signed char: SCHAR_MAX, unsigned char: UCHAR_MAX, \
523                 signed short: SHRT_MAX, unsigned short: USHRT_MAX, \
524                 signed int: INT_MAX, unsigned int: UINT_MAX, \
525                 float: FLT_MAX, double: DBL_MAX)
526
527 #  define TYPEOF_MIN(x) \
528         _Generic((x), \
529                 bool: 0, \
530                 char: CHAR_MIN, signed char: SCHAR_MIN, unsigned char: 0, \
531                 signed short: SHRT_MIN, unsigned short: 0, \
532                 signed int: INT_MIN, unsigned int: 0, \
533                 float: -FLT_MAX, double: -DBL_MAX)
534 #endif
535
536 #endif  /* __RNA_INTERNAL_H__ */