More curves view improvements for clip editor:
authorSergey Sharybin <sergey.vfx@gmail.com>
Thu, 26 Jan 2012 11:49:38 +0000 (11:49 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Thu, 26 Jan 2012 11:49:38 +0000 (11:49 +0000)
- Renamed graph_jump_to_current_frame to graph_center_current_frame
  which makes more sense.
- Curve view now can be locked to time cursor (Lock to Time Cursor in
  Display panel or L button in curve view). Not sure if offset from
  locked position will make much sense here.
- Added hotkey for solving -- Shift-S.

release/scripts/startup/bl_ui/space_clip.py
source/blender/editors/space_clip/clip_graph_ops.c
source/blender/editors/space_clip/clip_intern.h
source/blender/editors/space_clip/space_clip.c
source/blender/makesdna/DNA_space_types.h
source/blender/makesrna/intern/rna_space.c

index c8582e532bba264b05f65103b3b3a6452ea6c1bd..c179342bc4492cf6e2fa35a04ec635881bab5977 100644 (file)
@@ -559,6 +559,9 @@ class CLIP_PT_display(Panel):
 
         col.prop(sc, "lock_selection")
 
+        if sc.view == 'GRAPH':
+            col.prop(sc, "lock_time_cursor")
+
         clip = sc.clip
         if clip:
             col.label(text="Display Aspect Ratio:")
index 7652e59a9a8db81f0e950ccf73f3a8d257ed1db5..6a56de266899c02dbba282b2804859307018d220 100644 (file)
@@ -447,30 +447,36 @@ void CLIP_OT_graph_view_all(wmOperatorType *ot)
 
 /******************** jump to current frame operator ********************/
 
-static int jump_to_current_frame_exec(bContext *C, wmOperator *UNUSED(op))
+void ED_clip_graph_center_current_frame(Scene *scene, ARegion *ar)
 {
-       Scene *scene = CTX_data_scene(C);
-       ARegion *ar = CTX_wm_region(C);
        View2D *v2d = &ar->v2d;
        float extra = (v2d->cur.xmax - v2d->cur.xmin) / 2.0;
 
        /* set extents of view to start/end frames */
        v2d->cur.xmin = (float)CFRA - extra;
        v2d->cur.xmax = (float)CFRA + extra;
+}
+
+static int center_current_frame_exec(bContext *C, wmOperator *UNUSED(op))
+{
+       Scene *scene = CTX_data_scene(C);
+       ARegion *ar = CTX_wm_region(C);
+
+       ED_clip_graph_center_current_frame(scene, ar);
 
        ED_region_tag_redraw(ar);
 
        return OPERATOR_FINISHED;
 }
 
-void CLIP_OT_graph_jump_to_current_frame(wmOperatorType *ot)
+void CLIP_OT_graph_center_current_frame(wmOperatorType *ot)
 {
        /* identifiers */
-       ot->name = "Jump to current frame";
-       ot->description = "Jump to current frame";
-       ot->idname = "CLIP_OT_graph_jump_to_current_frame";
+       ot->name = "Center Current Frame";
+       ot->description = "Scroll view so current frame would be centered";
+       ot->idname = "CLIP_OT_graph_center_current_frame";
 
        /* api callbacks */
-       ot->exec = jump_to_current_frame_exec;
+       ot->exec = center_current_frame_exec;
        ot->poll = ED_space_clip_graph_poll;
 }
index 3f273b5cd90ddfe46de023ab6fa2dd48561e2377..9ff58a73ca241fc311f47796ed81514eb86c3159 100644 (file)
@@ -55,11 +55,13 @@ void clip_draw_curfra_label(struct SpaceClip *sc, float x, float y);
 void clip_draw_graph(struct SpaceClip *sc, struct ARegion *ar, struct Scene *scene);
 
 /* clip_graph_ops.c */
+void ED_clip_graph_center_current_frame(struct Scene *scene, struct ARegion *ar);
+
 void CLIP_OT_graph_select(struct wmOperatorType *ot);
 void CLIP_OT_graph_delete_curve(struct wmOperatorType *ot);
 void CLIP_OT_graph_delete_knot(struct wmOperatorType *ot);
 void CLIP_OT_graph_view_all(struct wmOperatorType *ot);
-void CLIP_OT_graph_jump_to_current_frame(struct wmOperatorType *ot);
+void CLIP_OT_graph_center_current_frame(struct wmOperatorType *ot);
 
 /* clip_ops.c */
 void CLIP_OT_open(struct wmOperatorType *ot);
index c9b8c7971e5d13235c7e137f2fca70d5490e74fd..9eff602fe6b127bebcae03cb48fafdaf04acdec0 100644 (file)
@@ -374,7 +374,7 @@ static void clip_operatortypes(void)
        WM_operatortype_append(CLIP_OT_graph_delete_curve);
        WM_operatortype_append(CLIP_OT_graph_delete_knot);
        WM_operatortype_append(CLIP_OT_graph_view_all);
-       WM_operatortype_append(CLIP_OT_graph_jump_to_current_frame);
+       WM_operatortype_append(CLIP_OT_graph_center_current_frame);
 
        /* object tracking */
        WM_operatortype_append(CLIP_OT_tracking_object_new);
@@ -425,6 +425,8 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
        RNA_string_set(kmi->ptr, "value_1", "CLIP");
        RNA_string_set(kmi->ptr, "value_2", "GRAPH");
 
+       WM_keymap_add_item(keymap, "CLIP_OT_solve_camera", SKEY, KM_PRESS, KM_SHIFT, 0);
+
        /* ******** Hotkeys avalaible for main region only ******** */
 
        keymap= WM_keymap_find(keyconf, "Clip Editor", SPACE_CLIP, 0);
@@ -555,7 +557,10 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
 
        /* view */
        WM_keymap_add_item(keymap, "CLIP_OT_graph_view_all", HOMEKEY, KM_PRESS, 0, 0);
-       WM_keymap_add_item(keymap, "CLIP_OT_graph_jump_to_current_frame", PADPERIOD, KM_PRESS, 0, 0);
+       WM_keymap_add_item(keymap, "CLIP_OT_graph_center_current_frame", PADPERIOD, KM_PRESS, 0, 0);
+
+       kmi= WM_keymap_add_item(keymap, "WM_OT_context_toggle", LKEY, KM_PRESS, 0, 0);
+       RNA_string_set(kmi->ptr, "data_path", "space_data.lock_time_cursor");
 
        transform_keymap_for_space(keyconf, keymap, SPACE_CLIP);
 }
