From e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 17 Apr 2019 06:17:24 +0200 Subject: 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 --- .../editors/animation/anim_channels_defines.c | 6705 ++++++++++---------- 1 file changed, 3465 insertions(+), 3240 deletions(-) (limited to 'source/blender/editors/animation/anim_channels_defines.c') diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index daa2cda2e1b..78c17ac7015 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -21,7 +21,6 @@ * \ingroup edanimation */ - #include #include "MEM_guardedalloc.h" @@ -83,10 +82,10 @@ // XXX constant defines to be moved elsewhere? /* extra padding for lengths (to go under scrollers) */ -#define EXTRA_SCROLL_PAD 100.0f +#define EXTRA_SCROLL_PAD 100.0f /* size of indent steps */ -#define INDENT_STEP_SIZE (0.35f * U.widget_unit) +#define INDENT_STEP_SIZE (0.35f * U.widget_unit) /* size of string buffers used for animation channel displayed names */ #define ANIM_CHAN_NAME_SIZE 256 @@ -100,163 +99,175 @@ /* Draw Backdrop ---------------------------------- */ /* get backdrop color for top-level widgets (Scene and Object only) */ -static void acf_generic_root_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) +static void acf_generic_root_color(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + float r_color[3]) { - /* darker blue for top-level widgets */ - UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELOB, r_color); + /* darker blue for top-level widgets */ + UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELOB, r_color); } /* backdrop for top-level widgets (Scene and Object only) */ -static void acf_generic_root_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) +static void acf_generic_root_backdrop(bAnimContext *ac, + bAnimListElem *ale, + float yminc, + float ymaxc) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - short expanded = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_EXPAND) != 0; - short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; - float color[3]; + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + short expanded = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_EXPAND) != 0; + short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; + float color[3]; - /* set backdrop drawing color */ - acf->get_backdrop_color(ac, ale, color); + /* set backdrop drawing color */ + acf->get_backdrop_color(ac, ale, color); - /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */ - UI_draw_roundbox_corner_set((expanded) ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT)); - UI_draw_roundbox_3fvAlpha(true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f); + /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */ + UI_draw_roundbox_corner_set((expanded) ? UI_CNR_TOP_LEFT : + (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT)); + UI_draw_roundbox_3fvAlpha( + true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f); } - /* get backdrop color for data expanders under top-level Scene/Object */ -static void acf_generic_dataexpand_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) +static void acf_generic_dataexpand_color(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + float r_color[3]) { - /* lighter color than top-level widget */ - UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELSUBOB, r_color); + /* lighter color than top-level widget */ + UI_GetThemeColor3fv(TH_DOPESHEET_CHANNELSUBOB, r_color); } /* backdrop for data expanders under top-level Scene/Object */ -static void acf_generic_dataexpand_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) +static void acf_generic_dataexpand_backdrop(bAnimContext *ac, + bAnimListElem *ale, + float yminc, + float ymaxc) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; - float color[3]; + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; + float color[3]; - uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - /* set backdrop drawing color */ - acf->get_backdrop_color(ac, ale, color); + /* set backdrop drawing color */ + acf->get_backdrop_color(ac, ale, color); - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - immUniformColor3fv(color); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + immUniformColor3fv(color); - /* no rounded corner - just rectangular box */ - immRectf(pos, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc); + /* no rounded corner - just rectangular box */ + immRectf(pos, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc); - immUnbindProgram(); + immUnbindProgram(); } /* helper method to test if group colors should be drawn */ static bool acf_show_channel_colors(bAnimContext *ac) { - bool showGroupColors = false; + bool showGroupColors = false; - if (ac->sl) { - switch (ac->spacetype) { - case SPACE_ACTION: - { - SpaceAction *saction = (SpaceAction *)ac->sl; - showGroupColors = !(saction->flag & SACTION_NODRAWGCOLORS); + if (ac->sl) { + switch (ac->spacetype) { + case SPACE_ACTION: { + SpaceAction *saction = (SpaceAction *)ac->sl; + showGroupColors = !(saction->flag & SACTION_NODRAWGCOLORS); - break; - } - case SPACE_GRAPH: - { - SpaceGraph *sipo = (SpaceGraph *)ac->sl; - showGroupColors = !(sipo->flag & SIPO_NODRAWGCOLORS); + break; + } + case SPACE_GRAPH: { + SpaceGraph *sipo = (SpaceGraph *)ac->sl; + showGroupColors = !(sipo->flag & SIPO_NODRAWGCOLORS); - break; - } - } - } + break; + } + } + } - return showGroupColors; + return showGroupColors; } /* get backdrop color for generic channels */ static void acf_generic_channel_color(bAnimContext *ac, bAnimListElem *ale, float r_color[3]) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - bActionGroup *grp = NULL; - short indent = (acf->get_indent_level) ? acf->get_indent_level(ac, ale) : 0; - bool showGroupColors = acf_show_channel_colors(ac); - - if (ale->type == ANIMTYPE_FCURVE) { - FCurve *fcu = (FCurve *)ale->data; - grp = fcu->grp; - } - - /* set color for normal channels - * - use 3 shades of color group/standard color for 3 indention level - * - only use group colors if allowed to, and if actually feasible - */ - if (showGroupColors && (grp) && (grp->customCol)) { - unsigned char cp[3]; - - if (indent == 2) { - copy_v3_v3_char((char *)cp, grp->cs.solid); - } - else if (indent == 1) { - copy_v3_v3_char((char *)cp, grp->cs.select); - } - else { - copy_v3_v3_char((char *)cp, grp->cs.active); - } - - /* copy the colors over, transforming from bytes to floats */ - rgb_uchar_to_float(r_color, cp); - } - else { - // FIXME: what happens when the indention is 1 greater than what it should be (due to grouping)? - int colOfs = 10 - 10 * indent; - UI_GetThemeColorShade3fv(TH_SHADE2, colOfs, r_color); - } + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + bActionGroup *grp = NULL; + short indent = (acf->get_indent_level) ? acf->get_indent_level(ac, ale) : 0; + bool showGroupColors = acf_show_channel_colors(ac); + + if (ale->type == ANIMTYPE_FCURVE) { + FCurve *fcu = (FCurve *)ale->data; + grp = fcu->grp; + } + + /* set color for normal channels + * - use 3 shades of color group/standard color for 3 indention level + * - only use group colors if allowed to, and if actually feasible + */ + if (showGroupColors && (grp) && (grp->customCol)) { + unsigned char cp[3]; + + if (indent == 2) { + copy_v3_v3_char((char *)cp, grp->cs.solid); + } + else if (indent == 1) { + copy_v3_v3_char((char *)cp, grp->cs.select); + } + else { + copy_v3_v3_char((char *)cp, grp->cs.active); + } + + /* copy the colors over, transforming from bytes to floats */ + rgb_uchar_to_float(r_color, cp); + } + else { + // FIXME: what happens when the indention is 1 greater than what it should be (due to grouping)? + int colOfs = 10 - 10 * indent; + UI_GetThemeColorShade3fv(TH_SHADE2, colOfs, r_color); + } } /* get backdrop color for grease pencil channels */ static void acf_gpencil_channel_color(bAnimContext *ac, bAnimListElem *ale, float r_color[3]) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - short indent = (acf->get_indent_level) ? acf->get_indent_level(ac, ale) : 0; - bool showGroupColors = acf_show_channel_colors(ac); + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + short indent = (acf->get_indent_level) ? acf->get_indent_level(ac, ale) : 0; + bool showGroupColors = acf_show_channel_colors(ac); - if ((showGroupColors) && (ale->type == ANIMTYPE_GPLAYER)) { - bGPDlayer *gpl = (bGPDlayer *)ale->data; - copy_v3_v3(r_color, gpl->color); - } - else { - int colOfs = 10 - 10 * indent; - UI_GetThemeColorShade3fv(TH_SHADE2, colOfs, r_color); - } + if ((showGroupColors) && (ale->type == ANIMTYPE_GPLAYER)) { + bGPDlayer *gpl = (bGPDlayer *)ale->data; + copy_v3_v3(r_color, gpl->color); + } + else { + int colOfs = 10 - 10 * indent; + UI_GetThemeColorShade3fv(TH_SHADE2, colOfs, r_color); + } } /* backdrop for generic channels */ -static void acf_generic_channel_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) +static void acf_generic_channel_backdrop(bAnimContext *ac, + bAnimListElem *ale, + float yminc, + float ymaxc) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; - float color[3]; + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; + float color[3]; - uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - /* set backdrop drawing color */ - acf->get_backdrop_color(ac, ale, color); + /* set backdrop drawing color */ + acf->get_backdrop_color(ac, ale, color); - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - immUniformColor3fv(color); + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + immUniformColor3fv(color); - /* no rounded corners - just rectangular box */ - immRectf(pos, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc); + /* no rounded corners - just rectangular box */ + immRectf(pos, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc); - immUnbindProgram(); + immUnbindProgram(); } /* Indention + Offset ------------------------------------------- */ @@ -264,99 +275,99 @@ static void acf_generic_channel_backdrop(bAnimContext *ac, bAnimListElem *ale, f /* indention level is always the value in the name */ static short acf_generic_indention_0(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale)) { - return 0; + return 0; } static short acf_generic_indention_1(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale)) { - return 1; + return 1; } -#if 0 // XXX not used +#if 0 // XXX not used static short acf_generic_indention_2(bAnimContext *ac, bAnimListElem *ale) { - return 2; + return 2; } #endif /* indention which varies with the grouping status */ static short acf_generic_indention_flexible(bAnimContext *UNUSED(ac), bAnimListElem *ale) { - short indent = 0; + short indent = 0; - /* grouped F-Curves need extra level of indention */ - if (ale->type == ANIMTYPE_FCURVE) { - FCurve *fcu = (FCurve *)ale->data; + /* grouped F-Curves need extra level of indention */ + if (ale->type == ANIMTYPE_FCURVE) { + FCurve *fcu = (FCurve *)ale->data; - // TODO: we need some way of specifying that the indention color should be one less... - if (fcu->grp) - indent++; - } + // TODO: we need some way of specifying that the indention color should be one less... + if (fcu->grp) + indent++; + } - /* no indention */ - return indent; + /* no indention */ + return indent; } /* basic offset for channels derived from indention */ static short acf_generic_basic_offset(bAnimContext *ac, bAnimListElem *ale) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - if (acf && acf->get_indent_level) - return acf->get_indent_level(ac, ale) * INDENT_STEP_SIZE; - else - return 0; + if (acf && acf->get_indent_level) + return acf->get_indent_level(ac, ale) * INDENT_STEP_SIZE; + else + return 0; } /* offset based on nodetree type */ static short acf_nodetree_rootType_offset(bNodeTree *ntree) { - if (ntree) { - switch (ntree->type) { - case NTREE_SHADER: - /* 1 additional level (i.e. is indented one level in from material, - * so shift all right by one step) - */ - return INDENT_STEP_SIZE; + if (ntree) { + switch (ntree->type) { + case NTREE_SHADER: + /* 1 additional level (i.e. is indented one level in from material, + * so shift all right by one step) + */ + return INDENT_STEP_SIZE; - case NTREE_COMPOSIT: - /* no additional levels needed */ - return 0; + case NTREE_COMPOSIT: + /* no additional levels needed */ + return 0; - case NTREE_TEXTURE: - /* 2 additional levels */ - return INDENT_STEP_SIZE * 2; - } - } + case NTREE_TEXTURE: + /* 2 additional levels */ + return INDENT_STEP_SIZE * 2; + } + } - /* unknown */ - return 0; + /* unknown */ + return 0; } /* offset for groups + grouped entities */ static short acf_generic_group_offset(bAnimContext *ac, bAnimListElem *ale) { - short offset = acf_generic_basic_offset(ac, ale); + short offset = acf_generic_basic_offset(ac, ale); - if (ale->id) { - /* texture animdata */ - if (GS(ale->id->name) == ID_TE) { - offset += U.widget_unit; - } - /* materials and particles animdata */ - else if (ELEM(GS(ale->id->name), ID_MA, ID_PA)) - offset += (short)(0.7f * U.widget_unit); + if (ale->id) { + /* texture animdata */ + if (GS(ale->id->name) == ID_TE) { + offset += U.widget_unit; + } + /* materials and particles animdata */ + else if (ELEM(GS(ale->id->name), ID_MA, ID_PA)) + offset += (short)(0.7f * U.widget_unit); - /* if not in Action Editor mode, action-groups (and their children) must carry some offset too... */ - else if (ac->datatype != ANIMCONT_ACTION) - offset += (short)(0.7f * U.widget_unit); + /* if not in Action Editor mode, action-groups (and their children) must carry some offset too... */ + else if (ac->datatype != ANIMCONT_ACTION) + offset += (short)(0.7f * U.widget_unit); - /* nodetree animdata */ - if (GS(ale->id->name) == ID_NT) { - offset += acf_nodetree_rootType_offset((bNodeTree *)ale->id); - } - } + /* nodetree animdata */ + if (GS(ale->id->name) == ID_NT) { + offset += acf_nodetree_rootType_offset((bNodeTree *)ale->id); + } + } - /* offset is just the normal type - i.e. based on indention */ - return offset; + /* offset is just the normal type - i.e. based on indention */ + return offset; } /* Name ------------------------------------------- */ @@ -364,31 +375,30 @@ static short acf_generic_group_offset(bAnimContext *ac, bAnimListElem *ale) /* name for ID block entries */ static void acf_generic_idblock_name(bAnimListElem *ale, char *name) { - ID *id = (ID *)ale->data; /* data pointed to should be an ID block */ + ID *id = (ID *)ale->data; /* data pointed to should be an ID block */ - /* just copy the name... */ - if (id && name) - BLI_strncpy(name, id->name + 2, ANIM_CHAN_NAME_SIZE); + /* just copy the name... */ + if (id && name) + BLI_strncpy(name, id->name + 2, ANIM_CHAN_NAME_SIZE); } /* name property for ID block entries */ static bool acf_generic_idblock_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - RNA_id_pointer_create(ale->data, ptr); - *prop = RNA_struct_name_property(ptr->type); + RNA_id_pointer_create(ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); + return (*prop != NULL); } - /* name property for ID block entries which are just subheading "fillers" */ static bool acf_generic_idfill_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - /* actual ID we're representing is stored in ale->data not ale->id, as id gives the owner */ - RNA_id_pointer_create(ale->data, ptr); - *prop = RNA_struct_name_property(ptr->type); + /* actual ID we're representing is stored in ale->data not ale->id, as id gives the owner */ + RNA_id_pointer_create(ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); + return (*prop != NULL); } /* Settings ------------------------------------------- */ @@ -397,33 +407,35 @@ static bool acf_generic_idfill_name_prop(bAnimListElem *ale, PointerRNA *ptr, Pr /* channel type has no settings */ static bool acf_generic_none_setting_valid(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting) { - return false; + return false; } #endif /* check if some setting exists for this object-based data-expander (datablock only) */ -static bool acf_generic_dataexpand_setting_valid(bAnimContext *ac, bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_generic_dataexpand_setting_valid(bAnimContext *ac, + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* expand is always supported */ - case ACHANNEL_SETTING_EXPAND: - return true; + switch (setting) { + /* expand is always supported */ + case ACHANNEL_SETTING_EXPAND: + return true; - /* mute is only supported for NLA */ - case ACHANNEL_SETTING_MUTE: - return ((ac) && (ac->spacetype == SPACE_NLA)); + /* mute is only supported for NLA */ + case ACHANNEL_SETTING_MUTE: + return ((ac) && (ac->spacetype == SPACE_NLA)); - /* select is ok for most "ds*" channels (e.g. dsmat) */ - case ACHANNEL_SETTING_SELECT: - return true; + /* select is ok for most "ds*" channels (e.g. dsmat) */ + case ACHANNEL_SETTING_SELECT: + return true; - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return true; + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return true; - /* other flags are never supported */ - default: - return false; - } + /* other flags are never supported */ + default: + return false; + } } /* *********************************************** */ @@ -432,105 +444,113 @@ static bool acf_generic_dataexpand_setting_valid(bAnimContext *ac, bAnimListElem /* Animation Summary ----------------------------------- */ /* get backdrop color for summary widget */ -static void acf_summary_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) +static void acf_summary_color(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + float r_color[3]) { - /* reddish color - same as the 'action' line in NLA */ - UI_GetThemeColor3fv(TH_ANIM_ACTIVE, r_color); + /* reddish color - same as the 'action' line in NLA */ + UI_GetThemeColor3fv(TH_ANIM_ACTIVE, r_color); } /* backdrop for summary widget */ static void acf_summary_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - float color[3]; + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + float color[3]; - /* set backdrop drawing color */ - acf->get_backdrop_color(ac, ale, color); + /* set backdrop drawing color */ + acf->get_backdrop_color(ac, ale, color); - /* rounded corners on LHS only - * - top and bottom - * - special hack: make the top a bit higher, since we are first... - */ - UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT); - UI_draw_roundbox_3fvAlpha(true, 0, yminc - 2, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f); + /* rounded corners on LHS only + * - top and bottom + * - special hack: make the top a bit higher, since we are first... + */ + UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT); + UI_draw_roundbox_3fvAlpha( + true, 0, yminc - 2, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f); } /* name for summary entries */ static void acf_summary_name(bAnimListElem *UNUSED(ale), char *name) { - if (name) - BLI_strncpy(name, IFACE_("Dope Sheet Summary"), ANIM_CHAN_NAME_SIZE); + if (name) + BLI_strncpy(name, IFACE_("Dope Sheet Summary"), ANIM_CHAN_NAME_SIZE); } // FIXME: this is really a temp icon I think static int acf_summary_icon(bAnimListElem *UNUSED(ale)) { - return ICON_BORDERMOVE; + return ICON_BORDERMOVE; } /* check if some setting exists for this channel */ -static bool acf_summary_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_summary_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - /* only expanded is supported, as it is used for hiding all stuff which the summary covers */ - return (setting == ACHANNEL_SETTING_EXPAND); + /* only expanded is supported, as it is used for hiding all stuff which the summary covers */ + return (setting == ACHANNEL_SETTING_EXPAND); } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_summary_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) -{ - if (setting == ACHANNEL_SETTING_EXPAND) { - /* expanded */ - *neg = true; - return ADS_FLAG_SUMMARY_COLLAPSED; - } - else { - /* unsupported */ - *neg = false; - return 0; - } +static int acf_summary_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) +{ + if (setting == ACHANNEL_SETTING_EXPAND) { + /* expanded */ + *neg = true; + return ADS_FLAG_SUMMARY_COLLAPSED; + } + else { + /* unsupported */ + *neg = false; + return 0; + } } /* get pointer to the setting */ -static void *acf_summary_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_summary_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - bAnimContext *ac = (bAnimContext *)ale->data; + bAnimContext *ac = (bAnimContext *)ale->data; - /* if data is valid, return pointer to active dopesheet's relevant flag - * - this is restricted to DopeSheet/Action Editor only - */ - if ((ac->sl) && (ac->spacetype == SPACE_ACTION) && (setting == ACHANNEL_SETTING_EXPAND)) { - SpaceAction *saction = (SpaceAction *)ac->sl; - bDopeSheet *ads = &saction->ads; + /* if data is valid, return pointer to active dopesheet's relevant flag + * - this is restricted to DopeSheet/Action Editor only + */ + if ((ac->sl) && (ac->spacetype == SPACE_ACTION) && (setting == ACHANNEL_SETTING_EXPAND)) { + SpaceAction *saction = (SpaceAction *)ac->sl; + bDopeSheet *ads = &saction->ads; - /* return pointer to DopeSheet's flag */ - return GET_ACF_FLAG_PTR(ads->flag, type); - } - else { - /* can't return anything useful - unsupported */ - *type = 0; - return NULL; - } + /* return pointer to DopeSheet's flag */ + return GET_ACF_FLAG_PTR(ads->flag, type); + } + else { + /* can't return anything useful - unsupported */ + *type = 0; + return NULL; + } } /* all animation summary (DopeSheet only) type define */ -static bAnimChannelType ACF_SUMMARY = -{ - "Summary", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_summary_color, /* backdrop color */ - acf_summary_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - NULL, /* offset */ - - acf_summary_name, /* name */ - NULL, /* name prop */ - acf_summary_icon, /* icon */ - - acf_summary_setting_valid, /* has setting */ - acf_summary_setting_flag, /* flag for setting */ - acf_summary_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_SUMMARY = { + "Summary", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_summary_color, /* backdrop color */ + acf_summary_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + NULL, /* offset */ + + acf_summary_name, /* name */ + NULL, /* name prop */ + acf_summary_icon, /* icon */ + + acf_summary_setting_valid, /* has setting */ + acf_summary_setting_flag, /* flag for setting */ + acf_summary_setting_ptr, /* pointer for setting */ }; /* Scene ------------------------------------------- */ @@ -538,269 +558,275 @@ static bAnimChannelType ACF_SUMMARY = // TODO: just get this from RNA? static int acf_scene_icon(bAnimListElem *UNUSED(ale)) { - return ICON_SCENE_DATA; + return ICON_SCENE_DATA; } /* check if some setting exists for this channel */ -static bool acf_scene_setting_valid(bAnimContext *ac, bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_scene_setting_valid(bAnimContext *ac, + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* muted only in NLA */ - case ACHANNEL_SETTING_MUTE: - return ((ac) && (ac->spacetype == SPACE_NLA)); + switch (setting) { + /* muted only in NLA */ + case ACHANNEL_SETTING_MUTE: + return ((ac) && (ac->spacetype == SPACE_NLA)); - /* visible only in Graph Editor */ - case ACHANNEL_SETTING_VISIBLE: - return ((ac) && (ac->spacetype == SPACE_GRAPH)); + /* visible only in Graph Editor */ + case ACHANNEL_SETTING_VISIBLE: + return ((ac) && (ac->spacetype == SPACE_GRAPH)); - /* only select and expand supported otherwise */ - case ACHANNEL_SETTING_SELECT: - case ACHANNEL_SETTING_EXPAND: - return true; + /* only select and expand supported otherwise */ + case ACHANNEL_SETTING_SELECT: + case ACHANNEL_SETTING_EXPAND: + return true; - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return false; + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return false; - default: - return false; - } + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_scene_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_scene_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return SCE_DS_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return SCE_DS_SELECTED; - case ACHANNEL_SETTING_EXPAND: /* expanded */ - *neg = true; - return SCE_DS_COLLAPSED; + case ACHANNEL_SETTING_EXPAND: /* expanded */ + *neg = true; + return SCE_DS_COLLAPSED; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_scene_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Scene *scene = (Scene *)ale->data; + Scene *scene = (Scene *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return GET_ACF_FLAG_PTR(scene->flag, type); + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return GET_ACF_FLAG_PTR(scene->flag, type); - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(scene->flag, type); + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(scene->flag, type); - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (scene->adt) - return GET_ACF_FLAG_PTR(scene->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (scene->adt) + return GET_ACF_FLAG_PTR(scene->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* scene type define */ -static bAnimChannelType ACF_SCENE = -{ - "Scene", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_root_color, /* backdrop color */ - acf_generic_root_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - NULL, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_scene_icon, /* icon */ - - acf_scene_setting_valid, /* has setting */ - acf_scene_setting_flag, /* flag for setting */ - acf_scene_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_SCENE = { + "Scene", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_root_color, /* backdrop color */ + acf_generic_root_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + NULL, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_scene_icon, /* icon */ + + acf_scene_setting_valid, /* has setting */ + acf_scene_setting_flag, /* flag for setting */ + acf_scene_setting_ptr, /* pointer for setting */ }; /* Object ------------------------------------------- */ static int acf_object_icon(bAnimListElem *ale) { - Base *base = (Base *)ale->data; - Object *ob = base->object; - - /* icon depends on object-type */ - switch (ob->type) { - case OB_LAMP: - return ICON_OUTLINER_OB_LIGHT; - case OB_MESH: - return ICON_OUTLINER_OB_MESH; - case OB_CAMERA: - return ICON_OUTLINER_OB_CAMERA; - case OB_CURVE: - return ICON_OUTLINER_OB_CURVE; - case OB_MBALL: - return ICON_OUTLINER_OB_META; - case OB_LATTICE: - return ICON_OUTLINER_OB_LATTICE; - case OB_SPEAKER: - return ICON_OUTLINER_OB_SPEAKER; - case OB_LIGHTPROBE: - return ICON_OUTLINER_OB_LIGHTPROBE; - case OB_ARMATURE: - return ICON_OUTLINER_OB_ARMATURE; - case OB_FONT: - return ICON_OUTLINER_OB_FONT; - case OB_SURF: - return ICON_OUTLINER_OB_SURFACE; - case OB_EMPTY: - return ICON_OUTLINER_OB_EMPTY; - case OB_GPENCIL: - return ICON_OUTLINER_OB_GREASEPENCIL; - default: - return ICON_OBJECT_DATA; - } + Base *base = (Base *)ale->data; + Object *ob = base->object; + + /* icon depends on object-type */ + switch (ob->type) { + case OB_LAMP: + return ICON_OUTLINER_OB_LIGHT; + case OB_MESH: + return ICON_OUTLINER_OB_MESH; + case OB_CAMERA: + return ICON_OUTLINER_OB_CAMERA; + case OB_CURVE: + return ICON_OUTLINER_OB_CURVE; + case OB_MBALL: + return ICON_OUTLINER_OB_META; + case OB_LATTICE: + return ICON_OUTLINER_OB_LATTICE; + case OB_SPEAKER: + return ICON_OUTLINER_OB_SPEAKER; + case OB_LIGHTPROBE: + return ICON_OUTLINER_OB_LIGHTPROBE; + case OB_ARMATURE: + return ICON_OUTLINER_OB_ARMATURE; + case OB_FONT: + return ICON_OUTLINER_OB_FONT; + case OB_SURF: + return ICON_OUTLINER_OB_SURFACE; + case OB_EMPTY: + return ICON_OUTLINER_OB_EMPTY; + case OB_GPENCIL: + return ICON_OUTLINER_OB_GREASEPENCIL; + default: + return ICON_OBJECT_DATA; + } } /* name for object */ static void acf_object_name(bAnimListElem *ale, char *name) { - Base *base = (Base *)ale->data; - Object *ob = base->object; + Base *base = (Base *)ale->data; + Object *ob = base->object; - /* just copy the name... */ - if (ob && name) - BLI_strncpy(name, ob->id.name + 2, ANIM_CHAN_NAME_SIZE); + /* just copy the name... */ + if (ob && name) + BLI_strncpy(name, ob->id.name + 2, ANIM_CHAN_NAME_SIZE); } /* name property for object */ static bool acf_object_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - RNA_id_pointer_create(ale->id, ptr); - *prop = RNA_struct_name_property(ptr->type); + RNA_id_pointer_create(ale->id, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); + return (*prop != NULL); } /* check if some setting exists for this channel */ -static bool acf_object_setting_valid(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting) +static bool acf_object_setting_valid(bAnimContext *ac, + bAnimListElem *ale, + eAnimChannel_Settings setting) { - Base *base = (Base *)ale->data; - Object *ob = base->object; + Base *base = (Base *)ale->data; + Object *ob = base->object; - switch (setting) { - /* muted only in NLA */ - case ACHANNEL_SETTING_MUTE: - return ((ac) && (ac->spacetype == SPACE_NLA)); + switch (setting) { + /* muted only in NLA */ + case ACHANNEL_SETTING_MUTE: + return ((ac) && (ac->spacetype == SPACE_NLA)); - /* visible only in Graph Editor */ - case ACHANNEL_SETTING_VISIBLE: - return ((ac) && (ac->spacetype == SPACE_GRAPH) && (ob->adt)); + /* visible only in Graph Editor */ + case ACHANNEL_SETTING_VISIBLE: + return ((ac) && (ac->spacetype == SPACE_GRAPH) && (ob->adt)); - /* only select and expand supported otherwise */ - case ACHANNEL_SETTING_SELECT: - case ACHANNEL_SETTING_EXPAND: - return true; + /* only select and expand supported otherwise */ + case ACHANNEL_SETTING_SELECT: + case ACHANNEL_SETTING_EXPAND: + return true; - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return ((ac) && (ac->spacetype == SPACE_GRAPH) && (ob->adt)); + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return ((ac) && (ac->spacetype == SPACE_GRAPH) && (ob->adt)); - default: - return false; - } + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_object_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_object_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return BASE_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return BASE_SELECTED; - case ACHANNEL_SETTING_EXPAND: /* expanded */ - *neg = 1; - return OB_ADS_COLLAPSED; + case ACHANNEL_SETTING_EXPAND: /* expanded */ + *neg = 1; + return OB_ADS_COLLAPSED; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return ADT_CURVES_ALWAYS_VISIBLE; + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return ADT_CURVES_ALWAYS_VISIBLE; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_object_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Base *base = (Base *)ale->data; - Object *ob = base->object; + Base *base = (Base *)ale->data; + Object *ob = base->object; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return GET_ACF_FLAG_PTR(base->flag, type); + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return GET_ACF_FLAG_PTR(base->flag, type); - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(ob->nlaflag, type); // xxx + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(ob->nlaflag, type); // xxx - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - if (ob->adt) - return GET_ACF_FLAG_PTR(ob->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + if (ob->adt) + return GET_ACF_FLAG_PTR(ob->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* object type define */ -static bAnimChannelType ACF_OBJECT = -{ - "Object", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_root_color, /* backdrop color */ - acf_generic_root_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - NULL, /* offset */ - - acf_object_name, /* name */ - acf_object_name_prop, /* name prop */ - acf_object_icon, /* icon */ - - acf_object_setting_valid, /* has setting */ - acf_object_setting_flag, /* flag for setting */ - acf_object_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_OBJECT = { + "Object", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_root_color, /* backdrop color */ + acf_generic_root_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + NULL, /* offset */ + + acf_object_name, /* name */ + acf_object_name_prop, /* name prop */ + acf_object_icon, /* icon */ + + acf_object_setting_valid, /* has setting */ + acf_object_setting_flag, /* flag for setting */ + acf_object_setting_ptr, /* pointer for setting */ }; /* Group ------------------------------------------- */ @@ -808,158 +834,161 @@ static bAnimChannelType ACF_OBJECT = /* get backdrop color for group widget */ static void acf_group_color(bAnimContext *ac, bAnimListElem *ale, float r_color[3]) { - bActionGroup *agrp = (bActionGroup *)ale->data; - bool showGroupColors = acf_show_channel_colors(ac); + bActionGroup *agrp = (bActionGroup *)ale->data; + bool showGroupColors = acf_show_channel_colors(ac); - if (showGroupColors && agrp->customCol) { - unsigned char cp[3]; + if (showGroupColors && agrp->customCol) { + unsigned char cp[3]; - /* highlight only for active */ - if (ale->flag & AGRP_ACTIVE) - copy_v3_v3_char((char *)cp, agrp->cs.select); - else - copy_v3_v3_char((char *)cp, agrp->cs.solid); + /* highlight only for active */ + if (ale->flag & AGRP_ACTIVE) + copy_v3_v3_char((char *)cp, agrp->cs.select); + else + copy_v3_v3_char((char *)cp, agrp->cs.solid); - /* copy the colors over, transforming from bytes to floats */ - rgb_uchar_to_float(r_color, cp); - } - else { - /* highlight only for active */ - if (ale->flag & AGRP_ACTIVE) - UI_GetThemeColor3fv(TH_GROUP_ACTIVE, r_color); - else - UI_GetThemeColor3fv(TH_GROUP, r_color); - } + /* copy the colors over, transforming from bytes to floats */ + rgb_uchar_to_float(r_color, cp); + } + else { + /* highlight only for active */ + if (ale->flag & AGRP_ACTIVE) + UI_GetThemeColor3fv(TH_GROUP_ACTIVE, r_color); + else + UI_GetThemeColor3fv(TH_GROUP, r_color); + } } /* backdrop for group widget */ static void acf_group_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - short expanded = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_EXPAND) != 0; - short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; - float color[3]; + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + short expanded = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_EXPAND) != 0; + short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; + float color[3]; - /* set backdrop drawing color */ - acf->get_backdrop_color(ac, ale, color); + /* set backdrop drawing color */ + acf->get_backdrop_color(ac, ale, color); - /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */ - UI_draw_roundbox_corner_set(expanded ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT)); - UI_draw_roundbox_3fvAlpha(true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f); + /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */ + UI_draw_roundbox_corner_set(expanded ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT)); + UI_draw_roundbox_3fvAlpha( + true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 8, color, 1.0f); } /* name for group entries */ static void acf_group_name(bAnimListElem *ale, char *name) { - bActionGroup *agrp = (bActionGroup *)ale->data; + bActionGroup *agrp = (bActionGroup *)ale->data; - /* just copy the name... */ - if (agrp && name) - BLI_strncpy(name, agrp->name, ANIM_CHAN_NAME_SIZE); + /* just copy the name... */ + if (agrp && name) + BLI_strncpy(name, agrp->name, ANIM_CHAN_NAME_SIZE); } /* name property for group entries */ static bool acf_group_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - RNA_pointer_create(ale->id, &RNA_ActionGroup, ale->data, ptr); - *prop = RNA_struct_name_property(ptr->type); + RNA_pointer_create(ale->id, &RNA_ActionGroup, ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); + return (*prop != NULL); } /* check if some setting exists for this channel */ -static bool acf_group_setting_valid(bAnimContext *ac, bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_group_setting_valid(bAnimContext *ac, + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - /* for now, all settings are supported, though some are only conditionally */ - switch (setting) { - /* unsupported */ - case ACHANNEL_SETTING_SOLO: /* Only available in NLA Editor for tracks */ - return false; + /* for now, all settings are supported, though some are only conditionally */ + switch (setting) { + /* unsupported */ + case ACHANNEL_SETTING_SOLO: /* Only available in NLA Editor for tracks */ + return false; - /* conditionally supported */ - case ACHANNEL_SETTING_VISIBLE: /* Only available in Graph Editor */ - return (ac->spacetype == SPACE_GRAPH); + /* conditionally supported */ + case ACHANNEL_SETTING_VISIBLE: /* Only available in Graph Editor */ + return (ac->spacetype == SPACE_GRAPH); - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return (ac->spacetype == SPACE_GRAPH); + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return (ac->spacetype == SPACE_GRAPH); - default: /* always supported */ - return true; - } + default: /* always supported */ + return true; + } } /* get the appropriate flag(s) for the setting when it is valid */ static int acf_group_setting_flag(bAnimContext *ac, eAnimChannel_Settings setting, bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return AGRP_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return AGRP_SELECTED; - case ACHANNEL_SETTING_EXPAND: /* expanded */ - { - /* NOTE: Graph Editor uses a different flag to everywhere else for this, - * allowing different collapsing of groups there, since sharing the flag - * proved to be a hazard for workflows... - */ - return (ac->spacetype == SPACE_GRAPH) ? - AGRP_EXPANDED_G : /* Graph Editor case */ - AGRP_EXPANDED; /* DopeSheet and elsewhere */ - } + case ACHANNEL_SETTING_EXPAND: /* expanded */ + { + /* NOTE: Graph Editor uses a different flag to everywhere else for this, + * allowing different collapsing of groups there, since sharing the flag + * proved to be a hazard for workflows... + */ + return (ac->spacetype == SPACE_GRAPH) ? AGRP_EXPANDED_G : /* Graph Editor case */ + AGRP_EXPANDED; /* DopeSheet and elsewhere */ + } - case ACHANNEL_SETTING_MUTE: /* muted */ - return AGRP_MUTED; + case ACHANNEL_SETTING_MUTE: /* muted */ + return AGRP_MUTED; - case ACHANNEL_SETTING_MOD_OFF: /* muted */ - *neg = 1; - return AGRP_MODIFIERS_OFF; + case ACHANNEL_SETTING_MOD_OFF: /* muted */ + *neg = 1; + return AGRP_MODIFIERS_OFF; - case ACHANNEL_SETTING_PROTECT: /* protected */ - return AGRP_PROTECTED; + case ACHANNEL_SETTING_PROTECT: /* protected */ + return AGRP_PROTECTED; - case ACHANNEL_SETTING_VISIBLE: /* visibility - graph editor */ - *neg = 1; - return AGRP_NOTVISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visibility - graph editor */ + *neg = 1; + return AGRP_NOTVISIBLE; - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return ADT_CURVES_ALWAYS_VISIBLE; + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return ADT_CURVES_ALWAYS_VISIBLE; - default: - /* this shouldn't happen */ - return 0; - } + default: + /* this shouldn't happen */ + return 0; + } } /* get pointer to the setting */ -static void *acf_group_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_group_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - bActionGroup *agrp = (bActionGroup *)ale->data; + bActionGroup *agrp = (bActionGroup *)ale->data; - /* all flags are just in agrp->flag for now... */ - return GET_ACF_FLAG_PTR(agrp->flag, type); + /* all flags are just in agrp->flag for now... */ + return GET_ACF_FLAG_PTR(agrp->flag, type); } /* group type define */ -static bAnimChannelType ACF_GROUP = -{ - "Group", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_group_color, /* backdrop color */ - acf_group_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - acf_generic_group_offset, /* offset */ - - acf_group_name, /* name */ - acf_group_name_prop, /* name prop */ - NULL, /* icon */ - - acf_group_setting_valid, /* has setting */ - acf_group_setting_flag, /* flag for setting */ - acf_group_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_GROUP = { + "Group", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_group_color, /* backdrop color */ + acf_group_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_group_name, /* name */ + acf_group_name_prop, /* name prop */ + NULL, /* icon */ + + acf_group_setting_valid, /* has setting */ + acf_group_setting_flag, /* flag for setting */ + acf_group_setting_ptr, /* pointer for setting */ }; /* F-Curve ------------------------------------------- */ @@ -967,258 +996,272 @@ static bAnimChannelType ACF_GROUP = /* name for fcurve entries */ static void acf_fcurve_name(bAnimListElem *ale, char *name) { - getname_anim_fcurve(name, ale->id, ale->data); + getname_anim_fcurve(name, ale->id, ale->data); } /* "name" property for fcurve entries */ static bool acf_fcurve_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - FCurve *fcu = (FCurve *)ale->data; + FCurve *fcu = (FCurve *)ale->data; - /* Ctrl-Click Usability Convenience Hack: - * For disabled F-Curves, allow access to the RNA Path - * as our "name" so that user can perform quick fixes - */ - if (fcu->flag & FCURVE_DISABLED) { - RNA_pointer_create(ale->id, &RNA_FCurve, ale->data, ptr); - *prop = RNA_struct_find_property(ptr, "data_path"); - } - else { - /* for "normal" F-Curves - no editable name, but *prop may not be set properly yet... */ - *prop = NULL; - } + /* Ctrl-Click Usability Convenience Hack: + * For disabled F-Curves, allow access to the RNA Path + * as our "name" so that user can perform quick fixes + */ + if (fcu->flag & FCURVE_DISABLED) { + RNA_pointer_create(ale->id, &RNA_FCurve, ale->data, ptr); + *prop = RNA_struct_find_property(ptr, "data_path"); + } + else { + /* for "normal" F-Curves - no editable name, but *prop may not be set properly yet... */ + *prop = NULL; + } - return (*prop != NULL); + return (*prop != NULL); } /* check if some setting exists for this channel */ -static bool acf_fcurve_setting_valid(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting) +static bool acf_fcurve_setting_valid(bAnimContext *ac, + bAnimListElem *ale, + eAnimChannel_Settings setting) { - FCurve *fcu = (FCurve *)ale->data; + FCurve *fcu = (FCurve *)ale->data; - switch (setting) { - /* unsupported */ - case ACHANNEL_SETTING_SOLO: /* Solo Flag is only for NLA */ - case ACHANNEL_SETTING_EXPAND: /* F-Curves are not containers */ - case ACHANNEL_SETTING_PINNED: /* This is only for NLA Actions */ - return false; + switch (setting) { + /* unsupported */ + case ACHANNEL_SETTING_SOLO: /* Solo Flag is only for NLA */ + case ACHANNEL_SETTING_EXPAND: /* F-Curves are not containers */ + case ACHANNEL_SETTING_PINNED: /* This is only for NLA Actions */ + return false; - /* conditionally available */ - case ACHANNEL_SETTING_PROTECT: /* Protection is only valid when there's keyframes */ - if (fcu->bezt) - return true; - else - return false; // NOTE: in this special case, we need to draw ICON_ZOOMOUT + /* conditionally available */ + case ACHANNEL_SETTING_PROTECT: /* Protection is only valid when there's keyframes */ + if (fcu->bezt) + return true; + else + return false; // NOTE: in this special case, we need to draw ICON_ZOOMOUT - case ACHANNEL_SETTING_VISIBLE: /* Only available in Graph Editor */ - return (ac->spacetype == SPACE_GRAPH); + case ACHANNEL_SETTING_VISIBLE: /* Only available in Graph Editor */ + return (ac->spacetype == SPACE_GRAPH); - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return false; + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return false; - /* always available */ - default: - return true; - } + /* always available */ + default: + return true; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_fcurve_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_fcurve_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return FCURVE_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return FCURVE_SELECTED; - case ACHANNEL_SETTING_MUTE: /* muted */ - return FCURVE_MUTED; + case ACHANNEL_SETTING_MUTE: /* muted */ + return FCURVE_MUTED; - case ACHANNEL_SETTING_PROTECT: /* protected */ - return FCURVE_PROTECTED; + case ACHANNEL_SETTING_PROTECT: /* protected */ + return FCURVE_PROTECTED; - case ACHANNEL_SETTING_VISIBLE: /* visibility - graph editor */ - return FCURVE_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visibility - graph editor */ + return FCURVE_VISIBLE; - case ACHANNEL_SETTING_MOD_OFF: - *neg = 1; - return FCURVE_MOD_OFF; + case ACHANNEL_SETTING_MOD_OFF: + *neg = 1; + return FCURVE_MOD_OFF; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_fcurve_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_fcurve_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - FCurve *fcu = (FCurve *)ale->data; + FCurve *fcu = (FCurve *)ale->data; - /* all flags are just in agrp->flag for now... */ - return GET_ACF_FLAG_PTR(fcu->flag, type); + /* all flags are just in agrp->flag for now... */ + return GET_ACF_FLAG_PTR(fcu->flag, type); } /* fcurve type define */ -static bAnimChannelType ACF_FCURVE = -{ - "F-Curve", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_generic_channel_color, /* backdrop color */ - acf_generic_channel_backdrop, /* backdrop */ - acf_generic_indention_flexible, /* indent level */ // xxx rename this to f-curves only? - acf_generic_group_offset, /* offset */ - - acf_fcurve_name, /* name */ - acf_fcurve_name_prop, /* name prop */ - NULL, /* icon */ - - acf_fcurve_setting_valid, /* has setting */ - acf_fcurve_setting_flag, /* flag for setting */ - acf_fcurve_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_FCURVE = { + "F-Curve", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_generic_channel_color, /* backdrop color */ + acf_generic_channel_backdrop, /* backdrop */ + acf_generic_indention_flexible, + /* indent level */ // xxx rename this to f-curves only? + acf_generic_group_offset, /* offset */ + + acf_fcurve_name, /* name */ + acf_fcurve_name_prop, /* name prop */ + NULL, /* icon */ + + acf_fcurve_setting_valid, /* has setting */ + acf_fcurve_setting_flag, /* flag for setting */ + acf_fcurve_setting_ptr, /* pointer for setting */ }; /* NLA Control FCurves Expander ----------------------- */ /* get backdrop color for nla controls widget */ -static void acf_nla_controls_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) +static void acf_nla_controls_color(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + float r_color[3]) { - // TODO: give this its own theme setting? - UI_GetThemeColorShade3fv(TH_GROUP, 55, r_color); + // TODO: give this its own theme setting? + UI_GetThemeColorShade3fv(TH_GROUP, 55, r_color); } /* backdrop for nla controls expander widget */ -static void acf_nla_controls_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) +static void acf_nla_controls_backdrop(bAnimContext *ac, + bAnimListElem *ale, + float yminc, + float ymaxc) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - short expanded = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_EXPAND) != 0; - short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; - float color[3]; + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + short expanded = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_EXPAND) != 0; + short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; + float color[3]; - /* set backdrop drawing color */ - acf->get_backdrop_color(ac, ale, color); + /* set backdrop drawing color */ + acf->get_backdrop_color(ac, ale, color); - /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */ - UI_draw_roundbox_corner_set(expanded ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT)); - UI_draw_roundbox_3fvAlpha(true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 5, color, 1.0f); + /* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */ + UI_draw_roundbox_corner_set(expanded ? UI_CNR_TOP_LEFT : (UI_CNR_TOP_LEFT | UI_CNR_BOTTOM_LEFT)); + UI_draw_roundbox_3fvAlpha( + true, offset, yminc, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc, 5, color, 1.0f); } /* name for nla controls expander entries */ static void acf_nla_controls_name(bAnimListElem *UNUSED(ale), char *name) { - BLI_strncpy(name, IFACE_("NLA Strip Controls"), ANIM_CHAN_NAME_SIZE); + BLI_strncpy(name, IFACE_("NLA Strip Controls"), ANIM_CHAN_NAME_SIZE); } /* check if some setting exists for this channel */ -static bool acf_nla_controls_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_nla_controls_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - /* for now, all settings are supported, though some are only conditionally */ - switch (setting) { - /* supported */ - case ACHANNEL_SETTING_EXPAND: - return true; + /* for now, all settings are supported, though some are only conditionally */ + switch (setting) { + /* supported */ + case ACHANNEL_SETTING_EXPAND: + return true; - // TODO: selected? + // TODO: selected? - default: /* unsupported */ - return false; - } + default: /* unsupported */ + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_nla_controls_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_nla_controls_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - *neg = true; - return ADT_NLA_SKEYS_COLLAPSED; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + *neg = true; + return ADT_NLA_SKEYS_COLLAPSED; - default: - /* this shouldn't happen */ - return 0; - } + default: + /* this shouldn't happen */ + return 0; + } } /* get pointer to the setting */ -static void *acf_nla_controls_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_nla_controls_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - AnimData *adt = (AnimData *)ale->data; + AnimData *adt = (AnimData *)ale->data; - /* all flags are just in adt->flag for now... */ - return GET_ACF_FLAG_PTR(adt->flag, type); + /* all flags are just in adt->flag for now... */ + return GET_ACF_FLAG_PTR(adt->flag, type); } static int acf_nla_controls_icon(bAnimListElem *UNUSED(ale)) { - return ICON_NLA; + return ICON_NLA; } /* NLA Control FCurves Expander type define */ -static bAnimChannelType ACF_NLACONTROLS = -{ - "NLA Controls Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_nla_controls_color, /* backdrop color */ - acf_nla_controls_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - acf_generic_group_offset, /* offset */ - - acf_nla_controls_name, /* name */ - NULL, /* name prop */ - acf_nla_controls_icon, /* icon */ - - acf_nla_controls_setting_valid, /* has setting */ - acf_nla_controls_setting_flag, /* flag for setting */ - acf_nla_controls_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_NLACONTROLS = { + "NLA Controls Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_nla_controls_color, /* backdrop color */ + acf_nla_controls_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_nla_controls_name, /* name */ + NULL, /* name prop */ + acf_nla_controls_icon, /* icon */ + + acf_nla_controls_setting_valid, /* has setting */ + acf_nla_controls_setting_flag, /* flag for setting */ + acf_nla_controls_setting_ptr, /* pointer for setting */ }; - /* NLA Control F-Curve -------------------------------- */ /* name for nla control fcurve entries */ static void acf_nla_curve_name(bAnimListElem *ale, char *name) { - NlaStrip *strip = ale->owner; - FCurve *fcu = ale->data; - PropertyRNA *prop; + NlaStrip *strip = ale->owner; + FCurve *fcu = ale->data; + PropertyRNA *prop; - /* try to get RNA property that this shortened path (relative to the strip) refers to */ - prop = RNA_struct_type_find_property(&RNA_NlaStrip, fcu->rna_path); - if (prop) { - /* "name" of this strip displays the UI identifier + the name of the NlaStrip */ - BLI_snprintf(name, 256, "%s (%s)", RNA_property_ui_name(prop), strip->name); - } - else { - /* unknown property... */ - BLI_snprintf(name, 256, "%s[%d]", fcu->rna_path, fcu->array_index); - } + /* try to get RNA property that this shortened path (relative to the strip) refers to */ + prop = RNA_struct_type_find_property(&RNA_NlaStrip, fcu->rna_path); + if (prop) { + /* "name" of this strip displays the UI identifier + the name of the NlaStrip */ + BLI_snprintf(name, 256, "%s (%s)", RNA_property_ui_name(prop), strip->name); + } + else { + /* unknown property... */ + BLI_snprintf(name, 256, "%s[%d]", fcu->rna_path, fcu->array_index); + } } - /* NLA Control F-Curve type define */ -static bAnimChannelType ACF_NLACURVE = -{ - "NLA Control F-Curve", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_generic_channel_color, /* backdrop color */ - acf_generic_channel_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_group_offset, /* offset */ - - acf_nla_curve_name, /* name */ - acf_fcurve_name_prop, /* name prop */ - NULL, /* icon */ - - acf_fcurve_setting_valid, /* has setting */ - acf_fcurve_setting_flag, /* flag for setting */ - acf_fcurve_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_NLACURVE = { + "NLA Control F-Curve", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_generic_channel_color, /* backdrop color */ + acf_generic_channel_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_nla_curve_name, /* name */ + acf_fcurve_name_prop, /* name prop */ + NULL, /* icon */ + + acf_fcurve_setting_valid, /* has setting */ + acf_fcurve_setting_flag, /* flag for setting */ + acf_fcurve_setting_ptr, /* pointer for setting */ }; /* Object Action Expander ------------------------------------------- */ @@ -1226,84 +1269,89 @@ static bAnimChannelType ACF_NLACURVE = // TODO: just get this from RNA? static int acf_fillactd_icon(bAnimListElem *UNUSED(ale)) { - return ICON_ACTION; + return ICON_ACTION; } /* check if some setting exists for this channel */ -static bool acf_fillactd_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_fillactd_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* only select and expand supported */ - case ACHANNEL_SETTING_SELECT: - case ACHANNEL_SETTING_EXPAND: - return true; + switch (setting) { + /* only select and expand supported */ + case ACHANNEL_SETTING_SELECT: + case ACHANNEL_SETTING_EXPAND: + return true; - default: - return false; - } + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_fillactd_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_fillactd_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - case ACHANNEL_SETTING_EXPAND: /* expanded */ - *neg = true; - return ACT_COLLAPSED; + case ACHANNEL_SETTING_EXPAND: /* expanded */ + *neg = true; + return ACT_COLLAPSED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_fillactd_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_fillactd_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - bAction *act = (bAction *)ale->data; - AnimData *adt = ale->adt; + bAction *act = (bAction *)ale->data; + AnimData *adt = ale->adt; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - if (adt) { - return GET_ACF_FLAG_PTR(adt->flag, type); - } - return NULL; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + if (adt) { + return GET_ACF_FLAG_PTR(adt->flag, type); + } + return NULL; - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(act->flag, type); + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(act->flag, type); - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* object action expander type define */ -static bAnimChannelType ACF_FILLACTD = -{ - "Ob-Action Filler", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_fillactd_icon, /* icon */ - - acf_fillactd_setting_valid, /* has setting */ - acf_fillactd_setting_flag, /* flag for setting */ - acf_fillactd_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_FILLACTD = { + "Ob-Action Filler", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_fillactd_icon, /* icon */ + + acf_fillactd_setting_valid, /* has setting */ + acf_fillactd_setting_flag, /* flag for setting */ + acf_fillactd_setting_ptr, /* pointer for setting */ }; /* Drivers Expander ------------------------------------------- */ @@ -1311,157 +1359,162 @@ static bAnimChannelType ACF_FILLACTD = // TODO: just get this from RNA? static int acf_filldrivers_icon(bAnimListElem *UNUSED(ale)) { - return ICON_DRIVER; + return ICON_DRIVER; } static void acf_filldrivers_name(bAnimListElem *UNUSED(ale), char *name) { - BLI_strncpy(name, IFACE_("Drivers"), ANIM_CHAN_NAME_SIZE); + BLI_strncpy(name, IFACE_("Drivers"), ANIM_CHAN_NAME_SIZE); } /* check if some setting exists for this channel */ // TODO: this could be made more generic -static bool acf_filldrivers_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_filldrivers_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* only expand supported */ - case ACHANNEL_SETTING_EXPAND: - return true; + switch (setting) { + /* only expand supported */ + case ACHANNEL_SETTING_EXPAND: + return true; - default: - return false; - } + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_filldrivers_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_filldrivers_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - *neg = true; - return ADT_DRIVERS_COLLAPSED; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + *neg = true; + return ADT_DRIVERS_COLLAPSED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_filldrivers_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_filldrivers_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - AnimData *adt = (AnimData *)ale->data; + AnimData *adt = (AnimData *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(adt->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(adt->flag, type); - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* drivers expander type define */ -static bAnimChannelType ACF_FILLDRIVERS = -{ - "Drivers Filler", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_filldrivers_name, /* name */ - NULL, /* name prop */ - acf_filldrivers_icon, /* icon */ - - acf_filldrivers_setting_valid, /* has setting */ - acf_filldrivers_setting_flag, /* flag for setting */ - acf_filldrivers_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_FILLDRIVERS = { + "Drivers Filler", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_filldrivers_name, /* name */ + NULL, /* name prop */ + acf_filldrivers_icon, /* icon */ + + acf_filldrivers_setting_valid, /* has setting */ + acf_filldrivers_setting_flag, /* flag for setting */ + acf_filldrivers_setting_ptr, /* pointer for setting */ }; - /* Material Expander ------------------------------------------- */ // TODO: just get this from RNA? static int acf_dsmat_icon(bAnimListElem *UNUSED(ale)) { - return ICON_MATERIAL_DATA; + return ICON_MATERIAL_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsmat_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsmat_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return MA_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return MA_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dsmat_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Material *ma = (Material *)ale->data; + Material *ma = (Material *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(ma->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(ma->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (ma->adt) - return GET_ACF_FLAG_PTR(ma->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (ma->adt) + return GET_ACF_FLAG_PTR(ma->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* material expander type define */ -static bAnimChannelType ACF_DSMAT = -{ - "Material Data Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsmat_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsmat_setting_flag, /* flag for setting */ - acf_dsmat_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSMAT = { + "Material Data Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsmat_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsmat_setting_flag, /* flag for setting */ + acf_dsmat_setting_ptr, /* pointer for setting */ }; /* Light Expander ------------------------------------------- */ @@ -1469,76 +1522,79 @@ static bAnimChannelType ACF_DSMAT = // TODO: just get this from RNA? static int acf_dslight_icon(bAnimListElem *UNUSED(ale)) { - return ICON_LIGHT_DATA; + return ICON_LIGHT_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dslight_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dslight_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return LA_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return LA_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_dslight_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_dslight_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - Light *la = (Light *)ale->data; + Light *la = (Light *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(la->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(la->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (la->adt) - return GET_ACF_FLAG_PTR(la->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (la->adt) + return GET_ACF_FLAG_PTR(la->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* light expander type define */ -static bAnimChannelType ACF_DSLIGHT = -{ - "Light Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dslight_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dslight_setting_flag, /* flag for setting */ - acf_dslight_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSLIGHT = { + "Light Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dslight_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dslight_setting_flag, /* flag for setting */ + acf_dslight_setting_ptr, /* pointer for setting */ }; /* Texture Expander ------------------------------------------- */ @@ -1546,83 +1602,84 @@ static bAnimChannelType ACF_DSLIGHT = // TODO: just get this from RNA? static int acf_dstex_icon(bAnimListElem *UNUSED(ale)) { - return ICON_TEXTURE_DATA; + return ICON_TEXTURE_DATA; } /* offset for texture expanders */ // FIXME: soon to be obsolete? static short acf_dstex_offset(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale)) { - return 14; // XXX: simply include this in indention instead? + return 14; // XXX: simply include this in indention instead? } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dstex_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dstex_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return TEX_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return TEX_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dstex_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Tex *tex = (Tex *)ale->data; + Tex *tex = (Tex *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(tex->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(tex->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (tex->adt) - return GET_ACF_FLAG_PTR(tex->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (tex->adt) + return GET_ACF_FLAG_PTR(tex->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* texture expander type define */ -static bAnimChannelType ACF_DSTEX = -{ - "Texture Data Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_dstex_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_dstex_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dstex_setting_flag, /* flag for setting */ - acf_dstex_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSTEX = { + "Texture Data Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_dstex_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_dstex_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dstex_setting_flag, /* flag for setting */ + acf_dstex_setting_ptr, /* pointer for setting */ }; /* Camera Expander ------------------------------------------- */ @@ -1630,81 +1687,82 @@ static bAnimChannelType ACF_DSTEX = // TODO: just get this from RNA? static int acf_dscachefile_icon(bAnimListElem *ale) { - UNUSED_VARS(ale); - return ICON_FILE; + UNUSED_VARS(ale); + return ICON_FILE; } /* get the appropriate flag(s) for the setting when it is valid */ static int acf_dscachefile_setting_flag(bAnimContext *ac, eAnimChannel_Settings setting, bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return CACHEFILE_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return CACHEFILE_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } - UNUSED_VARS(ac); + UNUSED_VARS(ac); } /* get pointer to the setting */ -static void *acf_dscachefile_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_dscachefile_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - CacheFile *cache_file = (CacheFile *)ale->data; + CacheFile *cache_file = (CacheFile *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(cache_file->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(cache_file->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (cache_file->adt) { - return GET_ACF_FLAG_PTR(cache_file->adt->flag, type); - } + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (cache_file->adt) { + return GET_ACF_FLAG_PTR(cache_file->adt->flag, type); + } - return NULL; + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* CacheFile expander type define. */ -static bAnimChannelType ACF_DSCACHEFILE = -{ - "Cache File Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_dscachefile_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dscachefile_setting_flag, /* flag for setting */ - acf_dscachefile_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSCACHEFILE = { + "Cache File Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_dscachefile_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dscachefile_setting_flag, /* flag for setting */ + acf_dscachefile_setting_ptr, /* pointer for setting */ }; /* Camera Expander ------------------------------------------- */ @@ -1712,80 +1770,81 @@ static bAnimChannelType ACF_DSCACHEFILE = // TODO: just get this from RNA? static int acf_dscam_icon(bAnimListElem *UNUSED(ale)) { - return ICON_CAMERA_DATA; + return ICON_CAMERA_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dscam_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dscam_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return CAM_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return CAM_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - return ADT_CURVES_ALWAYS_VISIBLE; + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return ADT_CURVES_ALWAYS_VISIBLE; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dscam_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Camera *ca = (Camera *)ale->data; + Camera *ca = (Camera *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(ca->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(ca->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - if (ca->adt) - return GET_ACF_FLAG_PTR(ca->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + if (ca->adt) + return GET_ACF_FLAG_PTR(ca->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* camera expander type define */ -static bAnimChannelType ACF_DSCAM = -{ - "Camera Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_dscam_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dscam_setting_flag, /* flag for setting */ - acf_dscam_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSCAM = { + "Camera Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_dscam_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dscam_setting_flag, /* flag for setting */ + acf_dscam_setting_ptr, /* pointer for setting */ }; /* Curve Expander ------------------------------------------- */ @@ -1793,86 +1852,87 @@ static bAnimChannelType ACF_DSCAM = // TODO: just get this from RNA? static int acf_dscur_icon(bAnimListElem *ale) { - Curve *cu = (Curve *)ale->data; - short obtype = BKE_curve_type_get(cu); + Curve *cu = (Curve *)ale->data; + short obtype = BKE_curve_type_get(cu); - switch (obtype) { - case OB_FONT: - return ICON_FONT_DATA; - case OB_SURF: - return ICON_SURFACE_DATA; - default: - return ICON_CURVE_DATA; - } + switch (obtype) { + case OB_FONT: + return ICON_FONT_DATA; + case OB_SURF: + return ICON_SURFACE_DATA; + default: + return ICON_CURVE_DATA; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dscur_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dscur_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return CU_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return CU_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dscur_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Curve *cu = (Curve *)ale->data; + Curve *cu = (Curve *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(cu->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(cu->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (cu->adt) - return GET_ACF_FLAG_PTR(cu->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (cu->adt) + return GET_ACF_FLAG_PTR(cu->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* curve expander type define */ -static bAnimChannelType ACF_DSCUR = -{ - "Curve Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dscur_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dscur_setting_flag, /* flag for setting */ - acf_dscur_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSCUR = { + "Curve Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dscur_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dscur_setting_flag, /* flag for setting */ + acf_dscur_setting_ptr, /* pointer for setting */ }; /* Shape Key Expander ------------------------------------------- */ @@ -1880,76 +1940,77 @@ static bAnimChannelType ACF_DSCUR = // TODO: just get this from RNA? static int acf_dsskey_icon(bAnimListElem *UNUSED(ale)) { - return ICON_SHAPEKEY_DATA; + return ICON_SHAPEKEY_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsskey_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsskey_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return KEY_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return KEY_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dsskey_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Key *key = (Key *)ale->data; + Key *key = (Key *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(key->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(key->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (key->adt) - return GET_ACF_FLAG_PTR(key->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (key->adt) + return GET_ACF_FLAG_PTR(key->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* shapekey expander type define */ -static bAnimChannelType ACF_DSSKEY = -{ - "Shape Key Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsskey_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsskey_setting_flag, /* flag for setting */ - acf_dsskey_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSSKEY = { + "Shape Key Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsskey_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsskey_setting_flag, /* flag for setting */ + acf_dsskey_setting_ptr, /* pointer for setting */ }; /* World Expander ------------------------------------------- */ @@ -1957,76 +2018,77 @@ static bAnimChannelType ACF_DSSKEY = // TODO: just get this from RNA? static int acf_dswor_icon(bAnimListElem *UNUSED(ale)) { - return ICON_WORLD_DATA; + return ICON_WORLD_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dswor_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dswor_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return WO_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return WO_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dswor_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - World *wo = (World *)ale->data; + World *wo = (World *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(wo->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(wo->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (wo->adt) - return GET_ACF_FLAG_PTR(wo->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (wo->adt) + return GET_ACF_FLAG_PTR(wo->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* world expander type define */ -static bAnimChannelType ACF_DSWOR = -{ - "World Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_dswor_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dswor_setting_flag, /* flag for setting */ - acf_dswor_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSWOR = { + "World Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_dswor_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dswor_setting_flag, /* flag for setting */ + acf_dswor_setting_ptr, /* pointer for setting */ }; /* Particle Expander ------------------------------------------- */ @@ -2034,76 +2096,77 @@ static bAnimChannelType ACF_DSWOR = // TODO: just get this from RNA? static int acf_dspart_icon(bAnimListElem *UNUSED(ale)) { - return ICON_PARTICLE_DATA; + return ICON_PARTICLE_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dspart_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dspart_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return PART_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return PART_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dspart_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - ParticleSettings *part = (ParticleSettings *)ale->data; + ParticleSettings *part = (ParticleSettings *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(part->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(part->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (part->adt) - return GET_ACF_FLAG_PTR(part->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (part->adt) + return GET_ACF_FLAG_PTR(part->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* particle expander type define */ -static bAnimChannelType ACF_DSPART = -{ - "Particle Data Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dspart_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dspart_setting_flag, /* flag for setting */ - acf_dspart_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSPART = { + "Particle Data Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dspart_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dspart_setting_flag, /* flag for setting */ + acf_dspart_setting_ptr, /* pointer for setting */ }; /* MetaBall Expander ------------------------------------------- */ @@ -2111,76 +2174,79 @@ static bAnimChannelType ACF_DSPART = // TODO: just get this from RNA? static int acf_dsmball_icon(bAnimListElem *UNUSED(ale)) { - return ICON_META_DATA; + return ICON_META_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsmball_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsmball_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return MB_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return MB_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_dsmball_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_dsmball_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - MetaBall *mb = (MetaBall *)ale->data; + MetaBall *mb = (MetaBall *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(mb->flag2, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(mb->flag2, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (mb->adt) - return GET_ACF_FLAG_PTR(mb->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (mb->adt) + return GET_ACF_FLAG_PTR(mb->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* metaball expander type define */ -static bAnimChannelType ACF_DSMBALL = -{ - "Metaball Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsmball_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsmball_setting_flag, /* flag for setting */ - acf_dsmball_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSMBALL = { + "Metaball Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsmball_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsmball_setting_flag, /* flag for setting */ + acf_dsmball_setting_ptr, /* pointer for setting */ }; /* Armature Expander ------------------------------------------- */ @@ -2188,76 +2254,77 @@ static bAnimChannelType ACF_DSMBALL = // TODO: just get this from RNA? static int acf_dsarm_icon(bAnimListElem *UNUSED(ale)) { - return ICON_ARMATURE_DATA; + return ICON_ARMATURE_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsarm_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsarm_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return ARM_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return ARM_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dsarm_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - bArmature *arm = (bArmature *)ale->data; + bArmature *arm = (bArmature *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(arm->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(arm->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (arm->adt) - return GET_ACF_FLAG_PTR(arm->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (arm->adt) + return GET_ACF_FLAG_PTR(arm->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* metaball expander type define */ -static bAnimChannelType ACF_DSARM = -{ - "Armature Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsarm_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsarm_setting_flag, /* flag for setting */ - acf_dsarm_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSARM = { + "Armature Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsarm_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsarm_setting_flag, /* flag for setting */ + acf_dsarm_setting_ptr, /* pointer for setting */ }; /* NodeTree Expander ------------------------------------------- */ @@ -2265,87 +2332,90 @@ static bAnimChannelType ACF_DSARM = // TODO: just get this from RNA? static int acf_dsntree_icon(bAnimListElem *UNUSED(ale)) { - return ICON_NODETREE; + return ICON_NODETREE; } /* offset for nodetree expanders */ static short acf_dsntree_offset(bAnimContext *ac, bAnimListElem *ale) { - bNodeTree *ntree = (bNodeTree *)ale->data; - short offset = acf_generic_basic_offset(ac, ale); + bNodeTree *ntree = (bNodeTree *)ale->data; + short offset = acf_generic_basic_offset(ac, ale); - offset += acf_nodetree_rootType_offset(ntree); + offset += acf_nodetree_rootType_offset(ntree); - return offset; + return offset; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsntree_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsntree_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return NTREE_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return NTREE_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_dsntree_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_dsntree_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - bNodeTree *ntree = (bNodeTree *)ale->data; + bNodeTree *ntree = (bNodeTree *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(ntree->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(ntree->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (ntree->adt) - return GET_ACF_FLAG_PTR(ntree->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (ntree->adt) + return GET_ACF_FLAG_PTR(ntree->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* node tree expander type define */ -static bAnimChannelType ACF_DSNTREE = -{ - "Node Tree Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_dsntree_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsntree_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsntree_setting_flag, /* flag for setting */ - acf_dsntree_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSNTREE = { + "Node Tree Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_dsntree_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsntree_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsntree_setting_flag, /* flag for setting */ + acf_dsntree_setting_ptr, /* pointer for setting */ }; /* LineStyle Expander ------------------------------------------- */ @@ -2353,76 +2423,79 @@ static bAnimChannelType ACF_DSNTREE = /* TODO: just get this from RNA? */ static int acf_dslinestyle_icon(bAnimListElem *UNUSED(ale)) { - return ICON_LINE_DATA; + return ICON_LINE_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dslinestyle_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dslinestyle_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return LS_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return LS_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_dslinestyle_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_dslinestyle_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ale->data; + FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(linestyle->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(linestyle->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (linestyle->adt) - return GET_ACF_FLAG_PTR(linestyle->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (linestyle->adt) + return GET_ACF_FLAG_PTR(linestyle->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* node tree expander type define */ -static bAnimChannelType ACF_DSLINESTYLE = -{ - "Line Style Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop,/* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dslinestyle_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dslinestyle_setting_flag, /* flag for setting */ - acf_dslinestyle_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSLINESTYLE = { + "Line Style Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dslinestyle_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dslinestyle_setting_flag, /* flag for setting */ + acf_dslinestyle_setting_ptr, /* pointer for setting */ }; /* Mesh Expander ------------------------------------------- */ @@ -2430,76 +2503,78 @@ static bAnimChannelType ACF_DSLINESTYLE = // TODO: just get this from RNA? static int acf_dsmesh_icon(bAnimListElem *UNUSED(ale)) { - return ICON_MESH_DATA; + return ICON_MESH_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsmesh_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsmesh_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return ME_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return ME_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dsmesh_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Mesh *me = (Mesh *)ale->data; + Mesh *me = (Mesh *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(me->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(me->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (me->adt) - return GET_ACF_FLAG_PTR(me->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (me->adt) + return GET_ACF_FLAG_PTR(me->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* node tree expander type define */ -static bAnimChannelType ACF_DSMESH = -{ - "Mesh Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ // XXX this only works for compositing - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsmesh_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsmesh_setting_flag, /* flag for setting */ - acf_dsmesh_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSMESH = { + "Mesh Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, + /* indent level */ // XXX this only works for compositing + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsmesh_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsmesh_setting_flag, /* flag for setting */ + acf_dsmesh_setting_ptr, /* pointer for setting */ }; /* Lattice Expander ------------------------------------------- */ @@ -2507,76 +2582,78 @@ static bAnimChannelType ACF_DSMESH = // TODO: just get this from RNA? static int acf_dslat_icon(bAnimListElem *UNUSED(ale)) { - return ICON_LATTICE_DATA; + return ICON_LATTICE_DATA; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dslat_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dslat_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return LT_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return LT_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dslat_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Lattice *lt = (Lattice *)ale->data; + Lattice *lt = (Lattice *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(lt->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(lt->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (lt->adt) - return GET_ACF_FLAG_PTR(lt->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (lt->adt) + return GET_ACF_FLAG_PTR(lt->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* node tree expander type define */ -static bAnimChannelType ACF_DSLAT = -{ - "Lattice Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ // XXX this only works for compositing - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dslat_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dslat_setting_flag, /* flag for setting */ - acf_dslat_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSLAT = { + "Lattice Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, + /* indent level */ // XXX this only works for compositing + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dslat_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dslat_setting_flag, /* flag for setting */ + acf_dslat_setting_ptr, /* pointer for setting */ }; /* Speaker Expander ------------------------------------------- */ @@ -2584,76 +2661,77 @@ static bAnimChannelType ACF_DSLAT = // TODO: just get this from RNA? static int acf_dsspk_icon(bAnimListElem *UNUSED(ale)) { - return ICON_SPEAKER; + return ICON_SPEAKER; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsspk_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsspk_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return SPK_DS_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return SPK_DS_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ static void *acf_dsspk_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) { - Speaker *spk = (Speaker *)ale->data; + Speaker *spk = (Speaker *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(spk->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(spk->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (spk->adt) - return GET_ACF_FLAG_PTR(spk->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (spk->adt) + return GET_ACF_FLAG_PTR(spk->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* speaker expander type define */ -static bAnimChannelType ACF_DSSPK = -{ - "Speaker Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsspk_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsspk_setting_flag, /* flag for setting */ - acf_dsspk_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSSPK = { + "Speaker Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsspk_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsspk_setting_flag, /* flag for setting */ + acf_dsspk_setting_ptr, /* pointer for setting */ }; /* GPencil Expander ------------------------------------------- */ @@ -2661,76 +2739,79 @@ static bAnimChannelType ACF_DSSPK = // TODO: just get this from RNA? static int acf_dsgpencil_icon(bAnimListElem *UNUSED(ale)) { - return ICON_GREASEPENCIL; + return ICON_GREASEPENCIL; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsgpencil_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsgpencil_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GP_DATA_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GP_DATA_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_dsgpencil_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_dsgpencil_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - bGPdata *gpd = (bGPdata *)ale->data; + bGPdata *gpd = (bGPdata *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(gpd->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(gpd->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (gpd->adt) - return GET_ACF_FLAG_PTR(gpd->adt->flag, type); - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (gpd->adt) + return GET_ACF_FLAG_PTR(gpd->adt->flag, type); + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* grease pencil expander type define */ -static bAnimChannelType ACF_DSGPENCIL = -{ - "GPencil DS Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idblock_name_prop, /* name prop */ - acf_dsgpencil_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsgpencil_setting_flag, /* flag for setting */ - acf_dsgpencil_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSGPENCIL = { + "GPencil DS Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idblock_name_prop, /* name prop */ + acf_dsgpencil_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsgpencil_setting_flag, /* flag for setting */ + acf_dsgpencil_setting_ptr, /* pointer for setting */ }; /* World Expander ------------------------------------------- */ @@ -2738,77 +2819,80 @@ static bAnimChannelType ACF_DSGPENCIL = // TODO: just get this from RNA? static int acf_dsmclip_icon(bAnimListElem *UNUSED(ale)) { - return ICON_SEQUENCE; + return ICON_SEQUENCE; } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_dsmclip_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_dsmclip_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return MCLIP_DATA_EXPAND; + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return MCLIP_DATA_EXPAND; - case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ - return ADT_NLA_EVAL_OFF; + case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ + return ADT_NLA_EVAL_OFF; - case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ - *neg = true; - return ADT_CURVES_NOT_VISIBLE; + case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ + *neg = true; + return ADT_CURVES_NOT_VISIBLE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return ADT_UI_SELECTED; + case ACHANNEL_SETTING_SELECT: /* selected */ + return ADT_UI_SELECTED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_dsmclip_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_dsmclip_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - MovieClip *clip = (MovieClip *)ale->data; + MovieClip *clip = (MovieClip *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GET_ACF_FLAG_PTR(clip->flag, type); + switch (setting) { + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GET_ACF_FLAG_PTR(clip->flag, type); - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ - case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ - if (clip->adt != NULL) { - return GET_ACF_FLAG_PTR(clip->adt->flag, type); - } - return NULL; + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */ + case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + if (clip->adt != NULL) { + return GET_ACF_FLAG_PTR(clip->adt->flag, type); + } + return NULL; - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* world expander type define */ -static bAnimChannelType ACF_DSMCLIP = -{ - "Movieclip Expander", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_generic_dataexpand_color, /* backdrop color */ - acf_generic_dataexpand_backdrop, /* backdrop */ - acf_generic_indention_1, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_dsmclip_icon, /* icon */ - - acf_generic_dataexpand_setting_valid, /* has setting */ - acf_dsmclip_setting_flag, /* flag for setting */ - acf_dsmclip_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_DSMCLIP = { + "Movieclip Expander", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_generic_dataexpand_color, /* backdrop color */ + acf_generic_dataexpand_backdrop, /* backdrop */ + acf_generic_indention_1, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_dsmclip_icon, /* icon */ + + acf_generic_dataexpand_setting_valid, /* has setting */ + acf_dsmclip_setting_flag, /* flag for setting */ + acf_dsmclip_setting_ptr, /* pointer for setting */ }; /* ShapeKey Entry ------------------------------------------- */ @@ -2816,107 +2900,112 @@ static bAnimChannelType ACF_DSMCLIP = /* name for ShapeKey */ static void acf_shapekey_name(bAnimListElem *ale, char *name) { - KeyBlock *kb = (KeyBlock *)ale->data; + KeyBlock *kb = (KeyBlock *)ale->data; - /* just copy the name... */ - if (kb && name) { - /* if the KeyBlock had a name, use it, otherwise use the index */ - if (kb->name[0]) - BLI_strncpy(name, kb->name, ANIM_CHAN_NAME_SIZE); - else - BLI_snprintf(name, ANIM_CHAN_NAME_SIZE, IFACE_("Key %d"), ale->index); - } + /* just copy the name... */ + if (kb && name) { + /* if the KeyBlock had a name, use it, otherwise use the index */ + if (kb->name[0]) + BLI_strncpy(name, kb->name, ANIM_CHAN_NAME_SIZE); + else + BLI_snprintf(name, ANIM_CHAN_NAME_SIZE, IFACE_("Key %d"), ale->index); + } } /* name property for ShapeKey entries */ static bool acf_shapekey_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - KeyBlock *kb = (KeyBlock *)ale->data; + KeyBlock *kb = (KeyBlock *)ale->data; - /* if the KeyBlock had a name, use it, otherwise use the index */ - if (kb && kb->name[0]) { - RNA_pointer_create(ale->id, &RNA_ShapeKey, kb, ptr); - *prop = RNA_struct_name_property(ptr->type); + /* if the KeyBlock had a name, use it, otherwise use the index */ + if (kb && kb->name[0]) { + RNA_pointer_create(ale->id, &RNA_ShapeKey, kb, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); - } + return (*prop != NULL); + } - return false; + return false; } /* check if some setting exists for this channel */ -static bool acf_shapekey_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_shapekey_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted */ - case ACHANNEL_SETTING_PROTECT: /* protected */ - return true; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted */ + case ACHANNEL_SETTING_PROTECT: /* protected */ + return true; - /* nothing else is supported */ - default: - return false; - } + /* nothing else is supported */ + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_shapekey_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_shapekey_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_MUTE: /* mute */ - return KEYBLOCK_MUTE; + switch (setting) { + case ACHANNEL_SETTING_MUTE: /* mute */ + return KEYBLOCK_MUTE; - case ACHANNEL_SETTING_SELECT: /* selected */ - return KEYBLOCK_SEL; + case ACHANNEL_SETTING_SELECT: /* selected */ + return KEYBLOCK_SEL; - case ACHANNEL_SETTING_PROTECT: /* locked */ - return KEYBLOCK_LOCKED; + case ACHANNEL_SETTING_PROTECT: /* locked */ + return KEYBLOCK_LOCKED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_shapekey_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings setting, short *type) +static void *acf_shapekey_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings setting, + short *type) { - KeyBlock *kb = (KeyBlock *)ale->data; + KeyBlock *kb = (KeyBlock *)ale->data; - /* clear extra return data first */ - *type = 0; + /* clear extra return data first */ + *type = 0; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - case ACHANNEL_SETTING_MUTE: /* muted */ - case ACHANNEL_SETTING_PROTECT: /* protected */ - return GET_ACF_FLAG_PTR(kb->flag, type); + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + case ACHANNEL_SETTING_MUTE: /* muted */ + case ACHANNEL_SETTING_PROTECT: /* protected */ + return GET_ACF_FLAG_PTR(kb->flag, type); - default: /* unsupported */ - return NULL; - } + default: /* unsupported */ + return NULL; + } } /* shapekey expander type define */ -static bAnimChannelType ACF_SHAPEKEY = -{ - "Shape Key", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_generic_channel_color, /* backdrop color */ - acf_generic_channel_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - acf_generic_basic_offset, /* offset */ - - acf_shapekey_name, /* name */ - acf_shapekey_name_prop, /* name prop */ - NULL, /* icon */ - - acf_shapekey_setting_valid, /* has setting */ - acf_shapekey_setting_flag, /* flag for setting */ - acf_shapekey_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_SHAPEKEY = { + "Shape Key", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_generic_channel_color, /* backdrop color */ + acf_generic_channel_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + acf_generic_basic_offset, /* offset */ + + acf_shapekey_name, /* name */ + acf_shapekey_name_prop, /* name prop */ + NULL, /* icon */ + + acf_shapekey_setting_valid, /* has setting */ + acf_shapekey_setting_flag, /* flag for setting */ + acf_shapekey_setting_ptr, /* pointer for setting */ }; /* GPencil Datablock ------------------------------------------- */ @@ -2924,76 +3013,79 @@ static bAnimChannelType ACF_SHAPEKEY = /* get backdrop color for gpencil datablock widget */ static void acf_gpd_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) { - /* these are ID-blocks, but not exactly standalone... */ - UI_GetThemeColorShade3fv(TH_DOPESHEET_CHANNELSUBOB, 20, r_color); + /* these are ID-blocks, but not exactly standalone... */ + UI_GetThemeColorShade3fv(TH_DOPESHEET_CHANNELSUBOB, 20, r_color); } // TODO: just get this from RNA? static int acf_gpd_icon(bAnimListElem *UNUSED(ale)) { - return ICON_GREASEPENCIL; + return ICON_GREASEPENCIL; } /* check if some setting exists for this channel */ -static bool acf_gpd_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_gpd_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* only select and expand supported */ - case ACHANNEL_SETTING_SELECT: - case ACHANNEL_SETTING_EXPAND: - return true; + switch (setting) { + /* only select and expand supported */ + case ACHANNEL_SETTING_SELECT: + case ACHANNEL_SETTING_EXPAND: + return true; - default: - return false; - } + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ static int acf_gpd_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return AGRP_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return AGRP_SELECTED; - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return GP_DATA_EXPAND; + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return GP_DATA_EXPAND; - default: - /* these shouldn't happen */ - return 0; - } + default: + /* these shouldn't happen */ + return 0; + } } /* get pointer to the setting */ -static void *acf_gpd_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_gpd_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - bGPdata *gpd = (bGPdata *)ale->data; + bGPdata *gpd = (bGPdata *)ale->data; - /* all flags are just in gpd->flag for now... */ - return GET_ACF_FLAG_PTR(gpd->flag, type); + /* all flags are just in gpd->flag for now... */ + return GET_ACF_FLAG_PTR(gpd->flag, type); } /* gpencil datablock type define */ -static bAnimChannelType ACF_GPD = -{ - "GPencil Datablock", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_gpd_color, /* backdrop color */ - acf_group_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - acf_generic_group_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_gpd_icon, /* icon */ - - acf_gpd_setting_valid, /* has setting */ - acf_gpd_setting_flag, /* flag for setting */ - acf_gpd_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_GPD = { + "GPencil Datablock", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_gpd_color, /* backdrop color */ + acf_group_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_gpd_icon, /* icon */ + + acf_gpd_setting_valid, /* has setting */ + acf_gpd_setting_flag, /* flag for setting */ + acf_gpd_setting_ptr, /* pointer for setting */ }; /* GPencil Layer ------------------------------------------- */ @@ -3001,170 +3093,177 @@ static bAnimChannelType ACF_GPD = /* name for grease pencil layer entries */ static void acf_gpl_name(bAnimListElem *ale, char *name) { - bGPDlayer *gpl = (bGPDlayer *)ale->data; + bGPDlayer *gpl = (bGPDlayer *)ale->data; - if (gpl && name) - BLI_strncpy(name, gpl->info, ANIM_CHAN_NAME_SIZE); + if (gpl && name) + BLI_strncpy(name, gpl->info, ANIM_CHAN_NAME_SIZE); } /* name property for grease pencil layer entries */ static bool acf_gpl_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - if (ale->data) { - RNA_pointer_create(ale->id, &RNA_GPencilLayer, ale->data, ptr); - *prop = RNA_struct_name_property(ptr->type); + if (ale->data) { + RNA_pointer_create(ale->id, &RNA_GPencilLayer, ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); - } + return (*prop != NULL); + } - return false; + return false; } /* check if some setting exists for this channel */ -static bool acf_gpl_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_gpl_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* unsupported */ - case ACHANNEL_SETTING_EXPAND: /* gpencil layers are more like F-Curves than groups */ - case ACHANNEL_SETTING_SOLO: /* nla editor only */ - return false; + switch (setting) { + /* unsupported */ + case ACHANNEL_SETTING_EXPAND: /* gpencil layers are more like F-Curves than groups */ + case ACHANNEL_SETTING_SOLO: /* nla editor only */ + return false; - /* always available */ - default: - return true; - } + /* always available */ + default: + return true; + } } /* get the appropriate flag(s) for the setting when it is valid */ static int acf_gpl_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return GP_LAYER_SELECT; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return GP_LAYER_SELECT; - case ACHANNEL_SETTING_MUTE: /* animation muting - similar to frame lock... */ - return GP_LAYER_FRAMELOCK; + case ACHANNEL_SETTING_MUTE: /* animation muting - similar to frame lock... */ + return GP_LAYER_FRAMELOCK; - case ACHANNEL_SETTING_VISIBLE: /* visibility of the layers (NOT muting) */ - *neg = true; - return GP_LAYER_HIDE; + case ACHANNEL_SETTING_VISIBLE: /* visibility of the layers (NOT muting) */ + *neg = true; + return GP_LAYER_HIDE; - case ACHANNEL_SETTING_PROTECT: /* protected */ - return GP_LAYER_LOCKED; + case ACHANNEL_SETTING_PROTECT: /* protected */ + return GP_LAYER_LOCKED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_gpl_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_gpl_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - bGPDlayer *gpl = (bGPDlayer *)ale->data; + bGPDlayer *gpl = (bGPDlayer *)ale->data; - /* all flags are just in gpl->flag for now... */ - return GET_ACF_FLAG_PTR(gpl->flag, type); + /* all flags are just in gpl->flag for now... */ + return GET_ACF_FLAG_PTR(gpl->flag, type); } /* grease pencil layer type define */ -static bAnimChannelType ACF_GPL = -{ - "GPencil Layer", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_gpencil_channel_color, /* backdrop color */ - acf_generic_channel_backdrop, /* backdrop */ - acf_generic_indention_flexible, /* indent level */ - acf_generic_group_offset, /* offset */ - - acf_gpl_name, /* name */ - acf_gpl_name_prop, /* name prop */ - NULL, /* icon */ - - acf_gpl_setting_valid, /* has setting */ - acf_gpl_setting_flag, /* flag for setting */ - acf_gpl_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_GPL = { + "GPencil Layer", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_gpencil_channel_color, /* backdrop color */ + acf_generic_channel_backdrop, /* backdrop */ + acf_generic_indention_flexible, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_gpl_name, /* name */ + acf_gpl_name_prop, /* name prop */ + NULL, /* icon */ + + acf_gpl_setting_valid, /* has setting */ + acf_gpl_setting_flag, /* flag for setting */ + acf_gpl_setting_ptr, /* pointer for setting */ }; - /* Mask Datablock ------------------------------------------- */ /* get backdrop color for mask datablock widget */ static void acf_mask_color(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), float r_color[3]) { - /* these are ID-blocks, but not exactly standalone... */ - UI_GetThemeColorShade3fv(TH_DOPESHEET_CHANNELSUBOB, 20, r_color); + /* these are ID-blocks, but not exactly standalone... */ + UI_GetThemeColorShade3fv(TH_DOPESHEET_CHANNELSUBOB, 20, r_color); } // TODO: just get this from RNA? static int acf_mask_icon(bAnimListElem *UNUSED(ale)) { - return ICON_MOD_MASK; + return ICON_MOD_MASK; } /* check if some setting exists for this channel */ -static bool acf_mask_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_mask_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* only select and expand supported */ - case ACHANNEL_SETTING_SELECT: - case ACHANNEL_SETTING_EXPAND: - return true; + switch (setting) { + /* only select and expand supported */ + case ACHANNEL_SETTING_SELECT: + case ACHANNEL_SETTING_EXPAND: + return true; - default: - return false; - } + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_mask_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_mask_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return AGRP_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return AGRP_SELECTED; - case ACHANNEL_SETTING_EXPAND: /* expanded */ - return MASK_ANIMF_EXPAND; + case ACHANNEL_SETTING_EXPAND: /* expanded */ + return MASK_ANIMF_EXPAND; - default: - /* this shouldn't happen */ - return 0; - } + default: + /* this shouldn't happen */ + return 0; + } } /* get pointer to the setting */ -static void *acf_mask_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_mask_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - Mask *mask = (Mask *)ale->data; + Mask *mask = (Mask *)ale->data; - /* all flags are just in mask->flag for now... */ - return GET_ACF_FLAG_PTR(mask->flag, type); + /* all flags are just in mask->flag for now... */ + return GET_ACF_FLAG_PTR(mask->flag, type); } /* mask datablock type define */ -static bAnimChannelType ACF_MASKDATA = -{ - "Mask Datablock", /* type name */ - ACHANNEL_ROLE_EXPANDER, /* role */ - - acf_mask_color, /* backdrop color */ - acf_group_backdrop, /* backdrop */ - acf_generic_indention_0, /* indent level */ - acf_generic_group_offset, /* offset */ - - acf_generic_idblock_name, /* name */ - acf_generic_idfill_name_prop, /* name prop */ - acf_mask_icon, /* icon */ - - acf_mask_setting_valid, /* has setting */ - acf_mask_setting_flag, /* flag for setting */ - acf_mask_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_MASKDATA = { + "Mask Datablock", /* type name */ + ACHANNEL_ROLE_EXPANDER, /* role */ + + acf_mask_color, /* backdrop color */ + acf_group_backdrop, /* backdrop */ + acf_generic_indention_0, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_generic_idblock_name, /* name */ + acf_generic_idfill_name_prop, /* name prop */ + acf_mask_icon, /* icon */ + + acf_mask_setting_valid, /* has setting */ + acf_mask_setting_flag, /* flag for setting */ + acf_mask_setting_ptr, /* pointer for setting */ }; /* Mask Layer ------------------------------------------- */ @@ -3172,86 +3271,91 @@ static bAnimChannelType ACF_MASKDATA = /* name for grease pencil layer entries */ static void acf_masklay_name(bAnimListElem *ale, char *name) { - MaskLayer *masklay = (MaskLayer *)ale->data; + MaskLayer *masklay = (MaskLayer *)ale->data; - if (masklay && name) - BLI_strncpy(name, masklay->name, ANIM_CHAN_NAME_SIZE); + if (masklay && name) + BLI_strncpy(name, masklay->name, ANIM_CHAN_NAME_SIZE); } /* name property for grease pencil layer entries */ static bool acf_masklay_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - if (ale->data) { - RNA_pointer_create(ale->id, &RNA_MaskLayer, ale->data, ptr); - *prop = RNA_struct_name_property(ptr->type); + if (ale->data) { + RNA_pointer_create(ale->id, &RNA_MaskLayer, ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); - } + return (*prop != NULL); + } - return false; + return false; } /* check if some setting exists for this channel */ -static bool acf_masklay_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *UNUSED(ale), eAnimChannel_Settings setting) +static bool acf_masklay_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *UNUSED(ale), + eAnimChannel_Settings setting) { - switch (setting) { - /* unsupported */ - case ACHANNEL_SETTING_EXPAND: /* mask layers are more like F-Curves than groups */ - case ACHANNEL_SETTING_VISIBLE: /* graph editor only */ - case ACHANNEL_SETTING_SOLO: /* nla editor only */ - return false; + switch (setting) { + /* unsupported */ + case ACHANNEL_SETTING_EXPAND: /* mask layers are more like F-Curves than groups */ + case ACHANNEL_SETTING_VISIBLE: /* graph editor only */ + case ACHANNEL_SETTING_SOLO: /* nla editor only */ + return false; - /* always available */ - default: - return true; - } + /* always available */ + default: + return true; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_masklay_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_masklay_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return MASK_LAYERFLAG_SELECT; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return MASK_LAYERFLAG_SELECT; - case ACHANNEL_SETTING_PROTECT: /* protected */ - return MASK_LAYERFLAG_LOCKED; + case ACHANNEL_SETTING_PROTECT: /* protected */ + return MASK_LAYERFLAG_LOCKED; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_masklay_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_masklay_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - MaskLayer *masklay = (MaskLayer *)ale->data; + MaskLayer *masklay = (MaskLayer *)ale->data; - /* all flags are just in masklay->flag for now... */ - return GET_ACF_FLAG_PTR(masklay->flag, type); + /* all flags are just in masklay->flag for now... */ + return GET_ACF_FLAG_PTR(masklay->flag, type); } /* grease pencil layer type define */ -static bAnimChannelType ACF_MASKLAYER = -{ - "Mask Layer", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_generic_channel_color, /* backdrop color */ - acf_generic_channel_backdrop, /* backdrop */ - acf_generic_indention_flexible, /* indent level */ - acf_generic_group_offset, /* offset */ - - acf_masklay_name, /* name */ - acf_masklay_name_prop, /* name prop */ - NULL, /* icon */ - - acf_masklay_setting_valid, /* has setting */ - acf_masklay_setting_flag, /* flag for setting */ - acf_masklay_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_MASKLAYER = { + "Mask Layer", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_generic_channel_color, /* backdrop color */ + acf_generic_channel_backdrop, /* backdrop */ + acf_generic_indention_flexible, /* indent level */ + acf_generic_group_offset, /* offset */ + + acf_masklay_name, /* name */ + acf_masklay_name_prop, /* name prop */ + NULL, /* icon */ + + acf_masklay_setting_valid, /* has setting */ + acf_masklay_setting_flag, /* flag for setting */ + acf_masklay_setting_ptr, /* pointer for setting */ }; /* NLA Track ----------------------------------------------- */ @@ -3259,138 +3363,143 @@ static bAnimChannelType ACF_MASKLAYER = /* get backdrop color for nla track channels */ static void acf_nlatrack_color(bAnimContext *UNUSED(ac), bAnimListElem *ale, float r_color[3]) { - NlaTrack *nlt = (NlaTrack *)ale->data; - AnimData *adt = ale->adt; - bool nonSolo = false; + NlaTrack *nlt = (NlaTrack *)ale->data; + AnimData *adt = ale->adt; + bool nonSolo = false; - /* is track enabled for solo drawing? */ - if ((adt) && (adt->flag & ADT_NLA_SOLO_TRACK)) { - if ((nlt->flag & NLATRACK_SOLO) == 0) { - /* tag for special non-solo handling */ - nonSolo = true; - } - } + /* is track enabled for solo drawing? */ + if ((adt) && (adt->flag & ADT_NLA_SOLO_TRACK)) { + if ((nlt->flag & NLATRACK_SOLO) == 0) { + /* tag for special non-solo handling */ + nonSolo = true; + } + } - /* set color for nla track */ - UI_GetThemeColorShade3fv(TH_HEADER, ((nonSolo == false) ? 20 : -20), r_color); + /* set color for nla track */ + UI_GetThemeColorShade3fv(TH_HEADER, ((nonSolo == false) ? 20 : -20), r_color); } /* name for nla track entries */ static void acf_nlatrack_name(bAnimListElem *ale, char *name) { - NlaTrack *nlt = (NlaTrack *)ale->data; + NlaTrack *nlt = (NlaTrack *)ale->data; - if (nlt && name) - BLI_strncpy(name, nlt->name, ANIM_CHAN_NAME_SIZE); + if (nlt && name) + BLI_strncpy(name, nlt->name, ANIM_CHAN_NAME_SIZE); } /* name property for nla track entries */ static bool acf_nlatrack_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - if (ale->data) { - RNA_pointer_create(ale->id, &RNA_NlaTrack, ale->data, ptr); - *prop = RNA_struct_name_property(ptr->type); + if (ale->data) { + RNA_pointer_create(ale->id, &RNA_NlaTrack, ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); - } + return (*prop != NULL); + } - return false; + return false; } /* check if some setting exists for this channel */ -static bool acf_nlatrack_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *ale, eAnimChannel_Settings setting) -{ - NlaTrack *nlt = (NlaTrack *)ale->data; - AnimData *adt = ale->adt; - - /* visibility of settings depends on various states... */ - switch (setting) { - /* always supported */ - case ACHANNEL_SETTING_SELECT: - case ACHANNEL_SETTING_SOLO: - return true; - - /* conditionally supported... */ - case ACHANNEL_SETTING_PROTECT: - case ACHANNEL_SETTING_MUTE: - /* if this track is active and we're tweaking it, don't draw these toggles */ - if (((nlt->flag & NLATRACK_ACTIVE) && (nlt->flag & NLATRACK_DISABLED)) == 0) { - /* is track enabled for solo drawing? */ - if ((adt) && (adt->flag & ADT_NLA_SOLO_TRACK)) { - if (nlt->flag & NLATRACK_SOLO) { - /* ok - we've got a solo track, and this is it */ - return true; - } - else { - /* not ok - we've got a solo track, but this isn't it, so make it more obvious */ - return false; - } - } - - - /* ok - no tracks are solo'd, and this isn't being tweaked */ - return true; - } - else { - /* unsupported - this track is being tweaked */ - return false; - } - - /* unsupported */ - default: - return false; - } +static bool acf_nlatrack_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *ale, + eAnimChannel_Settings setting) +{ + NlaTrack *nlt = (NlaTrack *)ale->data; + AnimData *adt = ale->adt; + + /* visibility of settings depends on various states... */ + switch (setting) { + /* always supported */ + case ACHANNEL_SETTING_SELECT: + case ACHANNEL_SETTING_SOLO: + return true; + + /* conditionally supported... */ + case ACHANNEL_SETTING_PROTECT: + case ACHANNEL_SETTING_MUTE: + /* if this track is active and we're tweaking it, don't draw these toggles */ + if (((nlt->flag & NLATRACK_ACTIVE) && (nlt->flag & NLATRACK_DISABLED)) == 0) { + /* is track enabled for solo drawing? */ + if ((adt) && (adt->flag & ADT_NLA_SOLO_TRACK)) { + if (nlt->flag & NLATRACK_SOLO) { + /* ok - we've got a solo track, and this is it */ + return true; + } + else { + /* not ok - we've got a solo track, but this isn't it, so make it more obvious */ + return false; + } + } + + /* ok - no tracks are solo'd, and this isn't being tweaked */ + return true; + } + else { + /* unsupported - this track is being tweaked */ + return false; + } + + /* unsupported */ + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_nlatrack_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_nlatrack_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_SELECT: /* selected */ - return NLATRACK_SELECTED; + switch (setting) { + case ACHANNEL_SETTING_SELECT: /* selected */ + return NLATRACK_SELECTED; - case ACHANNEL_SETTING_MUTE: /* muted */ - return NLATRACK_MUTED; + case ACHANNEL_SETTING_MUTE: /* muted */ + return NLATRACK_MUTED; - case ACHANNEL_SETTING_PROTECT: /* protected */ - return NLATRACK_PROTECTED; + case ACHANNEL_SETTING_PROTECT: /* protected */ + return NLATRACK_PROTECTED; - case ACHANNEL_SETTING_SOLO: /* solo */ - return NLATRACK_SOLO; + case ACHANNEL_SETTING_SOLO: /* solo */ + return NLATRACK_SOLO; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_nlatrack_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_nlatrack_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - NlaTrack *nlt = (NlaTrack *)ale->data; - return GET_ACF_FLAG_PTR(nlt->flag, type); + NlaTrack *nlt = (NlaTrack *)ale->data; + return GET_ACF_FLAG_PTR(nlt->flag, type); } /* nla track type define */ -static bAnimChannelType ACF_NLATRACK = -{ - "NLA Track", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_nlatrack_color, /* backdrop color */ - acf_generic_channel_backdrop, /* backdrop */ - acf_generic_indention_flexible, /* indent level */ - acf_generic_group_offset, /* offset */ // XXX? - - acf_nlatrack_name, /* name */ - acf_nlatrack_name_prop, /* name prop */ - NULL, /* icon */ - - acf_nlatrack_setting_valid, /* has setting */ - acf_nlatrack_setting_flag, /* flag for setting */ - acf_nlatrack_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_NLATRACK = { + "NLA Track", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_nlatrack_color, /* backdrop color */ + acf_generic_channel_backdrop, /* backdrop */ + acf_generic_indention_flexible, /* indent level */ + acf_generic_group_offset, + /* offset */ // XXX? + + acf_nlatrack_name, /* name */ + acf_nlatrack_name_prop, /* name prop */ + NULL, /* icon */ + + acf_nlatrack_setting_valid, /* has setting */ + acf_nlatrack_setting_flag, /* flag for setting */ + acf_nlatrack_setting_ptr, /* pointer for setting */ }; /* NLA Action ----------------------------------------------- */ @@ -3398,15 +3507,15 @@ static bAnimChannelType ACF_NLATRACK = /* icon for action depends on whether it's in tweaking mode */ static int acf_nlaaction_icon(bAnimListElem *ale) { - AnimData *adt = ale->adt; + AnimData *adt = ale->adt; - /* indicate tweaking-action state by changing the icon... */ - if ((adt) && (adt->flag & ADT_NLA_EDIT_ON)) { - return ICON_ACTION_TWEAK; - } - else { - return ICON_ACTION; - } + /* indicate tweaking-action state by changing the icon... */ + if ((adt) && (adt->flag & ADT_NLA_EDIT_ON)) { + return ICON_ACTION_TWEAK; + } + else { + return ICON_ACTION; + } } /* Backdrop color for nla action channel @@ -3415,151 +3524,162 @@ static int acf_nlaaction_icon(bAnimListElem *ale) */ static void acf_nlaaction_color(bAnimContext *UNUSED(ac), bAnimListElem *ale, float r_color[3]) { - float color[4]; + float color[4]; - /* Action Line - * The alpha values action_get_color returns are only useful for drawing - * strips backgrounds but here we're doing channel list backgrounds instead - * so we ignore that and use our own when needed - */ - nla_action_get_color(ale->adt, (bAction *)ale->data, color); + /* Action Line + * The alpha values action_get_color returns are only useful for drawing + * strips backgrounds but here we're doing channel list backgrounds instead + * so we ignore that and use our own when needed + */ + nla_action_get_color(ale->adt, (bAction *)ale->data, color); - /* NOTE: since the return types only allow rgb, we cannot do the alpha-blending we'd - * like for the solo-drawing case. Hence, this method isn't actually used for drawing - * most of the channel... - */ - copy_v3_v3(r_color, color); + /* NOTE: since the return types only allow rgb, we cannot do the alpha-blending we'd + * like for the solo-drawing case. Hence, this method isn't actually used for drawing + * most of the channel... + */ + copy_v3_v3(r_color, color); } /* backdrop for nla action channel */ static void acf_nlaaction_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - AnimData *adt = ale->adt; - short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; - float color[4]; - - /* Action Line - * The alpha values action_get_color returns are only useful for drawing - * strips backgrounds but here we're doing channel list backgrounds instead - * so we ignore that and use our own when needed - */ - nla_action_get_color(adt, (bAction *)ale->data, color); - - if (adt && (adt->flag & ADT_NLA_EDIT_ON)) - color[3] = 1.0f; - else - color[3] = (adt && (adt->flag & ADT_NLA_SOLO_TRACK)) ? 0.3f : 1.0f; - - /* only on top left corner, to show that this channel sits on top of the preceding ones - * while still linking into the action line strip to the right - */ - UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT); - - /* draw slightly shifted up vertically to look like it has more separation from other channels, - * but we then need to slightly shorten it so that it doesn't look like it overlaps - */ - UI_draw_roundbox_4fv(true, offset, yminc + NLACHANNEL_SKIP, (float)v2d->cur.xmax, ymaxc + NLACHANNEL_SKIP - 1, 8, color); + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + AnimData *adt = ale->adt; + short offset = (acf->get_offset) ? acf->get_offset(ac, ale) : 0; + float color[4]; + + /* Action Line + * The alpha values action_get_color returns are only useful for drawing + * strips backgrounds but here we're doing channel list backgrounds instead + * so we ignore that and use our own when needed + */ + nla_action_get_color(adt, (bAction *)ale->data, color); + + if (adt && (adt->flag & ADT_NLA_EDIT_ON)) + color[3] = 1.0f; + else + color[3] = (adt && (adt->flag & ADT_NLA_SOLO_TRACK)) ? 0.3f : 1.0f; + + /* only on top left corner, to show that this channel sits on top of the preceding ones + * while still linking into the action line strip to the right + */ + UI_draw_roundbox_corner_set(UI_CNR_TOP_LEFT); + + /* draw slightly shifted up vertically to look like it has more separation from other channels, + * but we then need to slightly shorten it so that it doesn't look like it overlaps + */ + UI_draw_roundbox_4fv(true, + offset, + yminc + NLACHANNEL_SKIP, + (float)v2d->cur.xmax, + ymaxc + NLACHANNEL_SKIP - 1, + 8, + color); } /* name for nla action entries */ static void acf_nlaaction_name(bAnimListElem *ale, char *name) { - bAction *act = (bAction *)ale->data; + bAction *act = (bAction *)ale->data; - if (name) { - if (act) { - // TODO: add special decoration when doing this in tweaking mode? - BLI_strncpy(name, act->id.name + 2, ANIM_CHAN_NAME_SIZE); - } - else { - BLI_strncpy(name, "", ANIM_CHAN_NAME_SIZE); - } - } + if (name) { + if (act) { + // TODO: add special decoration when doing this in tweaking mode? + BLI_strncpy(name, act->id.name + 2, ANIM_CHAN_NAME_SIZE); + } + else { + BLI_strncpy(name, "", ANIM_CHAN_NAME_SIZE); + } + } } /* name property for nla action entries */ static bool acf_nlaaction_name_prop(bAnimListElem *ale, PointerRNA *ptr, PropertyRNA **prop) { - if (ale->data) { - RNA_pointer_create(ale->id, &RNA_Action, ale->data, ptr); - *prop = RNA_struct_name_property(ptr->type); + if (ale->data) { + RNA_pointer_create(ale->id, &RNA_Action, ale->data, ptr); + *prop = RNA_struct_name_property(ptr->type); - return (*prop != NULL); - } + return (*prop != NULL); + } - return false; + return false; } /* check if some setting exists for this channel */ -static bool acf_nlaaction_setting_valid(bAnimContext *UNUSED(ac), bAnimListElem *ale, eAnimChannel_Settings setting) -{ - AnimData *adt = ale->adt; - - /* visibility of settings depends on various states... */ - switch (setting) { - /* conditionally supported */ - case ACHANNEL_SETTING_PINNED: /* pinned - map/unmap */ - if ((adt) && (adt->flag & ADT_NLA_EDIT_ON)) { - /* this should only appear in tweakmode */ - return true; - } - else { - return false; - } - - /* unsupported */ - default: - return false; - } +static bool acf_nlaaction_setting_valid(bAnimContext *UNUSED(ac), + bAnimListElem *ale, + eAnimChannel_Settings setting) +{ + AnimData *adt = ale->adt; + + /* visibility of settings depends on various states... */ + switch (setting) { + /* conditionally supported */ + case ACHANNEL_SETTING_PINNED: /* pinned - map/unmap */ + if ((adt) && (adt->flag & ADT_NLA_EDIT_ON)) { + /* this should only appear in tweakmode */ + return true; + } + else { + return false; + } + + /* unsupported */ + default: + return false; + } } /* get the appropriate flag(s) for the setting when it is valid */ -static int acf_nlaaction_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settings setting, bool *neg) +static int acf_nlaaction_setting_flag(bAnimContext *UNUSED(ac), + eAnimChannel_Settings setting, + bool *neg) { - /* clear extra return data first */ - *neg = false; + /* clear extra return data first */ + *neg = false; - switch (setting) { - case ACHANNEL_SETTING_PINNED: /* pinned - map/unmap */ - *neg = true; // XXX - return ADT_NLA_EDIT_NOMAP; + switch (setting) { + case ACHANNEL_SETTING_PINNED: /* pinned - map/unmap */ + *neg = true; // XXX + return ADT_NLA_EDIT_NOMAP; - default: /* unsupported */ - return 0; - } + default: /* unsupported */ + return 0; + } } /* get pointer to the setting */ -static void *acf_nlaaction_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings UNUSED(setting), short *type) +static void *acf_nlaaction_setting_ptr(bAnimListElem *ale, + eAnimChannel_Settings UNUSED(setting), + short *type) { - AnimData *adt = ale->adt; - return GET_ACF_FLAG_PTR(adt->flag, type); + AnimData *adt = ale->adt; + return GET_ACF_FLAG_PTR(adt->flag, type); } /* nla action type define */ -static bAnimChannelType ACF_NLAACTION = -{ - "NLA Active Action", /* type name */ - ACHANNEL_ROLE_CHANNEL, /* role */ - - acf_nlaaction_color, /* backdrop color (NOTE: the backdrop handles this too, - * since it needs special hacks) */ - acf_nlaaction_backdrop, /* backdrop */ - acf_generic_indention_flexible, /* indent level */ - acf_generic_group_offset, /* offset */ // XXX? - - acf_nlaaction_name, /* name */ - acf_nlaaction_name_prop, /* name prop */ - acf_nlaaction_icon, /* icon */ - - acf_nlaaction_setting_valid, /* has setting */ - acf_nlaaction_setting_flag, /* flag for setting */ - acf_nlaaction_setting_ptr, /* pointer for setting */ +static bAnimChannelType ACF_NLAACTION = { + "NLA Active Action", /* type name */ + ACHANNEL_ROLE_CHANNEL, /* role */ + + acf_nlaaction_color, /* backdrop color (NOTE: the backdrop handles this too, + * since it needs special hacks) */ + acf_nlaaction_backdrop, /* backdrop */ + acf_generic_indention_flexible, /* indent level */ + acf_generic_group_offset, + /* offset */ // XXX? + + acf_nlaaction_name, /* name */ + acf_nlaaction_name_prop, /* name prop */ + acf_nlaaction_icon, /* icon */ + + acf_nlaaction_setting_valid, /* has setting */ + acf_nlaaction_setting_flag, /* flag for setting */ + acf_nlaaction_setting_ptr, /* pointer for setting */ }; - /* *********************************************** */ /* Type Registration and General Access */ @@ -3570,79 +3690,79 @@ static short ACF_INIT = 1; /* when non-zero, the list needs to be updated */ /* Initialize type info definitions */ static void ANIM_init_channel_typeinfo_data(void) { - int type = 0; + int type = 0; - /* start initializing if necessary... */ - if (ACF_INIT) { - ACF_INIT = 0; + /* start initializing if necessary... */ + if (ACF_INIT) { + ACF_INIT = 0; - /* NOTE: need to keep the order of these synchronized with the definition of - * channel types (eAnim_ChannelType) in ED_anim_api.h - */ - animchannelTypeInfo[type++] = NULL; /* None */ - animchannelTypeInfo[type++] = NULL; /* AnimData */ - animchannelTypeInfo[type++] = NULL; /* Special */ + /* NOTE: need to keep the order of these synchronized with the definition of + * channel types (eAnim_ChannelType) in ED_anim_api.h + */ + animchannelTypeInfo[type++] = NULL; /* None */ + animchannelTypeInfo[type++] = NULL; /* AnimData */ + animchannelTypeInfo[type++] = NULL; /* Special */ - animchannelTypeInfo[type++] = &ACF_SUMMARY; /* Motion Summary */ + animchannelTypeInfo[type++] = &ACF_SUMMARY; /* Motion Summary */ - animchannelTypeInfo[type++] = &ACF_SCENE; /* Scene */ - animchannelTypeInfo[type++] = &ACF_OBJECT; /* Object */ - animchannelTypeInfo[type++] = &ACF_GROUP; /* Group */ - animchannelTypeInfo[type++] = &ACF_FCURVE; /* F-Curve */ + animchannelTypeInfo[type++] = &ACF_SCENE; /* Scene */ + animchannelTypeInfo[type++] = &ACF_OBJECT; /* Object */ + animchannelTypeInfo[type++] = &ACF_GROUP; /* Group */ + animchannelTypeInfo[type++] = &ACF_FCURVE; /* F-Curve */ - animchannelTypeInfo[type++] = &ACF_NLACONTROLS; /* NLA Control FCurve Expander */ - animchannelTypeInfo[type++] = &ACF_NLACURVE; /* NLA Control FCurve Channel */ + animchannelTypeInfo[type++] = &ACF_NLACONTROLS; /* NLA Control FCurve Expander */ + animchannelTypeInfo[type++] = &ACF_NLACURVE; /* NLA Control FCurve Channel */ - animchannelTypeInfo[type++] = &ACF_FILLACTD; /* Object Action Expander */ - animchannelTypeInfo[type++] = &ACF_FILLDRIVERS; /* Drivers Expander */ + animchannelTypeInfo[type++] = &ACF_FILLACTD; /* Object Action Expander */ + animchannelTypeInfo[type++] = &ACF_FILLDRIVERS; /* Drivers Expander */ - animchannelTypeInfo[type++] = &ACF_DSMAT; /* Material Channel */ - animchannelTypeInfo[type++] = &ACF_DSLIGHT; /* Light Channel */ - animchannelTypeInfo[type++] = &ACF_DSCAM; /* Camera Channel */ - animchannelTypeInfo[type++] = &ACF_DSCACHEFILE; /* CacheFile Channel */ - animchannelTypeInfo[type++] = &ACF_DSCUR; /* Curve Channel */ - animchannelTypeInfo[type++] = &ACF_DSSKEY; /* ShapeKey Channel */ - animchannelTypeInfo[type++] = &ACF_DSWOR; /* World Channel */ - animchannelTypeInfo[type++] = &ACF_DSNTREE; /* NodeTree Channel */ - animchannelTypeInfo[type++] = &ACF_DSPART; /* Particle Channel */ - animchannelTypeInfo[type++] = &ACF_DSMBALL; /* MetaBall Channel */ - animchannelTypeInfo[type++] = &ACF_DSARM; /* Armature Channel */ - animchannelTypeInfo[type++] = &ACF_DSMESH; /* Mesh Channel */ - animchannelTypeInfo[type++] = &ACF_DSTEX; /* Texture Channel */ - animchannelTypeInfo[type++] = &ACF_DSLAT; /* Lattice Channel */ - animchannelTypeInfo[type++] = &ACF_DSLINESTYLE; /* LineStyle Channel */ - animchannelTypeInfo[type++] = &ACF_DSSPK; /* Speaker Channel */ - animchannelTypeInfo[type++] = &ACF_DSGPENCIL; /* GreasePencil Channel */ - animchannelTypeInfo[type++] = &ACF_DSMCLIP; /* MovieClip Channel */ + animchannelTypeInfo[type++] = &ACF_DSMAT; /* Material Channel */ + animchannelTypeInfo[type++] = &ACF_DSLIGHT; /* Light Channel */ + animchannelTypeInfo[type++] = &ACF_DSCAM; /* Camera Channel */ + animchannelTypeInfo[type++] = &ACF_DSCACHEFILE; /* CacheFile Channel */ + animchannelTypeInfo[type++] = &ACF_DSCUR; /* Curve Channel */ + animchannelTypeInfo[type++] = &ACF_DSSKEY; /* ShapeKey Channel */ + animchannelTypeInfo[type++] = &ACF_DSWOR; /* World Channel */ + animchannelTypeInfo[type++] = &ACF_DSNTREE; /* NodeTree Channel */ + animchannelTypeInfo[type++] = &ACF_DSPART; /* Particle Channel */ + animchannelTypeInfo[type++] = &ACF_DSMBALL; /* MetaBall Channel */ + animchannelTypeInfo[type++] = &ACF_DSARM; /* Armature Channel */ + animchannelTypeInfo[type++] = &ACF_DSMESH; /* Mesh Channel */ + animchannelTypeInfo[type++] = &ACF_DSTEX; /* Texture Channel */ + animchannelTypeInfo[type++] = &ACF_DSLAT; /* Lattice Channel */ + animchannelTypeInfo[type++] = &ACF_DSLINESTYLE; /* LineStyle Channel */ + animchannelTypeInfo[type++] = &ACF_DSSPK; /* Speaker Channel */ + animchannelTypeInfo[type++] = &ACF_DSGPENCIL; /* GreasePencil Channel */ + animchannelTypeInfo[type++] = &ACF_DSMCLIP; /* MovieClip Channel */ - animchannelTypeInfo[type++] = &ACF_SHAPEKEY; /* ShapeKey */ + animchannelTypeInfo[type++] = &ACF_SHAPEKEY; /* ShapeKey */ - animchannelTypeInfo[type++] = &ACF_GPD; /* Grease Pencil Datablock */ - animchannelTypeInfo[type++] = &ACF_GPL; /* Grease Pencil Layer */ + animchannelTypeInfo[type++] = &ACF_GPD; /* Grease Pencil Datablock */ + animchannelTypeInfo[type++] = &ACF_GPL; /* Grease Pencil Layer */ - animchannelTypeInfo[type++] = &ACF_MASKDATA; /* Mask Datablock */ - animchannelTypeInfo[type++] = &ACF_MASKLAYER; /* Mask Layer */ + animchannelTypeInfo[type++] = &ACF_MASKDATA; /* Mask Datablock */ + animchannelTypeInfo[type++] = &ACF_MASKLAYER; /* Mask Layer */ - animchannelTypeInfo[type++] = &ACF_NLATRACK; /* NLA Track */ - animchannelTypeInfo[type++] = &ACF_NLAACTION; /* NLA Action */ - } + animchannelTypeInfo[type++] = &ACF_NLATRACK; /* NLA Track */ + animchannelTypeInfo[type++] = &ACF_NLAACTION; /* NLA Action */ + } } /* Get type info from given channel type */ const bAnimChannelType *ANIM_channel_get_typeinfo(bAnimListElem *ale) { - /* santiy checks */ - if (ale == NULL) - return NULL; + /* santiy checks */ + if (ale == NULL) + return NULL; - /* init the typeinfo if not available yet... */ - ANIM_init_channel_typeinfo_data(); + /* init the typeinfo if not available yet... */ + ANIM_init_channel_typeinfo_data(); - /* check if type is in bounds... */ - if ((ale->type >= 0) && (ale->type < ANIMTYPE_NUM_TYPES)) - return animchannelTypeInfo[ale->type]; - else - return NULL; + /* check if type is in bounds... */ + if ((ale->type >= 0) && (ale->type < ANIMTYPE_NUM_TYPES)) + return animchannelTypeInfo[ale->type]; + else + return NULL; } /* --------------------------- */ @@ -3650,29 +3770,29 @@ const bAnimChannelType *ANIM_channel_get_typeinfo(bAnimListElem *ale) /* Print debug info string for the given channel */ void ANIM_channel_debug_print_info(bAnimListElem *ale, short indent_level) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - /* print indents */ - for (; indent_level > 0; indent_level--) - printf(" "); + /* print indents */ + for (; indent_level > 0; indent_level--) + printf(" "); - /* print info */ - if (acf) { - char name[ANIM_CHAN_NAME_SIZE]; /* hopefully this will be enough! */ + /* print info */ + if (acf) { + char name[ANIM_CHAN_NAME_SIZE]; /* hopefully this will be enough! */ - /* get UI name */ - if (acf->name) - acf->name(ale, name); - else - BLI_strncpy(name, "", sizeof(name)); + /* get UI name */ + if (acf->name) + acf->name(ale, name); + else + BLI_strncpy(name, "", sizeof(name)); - /* print type name + ui name */ - printf("ChanType: <%s> Name: \"%s\"\n", acf->channel_type_name, name); - } - else if (ale) - printf("ChanType: \n", ale->type); - else - printf("\n"); + /* print type name + ui name */ + printf("ChanType: <%s> Name: \"%s\"\n", acf->channel_type_name, name); + } + else if (ale) + printf("ChanType: \n", ale->type); + else + printf("\n"); } /* --------------------------- */ @@ -3682,361 +3802,374 @@ void ANIM_channel_debug_print_info(bAnimListElem *ale, short indent_level) */ short ANIM_channel_setting_get(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting) { - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - - /* 1) check that the setting exists for the current context */ - if ((acf) && (!acf->has_setting || acf->has_setting(ac, ale, setting))) { - /* 2) get pointer to check for flag in, and the flag to check for */ - short ptrsize; - bool negflag; - int flag; - void *ptr; - - flag = acf->setting_flag(ac, setting, &negflag); - ptr = acf->setting_ptr(ale, setting, &ptrsize); - - /* check if flag is enabled */ - if (ptr && flag) { - switch (ptrsize) { - case sizeof(int): /* integer pointer for setting */ - { - const int *val = (int *)ptr; - - if (negflag) - return ((*val) & flag) == 0; - else - return ((*val) & flag) != 0; - } - case sizeof(short): /* short pointer for setting */ - { - const short *val = (short *)ptr; - - if (negflag) - return ((*val) & flag) == 0; - else - return ((*val) & flag) != 0; - } - case sizeof(char): /* char pointer for setting */ - { - const char *val = (char *)ptr; - - if (negflag) - return ((*val) & flag) == 0; - else - return ((*val) & flag) != 0; - } - } - } - } - - /* not found... */ - return -1; + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + + /* 1) check that the setting exists for the current context */ + if ((acf) && (!acf->has_setting || acf->has_setting(ac, ale, setting))) { + /* 2) get pointer to check for flag in, and the flag to check for */ + short ptrsize; + bool negflag; + int flag; + void *ptr; + + flag = acf->setting_flag(ac, setting, &negflag); + ptr = acf->setting_ptr(ale, setting, &ptrsize); + + /* check if flag is enabled */ + if (ptr && flag) { + switch (ptrsize) { + case sizeof(int): /* integer pointer for setting */ + { + const int *val = (int *)ptr; + + if (negflag) + return ((*val) & flag) == 0; + else + return ((*val) & flag) != 0; + } + case sizeof(short): /* short pointer for setting */ + { + const short *val = (short *)ptr; + + if (negflag) + return ((*val) & flag) == 0; + else + return ((*val) & flag) != 0; + } + case sizeof(char): /* char pointer for setting */ + { + const char *val = (char *)ptr; + + if (negflag) + return ((*val) & flag) == 0; + else + return ((*val) & flag) != 0; + } + } + } + } + + /* not found... */ + return -1; } - /* quick macro for use in ANIM_channel_setting_set - set flag for setting according the mode given */ #define ACF_SETTING_SET(sval, sflag, smode) \ - { \ - if (negflag) { \ - if (smode == ACHANNEL_SETFLAG_INVERT) (sval) ^= (sflag); \ - else if (smode == ACHANNEL_SETFLAG_ADD) (sval) &= ~(sflag); \ - else (sval) |= (sflag); \ - } \ - else { \ - if (smode == ACHANNEL_SETFLAG_INVERT) (sval) ^= (sflag); \ - else if (smode == ACHANNEL_SETFLAG_ADD) (sval) |= (sflag); \ - else (sval) &= ~(sflag); \ - } \ - } (void)0 + { \ + if (negflag) { \ + if (smode == ACHANNEL_SETFLAG_INVERT) \ + (sval) ^= (sflag); \ + else if (smode == ACHANNEL_SETFLAG_ADD) \ + (sval) &= ~(sflag); \ + else \ + (sval) |= (sflag); \ + } \ + else { \ + if (smode == ACHANNEL_SETFLAG_INVERT) \ + (sval) ^= (sflag); \ + else if (smode == ACHANNEL_SETFLAG_ADD) \ + (sval) |= (sflag); \ + else \ + (sval) &= ~(sflag); \ + } \ + } \ + (void)0 /* Change value of some setting for a channel * - setting: eAnimChannel_Settings * - mode: eAnimChannels_SetFlag */ -void ANIM_channel_setting_set(bAnimContext *ac, bAnimListElem *ale, eAnimChannel_Settings setting, eAnimChannels_SetFlag mode) -{ - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - - /* 1) check that the setting exists for the current context */ - if ((acf) && (!acf->has_setting || acf->has_setting(ac, ale, setting))) { - /* 2) get pointer to check for flag in, and the flag to check for */ - short ptrsize; - bool negflag; - int flag; - void *ptr; - - flag = acf->setting_flag(ac, setting, &negflag); - ptr = acf->setting_ptr(ale, setting, &ptrsize); - - /* check if flag is enabled */ - if (ptr && flag) { - switch (ptrsize) { - case sizeof(int): /* integer pointer for setting */ - { - int *val = (int *)ptr; - ACF_SETTING_SET(*val, flag, mode); - break; - } - case sizeof(short): /* short pointer for setting */ - { - short *val = (short *)ptr; - ACF_SETTING_SET(*val, flag, mode); - break; - } - case sizeof(char): /* char pointer for setting */ - { - char *val = (char *)ptr; - ACF_SETTING_SET(*val, flag, mode); - break; - } - } - } - } +void ANIM_channel_setting_set(bAnimContext *ac, + bAnimListElem *ale, + eAnimChannel_Settings setting, + eAnimChannels_SetFlag mode) +{ + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + + /* 1) check that the setting exists for the current context */ + if ((acf) && (!acf->has_setting || acf->has_setting(ac, ale, setting))) { + /* 2) get pointer to check for flag in, and the flag to check for */ + short ptrsize; + bool negflag; + int flag; + void *ptr; + + flag = acf->setting_flag(ac, setting, &negflag); + ptr = acf->setting_ptr(ale, setting, &ptrsize); + + /* check if flag is enabled */ + if (ptr && flag) { + switch (ptrsize) { + case sizeof(int): /* integer pointer for setting */ + { + int *val = (int *)ptr; + ACF_SETTING_SET(*val, flag, mode); + break; + } + case sizeof(short): /* short pointer for setting */ + { + short *val = (short *)ptr; + ACF_SETTING_SET(*val, flag, mode); + break; + } + case sizeof(char): /* char pointer for setting */ + { + char *val = (char *)ptr; + ACF_SETTING_SET(*val, flag, mode); + break; + } + } + } + } } /* --------------------------- */ // size of icons -#define ICON_WIDTH (0.85f * U.widget_unit) +#define ICON_WIDTH (0.85f * U.widget_unit) // width of sliders -#define SLIDER_WIDTH (4 * U.widget_unit) +#define SLIDER_WIDTH (4 * U.widget_unit) // min-width of rename textboxes #define RENAME_TEXT_MIN_WIDTH (U.widget_unit) - /* Helper - Check if a channel needs renaming */ -static bool achannel_is_being_renamed(const bAnimContext *ac, const bAnimChannelType *acf, size_t channel_index) +static bool achannel_is_being_renamed(const bAnimContext *ac, + const bAnimChannelType *acf, + size_t channel_index) { - if (acf->name_prop && ac->ads) { - /* if rename index matches, this channel is being renamed */ - if (ac->ads->renameIndex == channel_index + 1) { - return true; - } - } + if (acf->name_prop && ac->ads) { + /* if rename index matches, this channel is being renamed */ + if (ac->ads->renameIndex == channel_index + 1) { + return true; + } + } - /* not being renamed */ - return false; + /* not being renamed */ + return false; } - /* Draw the given channel */ -void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc, size_t channel_index) -{ - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - short selected, offset; - float y, ymid, ytext; - - /* sanity checks - don't draw anything */ - if (ELEM(NULL, acf, ale)) - return; - - /* get initial offset */ - if (acf->get_offset) - offset = acf->get_offset(ac, ale); - else - offset = 0; - - /* calculate appropriate y-coordinates for icon buttons */ - y = (ymaxc - yminc) / 2 + yminc; - ymid = y - 0.5f * ICON_WIDTH; - /* y-coordinates for text is only 4 down from middle */ - ytext = y - 0.2f * U.widget_unit; - - /* check if channel is selected */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_SELECT)) - selected = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_SELECT); - else - selected = 0; - - /* set blending again, as may not be set in previous step */ - GPU_blend_set_func_separate(GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA); - GPU_blend(true); - - /* step 1) draw backdrop ........................................... */ - if (acf->draw_backdrop) - acf->draw_backdrop(ac, ale, yminc, ymaxc); - - /* step 2) draw expand widget ....................................... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_EXPAND)) { - /* just skip - drawn as widget now */ - offset += ICON_WIDTH; - } - - /* step 3) draw icon ............................................... */ - if (acf->icon) { - UI_icon_draw(offset, ymid, acf->icon(ale)); - offset += ICON_WIDTH; - } - - /* turn off blending, since not needed anymore... */ - GPU_blend(false); - - /* step 4) draw special toggles ................................. - * - in Graph Editor, checkboxes for visibility in curves area - * - in NLA Editor, glowing dots for solo/not solo... - * - in Grease Pencil mode, color swatches for layer color - */ - if (ac->sl) { - if ((ac->spacetype == SPACE_GRAPH) && - (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE) || - acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE))) - { - /* for F-Curves, draw color-preview of curve behind checkbox */ - if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) { - FCurve *fcu = (FCurve *)ale->data; - uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - - /* F-Curve channels need to have a special 'color code' box drawn, which is colored with whatever - * color the curve has stored - */ - immUniformColor3fv(fcu->color); - - /* just a solid color rect - */ - immRectf(pos, offset, yminc, offset + ICON_WIDTH, ymaxc); - - immUnbindProgram(); - } - /* icon is drawn as widget now... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { - offset += ICON_WIDTH; - } - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE)) { - offset += ICON_WIDTH; - } - } - else if ((ac->spacetype == SPACE_NLA) && acf->has_setting(ac, ale, ACHANNEL_SETTING_SOLO)) { - /* just skip - drawn as widget now */ - offset += ICON_WIDTH; - } - else if (ale->type == ANIMTYPE_GPLAYER) { - /* just skip - drawn as a widget */ - offset += ICON_WIDTH; - } - } - - /* step 5) draw name ............................................... */ - /* Don't draw this if renaming... */ - if (acf->name && !achannel_is_being_renamed(ac, acf, channel_index)) { - const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; - char name[ANIM_CHAN_NAME_SIZE]; /* hopefully this will be enough! */ - unsigned char col[4]; - - /* set text color */ - /* XXX: if active, highlight differently? */ - - if (selected) - UI_GetThemeColor4ubv(TH_TEXT_HI, col); - else - UI_GetThemeColor4ubv(TH_TEXT, col); - - /* get name */ - acf->name(ale, name); - - offset += 3; - UI_fontstyle_draw_simple(fstyle, offset, ytext, name, col); - - /* draw red underline if channel is disabled */ - if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE) && (ale->flag & FCURVE_DISABLED)) { - uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - - /* FIXME: replace hardcoded color here, and check on extents! */ - immUniformColor3f(1.0f, 0.0f, 0.0f); - - GPU_line_width(2.0f); - - immBegin(GPU_PRIM_LINES, 2); - immVertex2f(pos, (float)offset, yminc); - immVertex2f(pos, (float)v2d->cur.xmax, yminc); - immEnd(); - - immUnbindProgram(); - } - } - - /* step 6) draw backdrops behind mute+protection toggles + (sliders) ....................... */ - /* reset offset - now goes from RHS of panel */ - offset = 0; - - /* TODO: when drawing sliders, make those draw instead of these toggles if not enough space */ - - if (v2d) { - short draw_sliders = 0; - float ymin_ofs = 0.0f; - float color[3]; - uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); - - immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); - - /* get and set backdrop color */ - acf->get_backdrop_color(ac, ale, color); - immUniformColor3fv(color); - - /* check if we need to show the sliders */ - if ((ac->sl) && ELEM(ac->spacetype, SPACE_ACTION, SPACE_GRAPH)) { - switch (ac->spacetype) { - case SPACE_ACTION: - { - SpaceAction *saction = (SpaceAction *)ac->sl; - draw_sliders = (saction->flag & SACTION_SLIDERS); - break; - } - case SPACE_GRAPH: - { - SpaceGraph *sipo = (SpaceGraph *)ac->sl; - draw_sliders = (sipo->flag & SIPO_SLIDERS); - break; - } - } - } - - /* check if there's enough space for the toggles if the sliders are drawn too */ - if (!(draw_sliders) || (BLI_rcti_size_x(&v2d->mask) > ACHANNEL_BUTTON_WIDTH / 2) ) { - /* protect... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PROTECT)) - offset += ICON_WIDTH; - - /* mute... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_MUTE)) - offset += ICON_WIDTH; - if (ale->type == ANIMTYPE_GPLAYER) - offset += ICON_WIDTH; - - /* pinned... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PINNED)) - offset += ICON_WIDTH; - - /* NOTE: technically, NLA Action "pushdown" should be here too, but there are no sliders there */ - - /* NLA action channels have slightly different spacing requirements... */ - if (ale->type == ANIMTYPE_NLAACTION) - ymin_ofs = NLACHANNEL_SKIP; - } - - /* draw slider - * - even if we can draw sliders for this view, we must also check that the channel-type supports them - * (only only F-Curves really can support them for now) - * - slider should start before the toggles (if they're visible) to keep a clean line down the side - */ - if ((draw_sliders) && ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE, ANIMTYPE_SHAPEKEY)) { - /* adjust offset */ - offset += SLIDER_WIDTH; - } - - - /* finally draw a backdrop rect behind these - * - starts from the point where the first toggle/slider starts, - * - ends past the space that might be reserved for a scroller - */ - immRectf(pos, v2d->cur.xmax - (float)offset, yminc + ymin_ofs, v2d->cur.xmax + EXTRA_SCROLL_PAD, ymaxc); - - immUnbindProgram(); - } +void ANIM_channel_draw( + bAnimContext *ac, bAnimListElem *ale, float yminc, float ymaxc, size_t channel_index) +{ + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + short selected, offset; + float y, ymid, ytext; + + /* sanity checks - don't draw anything */ + if (ELEM(NULL, acf, ale)) + return; + + /* get initial offset */ + if (acf->get_offset) + offset = acf->get_offset(ac, ale); + else + offset = 0; + + /* calculate appropriate y-coordinates for icon buttons */ + y = (ymaxc - yminc) / 2 + yminc; + ymid = y - 0.5f * ICON_WIDTH; + /* y-coordinates for text is only 4 down from middle */ + ytext = y - 0.2f * U.widget_unit; + + /* check if channel is selected */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_SELECT)) + selected = ANIM_channel_setting_get(ac, ale, ACHANNEL_SETTING_SELECT); + else + selected = 0; + + /* set blending again, as may not be set in previous step */ + GPU_blend_set_func_separate( + GPU_SRC_ALPHA, GPU_ONE_MINUS_SRC_ALPHA, GPU_ONE, GPU_ONE_MINUS_SRC_ALPHA); + GPU_blend(true); + + /* step 1) draw backdrop ........................................... */ + if (acf->draw_backdrop) + acf->draw_backdrop(ac, ale, yminc, ymaxc); + + /* step 2) draw expand widget ....................................... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_EXPAND)) { + /* just skip - drawn as widget now */ + offset += ICON_WIDTH; + } + + /* step 3) draw icon ............................................... */ + if (acf->icon) { + UI_icon_draw(offset, ymid, acf->icon(ale)); + offset += ICON_WIDTH; + } + + /* turn off blending, since not needed anymore... */ + GPU_blend(false); + + /* step 4) draw special toggles ................................. + * - in Graph Editor, checkboxes for visibility in curves area + * - in NLA Editor, glowing dots for solo/not solo... + * - in Grease Pencil mode, color swatches for layer color + */ + if (ac->sl) { + if ((ac->spacetype == SPACE_GRAPH) && + (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE) || + acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE))) { + /* for F-Curves, draw color-preview of curve behind checkbox */ + if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) { + FCurve *fcu = (FCurve *)ale->data; + uint pos = GPU_vertformat_attr_add( + immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + + /* F-Curve channels need to have a special 'color code' box drawn, which is colored with whatever + * color the curve has stored + */ + immUniformColor3fv(fcu->color); + + /* just a solid color rect + */ + immRectf(pos, offset, yminc, offset + ICON_WIDTH, ymaxc); + + immUnbindProgram(); + } + /* icon is drawn as widget now... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { + offset += ICON_WIDTH; + } + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE)) { + offset += ICON_WIDTH; + } + } + else if ((ac->spacetype == SPACE_NLA) && acf->has_setting(ac, ale, ACHANNEL_SETTING_SOLO)) { + /* just skip - drawn as widget now */ + offset += ICON_WIDTH; + } + else if (ale->type == ANIMTYPE_GPLAYER) { + /* just skip - drawn as a widget */ + offset += ICON_WIDTH; + } + } + + /* step 5) draw name ............................................... */ + /* Don't draw this if renaming... */ + if (acf->name && !achannel_is_being_renamed(ac, acf, channel_index)) { + const uiFontStyle *fstyle = UI_FSTYLE_WIDGET; + char name[ANIM_CHAN_NAME_SIZE]; /* hopefully this will be enough! */ + unsigned char col[4]; + + /* set text color */ + /* XXX: if active, highlight differently? */ + + if (selected) + UI_GetThemeColor4ubv(TH_TEXT_HI, col); + else + UI_GetThemeColor4ubv(TH_TEXT, col); + + /* get name */ + acf->name(ale, name); + + offset += 3; + UI_fontstyle_draw_simple(fstyle, offset, ytext, name, col); + + /* draw red underline if channel is disabled */ + if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE) && (ale->flag & FCURVE_DISABLED)) { + uint pos = GPU_vertformat_attr_add( + immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + + /* FIXME: replace hardcoded color here, and check on extents! */ + immUniformColor3f(1.0f, 0.0f, 0.0f); + + GPU_line_width(2.0f); + + immBegin(GPU_PRIM_LINES, 2); + immVertex2f(pos, (float)offset, yminc); + immVertex2f(pos, (float)v2d->cur.xmax, yminc); + immEnd(); + + immUnbindProgram(); + } + } + + /* step 6) draw backdrops behind mute+protection toggles + (sliders) ....................... */ + /* reset offset - now goes from RHS of panel */ + offset = 0; + + /* TODO: when drawing sliders, make those draw instead of these toggles if not enough space */ + + if (v2d) { + short draw_sliders = 0; + float ymin_ofs = 0.0f; + float color[3]; + uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); + + immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR); + + /* get and set backdrop color */ + acf->get_backdrop_color(ac, ale, color); + immUniformColor3fv(color); + + /* check if we need to show the sliders */ + if ((ac->sl) && ELEM(ac->spacetype, SPACE_ACTION, SPACE_GRAPH)) { + switch (ac->spacetype) { + case SPACE_ACTION: { + SpaceAction *saction = (SpaceAction *)ac->sl; + draw_sliders = (saction->flag & SACTION_SLIDERS); + break; + } + case SPACE_GRAPH: { + SpaceGraph *sipo = (SpaceGraph *)ac->sl; + draw_sliders = (sipo->flag & SIPO_SLIDERS); + break; + } + } + } + + /* check if there's enough space for the toggles if the sliders are drawn too */ + if (!(draw_sliders) || (BLI_rcti_size_x(&v2d->mask) > ACHANNEL_BUTTON_WIDTH / 2)) { + /* protect... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PROTECT)) + offset += ICON_WIDTH; + + /* mute... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_MUTE)) + offset += ICON_WIDTH; + if (ale->type == ANIMTYPE_GPLAYER) + offset += ICON_WIDTH; + + /* pinned... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PINNED)) + offset += ICON_WIDTH; + + /* NOTE: technically, NLA Action "pushdown" should be here too, but there are no sliders there */ + + /* NLA action channels have slightly different spacing requirements... */ + if (ale->type == ANIMTYPE_NLAACTION) + ymin_ofs = NLACHANNEL_SKIP; + } + + /* draw slider + * - even if we can draw sliders for this view, we must also check that the channel-type supports them + * (only only F-Curves really can support them for now) + * - slider should start before the toggles (if they're visible) to keep a clean line down the side + */ + if ((draw_sliders) && ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE, ANIMTYPE_SHAPEKEY)) { + /* adjust offset */ + offset += SLIDER_WIDTH; + } + + /* finally draw a backdrop rect behind these + * - starts from the point where the first toggle/slider starts, + * - ends past the space that might be reserved for a scroller + */ + immRectf(pos, + v2d->cur.xmax - (float)offset, + yminc + ymin_ofs, + v2d->cur.xmax + EXTRA_SCROLL_PAD, + ymaxc); + + immUnbindProgram(); + } } /* ------------------ */ @@ -4044,711 +4177,803 @@ void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float /* callback for (normal) widget settings - send notifiers */ static void achannel_setting_widget_cb(bContext *C, void *UNUSED(arg1), void *UNUSED(arg2)) { - WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); + WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); } /* callback for widget settings that need flushing */ static void achannel_setting_flush_widget_cb(bContext *C, void *ale_npoin, void *setting_wrap) { - bAnimListElem *ale_setting = (bAnimListElem *)ale_npoin; - bAnimContext ac; - ListBase anim_data = {NULL, NULL}; - int filter; - int setting = POINTER_AS_INT(setting_wrap); - short on = 0; + bAnimListElem *ale_setting = (bAnimListElem *)ale_npoin; + bAnimContext ac; + ListBase anim_data = {NULL, NULL}; + int filter; + int setting = POINTER_AS_INT(setting_wrap); + short on = 0; - /* send notifiers before doing anything else... */ - WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); + /* send notifiers before doing anything else... */ + WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); - /* verify that we have a channel to operate on. */ - if (!ale_setting) { - return; - } + /* verify that we have a channel to operate on. */ + if (!ale_setting) { + return; + } - if (ale_setting->type == ANIMTYPE_GPLAYER) { - /* draw cache updates for settings that affect the visible strokes */ - if (setting == ACHANNEL_SETTING_VISIBLE) { - bGPdata *gpd = (bGPdata *)ale_setting->id; - DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY); - } + if (ale_setting->type == ANIMTYPE_GPLAYER) { + /* draw cache updates for settings that affect the visible strokes */ + if (setting == ACHANNEL_SETTING_VISIBLE) { + bGPdata *gpd = (bGPdata *)ale_setting->id; + DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY); + } - /* UI updates */ - WM_event_add_notifier(C, NC_GPENCIL | ND_DATA, NULL); - } + /* UI updates */ + WM_event_add_notifier(C, NC_GPENCIL | ND_DATA, NULL); + } - /* Tag for full animation update, so that the settings will have an effect. */ - if (ale_setting->id) { - DEG_id_tag_update(ale_setting->id, ID_RECALC_ANIMATION); - } - if (ale_setting->adt && ale_setting->adt->action) { - /* Action is it's own datablock, so has to be tagged specifically. */ - DEG_id_tag_update(&ale_setting->adt->action->id, ID_RECALC_ANIMATION); - } + /* Tag for full animation update, so that the settings will have an effect. */ + if (ale_setting->id) { + DEG_id_tag_update(ale_setting->id, ID_RECALC_ANIMATION); + } + if (ale_setting->adt && ale_setting->adt->action) { + /* Action is it's own datablock, so has to be tagged specifically. */ + DEG_id_tag_update(&ale_setting->adt->action->id, ID_RECALC_ANIMATION); + } - /* verify animation context */ - if (ANIM_animdata_get_context(C, &ac) == 0) - return; + /* verify animation context */ + if (ANIM_animdata_get_context(C, &ac) == 0) + return; - /* check if the setting is on... */ - on = ANIM_channel_setting_get(&ac, ale_setting, setting); + /* check if the setting is on... */ + on = ANIM_channel_setting_get(&ac, ale_setting, setting); - /* on == -1 means setting not found... */ - if (on == -1) { - return; - } + /* on == -1 means setting not found... */ + if (on == -1) { + return; + } - /* get all channels that can possibly be chosen - but ignore hierarchy */ - filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_CHANNELS; - ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); + /* get all channels that can possibly be chosen - but ignore hierarchy */ + filter = ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_CHANNELS; + ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype); - /* call API method to flush the setting */ - ANIM_flush_setting_anim_channels(&ac, &anim_data, ale_setting, setting, on); + /* call API method to flush the setting */ + ANIM_flush_setting_anim_channels(&ac, &anim_data, ale_setting, setting, on); - /* free temp data */ - ANIM_animdata_freelist(&anim_data); + /* free temp data */ + ANIM_animdata_freelist(&anim_data); } /* callback for wrapping NLA Track "solo" toggle logic */ static void achannel_nlatrack_solo_widget_cb(bContext *C, void *ale_poin, void *UNUSED(arg2)) { - bAnimListElem *ale = ale_poin; - AnimData *adt = ale->adt; - NlaTrack *nlt = ale->data; + bAnimListElem *ale = ale_poin; + AnimData *adt = ale->adt; + NlaTrack *nlt = ale->data; - /* Toggle 'solo' mode. There are several complications here which need explaining: - * - The method call is needed to perform a few additional validation operations - * to ensure that the mode is applied properly - * - BUT, since the button already toggles the value, we need to un-toggle it - * before the API call gets to it, otherwise it will end up clearing the result - * again! - */ - nlt->flag ^= NLATRACK_SOLO; - BKE_nlatrack_solo_toggle(adt, nlt); + /* Toggle 'solo' mode. There are several complications here which need explaining: + * - The method call is needed to perform a few additional validation operations + * to ensure that the mode is applied properly + * - BUT, since the button already toggles the value, we need to un-toggle it + * before the API call gets to it, otherwise it will end up clearing the result + * again! + */ + nlt->flag ^= NLATRACK_SOLO; + BKE_nlatrack_solo_toggle(adt, nlt); - /* send notifiers */ - DEG_id_tag_update(ale->id, ID_RECALC_ANIMATION); - WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); + /* send notifiers */ + DEG_id_tag_update(ale->id, ID_RECALC_ANIMATION); + WM_event_add_notifier(C, NC_ANIMATION | ND_NLA | NA_EDITED, NULL); } /* callback for widget sliders - insert keyframes */ static void achannel_setting_slider_cb(bContext *C, void *id_poin, void *fcu_poin) { - ID *id = (ID *)id_poin; - AnimData *adt = BKE_animdata_from_id(id); - FCurve *fcu = (FCurve *)fcu_poin; + ID *id = (ID *)id_poin; + AnimData *adt = BKE_animdata_from_id(id); + FCurve *fcu = (FCurve *)fcu_poin; - Depsgraph *depsgraph = CTX_data_depsgraph(C); - ReportList *reports = CTX_wm_reports(C); - Scene *scene = CTX_data_scene(C); - ToolSettings *ts = scene->toolsettings; - ListBase nla_cache = {NULL, NULL}; - PointerRNA id_ptr, ptr; - PropertyRNA *prop; - short flag = 0; - bool done = false; - float cfra; + Depsgraph *depsgraph = CTX_data_depsgraph(C); + ReportList *reports = CTX_wm_reports(C); + Scene *scene = CTX_data_scene(C); + ToolSettings *ts = scene->toolsettings; + ListBase nla_cache = {NULL, NULL}; + PointerRNA id_ptr, ptr; + PropertyRNA *prop; + short flag = 0; + bool done = false; + float cfra; - /* Get RNA pointer */ - RNA_id_pointer_create(id, &id_ptr); + /* Get RNA pointer */ + RNA_id_pointer_create(id, &id_ptr); - /* Get NLA context for value remapping */ - NlaKeyframingContext *nla_context = BKE_animsys_get_nla_keyframing_context(&nla_cache, depsgraph, &id_ptr, adt, (float)CFRA); + /* Get NLA context for value remapping */ + NlaKeyframingContext *nla_context = BKE_animsys_get_nla_keyframing_context( + &nla_cache, depsgraph, &id_ptr, adt, (float)CFRA); - /* get current frame and apply NLA-mapping to it (if applicable) */ - cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); + /* get current frame and apply NLA-mapping to it (if applicable) */ + cfra = BKE_nla_tweakedit_remap(adt, (float)CFRA, NLATIME_CONVERT_UNMAP); - /* get flags for keyframing */ - flag = ANIM_get_keyframing_flags(scene, 1); + /* get flags for keyframing */ + flag = ANIM_get_keyframing_flags(scene, 1); - /* try to resolve the path stored in the F-Curve */ - if (RNA_path_resolve_property(&id_ptr, fcu->rna_path, &ptr, &prop)) { - /* set the special 'replace' flag if on a keyframe */ - if (fcurve_frame_has_keyframe(fcu, cfra, 0)) - flag |= INSERTKEY_REPLACE; + /* try to resolve the path stored in the F-Curve */ + if (RNA_path_resolve_property(&id_ptr, fcu->rna_path, &ptr, &prop)) { + /* set the special 'replace' flag if on a keyframe */ + if (fcurve_frame_has_keyframe(fcu, cfra, 0)) + flag |= INSERTKEY_REPLACE; - /* insert a keyframe for this F-Curve */ - done = insert_keyframe_direct(depsgraph, reports, ptr, prop, fcu, cfra, ts->keyframe_type, nla_context, flag); + /* insert a keyframe for this F-Curve */ + done = insert_keyframe_direct( + depsgraph, reports, ptr, prop, fcu, cfra, ts->keyframe_type, nla_context, flag); - if (done) { - if (adt->action != NULL) { - DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION_NO_FLUSH); - } - DEG_id_tag_update(id, ID_RECALC_ANIMATION_NO_FLUSH); - WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); - } - } + if (done) { + if (adt->action != NULL) { + DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION_NO_FLUSH); + } + DEG_id_tag_update(id, ID_RECALC_ANIMATION_NO_FLUSH); + WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); + } + } - BKE_animsys_free_nla_keyframing_context_cache(&nla_cache); + BKE_animsys_free_nla_keyframing_context_cache(&nla_cache); } /* callback for shapekey widget sliders - insert keyframes */ static void achannel_setting_slider_shapekey_cb(bContext *C, void *key_poin, void *kb_poin) { - Main *bmain = CTX_data_main(C); - Key *key = (Key *)key_poin; - KeyBlock *kb = (KeyBlock *)kb_poin; - char *rna_path = BKE_keyblock_curval_rnapath_get(key, kb); + Main *bmain = CTX_data_main(C); + Key *key = (Key *)key_poin; + KeyBlock *kb = (KeyBlock *)kb_poin; + char *rna_path = BKE_keyblock_curval_rnapath_get(key, kb); - Depsgraph *depsgraph = CTX_data_depsgraph(C); - ReportList *reports = CTX_wm_reports(C); - Scene *scene = CTX_data_scene(C); - ToolSettings *ts = scene->toolsettings; - ListBase nla_cache = {NULL, NULL}; - PointerRNA id_ptr, ptr; - PropertyRNA *prop; - short flag = 0; - bool done = false; - float cfra; + Depsgraph *depsgraph = CTX_data_depsgraph(C); + ReportList *reports = CTX_wm_reports(C); + Scene *scene = CTX_data_scene(C); + ToolSettings *ts = scene->toolsettings; + ListBase nla_cache = {NULL, NULL}; + PointerRNA id_ptr, ptr; + PropertyRNA *prop; + short flag = 0; + bool done = false; + float cfra; - /* Get RNA pointer */ - RNA_id_pointer_create((ID *)key, &id_ptr); + /* Get RNA pointer */ + RNA_id_pointer_create((ID *)key, &id_ptr); - /* Get NLA context for value remapping */ - NlaKeyframingContext *nla_context = BKE_animsys_get_nla_keyframing_context(&nla_cache, depsgraph, &id_ptr, key->adt, (float)CFRA); + /* Get NLA context for value remapping */ + NlaKeyframingContext *nla_context = BKE_animsys_get_nla_keyframing_context( + &nla_cache, depsgraph, &id_ptr, key->adt, (float)CFRA); - /* get current frame and apply NLA-mapping to it (if applicable) */ - cfra = BKE_nla_tweakedit_remap(key->adt, (float)CFRA, NLATIME_CONVERT_UNMAP); + /* get current frame and apply NLA-mapping to it (if applicable) */ + cfra = BKE_nla_tweakedit_remap(key->adt, (float)CFRA, NLATIME_CONVERT_UNMAP); - /* get flags for keyframing */ - flag = ANIM_get_keyframing_flags(scene, 1); + /* get flags for keyframing */ + flag = ANIM_get_keyframing_flags(scene, 1); - /* try to resolve the path stored in the F-Curve */ - if (RNA_path_resolve_property(&id_ptr, rna_path, &ptr, &prop)) { - /* find or create new F-Curve */ - // XXX is the group name for this ok? - bAction *act = verify_adt_action(bmain, (ID *)key, 1); - FCurve *fcu = verify_fcurve(bmain, act, NULL, &ptr, rna_path, 0, 1); + /* try to resolve the path stored in the F-Curve */ + if (RNA_path_resolve_property(&id_ptr, rna_path, &ptr, &prop)) { + /* find or create new F-Curve */ + // XXX is the group name for this ok? + bAction *act = verify_adt_action(bmain, (ID *)key, 1); + FCurve *fcu = verify_fcurve(bmain, act, NULL, &ptr, rna_path, 0, 1); - /* set the special 'replace' flag if on a keyframe */ - if (fcurve_frame_has_keyframe(fcu, cfra, 0)) - flag |= INSERTKEY_REPLACE; + /* set the special 'replace' flag if on a keyframe */ + if (fcurve_frame_has_keyframe(fcu, cfra, 0)) + flag |= INSERTKEY_REPLACE; - /* insert a keyframe for this F-Curve */ - done = insert_keyframe_direct(depsgraph, reports, ptr, prop, fcu, cfra, ts->keyframe_type, nla_context, flag); + /* insert a keyframe for this F-Curve */ + done = insert_keyframe_direct( + depsgraph, reports, ptr, prop, fcu, cfra, ts->keyframe_type, nla_context, flag); - if (done) - WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); - } + if (done) + WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); + } - /* free the path */ - if (rna_path) - MEM_freeN(rna_path); + /* free the path */ + if (rna_path) + MEM_freeN(rna_path); - BKE_animsys_free_nla_keyframing_context_cache(&nla_cache); + BKE_animsys_free_nla_keyframing_context_cache(&nla_cache); } /* callback for NLA Control Curve widget sliders - insert keyframes */ -static void achannel_setting_slider_nla_curve_cb(bContext *C, void *UNUSED(id_poin), void *fcu_poin) +static void achannel_setting_slider_nla_curve_cb(bContext *C, + void *UNUSED(id_poin), + void *fcu_poin) { - /* ID *id = (ID *)id_poin; */ - FCurve *fcu = (FCurve *)fcu_poin; + /* ID *id = (ID *)id_poin; */ + FCurve *fcu = (FCurve *)fcu_poin; - PointerRNA ptr; - PropertyRNA *prop; - int index; + PointerRNA ptr; + PropertyRNA *prop; + int index; - Depsgraph *depsgraph = CTX_data_depsgraph(C); - ReportList *reports = CTX_wm_reports(C); - Scene *scene = CTX_data_scene(C); - ToolSettings *ts = scene->toolsettings; - short flag = 0; - bool done = false; - float cfra; + Depsgraph *depsgraph = CTX_data_depsgraph(C); + ReportList *reports = CTX_wm_reports(C); + Scene *scene = CTX_data_scene(C); + ToolSettings *ts = scene->toolsettings; + short flag = 0; + bool done = false; + float cfra; - /* get current frame - *no* NLA mapping should be done */ - cfra = (float)CFRA; + /* get current frame - *no* NLA mapping should be done */ + cfra = (float)CFRA; - /* get flags for keyframing */ - flag = ANIM_get_keyframing_flags(scene, 1); + /* get flags for keyframing */ + flag = ANIM_get_keyframing_flags(scene, 1); - /* get pointer and property from the slider - this should all match up with the NlaStrip required... */ - UI_context_active_but_prop_get(C, &ptr, &prop, &index); + /* get pointer and property from the slider - this should all match up with the NlaStrip required... */ + UI_context_active_but_prop_get(C, &ptr, &prop, &index); - if (fcu && prop) { - /* set the special 'replace' flag if on a keyframe */ - if (fcurve_frame_has_keyframe(fcu, cfra, 0)) - flag |= INSERTKEY_REPLACE; + if (fcu && prop) { + /* set the special 'replace' flag if on a keyframe */ + if (fcurve_frame_has_keyframe(fcu, cfra, 0)) + flag |= INSERTKEY_REPLACE; - /* insert a keyframe for this F-Curve */ - done = insert_keyframe_direct(depsgraph, reports, ptr, prop, fcu, cfra, ts->keyframe_type, NULL, flag); + /* insert a keyframe for this F-Curve */ + done = insert_keyframe_direct( + depsgraph, reports, ptr, prop, fcu, cfra, ts->keyframe_type, NULL, flag); - if (done) - WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); - } + if (done) + WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_EDITED, NULL); + } } /* Draw a widget for some setting */ -static void draw_setting_widget(bAnimContext *ac, bAnimListElem *ale, const bAnimChannelType *acf, - uiBlock *block, int xpos, int ypos, int setting) -{ - short ptrsize, butType; - bool negflag; - bool usetoggle = true; - int flag, icon; - void *ptr; - const char *tooltip; - uiBut *but = NULL; - bool enabled; - - /* get the flag and the pointer to that flag */ - flag = acf->setting_flag(ac, setting, &negflag); - ptr = acf->setting_ptr(ale, setting, &ptrsize); - enabled = ANIM_channel_setting_get(ac, ale, setting); - - /* get the base icon for the setting */ - switch (setting) { - case ACHANNEL_SETTING_VISIBLE: /* visibility eyes */ - //icon = ((enabled) ? ICON_VISIBLE_IPO_ON : ICON_VISIBLE_IPO_OFF); - icon = ICON_VISIBLE_IPO_OFF; - - if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) - tooltip = TIP_("F-Curve is visible in Graph Editor for editing"); - else if (ale->type == ANIMTYPE_GPLAYER) - tooltip = TIP_("Grease Pencil layer is visible in the viewport"); - else - tooltip = TIP_("Channels are visible in Graph Editor for editing"); - break; - - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - icon = ICON_UNPINNED; - tooltip = TIP_("Channels are visible in Graph Editor for editing"); - break; - - case ACHANNEL_SETTING_MOD_OFF: /* modifiers disabled */ - icon = ICON_MODIFIER_OFF; - tooltip = TIP_("F-Curve modifiers are disabled"); - break; - - case ACHANNEL_SETTING_EXPAND: /* expanded triangle */ - //icon = ((enabled) ? ICON_TRIA_DOWN : ICON_TRIA_RIGHT); - icon = ICON_TRIA_RIGHT; - tooltip = TIP_("Make channels grouped under this channel visible"); - break; - - case ACHANNEL_SETTING_SOLO: /* NLA Tracks only */ - //icon = ((enabled) ? ICON_SOLO_OFF : ICON_SOLO_ON); - icon = ICON_SOLO_OFF; - tooltip = TIP_("NLA Track is the only one evaluated in this animation data-block, with all others muted"); - break; - - /* --- */ - - case ACHANNEL_SETTING_PROTECT: /* protected lock */ - // TODO: what about when there's no protect needed? - //icon = ((enabled) ? ICON_LOCKED : ICON_UNLOCKED); - icon = ICON_UNLOCKED; - - if (ale->datatype != ALE_NLASTRIP) - tooltip = TIP_("Editability of keyframes for this channel"); - else - tooltip = TIP_("Editability of NLA Strips in this track"); - break; - - case ACHANNEL_SETTING_MUTE: /* muted speaker */ - icon = ((enabled) ? ICON_CHECKBOX_DEHLT : ICON_CHECKBOX_HLT); - usetoggle = false; - - if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) { - tooltip = TIP_("Does F-Curve contribute to result"); - } - else if ((ac) && (ac->spacetype == SPACE_NLA) && (ale->type != ANIMTYPE_NLATRACK)) { - tooltip = TIP_("Temporarily disable NLA stack evaluation (i.e. only the active action is evaluated)"); - } - else if (ale->type == ANIMTYPE_GPLAYER) { - tooltip = TIP_("Lock current frame displayed by layer (i.e. disable animation playback)"); - } - else { - tooltip = TIP_("Do channels contribute to result (toggle channel muting)"); - } - break; - - case ACHANNEL_SETTING_PINNED: /* pin icon */ - //icon = ((enabled) ? ICON_PINNED : ICON_UNPINNED); - icon = ICON_UNPINNED; - - if (ale->type == ANIMTYPE_NLAACTION) { - tooltip = TIP_("Display action without any time remapping (when unpinned)"); - } - else { - /* TODO: there are no other tools which require the 'pinning' concept yet */ - tooltip = NULL; - } - break; - - default: - tooltip = NULL; - icon = 0; - break; - } - - /* type of button */ - if (usetoggle) { - if (negflag) - butType = UI_BTYPE_ICON_TOGGLE_N; - else - butType = UI_BTYPE_ICON_TOGGLE; - } - else { - if (negflag) - butType = UI_BTYPE_TOGGLE_N; - else - butType = UI_BTYPE_TOGGLE; - } - /* draw button for setting */ - if (ptr && flag) { - switch (ptrsize) { - case sizeof(int): /* integer pointer for setting */ - but = uiDefIconButBitI(block, butType, flag, 0, icon, - xpos, ypos, ICON_WIDTH, ICON_WIDTH, ptr, 0, 0, 0, 0, tooltip); - break; - - case sizeof(short): /* short pointer for setting */ - but = uiDefIconButBitS(block, butType, flag, 0, icon, - xpos, ypos, ICON_WIDTH, ICON_WIDTH, ptr, 0, 0, 0, 0, tooltip); - break; - - case sizeof(char): /* char pointer for setting */ - but = uiDefIconButBitC(block, butType, flag, 0, icon, - xpos, ypos, ICON_WIDTH, ICON_WIDTH, ptr, 0, 0, 0, 0, tooltip); - break; - } - - /* set call to send relevant notifiers and/or perform type-specific updates */ - if (but) { - switch (setting) { - /* settings needing flushing up/down hierarchy */ - case ACHANNEL_SETTING_VISIBLE: /* Graph Editor - 'visibility' toggles */ - case ACHANNEL_SETTING_PROTECT: /* General - protection flags */ - case ACHANNEL_SETTING_MUTE: /* General - muting flags */ - case ACHANNEL_SETTING_PINNED: /* NLA Actions - 'map/nomap' */ - case ACHANNEL_SETTING_MOD_OFF: - case ACHANNEL_SETTING_ALWAYS_VISIBLE: - UI_but_funcN_set(but, achannel_setting_flush_widget_cb, MEM_dupallocN(ale), POINTER_FROM_INT(setting)); - break; - - /* settings needing special attention */ - case ACHANNEL_SETTING_SOLO: /* NLA Tracks - Solo toggle */ - UI_but_funcN_set(but, achannel_nlatrack_solo_widget_cb, MEM_dupallocN(ale), NULL); - break; - - /* no flushing */ - case ACHANNEL_SETTING_EXPAND: /* expanding - cannot flush, - * otherwise all would open/close at once */ - default: - UI_but_func_set(but, achannel_setting_widget_cb, NULL, NULL); - break; - } - } - } - - if ((ale->fcurve_owner_id != NULL && ID_IS_LINKED(ale->fcurve_owner_id)) || - (ale->id != NULL && ID_IS_LINKED(ale->id))) - { - UI_but_flag_enable(but, UI_BUT_DISABLED); - } +static void draw_setting_widget(bAnimContext *ac, + bAnimListElem *ale, + const bAnimChannelType *acf, + uiBlock *block, + int xpos, + int ypos, + int setting) +{ + short ptrsize, butType; + bool negflag; + bool usetoggle = true; + int flag, icon; + void *ptr; + const char *tooltip; + uiBut *but = NULL; + bool enabled; + + /* get the flag and the pointer to that flag */ + flag = acf->setting_flag(ac, setting, &negflag); + ptr = acf->setting_ptr(ale, setting, &ptrsize); + enabled = ANIM_channel_setting_get(ac, ale, setting); + + /* get the base icon for the setting */ + switch (setting) { + case ACHANNEL_SETTING_VISIBLE: /* visibility eyes */ + //icon = ((enabled) ? ICON_VISIBLE_IPO_ON : ICON_VISIBLE_IPO_OFF); + icon = ICON_VISIBLE_IPO_OFF; + + if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) + tooltip = TIP_("F-Curve is visible in Graph Editor for editing"); + else if (ale->type == ANIMTYPE_GPLAYER) + tooltip = TIP_("Grease Pencil layer is visible in the viewport"); + else + tooltip = TIP_("Channels are visible in Graph Editor for editing"); + break; + + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + icon = ICON_UNPINNED; + tooltip = TIP_("Channels are visible in Graph Editor for editing"); + break; + + case ACHANNEL_SETTING_MOD_OFF: /* modifiers disabled */ + icon = ICON_MODIFIER_OFF; + tooltip = TIP_("F-Curve modifiers are disabled"); + break; + + case ACHANNEL_SETTING_EXPAND: /* expanded triangle */ + //icon = ((enabled) ? ICON_TRIA_DOWN : ICON_TRIA_RIGHT); + icon = ICON_TRIA_RIGHT; + tooltip = TIP_("Make channels grouped under this channel visible"); + break; + + case ACHANNEL_SETTING_SOLO: /* NLA Tracks only */ + //icon = ((enabled) ? ICON_SOLO_OFF : ICON_SOLO_ON); + icon = ICON_SOLO_OFF; + tooltip = TIP_( + "NLA Track is the only one evaluated in this animation data-block, with all others " + "muted"); + break; + + /* --- */ + + case ACHANNEL_SETTING_PROTECT: /* protected lock */ + // TODO: what about when there's no protect needed? + //icon = ((enabled) ? ICON_LOCKED : ICON_UNLOCKED); + icon = ICON_UNLOCKED; + + if (ale->datatype != ALE_NLASTRIP) + tooltip = TIP_("Editability of keyframes for this channel"); + else + tooltip = TIP_("Editability of NLA Strips in this track"); + break; + + case ACHANNEL_SETTING_MUTE: /* muted speaker */ + icon = ((enabled) ? ICON_CHECKBOX_DEHLT : ICON_CHECKBOX_HLT); + usetoggle = false; + + if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) { + tooltip = TIP_("Does F-Curve contribute to result"); + } + else if ((ac) && (ac->spacetype == SPACE_NLA) && (ale->type != ANIMTYPE_NLATRACK)) { + tooltip = TIP_( + "Temporarily disable NLA stack evaluation (i.e. only the active action is evaluated)"); + } + else if (ale->type == ANIMTYPE_GPLAYER) { + tooltip = TIP_("Lock current frame displayed by layer (i.e. disable animation playback)"); + } + else { + tooltip = TIP_("Do channels contribute to result (toggle channel muting)"); + } + break; + + case ACHANNEL_SETTING_PINNED: /* pin icon */ + //icon = ((enabled) ? ICON_PINNED : ICON_UNPINNED); + icon = ICON_UNPINNED; + + if (ale->type == ANIMTYPE_NLAACTION) { + tooltip = TIP_("Display action without any time remapping (when unpinned)"); + } + else { + /* TODO: there are no other tools which require the 'pinning' concept yet */ + tooltip = NULL; + } + break; + + default: + tooltip = NULL; + icon = 0; + break; + } + + /* type of button */ + if (usetoggle) { + if (negflag) + butType = UI_BTYPE_ICON_TOGGLE_N; + else + butType = UI_BTYPE_ICON_TOGGLE; + } + else { + if (negflag) + butType = UI_BTYPE_TOGGLE_N; + else + butType = UI_BTYPE_TOGGLE; + } + /* draw button for setting */ + if (ptr && flag) { + switch (ptrsize) { + case sizeof(int): /* integer pointer for setting */ + but = uiDefIconButBitI(block, + butType, + flag, + 0, + icon, + xpos, + ypos, + ICON_WIDTH, + ICON_WIDTH, + ptr, + 0, + 0, + 0, + 0, + tooltip); + break; + + case sizeof(short): /* short pointer for setting */ + but = uiDefIconButBitS(block, + butType, + flag, + 0, + icon, + xpos, + ypos, + ICON_WIDTH, + ICON_WIDTH, + ptr, + 0, + 0, + 0, + 0, + tooltip); + break; + + case sizeof(char): /* char pointer for setting */ + but = uiDefIconButBitC(block, + butType, + flag, + 0, + icon, + xpos, + ypos, + ICON_WIDTH, + ICON_WIDTH, + ptr, + 0, + 0, + 0, + 0, + tooltip); + break; + } + + /* set call to send relevant notifiers and/or perform type-specific updates */ + if (but) { + switch (setting) { + /* settings needing flushing up/down hierarchy */ + case ACHANNEL_SETTING_VISIBLE: /* Graph Editor - 'visibility' toggles */ + case ACHANNEL_SETTING_PROTECT: /* General - protection flags */ + case ACHANNEL_SETTING_MUTE: /* General - muting flags */ + case ACHANNEL_SETTING_PINNED: /* NLA Actions - 'map/nomap' */ + case ACHANNEL_SETTING_MOD_OFF: + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + UI_but_funcN_set(but, + achannel_setting_flush_widget_cb, + MEM_dupallocN(ale), + POINTER_FROM_INT(setting)); + break; + + /* settings needing special attention */ + case ACHANNEL_SETTING_SOLO: /* NLA Tracks - Solo toggle */ + UI_but_funcN_set(but, achannel_nlatrack_solo_widget_cb, MEM_dupallocN(ale), NULL); + break; + + /* no flushing */ + case ACHANNEL_SETTING_EXPAND: /* expanding - cannot flush, + * otherwise all would open/close at once */ + default: + UI_but_func_set(but, achannel_setting_widget_cb, NULL, NULL); + break; + } + } + } + + if ((ale->fcurve_owner_id != NULL && ID_IS_LINKED(ale->fcurve_owner_id)) || + (ale->id != NULL && ID_IS_LINKED(ale->id))) { + UI_but_flag_enable(but, UI_BUT_DISABLED); + } } /* Draw UI widgets the given channel */ -void ANIM_channel_draw_widgets( - const bContext *C, - bAnimContext *ac, - bAnimListElem *ale, - uiBlock *block, - rctf *rect, - size_t channel_index) -{ - const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); - View2D *v2d = &ac->ar->v2d; - float ymid; - const short channel_height = round_fl_to_int(BLI_rctf_size_y(rect)); - const bool is_being_renamed = achannel_is_being_renamed(ac, acf, channel_index); - - /* sanity checks - don't draw anything */ - if (ELEM(NULL, acf, ale, block)) - return; - - /* get initial offset */ - short offset = rect->xmin; - if (acf->get_offset) { - offset += acf->get_offset(ac, ale); - } - - /* calculate appropriate y-coordinates for icon buttons */ - ymid = BLI_rctf_cent_y(rect) - 0.5f * ICON_WIDTH; - - /* no button backdrop behind icons */ - UI_block_emboss_set(block, UI_EMBOSS_NONE); - - /* step 1) draw expand widget ....................................... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_EXPAND)) { - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_EXPAND); - offset += ICON_WIDTH; - } - - /* step 2) draw icon ............................................... */ - if (acf->icon) { - /* icon is not drawn here (not a widget) */ - offset += ICON_WIDTH; - } - - /* step 3) draw special toggles ................................. - * - in Graph Editor, checkboxes for visibility in curves area - * - in NLA Editor, glowing dots for solo/not solo... - * - in Grease Pencil mode, color swatches for layer color - */ - if (ac->sl) { - if ((ac->spacetype == SPACE_GRAPH) && - (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE) || - acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE))) - { - /* pin toggle */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE)) { - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_ALWAYS_VISIBLE); - offset += ICON_WIDTH; - } - /* visibility toggle */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_VISIBLE); - offset += ICON_WIDTH; - } - } - else if ((ac->spacetype == SPACE_NLA) && acf->has_setting(ac, ale, ACHANNEL_SETTING_SOLO)) { - /* 'solo' setting for NLA Tracks */ - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_SOLO); - offset += ICON_WIDTH; - } - else if (ale->type == ANIMTYPE_GPLAYER) { +void ANIM_channel_draw_widgets(const bContext *C, + bAnimContext *ac, + bAnimListElem *ale, + uiBlock *block, + rctf *rect, + size_t channel_index) +{ + const bAnimChannelType *acf = ANIM_channel_get_typeinfo(ale); + View2D *v2d = &ac->ar->v2d; + float ymid; + const short channel_height = round_fl_to_int(BLI_rctf_size_y(rect)); + const bool is_being_renamed = achannel_is_being_renamed(ac, acf, channel_index); + + /* sanity checks - don't draw anything */ + if (ELEM(NULL, acf, ale, block)) + return; + + /* get initial offset */ + short offset = rect->xmin; + if (acf->get_offset) { + offset += acf->get_offset(ac, ale); + } + + /* calculate appropriate y-coordinates for icon buttons */ + ymid = BLI_rctf_cent_y(rect) - 0.5f * ICON_WIDTH; + + /* no button backdrop behind icons */ + UI_block_emboss_set(block, UI_EMBOSS_NONE); + + /* step 1) draw expand widget ....................................... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_EXPAND)) { + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_EXPAND); + offset += ICON_WIDTH; + } + + /* step 2) draw icon ............................................... */ + if (acf->icon) { + /* icon is not drawn here (not a widget) */ + offset += ICON_WIDTH; + } + + /* step 3) draw special toggles ................................. + * - in Graph Editor, checkboxes for visibility in curves area + * - in NLA Editor, glowing dots for solo/not solo... + * - in Grease Pencil mode, color swatches for layer color + */ + if (ac->sl) { + if ((ac->spacetype == SPACE_GRAPH) && + (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE) || + acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE))) { + /* pin toggle */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE)) { + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_ALWAYS_VISIBLE); + offset += ICON_WIDTH; + } + /* visibility toggle */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_VISIBLE); + offset += ICON_WIDTH; + } + } + else if ((ac->spacetype == SPACE_NLA) && acf->has_setting(ac, ale, ACHANNEL_SETTING_SOLO)) { + /* 'solo' setting for NLA Tracks */ + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_SOLO); + offset += ICON_WIDTH; + } + else if (ale->type == ANIMTYPE_GPLAYER) { #if 0 - /* XXX: Maybe need a better design */ - /* color swatch for layer color */ - bGPDlayer *gpl = (bGPDlayer *)ale->data; - PointerRNA ptr; - float w = ICON_WIDTH / 2.0f; - - RNA_pointer_create(ale->id, &RNA_GPencilLayer, ale->data, &ptr); - - UI_block_align_begin(block); - UI_block_emboss_set(block, RNA_boolean_get(&ptr, "is_stroke_visible") ? UI_EMBOSS : UI_EMBOSS_NONE); - uiDefButR(block, UI_BTYPE_COLOR, 1, "", offset, yminc, w, ICON_WIDTH, - &ptr, "color", -1, - 0, 0, 0, 0, gpl->info); - - UI_block_emboss_set(block, RNA_boolean_get(&ptr, "is_fill_visible") ? UI_EMBOSS : UI_EMBOSS_NONE); - uiDefButR(block, UI_BTYPE_COLOR, 1, "", offset + w, yminc, w, ICON_WIDTH, - &ptr, "fill_color", -1, - 0, 0, 0, 0, gpl->info); - UI_block_emboss_set(block, UI_EMBOSS_NONE); - UI_block_align_end(block); - - offset += ICON_WIDTH; + /* XXX: Maybe need a better design */ + /* color swatch for layer color */ + bGPDlayer *gpl = (bGPDlayer *)ale->data; + PointerRNA ptr; + float w = ICON_WIDTH / 2.0f; + + RNA_pointer_create(ale->id, &RNA_GPencilLayer, ale->data, &ptr); + + UI_block_align_begin(block); + UI_block_emboss_set(block, RNA_boolean_get(&ptr, "is_stroke_visible") ? UI_EMBOSS : UI_EMBOSS_NONE); + uiDefButR(block, UI_BTYPE_COLOR, 1, "", offset, yminc, w, ICON_WIDTH, + &ptr, "color", -1, + 0, 0, 0, 0, gpl->info); + + UI_block_emboss_set(block, RNA_boolean_get(&ptr, "is_fill_visible") ? UI_EMBOSS : UI_EMBOSS_NONE); + uiDefButR(block, UI_BTYPE_COLOR, 1, "", offset + w, yminc, w, ICON_WIDTH, + &ptr, "fill_color", -1, + 0, 0, 0, 0, gpl->info); + UI_block_emboss_set(block, UI_EMBOSS_NONE); + UI_block_align_end(block); + + offset += ICON_WIDTH; #endif - } - } - - /* step 4) draw text - check if renaming widget is in use... */ - if (is_being_renamed) { - PointerRNA ptr = {{NULL}}; - PropertyRNA *prop = NULL; - - /* draw renaming widget if we can get RNA pointer for it - * NOTE: property may only be available in some cases, even if we have - * a callback available (e.g. broken F-Curve rename) - */ - if (acf->name_prop(ale, &ptr, &prop)) { - const short margin_x = 3 * round_fl_to_int(UI_DPI_FAC); - const short width = ac->ar->winx - offset - (margin_x * 2); - uiBut *but; - - UI_block_emboss_set(block, UI_EMBOSS); - - but = uiDefButR(block, UI_BTYPE_TEXT, 1, "", offset + margin_x, rect->ymin, - MAX2(width, RENAME_TEXT_MIN_WIDTH), channel_height, - &ptr, RNA_property_identifier(prop), -1, 0, 0, -1, -1, NULL); - - /* copy what outliner does here, see outliner_buttons */ - if (UI_but_active_only(C, ac->ar, block, but) == false) { - ac->ads->renameIndex = 0; - - /* send notifiers */ - WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_RENAME, NULL); - } - - UI_block_emboss_set(block, UI_EMBOSS_NONE); - } - else { - /* Cannot get property/cannot or rename for some reason, so clear rename index - * so that this doesn't hang around, and the name can be drawn normally - T47492 - */ - ac->ads->renameIndex = 0; - WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN, NULL); - } - } - - /* step 5) draw mute+protection toggles + (sliders) ....................... */ - /* reset offset - now goes from RHS of panel */ - offset = (int)rect->xmax; - - // TODO: when drawing sliders, make those draw instead of these toggles if not enough space - if (v2d && !is_being_renamed) { - short draw_sliders = 0; - - /* check if we need to show the sliders */ - if ((ac->sl) && ELEM(ac->spacetype, SPACE_ACTION, SPACE_GRAPH)) { - switch (ac->spacetype) { - case SPACE_ACTION: - { - SpaceAction *saction = (SpaceAction *)ac->sl; - draw_sliders = (saction->flag & SACTION_SLIDERS); - break; - } - case SPACE_GRAPH: - { - SpaceGraph *sipo = (SpaceGraph *)ac->sl; - draw_sliders = (sipo->flag & SIPO_SLIDERS); - break; - } - } - } - - /* check if there's enough space for the toggles if the sliders are drawn too */ - if (!(draw_sliders) || (BLI_rcti_size_x(&v2d->mask) > ACHANNEL_BUTTON_WIDTH / 2) ) { - /* protect... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PROTECT)) { - offset -= ICON_WIDTH; - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_PROTECT); - } - /* mute... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_MUTE)) { - offset -= ICON_WIDTH; - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_MUTE); - } - if (ale->type == ANIMTYPE_GPLAYER) { - /* Not technically "mute" (in terms of anim channels, but this sets layer visibility instead) */ - offset -= ICON_WIDTH; - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_VISIBLE); - } - - /* modifiers disable */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_MOD_OFF)) { - /* hack: extra spacing, to avoid touching the mute toggle */ - offset -= ICON_WIDTH * 1.2f; - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_MOD_OFF); - } - - /* ----------- */ - - /* pinned... */ - if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PINNED)) { - offset -= ICON_WIDTH; - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_PINNED); - } - - /* NLA Action "pushdown" */ - if ((ale->type == ANIMTYPE_NLAACTION) && (ale->adt && ale->adt->action) && !(ale->adt->flag & ADT_NLA_EDIT_ON)) { - uiBut *but; - PointerRNA *opptr_b; - - UI_block_emboss_set(block, UI_EMBOSS); - - offset -= UI_UNIT_X; - but = uiDefIconButO(block, UI_BTYPE_BUT, "NLA_OT_action_pushdown", WM_OP_INVOKE_DEFAULT, ICON_NLA_PUSHDOWN, - offset, ymid, UI_UNIT_X, UI_UNIT_X, NULL); - - opptr_b = UI_but_operator_ptr_get(but); - RNA_int_set(opptr_b, "channel_index", channel_index); - - UI_block_emboss_set(block, UI_EMBOSS_NONE); - } - } - - /* draw slider - * - even if we can draw sliders for this view, we must also check that the channel-type supports them - * (only only F-Curves really can support them for now) - * - to make things easier, we use RNA-autobuts for this so that changes are reflected immediately, - * wherever they occurred. BUT, we don't use the layout engine, otherwise we'd get wrong alignment, - * and wouldn't be able to auto-keyframe... - * - slider should start before the toggles (if they're visible) to keep a clean line down the side - */ - if ((draw_sliders) && ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE, ANIMTYPE_SHAPEKEY)) { - /* adjust offset */ - // TODO: make slider width dynamic, so that they can be easier to use when the view is wide enough - offset -= SLIDER_WIDTH; - - /* need backdrop behind sliders... */ - UI_block_emboss_set(block, UI_EMBOSS); - - if (ale->owner) { /* Slider using custom RNA Access ---------- */ - if (ale->type == ANIMTYPE_NLACURVE) { - NlaStrip *strip = (NlaStrip *)ale->owner; - FCurve *fcu = (FCurve *)ale->data; - PointerRNA ptr; - PropertyRNA *prop; - - /* create RNA pointers */ - RNA_pointer_create(ale->id, &RNA_NlaStrip, strip, &ptr); - prop = RNA_struct_find_property(&ptr, fcu->rna_path); - - /* create property slider */ - if (prop) { - uiBut *but; - - /* create the slider button, and assign relevant callback to ensure keyframes are inserted... */ - but = uiDefAutoButR(block, &ptr, prop, fcu->array_index, "", ICON_NONE, offset, ymid, SLIDER_WIDTH, channel_height); - UI_but_func_set(but, achannel_setting_slider_nla_curve_cb, ale->id, ale->data); - } - } - } - else if (ale->id) { /* Slider using RNA Access --------------- */ - PointerRNA id_ptr, ptr; - PropertyRNA *prop; - char *rna_path = NULL; - int array_index = 0; - short free_path = 0; - - /* get destination info */ - if (ale->type == ANIMTYPE_FCURVE) { - FCurve *fcu = (FCurve *)ale->data; - - rna_path = fcu->rna_path; - array_index = fcu->array_index; - } - else if (ale->type == ANIMTYPE_SHAPEKEY) { - KeyBlock *kb = (KeyBlock *)ale->data; - Key *key = (Key *)ale->id; - - rna_path = BKE_keyblock_curval_rnapath_get(key, kb); - free_path = 1; - } - - /* only if RNA-Path found */ - if (rna_path) { - /* get RNA pointer, and resolve the path */ - RNA_id_pointer_create(ale->id, &id_ptr); - - /* try to resolve the path */ - if (RNA_path_resolve_property(&id_ptr, rna_path, &ptr, &prop)) { - uiBut *but; - - /* create the slider button, and assign relevant callback to ensure keyframes are inserted... */ - but = uiDefAutoButR(block, &ptr, prop, array_index, "", ICON_NONE, offset, ymid, SLIDER_WIDTH, channel_height); - - /* assign keyframing function according to slider type */ - if (ale->type == ANIMTYPE_SHAPEKEY) - UI_but_func_set(but, achannel_setting_slider_shapekey_cb, ale->id, ale->data); - else - UI_but_func_set(but, achannel_setting_slider_cb, ale->id, ale->data); - } - - /* free the path if necessary */ - if (free_path) - MEM_freeN(rna_path); - } - } - else { /* Special Slider for stuff without RNA Access ---------- */ - // TODO: only implement this case when we really need it... - } - } - } + } + } + + /* step 4) draw text - check if renaming widget is in use... */ + if (is_being_renamed) { + PointerRNA ptr = {{NULL}}; + PropertyRNA *prop = NULL; + + /* draw renaming widget if we can get RNA pointer for it + * NOTE: property may only be available in some cases, even if we have + * a callback available (e.g. broken F-Curve rename) + */ + if (acf->name_prop(ale, &ptr, &prop)) { + const short margin_x = 3 * round_fl_to_int(UI_DPI_FAC); + const short width = ac->ar->winx - offset - (margin_x * 2); + uiBut *but; + + UI_block_emboss_set(block, UI_EMBOSS); + + but = uiDefButR(block, + UI_BTYPE_TEXT, + 1, + "", + offset + margin_x, + rect->ymin, + MAX2(width, RENAME_TEXT_MIN_WIDTH), + channel_height, + &ptr, + RNA_property_identifier(prop), + -1, + 0, + 0, + -1, + -1, + NULL); + + /* copy what outliner does here, see outliner_buttons */ + if (UI_but_active_only(C, ac->ar, block, but) == false) { + ac->ads->renameIndex = 0; + + /* send notifiers */ + WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN | NA_RENAME, NULL); + } + + UI_block_emboss_set(block, UI_EMBOSS_NONE); + } + else { + /* Cannot get property/cannot or rename for some reason, so clear rename index + * so that this doesn't hang around, and the name can be drawn normally - T47492 + */ + ac->ads->renameIndex = 0; + WM_event_add_notifier(C, NC_ANIMATION | ND_ANIMCHAN, NULL); + } + } + + /* step 5) draw mute+protection toggles + (sliders) ....................... */ + /* reset offset - now goes from RHS of panel */ + offset = (int)rect->xmax; + + // TODO: when drawing sliders, make those draw instead of these toggles if not enough space + if (v2d && !is_being_renamed) { + short draw_sliders = 0; + + /* check if we need to show the sliders */ + if ((ac->sl) && ELEM(ac->spacetype, SPACE_ACTION, SPACE_GRAPH)) { + switch (ac->spacetype) { + case SPACE_ACTION: { + SpaceAction *saction = (SpaceAction *)ac->sl; + draw_sliders = (saction->flag & SACTION_SLIDERS); + break; + } + case SPACE_GRAPH: { + SpaceGraph *sipo = (SpaceGraph *)ac->sl; + draw_sliders = (sipo->flag & SIPO_SLIDERS); + break; + } + } + } + + /* check if there's enough space for the toggles if the sliders are drawn too */ + if (!(draw_sliders) || (BLI_rcti_size_x(&v2d->mask) > ACHANNEL_BUTTON_WIDTH / 2)) { + /* protect... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PROTECT)) { + offset -= ICON_WIDTH; + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_PROTECT); + } + /* mute... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_MUTE)) { + offset -= ICON_WIDTH; + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_MUTE); + } + if (ale->type == ANIMTYPE_GPLAYER) { + /* Not technically "mute" (in terms of anim channels, but this sets layer visibility instead) */ + offset -= ICON_WIDTH; + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_VISIBLE); + } + + /* modifiers disable */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_MOD_OFF)) { + /* hack: extra spacing, to avoid touching the mute toggle */ + offset -= ICON_WIDTH * 1.2f; + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_MOD_OFF); + } + + /* ----------- */ + + /* pinned... */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_PINNED)) { + offset -= ICON_WIDTH; + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_PINNED); + } + + /* NLA Action "pushdown" */ + if ((ale->type == ANIMTYPE_NLAACTION) && (ale->adt && ale->adt->action) && + !(ale->adt->flag & ADT_NLA_EDIT_ON)) { + uiBut *but; + PointerRNA *opptr_b; + + UI_block_emboss_set(block, UI_EMBOSS); + + offset -= UI_UNIT_X; + but = uiDefIconButO(block, + UI_BTYPE_BUT, + "NLA_OT_action_pushdown", + WM_OP_INVOKE_DEFAULT, + ICON_NLA_PUSHDOWN, + offset, + ymid, + UI_UNIT_X, + UI_UNIT_X, + NULL); + + opptr_b = UI_but_operator_ptr_get(but); + RNA_int_set(opptr_b, "channel_index", channel_index); + + UI_block_emboss_set(block, UI_EMBOSS_NONE); + } + } + + /* draw slider + * - even if we can draw sliders for this view, we must also check that the channel-type supports them + * (only only F-Curves really can support them for now) + * - to make things easier, we use RNA-autobuts for this so that changes are reflected immediately, + * wherever they occurred. BUT, we don't use the layout engine, otherwise we'd get wrong alignment, + * and wouldn't be able to auto-keyframe... + * - slider should start before the toggles (if they're visible) to keep a clean line down the side + */ + if ((draw_sliders) && ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE, ANIMTYPE_SHAPEKEY)) { + /* adjust offset */ + // TODO: make slider width dynamic, so that they can be easier to use when the view is wide enough + offset -= SLIDER_WIDTH; + + /* need backdrop behind sliders... */ + UI_block_emboss_set(block, UI_EMBOSS); + + if (ale->owner) { /* Slider using custom RNA Access ---------- */ + if (ale->type == ANIMTYPE_NLACURVE) { + NlaStrip *strip = (NlaStrip *)ale->owner; + FCurve *fcu = (FCurve *)ale->data; + PointerRNA ptr; + PropertyRNA *prop; + + /* create RNA pointers */ + RNA_pointer_create(ale->id, &RNA_NlaStrip, strip, &ptr); + prop = RNA_struct_find_property(&ptr, fcu->rna_path); + + /* create property slider */ + if (prop) { + uiBut *but; + + /* create the slider button, and assign relevant callback to ensure keyframes are inserted... */ + but = uiDefAutoButR(block, + &ptr, + prop, + fcu->array_index, + "", + ICON_NONE, + offset, + ymid, + SLIDER_WIDTH, + channel_height); + UI_but_func_set(but, achannel_setting_slider_nla_curve_cb, ale->id, ale->data); + } + } + } + else if (ale->id) { /* Slider using RNA Access --------------- */ + PointerRNA id_ptr, ptr; + PropertyRNA *prop; + char *rna_path = NULL; + int array_index = 0; + short free_path = 0; + + /* get destination info */ + if (ale->type == ANIMTYPE_FCURVE) { + FCurve *fcu = (FCurve *)ale->data; + + rna_path = fcu->rna_path; + array_index = fcu->array_index; + } + else if (ale->type == ANIMTYPE_SHAPEKEY) { + KeyBlock *kb = (KeyBlock *)ale->data; + Key *key = (Key *)ale->id; + + rna_path = BKE_keyblock_curval_rnapath_get(key, kb); + free_path = 1; + } + + /* only if RNA-Path found */ + if (rna_path) { + /* get RNA pointer, and resolve the path */ + RNA_id_pointer_create(ale->id, &id_ptr); + + /* try to resolve the path */ + if (RNA_path_resolve_property(&id_ptr, rna_path, &ptr, &prop)) { + uiBut *but; + + /* create the slider button, and assign relevant callback to ensure keyframes are inserted... */ + but = uiDefAutoButR(block, + &ptr, + prop, + array_index, + "", + ICON_NONE, + offset, + ymid, + SLIDER_WIDTH, + channel_height); + + /* assign keyframing function according to slider type */ + if (ale->type == ANIMTYPE_SHAPEKEY) + UI_but_func_set(but, achannel_setting_slider_shapekey_cb, ale->id, ale->data); + else + UI_but_func_set(but, achannel_setting_slider_cb, ale->id, ale->data); + } + + /* free the path if necessary */ + if (free_path) + MEM_freeN(rna_path); + } + } + else { /* Special Slider for stuff without RNA Access ---------- */ + // TODO: only implement this case when we really need it... + } + } + } } /* *********************************************** */ -- cgit v1.2.3