New operator for action and graph editor that centers around current
authorAntony Riakiotakis <kalast@gmail.com>
Mon, 13 Apr 2015 12:30:17 +0000 (14:30 +0200)
committerAntony Riakiotakis <kalast@gmail.com>
Mon, 13 Apr 2015 12:30:24 +0000 (14:30 +0200)
scene frame, bound to numberpad zero.

release/scripts/startup/bl_ui/space_dopesheet.py
release/scripts/startup/bl_ui/space_graph.py
source/blender/editors/include/UI_view2d.h
source/blender/editors/interface/view2d_ops.c
source/blender/editors/space_action/action_edit.c
source/blender/editors/space_action/action_intern.h
source/blender/editors/space_action/action_ops.c
source/blender/editors/space_graph/graph_edit.c
source/blender/editors/space_graph/graph_intern.h
source/blender/editors/space_graph/graph_ops.c

index e9818f612c2a0796129ee8fa937490b64f2072f8..13c37182ae4dd779fb9bf5814b833a40d93ff16a 100644 (file)
@@ -203,6 +203,7 @@ class DOPESHEET_MT_view(Menu):
         layout.separator()
         layout.operator("action.view_all")
         layout.operator("action.view_selected")
+        layout.operator("action.view_frame")
 
         layout.separator()
         layout.operator("screen.area_dupli")
index 4503a0f4c6879714e4dc04670a65311f200941a3..27928ae3be1b6b9de082117288e51a61b4484666 100644 (file)
@@ -125,6 +125,7 @@ class GRAPH_MT_view(Menu):
         layout.separator()
         layout.operator("graph.view_all")
         layout.operator("graph.view_selected")
+        layout.operator("graph.view_frame")
 
         layout.separator()
         layout.operator("screen.area_dupli")
index 4d7446a7a81256ef3ef68f894ea505d05bf31657..430093b641b3166d3924598f75675b1900d148c9 100644 (file)
@@ -233,7 +233,7 @@ void ED_keymap_view2d(struct wmKeyConfig *keyconf);
 
 void UI_view2d_smooth_view(struct bContext *C, struct ARegion *ar,
                            const struct rctf *cur, const int smooth_viewtx);
-
+void UI_view2d_center_frame(struct bContext *C, int smooth_viewtx);
 #define UI_MARKER_MARGIN_Y (42 * UI_DPI_FAC)
 
 #endif /* __UI_VIEW2D_H__ */
index 88140d897ae7fd678c3635e87fc2bd81ab0c6892..5730c9678800adf5b7f7b71be16e7f2b509fe7ce 100644 (file)
@@ -1462,6 +1462,21 @@ void UI_view2d_smooth_view(bContext *C, ARegion *ar,
        }
 }
 
+void UI_view2d_center_frame(struct bContext *C, int smooth_viewtx)
+{
+       ARegion *ar = CTX_wm_region(C);
+       Scene *scene = CTX_data_scene(C);
+       float w = BLI_rctf_size_x(&ar->v2d.cur);
+       rctf newrct;
+
+       newrct.xmax = scene->r.cfra + (w / 2);
+       newrct.xmin = scene->r.cfra - (w / 2);
+       newrct.ymax = ar->v2d.cur.ymax;
+       newrct.ymin = ar->v2d.cur.ymin;
+
+       UI_view2d_smooth_view(C, ar, &newrct, smooth_viewtx);
+}
+
 /* only meant for timer usage */
 static int view2d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
 {
index 4b8ddacb41896c87c3bfa9396b5b719c0e02e7b9..d83137d4cb096433d797135abfc517e4f3a1eb83 100644 (file)
@@ -425,7 +425,15 @@ static int actkeys_viewsel_exec(bContext *C, wmOperator *UNUSED(op))
        /* only selected */
        return actkeys_viewall(C, true);
 }