@@ -778,6 +783,9 @@ static void clip_preview_area_draw(const bContext *C, ARegion *ar)
        Scene *scene= CTX_data_scene(C);
        short unitx= V2D_UNIT_FRAMESCALE, unity= V2D_UNIT_VALUES;
 
+       if(sc->flag & SC_LOCK_TIMECURSOR)
+               ED_clip_graph_center_current_frame(scene, ar);
+
        /* clear and setup matrix */
        UI_ThemeClearColor(TH_BACK);
        glClear(GL_COLOR_BUFFER_BIT);
index d57da31793e3403883162e2355194468ca57fa44..06138bc075720e79ac6079cbcb8902d57a8f279b 100644 (file)
@@ -900,7 +900,8 @@ enum {
 #define SC_SHOW_FILTERS                        (1<<13)
 #define SC_SHOW_GRAPH_FRAMES   (1<<14)
 #define SC_SHOW_GRAPH_TRACKS   (1<<15)
-#define SC_SHOW_PYRAMID_LEVELS         (1<<16)
+#define SC_SHOW_PYRAMID_LEVELS (1<<16)
+#define SC_LOCK_TIMECURSOR             (1<<17)
 
 /* SpaceClip->mode */
 #define SC_MODE_TRACKING               0
index ebe698eb5d5cee1e33f9d0783bf4844726a92d15..571fe05238d416cb27f3d12f97f2760058873bfc 100644 (file)
@@ -2900,6 +2900,12 @@ static void rna_def_space_clip(BlenderRNA *brna)
        RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_LOCK_SELECTION);
        RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, "rna_SpaceClipEditor_lock_selection_update");
 
+       /* lock to time cursor */
+       prop= RNA_def_property(srna, "lock_time_cursor", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_ui_text(prop, "Lock to Time Cursor", "Lock curves view to time cursos during playback and tracking");
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_LOCK_TIMECURSOR);
+       RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CLIP, NULL);
+
        /* show markers pathes */
        prop= RNA_def_property(srna, "show_track_path", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "flag", SC_SHOW_TRACK_PATH);