diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/makesdna/DNA_ID.h | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/makesdna/DNA_ID.h')
-rw-r--r-- | source/blender/makesdna/DNA_ID.h | 920 |
1 files changed, 463 insertions, 457 deletions
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h index a2bd50b6ade..e8af6cf0d86 100644 --- a/source/blender/makesdna/DNA_ID.h +++ b/source/blender/makesdna/DNA_ID.h @@ -45,179 +45,177 @@ typedef void (*DrawDataFreeCb)(struct DrawData *engine_data); # # typedef struct DrawData { - struct DrawData *next, *prev; - struct DrawEngineType *engine_type; - /* Only nested data, NOT the engine data itself. */ - DrawDataFreeCb free; - /* Accumulated recalc flags, which corresponds to ID->recalc flags. */ - int recalc; + struct DrawData *next, *prev; + struct DrawEngineType *engine_type; + /* Only nested data, NOT the engine data itself. */ + DrawDataFreeCb free; + /* Accumulated recalc flags, which corresponds to ID->recalc flags. */ + int recalc; } DrawData; typedef struct DrawDataList { - struct DrawData *first, *last; + struct DrawData *first, *last; } DrawDataList; - typedef struct IDPropertyData { - void *pointer; - ListBase group; - /** Note, we actually fit a double into these two ints. */ - int val, val2; + void *pointer; + ListBase group; + /** Note, we actually fit a double into these two ints. */ + int val, val2; } IDPropertyData; typedef struct IDProperty { - struct IDProperty *next, *prev; - char type, subtype; - short flag; - /** MAX_IDPROP_NAME. */ - char name[64]; - - /* saved is used to indicate if this struct has been saved yet. - * seemed like a good idea as a '_pad' var was needed anyway :) */ - int saved; - /** Note, alignment for 64 bits. */ - IDPropertyData data; - - /* array length, also (this is important!) string length + 1. - * the idea is to be able to reuse array realloc functions on strings.*/ - int len; - - /* Strings and arrays are both buffered, though the buffer isn't saved. */ - /* totallen is total length of allocated array/string, including a buffer. - * Note that the buffering is mild; the code comes from python's list implementation. */ - int totallen; + struct IDProperty *next, *prev; + char type, subtype; + short flag; + /** MAX_IDPROP_NAME. */ + char name[64]; + + /* saved is used to indicate if this struct has been saved yet. + * seemed like a good idea as a '_pad' var was needed anyway :) */ + int saved; + /** Note, alignment for 64 bits. */ + IDPropertyData data; + + /* array length, also (this is important!) string length + 1. + * the idea is to be able to reuse array realloc functions on strings.*/ + int len; + + /* Strings and arrays are both buffered, though the buffer isn't saved. */ + /* totallen is total length of allocated array/string, including a buffer. + * Note that the buffering is mild; the code comes from python's list implementation. */ + int totallen; } IDProperty; #define MAX_IDPROP_NAME 64 -#define DEFAULT_ALLOC_FOR_NULL_STRINGS 64 +#define DEFAULT_ALLOC_FOR_NULL_STRINGS 64 /*->type*/ enum { - IDP_STRING = 0, - IDP_INT = 1, - IDP_FLOAT = 2, - IDP_ARRAY = 5, - IDP_GROUP = 6, - IDP_ID = 7, - IDP_DOUBLE = 8, - IDP_IDPARRAY = 9, - IDP_NUMTYPES = 10, + IDP_STRING = 0, + IDP_INT = 1, + IDP_FLOAT = 2, + IDP_ARRAY = 5, + IDP_GROUP = 6, + IDP_ID = 7, + IDP_DOUBLE = 8, + IDP_IDPARRAY = 9, + IDP_NUMTYPES = 10, }; /*->subtype */ /* IDP_STRING */ enum { - IDP_STRING_SUB_UTF8 = 0, /* default */ - IDP_STRING_SUB_BYTE = 1, /* arbitrary byte array, _not_ null terminated */ + IDP_STRING_SUB_UTF8 = 0, /* default */ + IDP_STRING_SUB_BYTE = 1, /* arbitrary byte array, _not_ null terminated */ }; /* IDP_GROUP */ enum { - IDP_GROUP_SUB_NONE = 0, /* default */ - IDP_GROUP_SUB_MODE_OBJECT = 1, /* object mode settings */ - IDP_GROUP_SUB_MODE_EDIT = 2, /* mesh edit mode settings */ - IDP_GROUP_SUB_ENGINE_RENDER = 3, /* render engine settings */ - IDP_GROUP_SUB_OVERRIDE = 4, /* data override */ - IDP_GROUP_SUB_MODE_PAINT_WEIGHT = 5, /* weight paint mode settings */ - IDP_GROUP_SUB_MODE_PAINT_VERTEX = 6, /* vertex paint mode settings */ + IDP_GROUP_SUB_NONE = 0, /* default */ + IDP_GROUP_SUB_MODE_OBJECT = 1, /* object mode settings */ + IDP_GROUP_SUB_MODE_EDIT = 2, /* mesh edit mode settings */ + IDP_GROUP_SUB_ENGINE_RENDER = 3, /* render engine settings */ + IDP_GROUP_SUB_OVERRIDE = 4, /* data override */ + IDP_GROUP_SUB_MODE_PAINT_WEIGHT = 5, /* weight paint mode settings */ + IDP_GROUP_SUB_MODE_PAINT_VERTEX = 6, /* vertex paint mode settings */ }; /*->flag*/ enum { - /** This IDProp may be statically overridden. - * Should only be used/be relevant for custom properties. */ - IDP_FLAG_OVERRIDABLE_STATIC = 1 << 0, + /** This IDProp may be statically overridden. + * Should only be used/be relevant for custom properties. */ + IDP_FLAG_OVERRIDABLE_STATIC = 1 << 0, - /** This means the property is set but RNA will return false when checking - * 'RNA_property_is_set', currently this is a runtime flag */ - IDP_FLAG_GHOST = 1 << 7, + /** This means the property is set but RNA will return false when checking + * 'RNA_property_is_set', currently this is a runtime flag */ + IDP_FLAG_GHOST = 1 << 7, }; /* add any future new id property types here.*/ - /* Static ID override structs. */ typedef struct IDOverrideStaticPropertyOperation { - struct IDOverrideStaticPropertyOperation *next, *prev; - - /* Type of override. */ - short operation; - short flag; - char _pad0[4]; - - /* Sub-item references, if needed (for arrays or collections only). - * We need both reference and local values to allow e.g. insertion into collections (constraints, modifiers...). - * In collection case, if names are defined, they are used in priority. - * Names are pointers (instead of char[64]) to save some space, NULL when unset. - * Indices are -1 when unset. */ - char *subitem_reference_name; - char *subitem_local_name; - int subitem_reference_index; - int subitem_local_index; + struct IDOverrideStaticPropertyOperation *next, *prev; + + /* Type of override. */ + short operation; + short flag; + char _pad0[4]; + + /* Sub-item references, if needed (for arrays or collections only). + * We need both reference and local values to allow e.g. insertion into collections (constraints, modifiers...). + * In collection case, if names are defined, they are used in priority. + * Names are pointers (instead of char[64]) to save some space, NULL when unset. + * Indices are -1 when unset. */ + char *subitem_reference_name; + char *subitem_local_name; + int subitem_reference_index; + int subitem_local_index; } IDOverrideStaticPropertyOperation; /* IDOverridePropertyOperation->operation. */ enum { - /* Basic operations. */ - IDOVERRIDESTATIC_OP_NOOP = 0, /* Special value, forbids any overriding. */ - - IDOVERRIDESTATIC_OP_REPLACE = 1, /* Fully replace local value by reference one. */ - - /* Numeric-only operations. */ - IDOVERRIDESTATIC_OP_ADD = 101, /* Add local value to reference one. */ - /* Subtract local value from reference one (needed due to unsigned values etc.). */ - IDOVERRIDESTATIC_OP_SUBTRACT = 102, - /* Multiply reference value by local one (more useful than diff for scales and the like). */ - IDOVERRIDESTATIC_OP_MULTIPLY = 103, - - /* Collection-only operations. */ - IDOVERRIDESTATIC_OP_INSERT_AFTER = 201, /* Insert after given reference's subitem. */ - IDOVERRIDESTATIC_OP_INSERT_BEFORE = 202, /* Insert before given reference's subitem. */ - /* We can add more if needed (move, delete, ...). */ + /* Basic operations. */ + IDOVERRIDESTATIC_OP_NOOP = 0, /* Special value, forbids any overriding. */ + + IDOVERRIDESTATIC_OP_REPLACE = 1, /* Fully replace local value by reference one. */ + + /* Numeric-only operations. */ + IDOVERRIDESTATIC_OP_ADD = 101, /* Add local value to reference one. */ + /* Subtract local value from reference one (needed due to unsigned values etc.). */ + IDOVERRIDESTATIC_OP_SUBTRACT = 102, + /* Multiply reference value by local one (more useful than diff for scales and the like). */ + IDOVERRIDESTATIC_OP_MULTIPLY = 103, + + /* Collection-only operations. */ + IDOVERRIDESTATIC_OP_INSERT_AFTER = 201, /* Insert after given reference's subitem. */ + IDOVERRIDESTATIC_OP_INSERT_BEFORE = 202, /* Insert before given reference's subitem. */ + /* We can add more if needed (move, delete, ...). */ }; /* IDOverridePropertyOperation->flag. */ enum { - /** User cannot remove that override operation. */ - IDOVERRIDESTATIC_FLAG_MANDATORY = 1 << 0, - /** User cannot change that override operation. */ - IDOVERRIDESTATIC_FLAG_LOCKED = 1 << 1, + /** User cannot remove that override operation. */ + IDOVERRIDESTATIC_FLAG_MANDATORY = 1 << 0, + /** User cannot change that override operation. */ + IDOVERRIDESTATIC_FLAG_LOCKED = 1 << 1, }; /** A single overridden property, contain all operations on this one. */ typedef struct IDOverrideStaticProperty { - struct IDOverrideStaticProperty *next, *prev; + struct IDOverrideStaticProperty *next, *prev; - /** - * Path from ID to overridden property. - * *Does not* include indices/names for final arrays/collections items. - */ - char *rna_path; + /** + * Path from ID to overridden property. + * *Does not* include indices/names for final arrays/collections items. + */ + char *rna_path; - /** List of overriding operations (IDOverridePropertyOperation) applied to this property. */ - ListBase operations; + /** List of overriding operations (IDOverridePropertyOperation) applied to this property. */ + ListBase operations; } IDOverrideStaticProperty; /* Main container for all overriding data info of a data-block. */ typedef struct IDOverrideStatic { - /** Reference linked ID which this one overrides. */ - struct ID *reference; - /** List of IDOverrideProperty structs. */ - ListBase properties; - - short flag; - char _pad[6]; - - /* Read/write data. */ - /* Temp ID storing extra override data (used for differential operations only currently). - * Always NULL outside of read/write context. */ - struct ID *storage; + /** Reference linked ID which this one overrides. */ + struct ID *reference; + /** List of IDOverrideProperty structs. */ + ListBase properties; + + short flag; + char _pad[6]; + + /* Read/write data. */ + /* Temp ID storing extra override data (used for differential operations only currently). + * Always NULL outside of read/write context. */ + struct ID *storage; } IDOverrideStatic; enum eStaticOverride_Flag { - STATICOVERRIDE_AUTO = 1 << 0, /* Allow automatic generation of overriding rules. */ + STATICOVERRIDE_AUTO = 1 << 0, /* Allow automatic generation of overriding rules. */ }; /* watch it: Sequence has identical beginning. */ @@ -227,41 +225,41 @@ enum eStaticOverride_Flag { * */ /* 2 characters for ID code and 64 for actual name */ -#define MAX_ID_NAME 66 +#define MAX_ID_NAME 66 /* There's a nasty circular dependency here.... 'void *' to the rescue! I * really wonder why this is needed. */ typedef struct ID { - void *next, *prev; - struct ID *newid; - struct Library *lib; - /** MAX_ID_NAME. */ - char name[66]; - /** - * LIB_... flags report on status of the datablock this ID belongs to - * (persistent, saved to and read from .blend). - */ - short flag; - /** - * LIB_TAG_... tags (runtime only, cleared at read time). - */ - int tag; - int us; - int icon_id; - int recalc; - char _pad[4]; - IDProperty *properties; - - /** Reference linked ID which this one overrides. */ - IDOverrideStatic *override_static; - - /** - * Only set for datablocks which are coming from copy-on-write, points to - * the original version of it. - */ - struct ID *orig_id; - - void *py_instance; + void *next, *prev; + struct ID *newid; + struct Library *lib; + /** MAX_ID_NAME. */ + char name[66]; + /** + * LIB_... flags report on status of the datablock this ID belongs to + * (persistent, saved to and read from .blend). + */ + short flag; + /** + * LIB_TAG_... tags (runtime only, cleared at read time). + */ + int tag; + int us; + int icon_id; + int recalc; + char _pad[4]; + IDProperty *properties; + + /** Reference linked ID which this one overrides. */ + IDOverrideStatic *override_static; + + /** + * Only set for datablocks which are coming from copy-on-write, points to + * the original version of it. + */ + struct ID *orig_id; + + void *py_instance; } ID; /** @@ -269,71 +267,73 @@ typedef struct ID { * WARNING: readfile.c, expand_doit() reads this struct without DNA check! */ typedef struct Library { - ID id; - struct FileData *filedata; - /** Path name used for reading, can be relative and edited in the outliner. */ - char name[1024]; - - /** - * Absolute filepath, this is only for convenience, - * 'name' is the real path used on file read but in - * some cases its useful to access the absolute one. - * This is set on file read. - * Use BKE_library_filepath_set() rather than setting 'name' - * directly and it will be kept in sync - campbell */ - char filepath[1024]; - - /** Set for indirectly linked libs, used in the outliner and while reading. */ - struct Library *parent; - - struct PackedFile *packedfile; - - /* Temp data needed by read/write code. */ - int temp_index; - /** See BLENDER_VERSION, BLENDER_SUBVERSION, needed for do_versions. */ - short versionfile, subversionfile; + ID id; + struct FileData *filedata; + /** Path name used for reading, can be relative and edited in the outliner. */ + char name[1024]; + + /** + * Absolute filepath, this is only for convenience, + * 'name' is the real path used on file read but in + * some cases its useful to access the absolute one. + * This is set on file read. + * Use BKE_library_filepath_set() rather than setting 'name' + * directly and it will be kept in sync - campbell */ + char filepath[1024]; + + /** Set for indirectly linked libs, used in the outliner and while reading. */ + struct Library *parent; + + struct PackedFile *packedfile; + + /* Temp data needed by read/write code. */ + int temp_index; + /** See BLENDER_VERSION, BLENDER_SUBVERSION, needed for do_versions. */ + short versionfile, subversionfile; } Library; enum eIconSizes { - ICON_SIZE_ICON = 0, - ICON_SIZE_PREVIEW = 1, + ICON_SIZE_ICON = 0, + ICON_SIZE_PREVIEW = 1, - NUM_ICON_SIZES, + NUM_ICON_SIZES, }; /* for PreviewImage->flag */ enum ePreviewImage_Flag { - PRV_CHANGED = (1 << 0), - PRV_USER_EDITED = (1 << 1), /* if user-edited, do not auto-update this anymore! */ + PRV_CHANGED = (1 << 0), + PRV_USER_EDITED = (1 << 1), /* if user-edited, do not auto-update this anymore! */ }; /* for PreviewImage->tag */ -enum { - PRV_TAG_DEFFERED = (1 << 0), /* Actual loading of preview is deferred. */ - PRV_TAG_DEFFERED_RENDERING = (1 << 1), /* Deferred preview is being loaded. */ - PRV_TAG_DEFFERED_DELETE = (1 << 2), /* Deferred preview should be deleted asap. */ +enum { + PRV_TAG_DEFFERED = (1 << 0), /* Actual loading of preview is deferred. */ + PRV_TAG_DEFFERED_RENDERING = (1 << 1), /* Deferred preview is being loaded. */ + PRV_TAG_DEFFERED_DELETE = (1 << 2), /* Deferred preview should be deleted asap. */ }; typedef struct PreviewImage { - /* All values of 2 are really NUM_ICON_SIZES */ - unsigned int w[2]; - unsigned int h[2]; - short flag[2]; - short changed_timestamp[2]; - unsigned int *rect[2]; - - /* Runtime-only data. */ - struct GPUTexture *gputexture[2]; - /** Used by previews outside of ID context. */ - int icon_id; - - /** Runtime data. */ - short tag; - char _pad[2]; + /* All values of 2 are really NUM_ICON_SIZES */ + unsigned int w[2]; + unsigned int h[2]; + short flag[2]; + short changed_timestamp[2]; + unsigned int *rect[2]; + + /* Runtime-only data. */ + struct GPUTexture *gputexture[2]; + /** Used by previews outside of ID context. */ + int icon_id; + + /** Runtime data. */ + short tag; + char _pad[2]; } PreviewImage; #define PRV_DEFERRED_DATA(prv) \ - (CHECK_TYPE_INLINE(prv, PreviewImage *), BLI_assert((prv)->tag & PRV_TAG_DEFFERED), (void *)((prv) + 1)) + (CHECK_TYPE_INLINE(prv, PreviewImage *), \ + BLI_assert((prv)->tag & PRV_TAG_DEFFERED), \ + (void *)((prv) + 1)) /** * Defines for working with IDs. @@ -343,11 +343,11 @@ typedef struct PreviewImage { */ #ifdef __BIG_ENDIAN__ - /* big endian */ -# define MAKE_ID2(c, d) ((c) << 8 | (d)) +/* big endian */ +# define MAKE_ID2(c, d) ((c) << 8 | (d)) #else - /* little endian */ -# define MAKE_ID2(c, d) ((d) << 8 | (c)) +/* little endian */ +# define MAKE_ID2(c, d) ((d) << 8 | (c)) #endif /** @@ -357,101 +357,109 @@ typedef struct PreviewImage { * and the first 2 bytes of #ID.name (for runtime checks, see #GS macro). */ typedef enum ID_Type { - ID_SCE = MAKE_ID2('S', 'C'), /* Scene */ - ID_LI = MAKE_ID2('L', 'I'), /* Library */ - ID_OB = MAKE_ID2('O', 'B'), /* Object */ - ID_ME = MAKE_ID2('M', 'E'), /* Mesh */ - ID_CU = MAKE_ID2('C', 'U'), /* Curve */ - ID_MB = MAKE_ID2('M', 'B'), /* MetaBall */ - ID_MA = MAKE_ID2('M', 'A'), /* Material */ - ID_TE = MAKE_ID2('T', 'E'), /* Tex (Texture) */ - ID_IM = MAKE_ID2('I', 'M'), /* Image */ - ID_LT = MAKE_ID2('L', 'T'), /* Lattice */ - ID_LA = MAKE_ID2('L', 'A'), /* Light */ - ID_CA = MAKE_ID2('C', 'A'), /* Camera */ - ID_IP = MAKE_ID2('I', 'P'), /* Ipo (depreciated, replaced by FCurves) */ - ID_KE = MAKE_ID2('K', 'E'), /* Key (shape key) */ - ID_WO = MAKE_ID2('W', 'O'), /* World */ - ID_SCR = MAKE_ID2('S', 'R'), /* Screen */ - ID_VF = MAKE_ID2('V', 'F'), /* VFont (Vector Font) */ - ID_TXT = MAKE_ID2('T', 'X'), /* Text */ - ID_SPK = MAKE_ID2('S', 'K'), /* Speaker */ - ID_SO = MAKE_ID2('S', 'O'), /* Sound */ - ID_GR = MAKE_ID2('G', 'R'), /* Group */ - ID_AR = MAKE_ID2('A', 'R'), /* bArmature */ - ID_AC = MAKE_ID2('A', 'C'), /* bAction */ - ID_NT = MAKE_ID2('N', 'T'), /* bNodeTree */ - ID_BR = MAKE_ID2('B', 'R'), /* Brush */ - ID_PA = MAKE_ID2('P', 'A'), /* ParticleSettings */ - ID_GD = MAKE_ID2('G', 'D'), /* bGPdata, (Grease Pencil) */ - ID_WM = MAKE_ID2('W', 'M'), /* WindowManager */ - ID_MC = MAKE_ID2('M', 'C'), /* MovieClip */ - ID_MSK = MAKE_ID2('M', 'S'), /* Mask */ - ID_LS = MAKE_ID2('L', 'S'), /* FreestyleLineStyle */ - ID_PAL = MAKE_ID2('P', 'L'), /* Palette */ - ID_PC = MAKE_ID2('P', 'C'), /* PaintCurve */ - ID_CF = MAKE_ID2('C', 'F'), /* CacheFile */ - ID_WS = MAKE_ID2('W', 'S'), /* WorkSpace */ - ID_LP = MAKE_ID2('L', 'P'), /* LightProbe */ + ID_SCE = MAKE_ID2('S', 'C'), /* Scene */ + ID_LI = MAKE_ID2('L', 'I'), /* Library */ + ID_OB = MAKE_ID2('O', 'B'), /* Object */ + ID_ME = MAKE_ID2('M', 'E'), /* Mesh */ + ID_CU = MAKE_ID2('C', 'U'), /* Curve */ + ID_MB = MAKE_ID2('M', 'B'), /* MetaBall */ + ID_MA = MAKE_ID2('M', 'A'), /* Material */ + ID_TE = MAKE_ID2('T', 'E'), /* Tex (Texture) */ + ID_IM = MAKE_ID2('I', 'M'), /* Image */ + ID_LT = MAKE_ID2('L', 'T'), /* Lattice */ + ID_LA = MAKE_ID2('L', 'A'), /* Light */ + ID_CA = MAKE_ID2('C', 'A'), /* Camera */ + ID_IP = MAKE_ID2('I', 'P'), /* Ipo (depreciated, replaced by FCurves) */ + ID_KE = MAKE_ID2('K', 'E'), /* Key (shape key) */ + ID_WO = MAKE_ID2('W', 'O'), /* World */ + ID_SCR = MAKE_ID2('S', 'R'), /* Screen */ + ID_VF = MAKE_ID2('V', 'F'), /* VFont (Vector Font) */ + ID_TXT = MAKE_ID2('T', 'X'), /* Text */ + ID_SPK = MAKE_ID2('S', 'K'), /* Speaker */ + ID_SO = MAKE_ID2('S', 'O'), /* Sound */ + ID_GR = MAKE_ID2('G', 'R'), /* Group */ + ID_AR = MAKE_ID2('A', 'R'), /* bArmature */ + ID_AC = MAKE_ID2('A', 'C'), /* bAction */ + ID_NT = MAKE_ID2('N', 'T'), /* bNodeTree */ + ID_BR = MAKE_ID2('B', 'R'), /* Brush */ + ID_PA = MAKE_ID2('P', 'A'), /* ParticleSettings */ + ID_GD = MAKE_ID2('G', 'D'), /* bGPdata, (Grease Pencil) */ + ID_WM = MAKE_ID2('W', 'M'), /* WindowManager */ + ID_MC = MAKE_ID2('M', 'C'), /* MovieClip */ + ID_MSK = MAKE_ID2('M', 'S'), /* Mask */ + ID_LS = MAKE_ID2('L', 'S'), /* FreestyleLineStyle */ + ID_PAL = MAKE_ID2('P', 'L'), /* Palette */ + ID_PC = MAKE_ID2('P', 'C'), /* PaintCurve */ + ID_CF = MAKE_ID2('C', 'F'), /* CacheFile */ + ID_WS = MAKE_ID2('W', 'S'), /* WorkSpace */ + ID_LP = MAKE_ID2('L', 'P'), /* LightProbe */ } ID_Type; /* Only used as 'placeholder' in .blend files for directly linked datablocks. */ -#define ID_LINK_PLACEHOLDER MAKE_ID2('I', 'D') /* (internal use only) */ +#define ID_LINK_PLACEHOLDER MAKE_ID2('I', 'D') /* (internal use only) */ /* Deprecated. */ -#define ID_SCRN MAKE_ID2('S', 'N') +#define ID_SCRN MAKE_ID2('S', 'N') /* NOTE! Fake IDs, needed for g.sipo->blocktype or outliner */ -#define ID_SEQ MAKE_ID2('S', 'Q') +#define ID_SEQ MAKE_ID2('S', 'Q') /* constraint */ -#define ID_CO MAKE_ID2('C', 'O') +#define ID_CO MAKE_ID2('C', 'O') /* pose (action channel, used to be ID_AC in code, so we keep code for backwards compat) */ -#define ID_PO MAKE_ID2('A', 'C') +#define ID_PO MAKE_ID2('A', 'C') /* used in outliner... */ -#define ID_NLA MAKE_ID2('N', 'L') +#define ID_NLA MAKE_ID2('N', 'L') /* fluidsim Ipo */ -#define ID_FLUIDSIM MAKE_ID2('F', 'S') +#define ID_FLUIDSIM MAKE_ID2('F', 'S') #define ID_FAKE_USERS(id) ((((ID *)id)->flag & LIB_FAKEUSER) ? 1 : 0) #define ID_REAL_USERS(id) (((ID *)id)->us - ID_FAKE_USERS(id)) #define ID_EXTRA_USERS(id) (((ID *)id)->tag & LIB_TAG_EXTRAUSER ? 1 : 0) -#define ID_CHECK_UNDO(id) ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM) && (GS((id)->name) != ID_WS)) +#define ID_CHECK_UNDO(id) \ + ((GS((id)->name) != ID_SCR) && (GS((id)->name) != ID_WM) && (GS((id)->name) != ID_WS)) -#define ID_BLEND_PATH(_bmain, _id) ((_id)->lib ? (_id)->lib->filepath : BKE_main_blendfile_path((_bmain))) -#define ID_BLEND_PATH_FROM_GLOBAL(_id) ((_id)->lib ? (_id)->lib->filepath : BKE_main_blendfile_path_from_global()) +#define ID_BLEND_PATH(_bmain, _id) \ + ((_id)->lib ? (_id)->lib->filepath : BKE_main_blendfile_path((_bmain))) +#define ID_BLEND_PATH_FROM_GLOBAL(_id) \ + ((_id)->lib ? (_id)->lib->filepath : BKE_main_blendfile_path_from_global()) #define ID_MISSING(_id) (((_id)->tag & LIB_TAG_MISSING) != 0) #define ID_IS_LINKED(_id) (((ID *)(_id))->lib != NULL) -#define ID_IS_STATIC_OVERRIDE(_id) (((ID *)(_id))->override_static != NULL && \ - ((ID *)(_id))->override_static->reference != NULL) +#define ID_IS_STATIC_OVERRIDE(_id) \ + (((ID *)(_id))->override_static != NULL && ((ID *)(_id))->override_static->reference != NULL) -#define ID_IS_STATIC_OVERRIDE_TEMPLATE(_id) (((ID *)(_id))->override_static != NULL && \ - ((ID *)(_id))->override_static->reference == NULL) +#define ID_IS_STATIC_OVERRIDE_TEMPLATE(_id) \ + (((ID *)(_id))->override_static != NULL && ((ID *)(_id))->override_static->reference == NULL) -#define ID_IS_STATIC_OVERRIDE_AUTO(_id) (!ID_IS_LINKED((_id)) && \ - ID_IS_STATIC_OVERRIDE((_id)) && \ - (((ID *)(_id))->override_static->flag & STATICOVERRIDE_AUTO)) +#define ID_IS_STATIC_OVERRIDE_AUTO(_id) \ + (!ID_IS_LINKED((_id)) && ID_IS_STATIC_OVERRIDE((_id)) && \ + (((ID *)(_id))->override_static->flag & STATICOVERRIDE_AUTO)) /* No copy-on-write for these types. * Keep in sync with check_datablocks_copy_on_writable and deg_copy_on_write_is_needed */ -#define ID_TYPE_IS_COW(_id_type) \ - (!ELEM(_id_type, ID_BR, ID_LS, ID_PAL, ID_IM)) +#define ID_TYPE_IS_COW(_id_type) (!ELEM(_id_type, ID_BR, ID_LS, ID_PAL, ID_IM)) #ifdef GS # undef GS #endif -#define GS(a) (CHECK_TYPE_ANY(a, char *, const char *, char [66], const char[66]), (ID_Type)(*((const short *)(a)))) +#define GS(a) \ + (CHECK_TYPE_ANY(a, char *, const char *, char[66], const char[66]), \ + (ID_Type)(*((const short *)(a)))) #define ID_NEW_SET(_id, _idn) \ - (((ID *)(_id))->newid = (ID *)(_idn), ((ID *)(_id))->newid->tag |= LIB_TAG_NEW, (void *)((ID *)(_id))->newid) -#define ID_NEW_REMAP(a) if ((a) && (a)->id.newid) (a) = (void *)(a)->id.newid + (((ID *)(_id))->newid = (ID *)(_idn), \ + ((ID *)(_id))->newid->tag |= LIB_TAG_NEW, \ + (void *)((ID *)(_id))->newid) +#define ID_NEW_REMAP(a) \ + if ((a) && (a)->id.newid) \ + (a) = (void *)(a)->id.newid /* id->flag (persitent). */ enum { - LIB_FAKEUSER = 1 << 9, + LIB_FAKEUSER = 1 << 9, }; /** @@ -469,141 +477,139 @@ enum { * (except on initialization during .blend file reading). */ enum { - /* RESET_NEVER Datablock is from current .blend file. */ - LIB_TAG_LOCAL = 0, - /* RESET_NEVER Datablock is from a library, - * but is used (linked) directly by current .blend file. */ - LIB_TAG_EXTERN = 1 << 0, - /* RESET_NEVER Datablock is from a library, - * and is only used (linked) inderectly through other libraries. */ - LIB_TAG_INDIRECT = 1 << 1, - - /* RESET_AFTER_USE Flag used internally in readfile.c, - * to mark IDs needing to be expanded (only done once). */ - LIB_TAG_NEED_EXPAND = 1 << 3, - /* RESET_AFTER_USE Flag used internally in readfile.c to mark ID - * placeholders for linked datablocks needing to be read. */ - LIB_TAG_ID_LINK_PLACEHOLDER = 1 << 4, - /* RESET_AFTER_USE */ - LIB_TAG_NEED_LINK = 1 << 5, - - /* RESET_NEVER tag datablock as a place-holder - * (because the real one could not be linked from its library e.g.). */ - LIB_TAG_MISSING = 1 << 6, - - /* RESET_NEVER tag datablock as being up-to-date regarding its reference. */ - LIB_TAG_OVERRIDESTATIC_REFOK = 1 << 9, - /* RESET_NEVER tag datablock as needing an auto-override execution, if enabled. */ - LIB_TAG_OVERRIDESTATIC_AUTOREFRESH = 1 << 17, - - /* tag datablock has having an extra user. */ - LIB_TAG_EXTRAUSER = 1 << 2, - /* tag datablock has having actually increased usercount for the extra virtual user. */ - LIB_TAG_EXTRAUSER_SET = 1 << 7, - - /* RESET_AFTER_USE tag newly duplicated/copied IDs. - * Also used internally in readfile.c to mark datablocks needing do_versions. */ - LIB_TAG_NEW = 1 << 8, - /* RESET_BEFORE_USE free test flag. - * TODO make it a RESET_AFTER_USE too. */ - LIB_TAG_DOIT = 1 << 10, - /* RESET_AFTER_USE tag existing data before linking so we know what is new. */ - LIB_TAG_PRE_EXISTING = 1 << 11, - - /* The datablock is a copy-on-write/localized version. */ - LIB_TAG_COPIED_ON_WRITE = 1 << 12, - LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT = 1 << 13, - LIB_TAG_LOCALIZED = 1 << 14, - - /* RESET_NEVER tag datablock for freeing etc. behavior - * (usually set when copying real one into temp/runtime one). */ - LIB_TAG_NO_MAIN = 1 << 15, /* Datablock is not listed in Main database. */ - LIB_TAG_NO_USER_REFCOUNT = 1 << 16, /* Datablock does not refcount usages of other IDs. */ - /* Datablock was not allocated by standard system (BKE_libblock_alloc), do not free its memory - * (usual type-specific freeing is called though). */ - LIB_TAG_NOT_ALLOCATED = 1 << 18, + /* RESET_NEVER Datablock is from current .blend file. */ + LIB_TAG_LOCAL = 0, + /* RESET_NEVER Datablock is from a library, + * but is used (linked) directly by current .blend file. */ + LIB_TAG_EXTERN = 1 << 0, + /* RESET_NEVER Datablock is from a library, + * and is only used (linked) inderectly through other libraries. */ + LIB_TAG_INDIRECT = 1 << 1, + + /* RESET_AFTER_USE Flag used internally in readfile.c, + * to mark IDs needing to be expanded (only done once). */ + LIB_TAG_NEED_EXPAND = 1 << 3, + /* RESET_AFTER_USE Flag used internally in readfile.c to mark ID + * placeholders for linked datablocks needing to be read. */ + LIB_TAG_ID_LINK_PLACEHOLDER = 1 << 4, + /* RESET_AFTER_USE */ + LIB_TAG_NEED_LINK = 1 << 5, + + /* RESET_NEVER tag datablock as a place-holder + * (because the real one could not be linked from its library e.g.). */ + LIB_TAG_MISSING = 1 << 6, + + /* RESET_NEVER tag datablock as being up-to-date regarding its reference. */ + LIB_TAG_OVERRIDESTATIC_REFOK = 1 << 9, + /* RESET_NEVER tag datablock as needing an auto-override execution, if enabled. */ + LIB_TAG_OVERRIDESTATIC_AUTOREFRESH = 1 << 17, + + /* tag datablock has having an extra user. */ + LIB_TAG_EXTRAUSER = 1 << 2, + /* tag datablock has having actually increased usercount for the extra virtual user. */ + LIB_TAG_EXTRAUSER_SET = 1 << 7, + + /* RESET_AFTER_USE tag newly duplicated/copied IDs. + * Also used internally in readfile.c to mark datablocks needing do_versions. */ + LIB_TAG_NEW = 1 << 8, + /* RESET_BEFORE_USE free test flag. + * TODO make it a RESET_AFTER_USE too. */ + LIB_TAG_DOIT = 1 << 10, + /* RESET_AFTER_USE tag existing data before linking so we know what is new. */ + LIB_TAG_PRE_EXISTING = 1 << 11, + + /* The datablock is a copy-on-write/localized version. */ + LIB_TAG_COPIED_ON_WRITE = 1 << 12, + LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT = 1 << 13, + LIB_TAG_LOCALIZED = 1 << 14, + + /* RESET_NEVER tag datablock for freeing etc. behavior + * (usually set when copying real one into temp/runtime one). */ + LIB_TAG_NO_MAIN = 1 << 15, /* Datablock is not listed in Main database. */ + LIB_TAG_NO_USER_REFCOUNT = 1 << 16, /* Datablock does not refcount usages of other IDs. */ + /* Datablock was not allocated by standard system (BKE_libblock_alloc), do not free its memory + * (usual type-specific freeing is called though). */ + LIB_TAG_NOT_ALLOCATED = 1 << 18, }; /* Tag given ID for an update in all the dependency graphs. */ typedef enum IDRecalcFlag { - /*************************************************************************** - * Individual update tags, this is what ID gets tagged for update with. */ - - /* ** Object transformation changed. ** */ - ID_RECALC_TRANSFORM = (1 << 0), - - /* ** Object geometry changed. ** - * - * When object of armature type gets tagged with this flag, it's pose is - * re-evaluated. - * When object of other type is tagged with this flag it makes the modifier - * stack to be re-evaluated. - * When object data type (mesh, curve, ...) gets tagged with this flag it - * makes all objects which shares this datablock to be updated. */ - ID_RECALC_GEOMETRY = (1 << 1), - - /* ** Animation or time changed and animation is to be re-evaluated. ** */ - ID_RECALC_ANIMATION = (1 << 2), - - /* ** Particle system changed. ** */ - /* Only do pathcache etc. */ - ID_RECALC_PSYS_REDO = (1 << 3), - /* Reset everything including pointcache. */ - ID_RECALC_PSYS_RESET = (1 << 4), - /* Only child settings changed. */ - ID_RECALC_PSYS_CHILD = (1 << 5), - /* Physics type changed. */ - ID_RECALC_PSYS_PHYS = (1 << 6), - - /* ** Material and shading ** */ - - /* For materials and node trees this means that topology of the shader tree - * changed, and the shader is to be recompiled. - * For objects it means that the draw batch cache is to be redone. */ - ID_RECALC_SHADING = (1 << 7), - /* TODO(sergey): Consider adding an explicit ID_RECALC_SHADING_PARAMATERS - * which can be used for cases when only socket value changed, to speed up - * redraw update in that case. */ - - /* Selection of the ID itself or its components (for example, vertices) did - * change, and all the drawing data is to eb updated. */ - ID_RECALC_SELECT = (1 << 9), - /* Flags on the base did change, and is to be compied onto all the copies of - * corresponding objects. */ - ID_RECALC_BASE_FLAGS = (1 << 10), - ID_RECALC_POINT_CACHE = (1 << 11), - /* Only inform editors about the change. Is used to force update of editors - * when datablock which is not a part of dependency graph did change. - * - * For example, brush texture did change and the preview is to be - * re-rendered. */ - ID_RECALC_EDITORS = (1 << 12), - - /* ** Update copy on write component. ** - * This is most generic tag which should only be used when nothing else - * matches. - */ - ID_RECALC_COPY_ON_WRITE = (1 << 13), - - /*************************************************************************** - * Pseudonyms, to have more semantic meaning in the actual code without - * using too much low-level and implementation specific tags. */ - - /* Update animation datablock itself, without doing full re-evaluation of - * all dependent objects. */ - ID_RECALC_ANIMATION_NO_FLUSH = ID_RECALC_COPY_ON_WRITE, - - /*************************************************************************** - * Aggregate flags, use only for checks on runtime. - * Do NOT use those for tagging. */ - - /* Identifies that SOMETHING has been changed in this ID. */ - ID_RECALC_ALL = ~(0), - /* Identifies that something in particle system did change. */ - ID_RECALC_PSYS_ALL = (ID_RECALC_PSYS_REDO | - ID_RECALC_PSYS_RESET | - ID_RECALC_PSYS_CHILD | - ID_RECALC_PSYS_PHYS), + /*************************************************************************** + * Individual update tags, this is what ID gets tagged for update with. */ + + /* ** Object transformation changed. ** */ + ID_RECALC_TRANSFORM = (1 << 0), + + /* ** Object geometry changed. ** + * + * When object of armature type gets tagged with this flag, it's pose is + * re-evaluated. + * When object of other type is tagged with this flag it makes the modifier + * stack to be re-evaluated. + * When object data type (mesh, curve, ...) gets tagged with this flag it + * makes all objects which shares this datablock to be updated. */ + ID_RECALC_GEOMETRY = (1 << 1), + + /* ** Animation or time changed and animation is to be re-evaluated. ** */ + ID_RECALC_ANIMATION = (1 << 2), + + /* ** Particle system changed. ** */ + /* Only do pathcache etc. */ + ID_RECALC_PSYS_REDO = (1 << 3), + /* Reset everything including pointcache. */ + ID_RECALC_PSYS_RESET = (1 << 4), + /* Only child settings changed. */ + ID_RECALC_PSYS_CHILD = (1 << 5), + /* Physics type changed. */ + ID_RECALC_PSYS_PHYS = (1 << 6), + + /* ** Material and shading ** */ + + /* For materials and node trees this means that topology of the shader tree + * changed, and the shader is to be recompiled. + * For objects it means that the draw batch cache is to be redone. */ + ID_RECALC_SHADING = (1 << 7), + /* TODO(sergey): Consider adding an explicit ID_RECALC_SHADING_PARAMATERS + * which can be used for cases when only socket value changed, to speed up + * redraw update in that case. */ + + /* Selection of the ID itself or its components (for example, vertices) did + * change, and all the drawing data is to eb updated. */ + ID_RECALC_SELECT = (1 << 9), + /* Flags on the base did change, and is to be compied onto all the copies of + * corresponding objects. */ + ID_RECALC_BASE_FLAGS = (1 << 10), + ID_RECALC_POINT_CACHE = (1 << 11), + /* Only inform editors about the change. Is used to force update of editors + * when datablock which is not a part of dependency graph did change. + * + * For example, brush texture did change and the preview is to be + * re-rendered. */ + ID_RECALC_EDITORS = (1 << 12), + + /* ** Update copy on write component. ** + * This is most generic tag which should only be used when nothing else + * matches. + */ + ID_RECALC_COPY_ON_WRITE = (1 << 13), + + /*************************************************************************** + * Pseudonyms, to have more semantic meaning in the actual code without + * using too much low-level and implementation specific tags. */ + + /* Update animation datablock itself, without doing full re-evaluation of + * all dependent objects. */ + ID_RECALC_ANIMATION_NO_FLUSH = ID_RECALC_COPY_ON_WRITE, + + /*************************************************************************** + * Aggregate flags, use only for checks on runtime. + * Do NOT use those for tagging. */ + + /* Identifies that SOMETHING has been changed in this ID. */ + ID_RECALC_ALL = ~(0), + /* Identifies that something in particle system did change. */ + ID_RECALC_PSYS_ALL = (ID_RECALC_PSYS_REDO | ID_RECALC_PSYS_RESET | ID_RECALC_PSYS_CHILD | + ID_RECALC_PSYS_PHYS), } IDRecalcFlag; @@ -613,80 +619,80 @@ typedef enum IDRecalcFlag { * or if we need to fallback to longlong defines :/ */ enum { - FILTER_ID_AC = (1 << 0), - FILTER_ID_AR = (1 << 1), - FILTER_ID_BR = (1 << 2), - FILTER_ID_CA = (1 << 3), - FILTER_ID_CU = (1 << 4), - FILTER_ID_GD = (1 << 5), - FILTER_ID_GR = (1 << 6), - FILTER_ID_IM = (1 << 7), - FILTER_ID_LA = (1 << 8), - FILTER_ID_LS = (1 << 9), - FILTER_ID_LT = (1 << 10), - FILTER_ID_MA = (1 << 11), - FILTER_ID_MB = (1 << 12), - FILTER_ID_MC = (1 << 13), - FILTER_ID_ME = (1 << 14), - FILTER_ID_MSK = (1 << 15), - FILTER_ID_NT = (1 << 16), - FILTER_ID_OB = (1 << 17), - FILTER_ID_PAL = (1 << 18), - FILTER_ID_PC = (1 << 19), - FILTER_ID_SCE = (1 << 20), - FILTER_ID_SPK = (1 << 21), - FILTER_ID_SO = (1 << 22), - FILTER_ID_TE = (1 << 23), - FILTER_ID_TXT = (1 << 24), - FILTER_ID_VF = (1 << 25), - FILTER_ID_WO = (1 << 26), - FILTER_ID_PA = (1 << 27), - FILTER_ID_CF = (1 << 28), - FILTER_ID_WS = (1 << 29), - FILTER_ID_LP = (1u << 31), + FILTER_ID_AC = (1 << 0), + FILTER_ID_AR = (1 << 1), + FILTER_ID_BR = (1 << 2), + FILTER_ID_CA = (1 << 3), + FILTER_ID_CU = (1 << 4), + FILTER_ID_GD = (1 << 5), + FILTER_ID_GR = (1 << 6), + FILTER_ID_IM = (1 << 7), + FILTER_ID_LA = (1 << 8), + FILTER_ID_LS = (1 << 9), + FILTER_ID_LT = (1 << 10), + FILTER_ID_MA = (1 << 11), + FILTER_ID_MB = (1 << 12), + FILTER_ID_MC = (1 << 13), + FILTER_ID_ME = (1 << 14), + FILTER_ID_MSK = (1 << 15), + FILTER_ID_NT = (1 << 16), + FILTER_ID_OB = (1 << 17), + FILTER_ID_PAL = (1 << 18), + FILTER_ID_PC = (1 << 19), + FILTER_ID_SCE = (1 << 20), + FILTER_ID_SPK = (1 << 21), + FILTER_ID_SO = (1 << 22), + FILTER_ID_TE = (1 << 23), + FILTER_ID_TXT = (1 << 24), + FILTER_ID_VF = (1 << 25), + FILTER_ID_WO = (1 << 26), + FILTER_ID_PA = (1 << 27), + FILTER_ID_CF = (1 << 28), + FILTER_ID_WS = (1 << 29), + FILTER_ID_LP = (1u << 31), }; /* IMPORTANT: this enum matches the order currently use in set_listbasepointers, * keep them in sync! */ enum { - INDEX_ID_LI = 0, - INDEX_ID_IP, - INDEX_ID_AC, - INDEX_ID_KE, - INDEX_ID_PAL, - INDEX_ID_GD, - INDEX_ID_NT, - INDEX_ID_IM, - INDEX_ID_TE, - INDEX_ID_MA, - INDEX_ID_VF, - INDEX_ID_AR, - INDEX_ID_CF, - INDEX_ID_ME, - INDEX_ID_CU, - INDEX_ID_MB, - INDEX_ID_LT, - INDEX_ID_LA, - INDEX_ID_CA, - INDEX_ID_TXT, - INDEX_ID_SO, - INDEX_ID_GR, - INDEX_ID_PC, - INDEX_ID_BR, - INDEX_ID_PA, - INDEX_ID_SPK, - INDEX_ID_LP, - INDEX_ID_WO, - INDEX_ID_MC, - INDEX_ID_SCR, - INDEX_ID_OB, - INDEX_ID_LS, - INDEX_ID_SCE, - INDEX_ID_WS, - INDEX_ID_WM, - INDEX_ID_MSK, - INDEX_ID_NULL, - INDEX_ID_MAX, + INDEX_ID_LI = 0, + INDEX_ID_IP, + INDEX_ID_AC, + INDEX_ID_KE, + INDEX_ID_PAL, + INDEX_ID_GD, + INDEX_ID_NT, + INDEX_ID_IM, + INDEX_ID_TE, + INDEX_ID_MA, + INDEX_ID_VF, + INDEX_ID_AR, + INDEX_ID_CF, + INDEX_ID_ME, + INDEX_ID_CU, + INDEX_ID_MB, + INDEX_ID_LT, + INDEX_ID_LA, + INDEX_ID_CA, + INDEX_ID_TXT, + INDEX_ID_SO, + INDEX_ID_GR, + INDEX_ID_PC, + INDEX_ID_BR, + INDEX_ID_PA, + INDEX_ID_SPK, + INDEX_ID_LP, + INDEX_ID_WO, + INDEX_ID_MC, + INDEX_ID_SCR, + INDEX_ID_OB, + INDEX_ID_LS, + INDEX_ID_SCE, + INDEX_ID_WS, + INDEX_ID_WM, + INDEX_ID_MSK, + INDEX_ID_NULL, + INDEX_ID_MAX, }; #ifdef __cplusplus |