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