diff options
Diffstat (limited to 'source/blender/editors/space_nla')
-rw-r--r-- | source/blender/editors/space_nla/CMakeLists.txt | 6 | ||||
-rw-r--r-- | source/blender/editors/space_nla/nla_buttons.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_nla/nla_channels.c | 6 | ||||
-rw-r--r-- | source/blender/editors/space_nla/nla_draw.c | 30 | ||||
-rw-r--r-- | source/blender/editors/space_nla/nla_edit.c | 19 | ||||
-rw-r--r-- | source/blender/editors/space_nla/nla_select.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_nla/space_nla.c | 35 |
7 files changed, 90 insertions, 19 deletions
diff --git a/source/blender/editors/space_nla/CMakeLists.txt b/source/blender/editors/space_nla/CMakeLists.txt index e6995085dbe..5df0ebb3b28 100644 --- a/source/blender/editors/space_nla/CMakeLists.txt +++ b/source/blender/editors/space_nla/CMakeLists.txt @@ -4,6 +4,7 @@ set(INC ../include ../../blenkernel ../../blenlib + ../../blenloader ../../blentranslation ../../depsgraph ../../gpu @@ -11,6 +12,9 @@ set(INC ../../makesrna ../../windowmanager ../../../../intern/guardedalloc + + # dna_type_offsets.h + ${CMAKE_CURRENT_BINARY_DIR}/../../makesdna/intern # RNA_prototypes.h ${CMAKE_BINARY_DIR}/source/blender/makesrna ) @@ -36,5 +40,5 @@ set(LIB blender_add_lib(bf_editor_space_nla "${SRC}" "${INC}" "${INC_SYS}" "${LIB}") -# RNA_prototypes.h +# RNA_prototypes.h dna_type_offsets.h add_dependencies(bf_editor_space_nla bf_rna) diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c index 72b2eb20f8f..4aff3766b12 100644 --- a/source/blender/editors/space_nla/nla_buttons.c +++ b/source/blender/editors/space_nla/nla_buttons.c @@ -107,7 +107,6 @@ bool nla_panel_context(const bContext *C, found = 1; break; } - case ANIMTYPE_NLAACTION: case ANIMTYPE_SCENE: /* Top-Level Widgets doubling up as datablocks */ case ANIMTYPE_OBJECT: case ANIMTYPE_DSMAT: /* Datablock AnimData Expanders */ @@ -158,6 +157,11 @@ bool nla_panel_context(const bContext *C, } break; } + /* Don't set a pointer for NLA Actions. + * This will break the dependency graph for the context menu. + */ + case ANIMTYPE_NLAACTION: + break; } if (found > 0) { @@ -214,7 +218,8 @@ static bool nla_animdata_panel_poll(const bContext *C, PanelType *UNUSED(pt)) { PointerRNA ptr; PointerRNA strip_ptr; - return (nla_panel_context(C, &ptr, NULL, &strip_ptr) && (ptr.data != NULL) && (ptr.owner_id != strip_ptr.owner_id)); + return (nla_panel_context(C, &ptr, NULL, &strip_ptr) && (ptr.data != NULL) && + (ptr.owner_id != strip_ptr.owner_id)); } static bool nla_strip_panel_poll(const bContext *C, PanelType *UNUSED(pt)) @@ -277,7 +282,7 @@ static void nla_panel_animdata(const bContext *C, Panel *panel) return; } - if(adt_ptr.owner_id == strip_ptr.owner_id){ + if (adt_ptr.owner_id == strip_ptr.owner_id) { return; } diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c index a0c6a29c422..3c0238806bf 100644 --- a/source/blender/editors/space_nla/nla_channels.c +++ b/source/blender/editors/space_nla/nla_channels.c @@ -20,6 +20,7 @@ #include "BKE_anim_data.h" #include "BKE_context.h" #include "BKE_global.h" +#include "BKE_layer.h" #include "BKE_nla.h" #include "BKE_report.h" #include "BKE_scene.h" @@ -129,7 +130,8 @@ static int mouse_nla_channels(bContext *C, bAnimContext *ac, int channel_index, else { /* deselect all */ /* TODO: should this deselect all other types of channels too? */ - LISTBASE_FOREACH (Base *, b, &view_layer->object_bases) { + BKE_view_layer_synced_ensure(ac->scene, view_layer); + LISTBASE_FOREACH (Base *, b, BKE_view_layer_object_bases_get(view_layer)) { ED_object_base_select(b, BA_DESELECT); if (b->object->adt) { b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE); @@ -478,7 +480,7 @@ void NLA_OT_action_pushdown(wmOperatorType *ot) "Index of NLA action channel to perform pushdown operation on", 0, INT_MAX); - RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE); + RNA_def_property_flag(ot->prop, PROP_SKIP_SAVE | PROP_HIDDEN); } /* ******************** Action Unlink ******************************** */ diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c index e614055441d..45bbe50eedd 100644 --- a/source/blender/editors/space_nla/nla_draw.c +++ b/source/blender/editors/space_nla/nla_draw.c @@ -22,6 +22,7 @@ #include "BLI_range.h" #include "BLI_utildefines.h" +#include "BKE_action.h" #include "BKE_context.h" #include "BKE_fcurve.h" #include "BKE_nla.h" @@ -856,8 +857,9 @@ void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *region) immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR); - /* just draw a semi-shaded rect spanning the width of the viewable area if there's data, - * and a second darker rect within which we draw keyframe indicator dots if there's data + /* just draw a semi-shaded rect spanning the width of the viewable area, based on if + * there's data and the action's extrapolation mode. Draw a second darker rect within + * which we draw keyframe indicator dots if there's data. */ GPU_blend(GPU_BLEND_ALPHA); @@ -869,8 +871,26 @@ void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *region) /* draw slightly shifted up for greater separation from standard channels, * but also slightly shorter for some more contrast when viewing the strips */ - immRectf( - pos, v2d->cur.xmin, ymin + NLACHANNEL_SKIP, v2d->cur.xmax, ymax - NLACHANNEL_SKIP); + switch (adt->act_extendmode) { + case NLASTRIP_EXTEND_HOLD: { + immRectf(pos, + v2d->cur.xmin, + ymin + NLACHANNEL_SKIP, + v2d->cur.xmax, + ymax - NLACHANNEL_SKIP); + break; + } + case NLASTRIP_EXTEND_HOLD_FORWARD: { + float r_start; + float r_end; + BKE_action_get_frame_range(ale->data, &r_start, &r_end); + + immRectf(pos, r_end, ymin + NLACHANNEL_SKIP, v2d->cur.xmax, ymax - NLACHANNEL_SKIP); + break; + } + case NLASTRIP_EXTEND_NOTHING: + break; + } immUnbindProgram(); @@ -885,7 +905,7 @@ void draw_nla_main_data(bAnimContext *ac, SpaceNla *snla, ARegion *region) } } - /* free tempolary channels */ + /* Free temporary channels. */ ANIM_animdata_freelist(&anim_data); } diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c index bcdbbb00d1c..8a3c6745259 100644 --- a/source/blender/editors/space_nla/nla_edit.c +++ b/source/blender/editors/space_nla/nla_edit.c @@ -610,7 +610,7 @@ void NLA_OT_view_frame(wmOperatorType *ot) static int nlaedit_get_editable_tracks(bAnimContext *ac, ListBase *anim_data) { const int filter = (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_ACTIVE | ANIMFILTER_FOREDIT | - ANIMFILTER_FCURVESONLY); + ANIMFILTER_FCURVESONLY); return ANIM_animdata_filter(ac, anim_data, filter, ac->data, ac->datatype); } @@ -2641,6 +2641,8 @@ static int nla_fmodifier_add_exec(bContext *C, wmOperator *op) void NLA_OT_fmodifier_add(wmOperatorType *ot) { + PropertyRNA *prop; + /* identifiers */ ot->name = "Add F-Modifier"; ot->idname = "NLA_OT_fmodifier_add"; @@ -2659,11 +2661,12 @@ void NLA_OT_fmodifier_add(wmOperatorType *ot) RNA_def_property_translation_context(ot->prop, BLT_I18NCONTEXT_ID_ACTION); RNA_def_enum_funcs(ot->prop, nla_fmodifier_itemf); - RNA_def_boolean(ot->srna, - "only_active", - true, - "Only Active", - "Only add a F-Modifier of the specified type to the active strip"); + prop = RNA_def_boolean(ot->srna, + "only_active", + true, + "Only Active", + "Only add a F-Modifier of the specified type to the active strip"); + RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ACTION); } /** \} */ @@ -2832,8 +2835,10 @@ void NLA_OT_fmodifier_paste(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - RNA_def_boolean( + ot->prop = RNA_def_boolean( ot->srna, "only_active", true, "Only Active", "Only paste F-Modifiers on active strip"); + RNA_def_property_translation_context(ot->prop, BLT_I18NCONTEXT_ID_ACTION); + RNA_def_boolean( ot->srna, "replace", diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c index a816f8fa4f6..ce93e36474f 100644 --- a/source/blender/editors/space_nla/nla_select.c +++ b/source/blender/editors/space_nla/nla_select.c @@ -401,7 +401,7 @@ void NLA_OT_select_box(wmOperatorType *ot) ot->poll = nlaop_poll_tweakmode_off; /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + ot->flag = OPTYPE_UNDO; /* properties */ RNA_def_boolean(ot->srna, "axis_range", 0, "Axis Range", ""); diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c index c71e63e9dcd..12f8915764b 100644 --- a/source/blender/editors/space_nla/space_nla.c +++ b/source/blender/editors/space_nla/space_nla.c @@ -36,6 +36,8 @@ #include "UI_resources.h" #include "UI_view2d.h" +#include "BLO_read_write.h" + #include "nla_intern.h" /* own include */ /* ******************** default callbacks for nla space ***************** */ @@ -562,6 +564,33 @@ static void nla_id_remap(ScrArea *UNUSED(area), BKE_id_remapper_apply(mappings, (ID **)&snla->ads->source, ID_REMAP_APPLY_DEFAULT); } +static void nla_blend_read_data(BlendDataReader *reader, SpaceLink *sl) +{ + SpaceNla *snla = (SpaceNla *)sl; + BLO_read_data_address(reader, &snla->ads); +} + +static void nla_blend_read_lib(BlendLibReader *reader, ID *parent_id, SpaceLink *sl) +{ + SpaceNla *snla = (SpaceNla *)sl; + bDopeSheet *ads = snla->ads; + + if (ads) { + BLO_read_id_address(reader, parent_id->lib, &ads->source); + BLO_read_id_address(reader, parent_id->lib, &ads->filter_grp); + } +} + +static void nla_blend_write(BlendWriter *writer, SpaceLink *sl) +{ + SpaceNla *snla = (SpaceNla *)sl; + + BLO_write_struct(writer, SpaceNla, snla); + if (snla->ads) { + BLO_write_struct(writer, bDopeSheet, snla->ads); + } +} + void ED_spacetype_nla(void) { SpaceType *st = MEM_callocN(sizeof(SpaceType), "spacetype nla"); @@ -578,6 +607,9 @@ void ED_spacetype_nla(void) st->listener = nla_listener; st->keymap = nla_keymap; st->id_remap = nla_id_remap; + st->blend_read_data = nla_blend_read_data; + st->blend_read_lib = nla_blend_read_lib; + st->blend_write = nla_blend_write; /* regions: main window */ art = MEM_callocN(sizeof(ARegionType), "spacetype nla region"); @@ -628,5 +660,8 @@ void ED_spacetype_nla(void) nla_buttons_register(art); + art = ED_area_type_hud(st->spaceid); + BLI_addhead(&st->regiontypes, art); + BKE_spacetype_register(st); } |