+
+static int actkeys_view_frame_exec(bContext *C, wmOperator *op)
+{
+       const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
+       UI_view2d_center_frame(C, smooth_viewtx);
+
+       return OPERATOR_FINISHED;
+}
+
 void ACTION_OT_view_all(wmOperatorType *ot)
 {
        /* identifiers */
@@ -456,6 +464,21 @@ void ACTION_OT_view_selected(wmOperatorType *ot)
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
+void ACTION_OT_view_frame(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "View Frame";
+       ot->idname = "ACTION_OT_view_frame";
+       ot->description = "Reset viewable area to show range around current frame";
+
+       /* api callbacks */
+       ot->exec = actkeys_view_frame_exec;
+       ot->poll = ED_operator_action_active; /* XXX: unchecked poll to get fsamples working too, but makes modifier damage trickier... */
+
+       /* flags */
+       ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
 /* ************************************************************************** */
 /* GENERAL STUFF */
 
index 9f9b15c3c26b6cbd7ed9b2624ec04cc212bc05b1..17f1f404225fe064f9e8528803327314e57817c9 100644 (file)
@@ -77,6 +77,7 @@ enum eActKeys_ColumnSelect_Mode {
 void ACTION_OT_previewrange_set(struct wmOperatorType *ot);
 void ACTION_OT_view_all(struct wmOperatorType *ot);
 void ACTION_OT_view_selected(struct wmOperatorType *ot);
+void ACTION_OT_view_frame(struct wmOperatorType *ot);
 
 void ACTION_OT_copy(struct wmOperatorType *ot);
 void ACTION_OT_paste(struct wmOperatorType *ot);
index 47a120007a5915add886495a68d422377c2917da..59b147c6f6ca21af8415a6283f90b1de3267327a 100644 (file)
@@ -91,7 +91,8 @@ void action_operatortypes(void)
        WM_operatortype_append(ACTION_OT_previewrange_set);
        WM_operatortype_append(ACTION_OT_view_all);
        WM_operatortype_append(ACTION_OT_view_selected);
-       
+       WM_operatortype_append(ACTION_OT_view_frame);
+
        WM_operatortype_append(ACTION_OT_markers_make_local);
 }
 
@@ -228,6 +229,8 @@ static void action_keymap_keyframes(wmKeyConfig *keyconf, wmKeyMap *keymap)
        WM_keymap_add_item(keymap, "ACTION_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
        WM_keymap_add_item(keymap, "ACTION_OT_view_all", NDOF_BUTTON_FIT, KM_PRESS, 0, 0);
        WM_keymap_add_item(keymap, "ACTION_OT_view_selected", PADPERIOD, KM_PRESS, 0, 0);
+       WM_keymap_add_item(keymap, "ACTION_OT_view_frame", PAD0, KM_PRESS, 0, 0);
+
        
        /* animation module */
        /* channels list
index a26bfddf65a44bf19fce4e647f7e570621191aad..0dba9ccfbae67f0c67bf0d6279742f63d82de455 100644 (file)
@@ -256,6 +256,14 @@ static int graphkeys_view_selected_exec(bContext *C, wmOperator *op)
        return graphkeys_viewall(C, true, include_handles, smooth_viewtx);
 }
 
+static int graphkeys_view_frame_exec(bContext *C, wmOperator *op)
+{
+       const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
+       UI_view2d_center_frame(C, smooth_viewtx);
+       return OPERATOR_FINISHED;
+}
+
+
 void GRAPH_OT_view_all(wmOperatorType *ot)
 {
        /* identifiers */
@@ -294,6 +302,21 @@ void GRAPH_OT_view_selected(wmOperatorType *ot)
                                   "Include handles of keyframes when calculating extents");
 }
 
+void GRAPH_OT_view_frame(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "View Frame";
+       ot->idname = "GRAPH_OT_view_frame";
+       ot->description = "Reset viewable area to show range around current frame";
+
+       /* api callbacks */
+       ot->exec = graphkeys_view_frame_exec;
+       ot->poll = ED_operator_graphedit_active; /* XXX: unchecked poll to get fsamples working too, but makes modifier damage trickier... */
+
+       /* flags */
+       ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
 /* ******************** Create Ghost-Curves Operator *********************** */
 /* This operator samples the data of the selected F-Curves to F-Points, storing them
  * as 'ghost curves' in the active Graph Editor
index e2fab188fc85ca50dc9b8cdba71ee20f0f3c64f0..a478a86a5e2a8058bba38fae865b692e41967a76 100644 (file)
@@ -91,6 +91,7 @@ void get_graph_keyframe_extents(struct bAnimContext *ac, float *xmin, float *xma
 void GRAPH_OT_previewrange_set(struct wmOperatorType *ot);
 void GRAPH_OT_view_all(struct wmOperatorType *ot);
 void GRAPH_OT_view_selected(struct wmOperatorType *ot);
+void GRAPH_OT_view_frame(struct wmOperatorType *ot);
 
 void GRAPH_OT_click_insert(struct wmOperatorType *ot);
 void GRAPH_OT_keyframe_insert(struct wmOperatorType *ot);
index 5c3fdce4282246ca0b08719b65f1056d9b858321..3d1fa2cc00832c22a92a35eda233e4e78ac284f1 100644 (file)
@@ -380,6 +380,7 @@ void graphedit_operatortypes(void)
        WM_operatortype_append(GRAPH_OT_view_all);
        WM_operatortype_append(GRAPH_OT_view_selected);
        WM_operatortype_append(GRAPH_OT_properties);
+       WM_operatortype_append(GRAPH_OT_view_frame);
        
        WM_operatortype_append(GRAPH_OT_ghost_curves_create);
        WM_operatortype_append(GRAPH_OT_ghost_curves_clear);
@@ -594,7 +595,8 @@ static void graphedit_keymap_keyframes(wmKeyConfig *keyconf, wmKeyMap *keymap)
        WM_keymap_add_item(keymap, "GRAPH_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
        WM_keymap_add_item(keymap, "GRAPH_OT_view_all", NDOF_BUTTON_FIT, KM_PRESS, 0, 0);
        WM_keymap_add_item(keymap, "GRAPH_OT_view_selected", PADPERIOD, KM_PRESS, 0, 0);
-       
+       WM_keymap_add_item(keymap, "GRAPH_OT_view_frame", PAD0, KM_PRESS, 0, 0);
+
        /* F-Modifiers */
        kmi = WM_keymap_add_item(keymap, "GRAPH_OT_fmodifier_add", MKEY, KM_PRESS, KM_CTRL | KM_SHIFT, 0);
        RNA_boolean_set(kmi->ptr, "only_active", false);